Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /branches/ttcomtester/teraterm/teraterm/vtwin.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7484 - (hide annotations) (download) (as text)
Thu Mar 14 15:53:55 2019 UTC (5 years ago) by zmatsuo
Original Path: trunk/teraterm/teraterm/vtwin.cpp
File MIME type: text/x-c++src
File size: 178480 byte(s)
GetConvString()#ttime.cの戻り値をconst wchar_t *に変更
前後参照変換の処理を ttime.c に移動
CommTextOutW(), CommTextEchoW() を ttcmn.c に追加
imm32.lib をリンクから外した
1 doda 6806 /*
2     * Copyright (C) 1994-1998 T. Teranishi
3 zmatsuo 7390 * (C) 2004-2019 TeraTerm Project
4 doda 6806 * All rights reserved.
5     *
6 doda 6841 * Redistribution and use in source and binary forms, with or without
7     * modification, are permitted provided that the following conditions
8     * are met:
9 doda 6806 *
10 doda 6841 * 1. Redistributions of source code must retain the above copyright
11     * notice, this list of conditions and the following disclaimer.
12     * 2. Redistributions in binary form must reproduce the above copyright
13     * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the distribution.
15     * 3. The name of the author may not be used to endorse or promote products
16     * derived from this software without specific prior written permission.
17 doda 6806 *
18 doda 6841 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
19     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21     * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23     * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 doda 6806 */
29 maya 3227 /* IPv6 modification is Copyright(C) 2000 Jun-ya Kato <kato@win6.jp> */
30    
31     /* TERATERM.EXE, VT window */
32    
33     #include "stdafx.h"
34     #include "teraterm.h"
35     #include "tttypes.h"
36    
37     #include "ttcommon.h"
38     #include "ttwinman.h"
39     #include "ttsetup.h"
40     #include "keyboard.h"
41     #include "buffer.h"
42     #include "vtterm.h"
43     #include "vtdisp.h"
44     #include "ttdialog.h"
45     #include "ttime.h"
46     #include "commlib.h"
47     #include "clipboar.h"
48     #include "ttftypes.h"
49     #include "filesys.h"
50     #include "telnet.h"
51     #include "tektypes.h"
52     #include "tekwin.h"
53     #include "ttdde.h"
54     #include "ttlib.h"
55     #include "helpid.h"
56     #include "teraprn.h"
57     #include <winsock2.h>
58     #include <ws2tcpip.h>
59     #include "ttplug.h" /* TTPLUG */
60    
61     #include <stdio.h>
62     #include <stdlib.h>
63     #include <string.h>
64     #include <locale.h>
65    
66     #include <shlobj.h>
67     #include <io.h>
68     #include <errno.h>
69     #include <imagehlp.h>
70    
71     #include <windowsx.h>
72 yutakapon 3898 #include <imm.h>
73 salarm 6076 #include <Dbt.h>
74 maya 3227
75     #include "tt_res.h"
76     #include "vtwin.h"
77     #include "addsetting.h"
78 yutakapon 4385 #include "winjump.h"
79 doda 7089 #include "sizetip.h"
80 zmatsuo 7148 #include "dnddlg.h"
81 zmatsuo 7457 #include "compat_win.h"
82 maya 3227
83 salarm 6100 #include "initguid.h"
84 maya 6101 //#include "Usbiodef.h"
85     DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE, 0xA5DCBF10L, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, \
86     0xC0, 0x4F, 0xB9, 0x51, 0xED);
87 salarm 6100
88 maya 3227 #define VTClassName "VTWin32"
89    
90     #ifdef _DEBUG
91     #define new DEBUG_NEW
92     #undef THIS_FILE
93     static char THIS_FILE[] = __FILE__;
94     #endif
95    
96     // �E�B���h�E�������{�^�����L�������� (2005.1.15 yutaka)
97     #define WINDOW_MAXMIMUM_ENABLED 1
98    
99     // WM_COPYDATA�������v���Z�X�����M������ (2005.1.22 yutaka)
100     #define IPC_BROADCAST_COMMAND 1 // �S�[�������M
101     #define IPC_MULTICAST_COMMAND 2 // �C�����[���Q�����M
102    
103     #define BROADCAST_LOGFILE "broadcast.log"
104    
105     static HFONT DlgBroadcastFont;
106     static HFONT DlgCommentFont;
107 maya 6106 static HFONT DlgSetupdirFont;
108 maya 3227
109 doda 3580 static BOOL TCPLocalEchoUsed = FALSE;
110     static BOOL TCPCRSendUsed = FALSE;
111    
112 doda 5341 static BOOL IgnoreRelease = FALSE;
113    
114 salarm 6100 static HDEVNOTIFY hDevNotify = NULL;
115    
116 salarm 6076 static int AutoDisconnectedPort = -1;
117    
118 maya 3227 // �{���� addsetting.cpp
119     extern mouse_cursor_t MouseCursor[];
120    
121     /////////////////////////////////////////////////////////////////////////////
122     // CVTWindow
123    
124     BEGIN_MESSAGE_MAP(CVTWindow, CFrameWnd)
125     //{{AFX_MSG_MAP(CVTWindow)
126     ON_WM_ACTIVATE()
127     ON_WM_CHAR()
128     ON_WM_CLOSE()
129     ON_WM_DESTROY()
130     ON_WM_DROPFILES()
131     ON_WM_GETMINMAXINFO()
132     ON_WM_HSCROLL()
133     ON_WM_INITMENUPOPUP()
134     ON_WM_KEYDOWN()
135     ON_WM_KEYUP()
136     ON_WM_KILLFOCUS()
137     ON_WM_LBUTTONDBLCLK()
138     ON_WM_LBUTTONDOWN()
139     ON_WM_LBUTTONUP()
140     ON_WM_MBUTTONDOWN()
141     ON_WM_MBUTTONUP()
142     ON_WM_MOUSEACTIVATE()
143     ON_WM_MOUSEMOVE()
144     ON_WM_MOUSEWHEEL()
145     ON_WM_MOVE()
146     ON_WM_NCLBUTTONDBLCLK()
147     ON_WM_NCRBUTTONDOWN()
148 doda 6670 ON_WM_NCCALCSIZE()
149 maya 3227 ON_WM_PAINT()
150     ON_WM_RBUTTONDOWN()
151     ON_WM_RBUTTONUP()
152     ON_WM_SETFOCUS()
153     ON_WM_SIZE()
154     ON_WM_SIZING()
155     ON_WM_SYSCHAR()
156     ON_WM_SYSCOLORCHANGE()
157     ON_WM_SYSCOMMAND()
158     ON_WM_SYSKEYDOWN()
159     ON_WM_SYSKEYUP()
160     ON_WM_TIMER()
161     ON_WM_VSCROLL()
162 salarm 6076 ON_WM_DEVICECHANGE()
163 zmatsuo 7434 ON_MESSAGE(WM_IME_STARTCOMPOSITION,OnIMEStartComposition)
164 zmatsuo 7459 ON_MESSAGE(WM_IME_ENDCOMPOSITION,OnIMEEndComposition)
165 maya 3227 ON_MESSAGE(WM_IME_COMPOSITION,OnIMEComposition)
166 yutakapon 3898 ON_MESSAGE(WM_INPUTLANGCHANGE,OnIMEInputChange)
167     ON_MESSAGE(WM_IME_NOTIFY,OnIMENotify)
168 yutakapon 4932 ON_MESSAGE(WM_IME_REQUEST,OnIMERequest)
169 maya 3227 //<!--by AKASI
170     ON_MESSAGE(WM_WINDOWPOSCHANGING,OnWindowPosChanging)
171     ON_MESSAGE(WM_SETTINGCHANGE,OnSettingChange)
172     ON_MESSAGE(WM_ENTERSIZEMOVE,OnEnterSizeMove)
173     ON_MESSAGE(WM_EXITSIZEMOVE ,OnExitSizeMove)
174     //-->
175     ON_MESSAGE(WM_USER_ACCELCOMMAND, OnAccelCommand)
176     ON_MESSAGE(WM_USER_CHANGEMENU,OnChangeMenu)
177     ON_MESSAGE(WM_USER_CHANGETBAR,OnChangeTBar)
178     ON_MESSAGE(WM_USER_COMMNOTIFY,OnCommNotify)
179     ON_MESSAGE(WM_USER_COMMOPEN,OnCommOpen)
180     ON_MESSAGE(WM_USER_COMMSTART,OnCommStart)
181     ON_MESSAGE(WM_USER_DDEEND,OnDdeEnd)
182     ON_MESSAGE(WM_USER_DLGHELP2,OnDlgHelp)
183     ON_MESSAGE(WM_USER_FTCANCEL,OnFileTransEnd)
184     ON_MESSAGE(WM_USER_GETSERIALNO,OnGetSerialNo)
185     ON_MESSAGE(WM_USER_KEYCODE,OnKeyCode)
186     ON_MESSAGE(WM_USER_PROTOCANCEL,OnProtoEnd)
187     ON_MESSAGE(WM_USER_CHANGETITLE,OnChangeTitle)
188     ON_MESSAGE(WM_COPYDATA,OnReceiveIpcMessage)
189 yutakapon 5232 ON_MESSAGE(WM_USER_NONCONFIRM_CLOSE, OnNonConfirmClose)
190 doda 6662 ON_MESSAGE(WM_USER_NOTIFYICON, OnNotifyIcon)
191 maya 3227 ON_COMMAND(ID_FILE_NEWCONNECTION, OnFileNewConnection)
192     ON_COMMAND(ID_FILE_DUPLICATESESSION, OnDuplicateSession)
193     ON_COMMAND(ID_FILE_CYGWINCONNECTION, OnCygwinConnection)
194     ON_COMMAND(ID_FILE_TERATERMMENU, OnTTMenuLaunch)
195     ON_COMMAND(ID_FILE_LOGMEIN, OnLogMeInLaunch)
196     ON_COMMAND(ID_FILE_LOG, OnFileLog)
197     ON_COMMAND(ID_FILE_COMMENTTOLOG, OnCommentToLog)
198     ON_COMMAND(ID_FILE_VIEWLOG, OnViewLog)
199     ON_COMMAND(ID_FILE_SHOWLOGDIALOG, OnShowLogDialog)
200     ON_COMMAND(ID_FILE_REPLAYLOG, OnReplayLog)
201     ON_COMMAND(ID_FILE_SENDFILE, OnFileSend)
202     ON_COMMAND(ID_FILE_KERMITRCV, OnFileKermitRcv)
203     ON_COMMAND(ID_FILE_KERMITGET, OnFileKermitGet)
204     ON_COMMAND(ID_FILE_KERMITSEND, OnFileKermitSend)
205     ON_COMMAND(ID_FILE_KERMITFINISH, OnFileKermitFinish)
206     ON_COMMAND(ID_FILE_XRCV, OnFileXRcv)
207     ON_COMMAND(ID_FILE_XSEND, OnFileXSend)
208     ON_COMMAND(ID_FILE_YRCV, OnFileYRcv)
209     ON_COMMAND(ID_FILE_YSEND, OnFileYSend)
210     ON_COMMAND(ID_FILE_ZRCV, OnFileZRcv)
211     ON_COMMAND(ID_FILE_ZSEND, OnFileZSend)
212     ON_COMMAND(ID_FILE_BPRCV, OnFileBPRcv)
213     ON_COMMAND(ID_FILE_BPSEND, OnFileBPSend)
214     ON_COMMAND(ID_FILE_QVRCV, OnFileQVRcv)
215     ON_COMMAND(ID_FILE_QVSEND, OnFileQVSend)
216     ON_COMMAND(ID_FILE_CHANGEDIR, OnFileChangeDir)
217     ON_COMMAND(ID_FILE_PRINT2, OnFilePrint)
218     ON_COMMAND(ID_FILE_DISCONNECT, OnFileDisconnect)
219     ON_COMMAND(ID_FILE_EXIT, OnFileExit)
220 yutakapon 5233 ON_COMMAND(ID_FILE_EXITALL, OnAllClose)
221 maya 3227 ON_COMMAND(ID_EDIT_COPY2, OnEditCopy)
222     ON_COMMAND(ID_EDIT_COPYTABLE, OnEditCopyTable)
223     ON_COMMAND(ID_EDIT_PASTE2, OnEditPaste)
224     ON_COMMAND(ID_EDIT_PASTECR, OnEditPasteCR)
225     ON_COMMAND(ID_EDIT_CLEARSCREEN, OnEditClearScreen)
226     ON_COMMAND(ID_EDIT_CLEARBUFFER, OnEditClearBuffer)
227     ON_COMMAND(ID_EDIT_CANCELSELECT, OnEditCancelSelection)
228     ON_COMMAND(ID_EDIT_SELECTALL, OnEditSelectAllBuffer)
229     ON_COMMAND(ID_EDIT_SELECTSCREEN, OnEditSelectScreenBuffer)
230     ON_COMMAND(ID_SETUP_ADDITIONALSETTINGS, OnExternalSetup)
231     ON_COMMAND(ID_SETUP_TERMINAL, OnSetupTerminal)
232     ON_COMMAND(ID_SETUP_WINDOW, OnSetupWindow)
233     ON_COMMAND(ID_SETUP_FONT, OnSetupFont)
234     ON_COMMAND(ID_SETUP_KEYBOARD, OnSetupKeyboard)
235     ON_COMMAND(ID_SETUP_SERIALPORT, OnSetupSerialPort)
236     ON_COMMAND(ID_SETUP_TCPIP, OnSetupTCPIP)
237     ON_COMMAND(ID_SETUP_GENERAL, OnSetupGeneral)
238     ON_COMMAND(ID_SETUP_SAVE, OnSetupSave)
239     ON_COMMAND(ID_SETUP_RESTORE, OnSetupRestore)
240 yutakapon 5809 ON_COMMAND(ID_OPEN_SETUP, OnOpenSetupDirectory)
241 maya 3227 ON_COMMAND(ID_SETUP_LOADKEYMAP, OnSetupLoadKeyMap)
242     ON_COMMAND(ID_CONTROL_RESETTERMINAL, OnControlResetTerminal)
243     ON_COMMAND(ID_CONTROL_RESETREMOTETITLE, OnControlResetRemoteTitle)
244     ON_COMMAND(ID_CONTROL_AREYOUTHERE, OnControlAreYouThere)
245     ON_COMMAND(ID_CONTROL_SENDBREAK, OnControlSendBreak)
246     ON_COMMAND(ID_CONTROL_RESETPORT, OnControlResetPort)
247     ON_COMMAND(ID_CONTROL_BROADCASTCOMMAND, OnControlBroadcastCommand)
248     ON_COMMAND(ID_CONTROL_OPENTEK, OnControlOpenTEK)
249     ON_COMMAND(ID_CONTROL_CLOSETEK, OnControlCloseTEK)
250     ON_COMMAND(ID_CONTROL_MACRO, OnControlMacro)
251 maya 3842 ON_COMMAND(ID_CONTROL_SHOW_MACRO, OnShowMacroWindow)
252 maya 3227 ON_COMMAND(ID_WINDOW_WINDOW, OnWindowWindow)
253 doda 4647 ON_COMMAND(ID_WINDOW_MINIMIZEALL, OnWindowMinimizeAll)
254 yutakapon 5224 ON_COMMAND(ID_WINDOW_CASCADEALL, OnWindowCascade)
255     ON_COMMAND(ID_WINDOW_STACKED, OnWindowStacked)
256     ON_COMMAND(ID_WINDOW_SIDEBYSIDE, OnWindowSidebySide)
257 doda 4647 ON_COMMAND(ID_WINDOW_RESTOREALL, OnWindowRestoreAll)
258 yutakapon 5299 ON_COMMAND(ID_WINDOW_UNDO, OnWindowUndo)
259 maya 3227 ON_COMMAND(ID_HELP_INDEX2, OnHelpIndex)
260     ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout)
261 zmatsuo 7148 ON_MESSAGE(WM_USER_DROPNOTIFY, OnDropNotify)
262 maya 3227 //}}AFX_MSG_MAP
263     END_MESSAGE_MAP()
264    
265     // Tera Term�N������URL������mouse over������������ (2005.4.2 yutaka)
266 doda 5279 void SetMouseCursor(char *cursor)
267 maya 3227 {
268     HCURSOR hc;
269     LPCTSTR name = NULL;
270     int i;
271    
272     for (i = 0 ; MouseCursor[i].name ; i++) {
273     if (_stricmp(cursor, MouseCursor[i].name) == 0) {
274     name = MouseCursor[i].id;
275     break;
276     }
277     }
278 maya 3392 if (name == NULL) {
279 maya 3227 return;
280 maya 3392 }
281 maya 3227
282 yutakapon 6286 hc = (HCURSOR)LoadImage(NULL, name, IMAGE_CURSOR,
283 maya 3227 0, 0, LR_DEFAULTSIZE | LR_SHARED);
284    
285     if (hc != NULL) {
286     SetClassLongPtr(HVTWin, GCLP_HCURSOR, (LONG_PTR)hc);
287     }
288     }
289    
290 zmatsuo 7390 /**
291     * @param[in] alpha 0-255
292     */
293     void CVTWindow::SetWindowAlpha(BYTE alpha)
294 maya 3227 {
295 zmatsuo 7457 if (pSetLayeredWindowAttributes == NULL) {
296     return; // ���C���[�h�E�C���h�E���T�|�[�g����
297     }
298 zmatsuo 7390 if (Alpha == alpha) {
299     return; // ����������������������
300     }
301     LONG_PTR lp = ::GetWindowLongPtr(HVTWin, GWL_EXSTYLE);
302     if (lp == 0) {
303     return;
304     }
305 maya 3227
306     // 2006/03/16 by 337: BGUseAlphaBlendAPI��On������Layered����������
307     //if (ts->EtermLookfeel.BGUseAlphaBlendAPI) {
308     // �A���t�@�l��255�������A�����������������}�����������������������������B(2006.4.1 yutaka)
309     // �����o�������A�l�����X�����������������������f�����B(2007.10.19 maya)
310 zmatsuo 7390 if (alpha < 255) {
311     ::SetWindowLongPtr(HVTWin, GWL_EXSTYLE, lp | WS_EX_LAYERED);
312 zmatsuo 7457 pSetLayeredWindowAttributes(HVTWin, 0, alpha, LWA_ALPHA);
313 maya 3227 }
314     else {
315 zmatsuo 7390 // �A���t�@�l�� 255 �������A�����������������������`�������B(2007.10.22 maya)
316     ::SetWindowLongPtr(HVTWin, GWL_EXSTYLE, lp & ~WS_EX_LAYERED);
317     ::RedrawWindow(HVTWin, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME);
318 maya 3227 }
319 zmatsuo 7390 Alpha = alpha;
320 maya 3227 }
321    
322 salarm 6100 void RegDeviceNotify(HWND hWnd)
323     {
324     typedef HDEVNOTIFY (WINAPI *PRegisterDeviceNotification)(HANDLE hRecipient, LPVOID NotificationFilter, DWORD Flags);
325     HMODULE h;
326     PRegisterDeviceNotification pRegisterDeviceNotification;
327     DEV_BROADCAST_DEVICEINTERFACE filter;
328 maya 3227
329 salarm 6100 if (((h = GetModuleHandle("user32.dll")) == NULL) ||
330     ((pRegisterDeviceNotification = (PRegisterDeviceNotification)GetProcAddress(h, "RegisterDeviceNotificationA")) == NULL)) {
331     return;
332     }
333    
334     ZeroMemory(&filter, sizeof(filter));
335     filter.dbcc_size = sizeof(filter);
336     filter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
337     filter.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE;
338     hDevNotify = pRegisterDeviceNotification(hWnd, &filter, DEVICE_NOTIFY_WINDOW_HANDLE);
339     }
340    
341     void UnRegDeviceNotify(HWND hWnd)
342     {
343     typedef BOOL (WINAPI *PUnregisterDeviceNotification)(HDEVNOTIFY Handle);
344     HMODULE h;
345     PUnregisterDeviceNotification pUnregisterDeviceNotification;
346    
347     if (((h = GetModuleHandle("user32.dll")) == NULL) ||
348     ((pUnregisterDeviceNotification = (PUnregisterDeviceNotification)GetProcAddress(h, "UnregisterDeviceNotification")) == NULL)) {
349     return;
350     }
351    
352     pUnregisterDeviceNotification(hDevNotify);
353     }
354    
355 salarm 6347 void SetAutoConnectPort(int port)
356     {
357     AutoDisconnectedPort = port;
358     }
359    
360 maya 3227 //
361     // ���O�n���h�����t�b�N�i�X�^�b�N�g���[�X���_���v�j
362     //
363     // cf. http://svn.collab.net/repos/svn/trunk/subversion/libsvn_subr/win32_crashrpt.c
364     // (2007.9.30 yutaka)
365     //
366     // ���O�R�[�h������������������
367     static char *GetExceptionString(int exception)
368     {
369     #define EXCEPTION(x) case EXCEPTION_##x: return (#x);
370     static char buf[16];
371    
372     switch (exception)
373     {
374     EXCEPTION(ACCESS_VIOLATION)
375     EXCEPTION(DATATYPE_MISALIGNMENT)
376     EXCEPTION(BREAKPOINT)
377     EXCEPTION(SINGLE_STEP)
378     EXCEPTION(ARRAY_BOUNDS_EXCEEDED)
379     EXCEPTION(FLT_DENORMAL_OPERAND)
380     EXCEPTION(FLT_DIVIDE_BY_ZERO)
381     EXCEPTION(FLT_INEXACT_RESULT)
382     EXCEPTION(FLT_INVALID_OPERATION)
383     EXCEPTION(FLT_OVERFLOW)
384     EXCEPTION(FLT_STACK_CHECK)
385     EXCEPTION(FLT_UNDERFLOW)
386     EXCEPTION(INT_DIVIDE_BY_ZERO)
387     EXCEPTION(INT_OVERFLOW)
388     EXCEPTION(PRIV_INSTRUCTION)
389     EXCEPTION(IN_PAGE_ERROR)
390     EXCEPTION(ILLEGAL_INSTRUCTION)
391     EXCEPTION(NONCONTINUABLE_EXCEPTION)
392     EXCEPTION(STACK_OVERFLOW)
393     EXCEPTION(INVALID_DISPOSITION)
394     EXCEPTION(GUARD_PAGE)
395     EXCEPTION(INVALID_HANDLE)
396    
397     default:
398     _snprintf_s(buf, sizeof(buf), _TRUNCATE, "0x%x", exception);
399     return buf;
400     //return "UNKNOWN_ERROR";
401     }
402     #undef EXCEPTION
403     }
404    
405     /* ���O�������������������o���������\�������A���O�t�B���^���� */
406     static LONG CALLBACK ApplicationFaultHandler(EXCEPTION_POINTERS *ExInfo)
407     {
408     HGLOBAL gptr;
409     STACKFRAME sf;
410     BOOL bResult;
411     PIMAGEHLP_SYMBOL pSym;
412     DWORD Disp;
413     HANDLE hProcess = GetCurrentProcess();
414     HANDLE hThread = GetCurrentThread();
415     IMAGEHLP_MODULE ih_module;
416     IMAGEHLP_LINE ih_line;
417     int frame;
418     char msg[3072], buf[256];
419     HMODULE h, h2;
420 maya 4134 char imagehlp_dll[MAX_PATH];
421 maya 3227
422     // Windows98/Me/NT4�����������������X�L�b�v�����B(2007.10.9 yutaka)
423 maya 4134 GetSystemDirectory(imagehlp_dll, sizeof(imagehlp_dll));
424     strncat_s(imagehlp_dll, sizeof(imagehlp_dll), "\\imagehlp.dll", _TRUNCATE);
425     h2 = LoadLibrary(imagehlp_dll);
426     if (((h = GetModuleHandle(imagehlp_dll)) == NULL) ||
427 maya 3227 (GetProcAddress(h, "SymGetLineFromAddr") == NULL)) {
428     FreeLibrary(h2);
429     goto error;
430     }
431     FreeLibrary(h2);
432    
433     /* �V���{�������i�[�p�o�b�t�@�������� */
434     gptr = GlobalAlloc(GMEM_FIXED, 10000);
435 maya 3392 if (gptr == NULL) {
436 maya 3227 goto error;
437 maya 3392 }
438 maya 3227 pSym = (PIMAGEHLP_SYMBOL)GlobalLock(gptr);
439     ZeroMemory(pSym, sizeof(IMAGEHLP_SYMBOL));
440     pSym->SizeOfStruct = 10000;
441     pSym->MaxNameLength = 10000 - sizeof(IMAGEHLP_SYMBOL);
442    
443     /* �X�^�b�N�t���[���������� */
444     ZeroMemory(&sf, sizeof(sf));
445     sf.AddrPC.Offset = ExInfo->ContextRecord->Eip;
446     sf.AddrStack.Offset = ExInfo->ContextRecord->Esp;
447     sf.AddrFrame.Offset = ExInfo->ContextRecord->Ebp;
448     sf.AddrPC.Mode = AddrModeFlat;
449     sf.AddrStack.Mode = AddrModeFlat;
450     sf.AddrFrame.Mode = AddrModeFlat;
451    
452     /* �V���{���n���h���������� */
453     SymInitialize(hProcess, NULL, TRUE);
454 doda 6435
455 maya 3227 // ���W�X�^�_���v
456     msg[0] = '\0';
457     _snprintf_s(buf, sizeof(buf), _TRUNCATE, "eax=%08X ebx=%08X ecx=%08X edx=%08X esi=%08X edi=%08X\r\n"
458     "ebp=%08X esp=%08X eip=%08X efl=%08X\r\n"
459     "cs=%04X ss=%04X ds=%04X es=%04X fs=%04X gs=%04X\r\n",
460 doda 6435 ExInfo->ContextRecord->Eax,
461     ExInfo->ContextRecord->Ebx,
462     ExInfo->ContextRecord->Ecx,
463     ExInfo->ContextRecord->Edx,
464     ExInfo->ContextRecord->Esi,
465     ExInfo->ContextRecord->Edi,
466     ExInfo->ContextRecord->Ebp,
467     ExInfo->ContextRecord->Esp,
468 maya 3227 ExInfo->ContextRecord->Eip,
469     ExInfo->ContextRecord->EFlags,
470     ExInfo->ContextRecord->SegCs,
471     ExInfo->ContextRecord->SegSs,
472     ExInfo->ContextRecord->SegDs,
473     ExInfo->ContextRecord->SegEs,
474     ExInfo->ContextRecord->SegFs,
475     ExInfo->ContextRecord->SegGs
476     );
477     strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
478    
479     if (ExInfo->ExceptionRecord != NULL) {
480     _snprintf_s(buf, sizeof(buf), _TRUNCATE, "Exception: %s\r\n", GetExceptionString(ExInfo->ExceptionRecord->ExceptionCode));
481     strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
482     }
483    
484     /* �X�^�b�N�t���[���������\���������� */
485     frame = 0;
486     for (;;) {
487     /* �����X�^�b�N�t���[�������� */
488     bResult = StackWalk(
489     IMAGE_FILE_MACHINE_I386,
490     hProcess,
491     hThread,
492     &sf,
493     NULL,
494 doda 6435 NULL,
495 maya 3227 SymFunctionTableAccess,
496     SymGetModuleBase,
497     NULL);
498    
499     /* ���s�������A���[�v�������� */
500 doda 6435 if (!bResult || sf.AddrFrame.Offset == 0)
501 maya 3227 break;
502 doda 6435
503 maya 3227 frame++;
504    
505     /* �v���O�����J�E���^�i���z�A�h���X�j�������������I�t�Z�b�g������ */
506     bResult = SymGetSymFromAddr(hProcess, sf.AddrPC.Offset, &Disp, pSym);
507 doda 6435
508 maya 3227 /* �����������\�� */
509     _snprintf_s(buf, sizeof(buf), _TRUNCATE, "#%d 0x%08x in ", frame, sf.AddrPC.Offset);
510     strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
511     if (bResult) {
512     _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s() + 0x%x ", pSym->Name, Disp);
513     strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
514     } else {
515     _snprintf_s(buf, sizeof(buf), _TRUNCATE, " --- ");
516     strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
517     }
518 doda 6435
519 maya 3227 // ���s�t�@�C����������
520     ZeroMemory( &(ih_module), sizeof(ih_module) );
521     ih_module.SizeOfStruct = sizeof(ih_module);
522     bResult = SymGetModuleInfo( hProcess, sf.AddrPC.Offset, &(ih_module) );
523     strncat_s(msg, sizeof(msg), "at ", _TRUNCATE);
524     if (bResult) {
525     _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s ", ih_module.ImageName );
526     strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
527     } else {
528     _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s ", "<Unknown Module>" );
529     strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
530     }
531 doda 6435
532 maya 3227 // �t�@�C�������s����������
533     ZeroMemory( &(ih_line), sizeof(ih_line) );
534     ih_line.SizeOfStruct = sizeof(ih_line);
535     bResult = SymGetLineFromAddr( hProcess, sf.AddrPC.Offset, &Disp, &ih_line );
536     if (bResult)
537     {
538     _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s:%lu", ih_line.FileName, ih_line.LineNumber );
539     strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
540     }
541 doda 6435
542 maya 3352 strncat_s(msg, sizeof(msg), "\n", _TRUNCATE);
543 maya 3227 }
544    
545     /* ������ */
546     SymCleanup(hProcess);
547     GlobalUnlock(pSym);
548     GlobalFree(pSym);
549    
550     MessageBox(NULL, msg, "Tera Term: Application fault", MB_OK | MB_ICONEXCLAMATION);
551    
552     error:
553     // return (EXCEPTION_EXECUTE_HANDLER); /* ���������v���Z�X���I�������� */
554     return (EXCEPTION_CONTINUE_SEARCH); /* ���������m�A�v���P�[�V�����G���[�n�|�b�v�A�b�v���b�Z�[�W�{�b�N�X�������o�� */
555     }
556    
557    
558 yutakapon 6130 // Virtual Store���L���������������������������B
559     //
560     // [Windows 95-XP]
561     // return FALSE (always)
562     //
563     // [Windows Vista-10]
564     // return TRUE: Virtual Store Enabled
565     // FALSE: Virtual Store Disabled or Unknown
566     //
567     BOOL GetVirtualStoreEnvironment(void)
568     {
569 yutakapon 6131 #if _MSC_VER == 1400 // VSC2005(VC8.0)
570     typedef struct _TOKEN_ELEVATION {
571     DWORD TokenIsElevated;
572     } TOKEN_ELEVATION, *PTOKEN_ELEVATION;
573     int TokenElevation = 20;
574     #endif
575 yutakapon 6130 BOOL ret = FALSE;
576     int flag = 0;
577     HANDLE hToken;
578     DWORD dwLength;
579     TOKEN_ELEVATION tokenElevation;
580     LONG lRet;
581     HKEY hKey;
582     TCHAR lpData[256];
583     DWORD dwDataSize;
584     DWORD dwType;
585     BYTE bValue;
586    
587     // Windows Vista���O�����������B
588 yutakapon 6286 if (!IsWindowsVistaOrLater())
589 yutakapon 6130 goto error;
590    
591     // UAC���L�����������B
592     // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System��EnableLUA(DWORD�l)��0�������������f��������(0��UAC�����A1��UAC�L��)�B
593     flag = 0;
594     lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
595     TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"),
596     NULL, KEY_QUERY_VALUE, &hKey
597     );
598     if (lRet == ERROR_SUCCESS) {
599     dwDataSize = sizeof(lpData) / sizeof(lpData[0]);
600     lRet = RegQueryValueEx(
601     hKey,
602     TEXT("EnableLUA"),
603     0,
604     &dwType,
605     (LPBYTE)lpData,
606     &dwDataSize);
607     if (lRet == ERROR_SUCCESS) {
608     bValue = ((LPBYTE)lpData)[0];
609     if (bValue == 1)
610     // UAC���L���������AVirtual Store�������B
611     flag = 1;
612     }
613     RegCloseKey(hKey);
614     }
615     if (flag == 0)
616     goto error;
617    
618     // UAC���L�����A�v���Z�X�����������������i�����������B
619     flag = 0;
620     if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_DEFAULT, &hToken)) {
621     if (GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS)TokenElevation, &tokenElevation, sizeof(TOKEN_ELEVATION), &dwLength)) {
622     // (0�����i�����������A��0�����i��������)�B
623     if (tokenElevation.TokenIsElevated == 0) {
624     // �����������������������������AVirtual Store�������B
625     flag = 1;
626     }
627     }
628     CloseHandle(hToken);
629     }
630     if (flag == 0)
631     goto error;
632    
633     ret = TRUE;
634     return (ret);
635    
636     error:
637     return (ret);
638     }
639    
640 doda 6782 /////////////////////////////////////////////////////////////////////////////
641     // CVTWindow constructor
642    
643 maya 3227 CVTWindow::CVTWindow()
644     {
645     WNDCLASS wc;
646     RECT rect;
647     DWORD Style;
648     #ifdef ALPHABLEND_TYPE2
649     DWORD ExStyle;
650     #endif
651     char *Param;
652     int CmdShow;
653 maya 5784 #ifdef SHARED_KEYMAP
654     char Temp[MAX_PATH];
655 maya 3227 PKeyMap tempkm;
656 maya 5784 #endif
657 maya 3227 int fuLoad = LR_DEFAULTCOLOR;
658 doda 6790 BOOL isFirstInstance;
659 maya 3227
660 maya 3392 // ���O�n���h�����t�b�N (2007.9.30 yutaka)
661 maya 3227 SetUnhandledExceptionFilter(ApplicationFaultHandler);
662    
663 doda 6790 CommInit(&cv);
664     isFirstInstance = StartTeraTerm(&ts);
665    
666 maya 3227 TTXInit(&ts, &cv); /* TTPLUG */
667    
668     MsgDlgHelp = RegisterWindowMessage(HELPMSGSTRING);
669    
670 doda 6790 if (isFirstInstance) {
671 maya 3227 /* first instance */
672     if (LoadTTSET()) {
673     /* read setup info from "teraterm.ini" */
674     (*ReadIniFile)(ts.SetupFName, &ts);
675 maya 5784 #ifdef SHARED_KEYMAP
676 maya 3227 /* read keycode map from "keyboard.cnf" */
677     tempkm = (PKeyMap)malloc(sizeof(TKeyMap));
678     if (tempkm!=NULL) {
679     strncpy_s(Temp, sizeof(Temp), ts.HomeDir, _TRUNCATE);
680     AppendSlash(Temp,sizeof(Temp));
681     strncat_s(Temp,sizeof(Temp),"KEYBOARD.CNF",_TRUNCATE);
682     (*ReadKeyboardCnf)(Temp,tempkm,TRUE);
683     }
684 maya 5784 #endif
685 maya 3227 FreeTTSET();
686 maya 5784 #ifdef SHARED_KEYMAP
687 maya 3227 /* store default sets in TTCMN */
688     #if 0
689     ChangeDefaultSet(&ts,tempkm);
690     #else
691     ChangeDefaultSet(NULL,tempkm);
692     #endif
693     if (tempkm!=NULL) free(tempkm);
694 maya 5784 #endif
695 maya 3227 }
696 doda 6783 else {
697     abort();
698     }
699 maya 3227
700     } else {
701     // 2�������~���v���Z�X�����������A�f�B�X�N���� TERATERM.INI �������B(2004.11.4 yutaka)
702     if (LoadTTSET()) {
703     /* read setup info from "teraterm.ini" */
704     (*ReadIniFile)(ts.SetupFName, &ts);
705 maya 5784 #ifdef SHARED_KEYMAP
706 maya 3227 /* read keycode map from "keyboard.cnf" */
707     tempkm = (PKeyMap)malloc(sizeof(TKeyMap));
708     if (tempkm!=NULL) {
709 doda 5345 strncpy_s(Temp, sizeof(Temp), ts.HomeDir, _TRUNCATE);
710 maya 3227 AppendSlash(Temp,sizeof(Temp));
711     strncat_s(Temp,sizeof(Temp),"KEYBOARD.CNF",_TRUNCATE);
712     (*ReadKeyboardCnf)(Temp,tempkm,TRUE);
713     }
714 maya 5784 #endif
715 maya 3227 FreeTTSET();
716 maya 5784 #ifdef SHARED_KEYMAP
717 maya 3227 /* store default sets in TTCMN */
718 maya 3392 if (tempkm!=NULL) {
719     free(tempkm);
720     }
721 maya 5784 #endif
722 maya 3227 }
723 doda 6783 else {
724     abort();
725     }
726 maya 3227 }
727    
728     /* Parse command line parameters*/
729     // 256�o�C�g�������R�}���h���C���p�����[�^�w�����������ABOF(Buffer Over Flow)��
730     // �������o�O���C���B(2007.6.12 maya)
731     Param = GetCommandLine();
732 maya 3392 if (LoadTTSET()) {
733 maya 3227 (*ParseParam)(Param, &ts, &(TopicName[0]));
734 maya 3392 }
735 maya 3227 FreeTTSET();
736    
737     // duplicate session���w�������������A���L�����������R�s�[���� (2004.12.7 yutaka)
738     if (ts.DuplicateSession == 1) {
739     CopyShmemToTTSet(&ts);
740     }
741    
742     InitKeyboard();
743     SetKeyMap();
744    
745     /* window status */
746     AdjustSize = TRUE;
747     Minimized = FALSE;
748     LButton = FALSE;
749     MButton = FALSE;
750     RButton = FALSE;
751     DblClk = FALSE;
752     AfterDblClk = FALSE;
753     TplClk = FALSE;
754     Hold = FALSE;
755     FirstPaint = TRUE;
756     ScrollLock = FALSE; // �����l������ (2006.11.14 yutaka)
757 zmatsuo 7390 Alpha = 255;
758 maya 3227
759     /* Initialize scroll buffer */
760     InitBuffer();
761    
762     InitDisp();
763    
764     if (ts.HideTitle>0) {
765     Style = WS_VSCROLL | WS_HSCROLL |
766     WS_BORDER | WS_THICKFRAME | WS_POPUP;
767    
768     #ifdef ALPHABLEND_TYPE2
769     if(BGNoFrame)
770     Style &= ~(WS_BORDER | WS_THICKFRAME);
771     #endif
772     }
773     else
774     #ifdef WINDOW_MAXMIMUM_ENABLED
775     Style = WS_VSCROLL | WS_HSCROLL |
776     WS_BORDER | WS_THICKFRAME |
777     WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
778     #else
779     Style = WS_VSCROLL | WS_HSCROLL |
780     WS_BORDER | WS_THICKFRAME |
781     WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
782     #endif
783    
784     wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
785     wc.lpfnWndProc = AfxWndProc;
786     wc.cbClsExtra = 0;
787     wc.cbWndExtra = 0;
788     wc.hInstance = AfxGetInstanceHandle();
789     wc.hIcon = NULL;
790     //wc.hCursor = LoadCursor(NULL,IDC_IBEAM);
791     wc.hCursor = NULL; // �}�E�X�J�[�\�������I�����X���� (2005.4.2 yutaka)
792     wc.hbrBackground = NULL;
793     wc.lpszMenuName = NULL;
794     wc.lpszClassName = VTClassName;
795    
796     RegisterClass(&wc);
797     LoadAccelTable(MAKEINTRESOURCE(IDR_ACC));
798    
799 maya 3392 if (ts.VTPos.x==CW_USEDEFAULT) {
800 maya 3227 rect = rectDefault;
801 maya 3392 }
802 maya 3227 else {
803     rect.left = ts.VTPos.x;
804     rect.top = ts.VTPos.y;
805     rect.right = rect.left + 100;
806     rect.bottom = rect.top + 100;
807     }
808     Create(VTClassName, "Tera Term", Style, rect, NULL, NULL);
809    
810     /*--------- Init2 -----------------*/
811     HVTWin = GetSafeHwnd();
812     if (HVTWin == NULL) return;
813     // register this window to the window list
814     SerialNo = RegWin(HVTWin,NULL);
815    
816     logfile_lock_initialize();
817 zmatsuo 7390 SetMouseCursor(ts.MouseCursorName);
818 maya 3227 // ���P�[��������
819     // wctomb ������
820     setlocale(LC_ALL, ts.Locale);
821    
822     #ifdef ALPHABLEND_TYPE2
823     //<!--by AKASI
824     if(BGNoFrame && ts.HideTitle > 0) {
825     ExStyle = GetWindowLong(HVTWin,GWL_EXSTYLE);
826     ExStyle &= ~WS_EX_CLIENTEDGE;
827     SetWindowLong(HVTWin,GWL_EXSTYLE,ExStyle);
828     }
829     //-->
830     #endif
831    
832 salarm 6100 // USB�f�o�C�X�������m�o�^
833     RegDeviceNotify(HVTWin);
834    
835 yutakapon 6286 if (IsWindowsNT4()) {
836 maya 3227 fuLoad = LR_VGACOLOR;
837     }
838     ::PostMessage(HVTWin,WM_SETICON,ICON_SMALL,
839     (LPARAM)LoadImage(AfxGetInstanceHandle(),
840     MAKEINTRESOURCE((ts.VTIcon!=IdIconDefault)?ts.VTIcon:IDI_VT),
841     IMAGE_ICON,16,16,fuLoad));
842     // Vista �� Aero �������� Alt+Tab �����������\���������A�C�R����
843     // 16x16 �A�C�R�����g���������������������A�������A�C�R����
844     // �Z�b�g���� (2008.9.3 maya)
845     ::PostMessage(HVTWin,WM_SETICON,ICON_BIG,
846     (LPARAM)LoadImage(AfxGetInstanceHandle(),
847     MAKEINTRESOURCE((ts.VTIcon!=IdIconDefault)?ts.VTIcon:IDI_VT),
848     IMAGE_ICON, 0, 0, fuLoad));
849    
850 doda 6690 SetCustomNotifyIcon(
851     (HICON)LoadImage(
852     AfxGetInstanceHandle(),
853     MAKEINTRESOURCE((ts.VTIcon!=IdIconDefault)?ts.VTIcon:IDI_VT),
854     IMAGE_ICON, 16, 16, LR_VGACOLOR|LR_SHARED));
855    
856 maya 3227 MainMenu = NULL;
857     WinMenu = NULL;
858     if ((ts.HideTitle==0) && (ts.PopupMenu==0)) {
859     InitMenu(&MainMenu);
860     ::SetMenu(HVTWin,MainMenu);
861     }
862    
863     /* Reset Terminal */
864     ResetTerminal();
865    
866 maya 3392 if ((ts.PopupMenu>0) || (ts.HideTitle>0)) {
867 maya 3227 ::PostMessage(HVTWin,WM_USER_CHANGEMENU,0,0);
868 maya 3392 }
869 maya 3227
870     ChangeFont();
871    
872     ResetIME();
873    
874     BuffChangeWinSize(NumOfColumns,NumOfLines);
875    
876     ChangeTitle();
877     /* Enable drag-drop */
878     ::DragAcceptFiles(HVTWin,TRUE);
879    
880     if (ts.HideWindow>0) {
881     if (strlen(TopicName)>0) {
882     InitDDE();
883     SendDDEReady();
884     }
885     FirstPaint = FALSE;
886     Startup();
887     return;
888     }
889 maya 3392 CmdShow = SW_SHOWDEFAULT;
890     if (ts.Minimize>0) {
891 maya 3227 CmdShow = SW_SHOWMINIMIZED;
892 maya 3392 }
893 zmatsuo 7390 SetWindowAlpha(ts.AlphaBlendActive);
894 maya 3227 ShowWindow(CmdShow);
895     ChangeCaret();
896 yutakapon 6130
897     // Tera Term���N�����AVirtual Store�����������������o���������B
898     // (2015.11.14 yutaka)
899     cv.VirtualStoreEnabled = GetVirtualStoreEnvironment();
900 zmatsuo 7148
901     DropLists = NULL;
902     DropListCount = 0;
903 maya 3227 }
904    
905     /////////////////////////////////////////////////////////////////////////////
906    
907     #ifdef _DEBUG
908     void CVTWindow::AssertValid() const
909     {
910     CFrameWnd::AssertValid();
911     }
912    
913     void CVTWindow::Dump(CDumpContext& dc) const
914     {
915     CFrameWnd::Dump(dc);
916     }
917    
918     #endif //_DEBUG
919    
920     /////////////////////////////////////////////////////////////////////////////
921    
922     int CVTWindow::Parse()
923     {
924     // added ScrollLock (2006.11.14 yutaka)
925     if (LButton || MButton || RButton || ScrollLock)
926     return 0;
927     return (VTParse()); // Parse received characters
928     }
929    
930     void CVTWindow::ButtonUp(BOOL Paste)
931     {
932     BOOL disableBuffEndSelect = false;
933    
934     /* disable autoscrolling */
935     ::KillTimer(HVTWin,IdScrollTimer);
936     ReleaseCapture();
937    
938     if (ts.SelectOnlyByLButton &&
939     (MButton || RButton)) {
940     disableBuffEndSelect = true;
941     }
942    
943     LButton = FALSE;
944     MButton = FALSE;
945     RButton = FALSE;
946     DblClk = FALSE;
947     TplClk = FALSE;
948     CaretOn();
949    
950     // SelectOnlyByLButton �� on �� ���E�E�N���b�N����������
951     // �o�b�t�@���I���������������A�I�����e���N���b�v�{�[�h��
952     // �R�s�[�������������������C�� (2007.12.6 maya)
953     if (!disableBuffEndSelect) {
954     BuffEndSelect();
955     }
956    
957 doda 6415 if (Paste) {
958 doda 6456 CBStartPaste(HVTWin, FALSE, BracketedPasteMode());
959     // �X�N���[�����u�����Z�b�g
960     if (WinOrgY != 0) {
961     DispVScroll(SCROLL_BOTTOM, 0);
962 maya 3227 }
963     }
964     }
965    
966     void CVTWindow::ButtonDown(POINT p, int LMR)
967     {
968     HMENU PopupMenu, PopupBase;
969     BOOL mousereport;
970    
971     if ((LMR==IdLeftButton) && ControlKey() && (MainMenu==NULL) &&
972     ((ts.MenuFlag & MF_NOPOPUP)==0)) {
973     int i, numItems;
974     char itemText[256];
975    
976     InitMenu(&PopupMenu);
977    
978     PopupBase = CreatePopupMenu();
979     numItems = GetMenuItemCount(PopupMenu);
980    
981     for (i = 0; i < numItems; i++) {
982     HMENU submenu = GetSubMenu(PopupMenu, i);
983    
984     if (submenu != NULL) {
985     InitMenuPopup(submenu);
986     }
987    
988     if (GetMenuString(PopupMenu, i, itemText, sizeof(itemText), MF_BYPOSITION) != 0) {
989     int state = GetMenuState(PopupMenu, i, MF_BYPOSITION) &
990     (MF_CHECKED | MF_DISABLED | MF_GRAYED | MF_HILITE |
991     MF_MENUBARBREAK | MF_MENUBREAK | MF_SEPARATOR);
992    
993     AppendMenu(PopupBase,
994     submenu != NULL ? LOBYTE(state) | MF_POPUP : state,
995     submenu != NULL ? (UINT)submenu : GetMenuItemID(PopupMenu, i),
996     itemText);
997     }
998     }
999    
1000     ::ClientToScreen(HVTWin, &p);
1001     TrackPopupMenu(PopupBase,TPM_LEFTALIGN | TPM_LEFTBUTTON,
1002     p.x,p.y,0,HVTWin,NULL);
1003     if (WinMenu!=NULL) {
1004     DestroyMenu(WinMenu);
1005     WinMenu = NULL;
1006     }
1007     DestroyMenu(PopupBase);
1008     DestroyMenu(PopupMenu);
1009     PopupMenu = 0;
1010     return;
1011     }
1012    
1013 doda 3987 if (mousereport = MouseReport(IdMouseEventBtnDown, LMR, p.x, p.y)) {
1014 doda 7041 SetCapture();
1015 doda 3987 return;
1016     }
1017 maya 3227
1018     // added ConfirmPasteMouseRButton (2007.3.17 maya)
1019     if ((LMR == IdRightButton) &&
1020 doda 6594 (ts.PasteFlag & CPF_DISABLE_RBUTTON) == 0 &&
1021     (ts.PasteFlag & CPF_CONFIRM_RBUTTON) != 0 &&
1022 maya 3227 cv.Ready &&
1023     !mousereport &&
1024     (SendVar==NULL) && (FileVar==NULL) &&
1025     (cv.PortType!=IdFile) &&
1026     (IsClipboardFormatAvailable(CF_TEXT) ||
1027     IsClipboardFormatAvailable(CF_OEMTEXT))) {
1028    
1029     int i, numItems;
1030     char itemText[256];
1031    
1032     InitPasteMenu(&PopupMenu);
1033     PopupBase = CreatePopupMenu();
1034     numItems = GetMenuItemCount(PopupMenu);
1035    
1036     for (i = 0; i < numItems; i++) {
1037     if (GetMenuString(PopupMenu, i, itemText, sizeof(itemText), MF_BYPOSITION) != 0) {
1038     int state = GetMenuState(PopupMenu, i, MF_BYPOSITION) &
1039     (MF_CHECKED | MF_DISABLED | MF_GRAYED | MF_HILITE |
1040     MF_MENUBARBREAK | MF_MENUBREAK | MF_SEPARATOR);
1041    
1042     AppendMenu(PopupBase, state,
1043     GetMenuItemID(PopupMenu, i), itemText);
1044     }
1045     }
1046    
1047     ::ClientToScreen(HVTWin, &p);
1048     TrackPopupMenu(PopupBase,TPM_LEFTALIGN | TPM_LEFTBUTTON,
1049     p.x,p.y,0,HVTWin,NULL);
1050     if (WinMenu!=NULL) {
1051     DestroyMenu(WinMenu);
1052     WinMenu = NULL;
1053     }
1054     DestroyMenu(PopupBase);
1055     DestroyMenu(PopupMenu);
1056     PopupMenu = 0;
1057     return;
1058     }
1059    
1060     if (AfterDblClk && (LMR==IdLeftButton) &&
1061     (abs(p.x-DblClkX)<=GetSystemMetrics(SM_CXDOUBLECLK)) &&
1062     (abs(p.y-DblClkY)<=GetSystemMetrics(SM_CYDOUBLECLK))) {
1063     /* triple click */
1064     ::KillTimer(HVTWin, IdDblClkTimer);
1065     AfterDblClk = FALSE;
1066     BuffTplClk(p.y);
1067     LButton = TRUE;
1068     TplClk = TRUE;
1069     /* for AutoScrolling */
1070     ::SetCapture(HVTWin);
1071     ::SetTimer(HVTWin, IdScrollTimer, 100, NULL);
1072     }
1073     else {
1074     if (! (LButton || MButton || RButton)) {
1075     BOOL box = FALSE;
1076    
1077     // select several pages of output from Tera Term window (2005.5.15 yutaka)
1078     if (LMR == IdLeftButton && ShiftKey()) {
1079     BuffSeveralPagesSelect(p.x, p.y);
1080    
1081     } else {
1082     // Select rectangular block with Alt Key. Delete Shift key.(2005.5.15 yutaka)
1083     if (LMR == IdLeftButton && AltKey()) {
1084     box = TRUE;
1085     }
1086    
1087     // Starting the selection only by a left button.(2007.11.20 maya)
1088     if (!ts.SelectOnlyByLButton ||
1089     (ts.SelectOnlyByLButton && LMR == IdLeftButton) ) {
1090     BuffStartSelect(p.x,p.y, box);
1091     TplClk = FALSE;
1092    
1093     /* for AutoScrolling */
1094     ::SetCapture(HVTWin);
1095     ::SetTimer(HVTWin, IdScrollTimer, 100, NULL);
1096     }
1097     }
1098     }
1099    
1100     switch (LMR) {
1101     case IdRightButton:
1102     RButton = TRUE;
1103     break;
1104     case IdMiddleButton:
1105     MButton = TRUE;
1106     break;
1107     case IdLeftButton:
1108     LButton = TRUE;
1109     break;
1110     }
1111     }
1112     }
1113    
1114     // LogMeIn.exe -> LogMeTT.exe �����l�[�� (2005.2.21 yutaka)
1115     static char LogMeTTMenuString[] = "Log&MeTT";
1116 yutakapon 3648 static char LogMeTT[MAX_PATH];
1117    
1118 maya 3227 static BOOL isLogMeTTExist()
1119     {
1120 yutakapon 3648 const char *LogMeTTexename = "LogMeTT.exe";
1121     LONG result;
1122     HKEY key;
1123     int inregist = 0;
1124     DWORD dwSize;
1125     DWORD dwType;
1126     DWORD dwDisposition;
1127     char *path;
1128 maya 3227
1129 yutakapon 3648 /* LogMeTT 2.9.6���������W�X�g�����C���X�g�[���p�X�����������B*/
1130     result = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\LogMeTT", 0, NULL,
1131     REG_OPTION_NON_VOLATILE, KEY_READ, NULL, &key, &dwDisposition);
1132     if (result == ERROR_SUCCESS) {
1133     result = RegQueryValueEx(key, "InstallPath", NULL, &dwType, NULL, &dwSize);
1134     if (result == ERROR_SUCCESS) {
1135     path = (char *)malloc(dwSize);
1136     if (path != NULL) {
1137     result = RegQueryValueEx(key, "InstallPath", NULL, &dwType, (LPBYTE)path, &dwSize);
1138     if (result == ERROR_SUCCESS) {
1139     inregist = 1;
1140     strncpy_s(LogMeTT, sizeof(LogMeTT), path, _TRUNCATE);
1141     }
1142     free(path);
1143     }
1144     }
1145 yutakapon 3649 RegCloseKey(key);
1146 yutakapon 3648 }
1147    
1148     if (inregist == 0) {
1149     strncpy_s(LogMeTT, sizeof(LogMeTT), ts.HomeDir, _TRUNCATE);
1150     AppendSlash(LogMeTT, sizeof(LogMeTT));
1151     strncat_s(LogMeTT, sizeof(LogMeTT), LogMeTTexename, _TRUNCATE);
1152     }
1153    
1154 maya 3227 if (_access(LogMeTT, 0) == -1) {
1155     return FALSE;
1156     }
1157     return TRUE;
1158     }
1159    
1160     void CVTWindow::InitMenu(HMENU *Menu)
1161     {
1162     *Menu = LoadMenu(AfxGetInstanceHandle(),
1163     MAKEINTRESOURCE(IDR_MENU));
1164     char uimsg[MAX_UIMSG];
1165     int ret;
1166    
1167     FileMenu = GetSubMenu(*Menu,ID_FILE);
1168     TransMenu = GetSubMenu(FileMenu,ID_TRANSFER);
1169     EditMenu = GetSubMenu(*Menu,ID_EDIT);
1170     SetupMenu = GetSubMenu(*Menu,ID_SETUP);
1171     ControlMenu = GetSubMenu(*Menu,ID_CONTROL);
1172     HelpMenu = GetSubMenu(*Menu,ID_HELPMENU);
1173    
1174     /* LogMeTT ���������m�F�������j���[���������� */
1175     if (isLogMeTTExist()) {
1176     ::InsertMenu(FileMenu, ID_FILE_PRINT2, MF_STRING | MF_ENABLED | MF_BYCOMMAND,
1177     ID_FILE_LOGMEIN, LogMeTTMenuString);
1178     ::InsertMenu(FileMenu, ID_FILE_PRINT2, MF_SEPARATOR, NULL, NULL);
1179     }
1180    
1181     GetMenuString(*Menu, ID_FILE, uimsg, sizeof(uimsg), MF_BYPOSITION);
1182     get_lang_msg("MENU_FILE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1183     ModifyMenu(*Menu, ID_FILE, MF_BYPOSITION, ID_FILE, ts.UIMsg);
1184     GetMenuString(FileMenu, ID_FILE_NEWCONNECTION, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1185     get_lang_msg("MENU_FILE_NEW", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1186     ModifyMenu(FileMenu, ID_FILE_NEWCONNECTION, MF_BYCOMMAND, ID_FILE_NEWCONNECTION, ts.UIMsg);
1187     GetMenuString(FileMenu, ID_FILE_DUPLICATESESSION, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1188     get_lang_msg("MENU_FILE_DUPLICATE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1189     ModifyMenu(FileMenu, ID_FILE_DUPLICATESESSION, MF_BYCOMMAND, ID_FILE_DUPLICATESESSION, ts.UIMsg);
1190     GetMenuString(FileMenu, ID_FILE_CYGWINCONNECTION, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1191     get_lang_msg("MENU_FILE_GYGWIN", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1192     ModifyMenu(FileMenu, ID_FILE_CYGWINCONNECTION, MF_BYCOMMAND, ID_FILE_CYGWINCONNECTION, ts.UIMsg);
1193     GetMenuString(FileMenu, ID_FILE_LOG, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1194     get_lang_msg("MENU_FILE_LOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1195     ModifyMenu(FileMenu, ID_FILE_LOG, MF_BYCOMMAND, ID_FILE_LOG, ts.UIMsg);
1196     GetMenuString(FileMenu, ID_FILE_COMMENTTOLOG, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1197     get_lang_msg("MENU_FILE_COMMENTLOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1198     ModifyMenu(FileMenu, ID_FILE_COMMENTTOLOG, MF_BYCOMMAND, ID_FILE_COMMENTTOLOG, ts.UIMsg);
1199     GetMenuString(FileMenu, ID_FILE_VIEWLOG, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1200     get_lang_msg("MENU_FILE_VIEWLOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1201     ModifyMenu(FileMenu, ID_FILE_VIEWLOG, MF_BYCOMMAND, ID_FILE_VIEWLOG, ts.UIMsg);
1202     GetMenuString(FileMenu, ID_FILE_SHOWLOGDIALOG, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1203     get_lang_msg("MENU_FILE_SHOWLOGDIALOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1204     ModifyMenu(FileMenu, ID_FILE_SHOWLOGDIALOG, MF_BYCOMMAND, ID_FILE_SHOWLOGDIALOG, ts.UIMsg);
1205     GetMenuString(FileMenu, ID_FILE_SENDFILE, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1206     get_lang_msg("MENU_FILE_SENDFILE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1207     ModifyMenu(FileMenu, ID_FILE_SENDFILE, MF_BYCOMMAND, ID_FILE_SENDFILE, ts.UIMsg);
1208     GetMenuString(FileMenu, ID_FILE_REPLAYLOG, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1209     get_lang_msg("MENU_FILE_REPLAYLOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1210     ModifyMenu(FileMenu, ID_FILE_REPLAYLOG, MF_BYCOMMAND, ID_FILE_REPLAYLOG, ts.UIMsg);
1211     GetMenuString(FileMenu, ID_FILE_CHANGEDIR, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1212     get_lang_msg("MENU_FILE_CHANGEDIR", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1213     ModifyMenu(FileMenu, ID_FILE_CHANGEDIR, MF_BYCOMMAND, ID_FILE_CHANGEDIR, ts.UIMsg);
1214     ret = GetMenuString(FileMenu, ID_FILE_LOGMEIN, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1215     if (ret != 0) {
1216     get_lang_msg("MENU_FILE_LOGMETT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1217     ModifyMenu(FileMenu, ID_FILE_LOGMEIN, MF_BYCOMMAND, ID_FILE_LOGMEIN, ts.UIMsg);
1218     }
1219     GetMenuString(FileMenu, ID_FILE_PRINT2, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1220     get_lang_msg("MENU_FILE_PRINT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1221     ModifyMenu(FileMenu, ID_FILE_PRINT2, MF_BYCOMMAND, ID_FILE_PRINT2, ts.UIMsg);
1222     GetMenuString(FileMenu, ID_FILE_DISCONNECT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1223     get_lang_msg("MENU_FILE_DISCONNECT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1224     ModifyMenu(FileMenu, ID_FILE_DISCONNECT, MF_BYCOMMAND, ID_FILE_DISCONNECT, ts.UIMsg);
1225     GetMenuString(FileMenu, ID_FILE_EXIT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1226     get_lang_msg("MENU_FILE_EXIT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1227     ModifyMenu(FileMenu, ID_FILE_EXIT, MF_BYCOMMAND, ID_FILE_EXIT, ts.UIMsg);
1228 yutakapon 5235 GetMenuString(FileMenu, ID_FILE_EXITALL, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1229     get_lang_msg("MENU_FILE_EXITALL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1230     ModifyMenu(FileMenu, ID_FILE_EXITALL, MF_BYCOMMAND, ID_FILE_EXITALL, ts.UIMsg);
1231 maya 3227
1232     GetMenuString(FileMenu, 9, uimsg, sizeof(uimsg), MF_BYPOSITION);
1233     get_lang_msg("MENU_TRANS", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1234     ModifyMenu(FileMenu, 9, MF_BYPOSITION, 9, ts.UIMsg);
1235    
1236     GetMenuString(FileMenu, ID_FILE_KERMITRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1237     get_lang_msg("MENU_TRANS_KERMIT_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1238     ModifyMenu(FileMenu, ID_FILE_KERMITRCV, MF_BYCOMMAND, ID_FILE_KERMITRCV, ts.UIMsg);
1239     GetMenuString(FileMenu, ID_FILE_KERMITGET, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1240     get_lang_msg("MENU_TRANS_KERMIT_GET", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1241     ModifyMenu(FileMenu, ID_FILE_KERMITGET, MF_BYCOMMAND, ID_FILE_KERMITGET, ts.UIMsg);
1242     GetMenuString(FileMenu, ID_FILE_KERMITSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1243     get_lang_msg("MENU_TRANS_KERMIT_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1244     ModifyMenu(FileMenu, ID_FILE_KERMITSEND, MF_BYCOMMAND, ID_FILE_KERMITSEND, ts.UIMsg);
1245     GetMenuString(FileMenu, ID_FILE_KERMITFINISH, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1246     get_lang_msg("MENU_TRANS_KERMIT_FINISH", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1247     ModifyMenu(FileMenu, ID_FILE_KERMITFINISH, MF_BYCOMMAND, ID_FILE_KERMITFINISH, ts.UIMsg);
1248    
1249     GetMenuString(FileMenu, ID_FILE_XRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1250     get_lang_msg("MENU_TRANS_X_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1251     ModifyMenu(FileMenu, ID_FILE_XRCV, MF_BYCOMMAND, ID_FILE_XRCV, ts.UIMsg);
1252     GetMenuString(FileMenu, ID_FILE_XSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1253     get_lang_msg("MENU_TRANS_X_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1254     ModifyMenu(FileMenu, ID_FILE_XSEND, MF_BYCOMMAND, ID_FILE_XSEND, ts.UIMsg);
1255    
1256 maya 3911 GetMenuString(FileMenu, ID_FILE_YRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1257     get_lang_msg("MENU_TRANS_Y_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1258     ModifyMenu(FileMenu, ID_FILE_YRCV, MF_BYCOMMAND, ID_FILE_YRCV, ts.UIMsg);
1259     GetMenuString(FileMenu, ID_FILE_YSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1260     get_lang_msg("MENU_TRANS_Y_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1261     ModifyMenu(FileMenu, ID_FILE_YSEND, MF_BYCOMMAND, ID_FILE_YSEND, ts.UIMsg);
1262 maya 3227
1263     GetMenuString(FileMenu, ID_FILE_ZRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1264     get_lang_msg("MENU_TRANS_Z_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1265     ModifyMenu(FileMenu, ID_FILE_ZRCV, MF_BYCOMMAND, ID_FILE_ZRCV, ts.UIMsg);
1266     GetMenuString(FileMenu, ID_FILE_ZSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1267     get_lang_msg("MENU_TRANS_Z_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1268     ModifyMenu(FileMenu, ID_FILE_ZSEND, MF_BYCOMMAND, ID_FILE_ZSEND, ts.UIMsg);
1269    
1270     GetMenuString(FileMenu, ID_FILE_BPRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1271     get_lang_msg("MENU_TRANS_BP_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1272     ModifyMenu(FileMenu, ID_FILE_BPRCV, MF_BYCOMMAND, ID_FILE_BPRCV, ts.UIMsg);
1273     GetMenuString(FileMenu, ID_FILE_BPSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1274     get_lang_msg("MENU_TRANS_BP_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1275     ModifyMenu(FileMenu, ID_FILE_BPSEND, MF_BYCOMMAND, ID_FILE_BPSEND, ts.UIMsg);
1276    
1277     GetMenuString(FileMenu, ID_FILE_QVRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1278     get_lang_msg("MENU_TRANS_QV_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1279     ModifyMenu(FileMenu, ID_FILE_QVRCV, MF_BYCOMMAND, ID_FILE_QVRCV, ts.UIMsg);
1280     GetMenuString(FileMenu, ID_FILE_QVSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1281     get_lang_msg("MENU_TRANS_QV_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1282     ModifyMenu(FileMenu, ID_FILE_QVSEND, MF_BYCOMMAND, ID_FILE_QVSEND, ts.UIMsg);
1283    
1284     GetMenuString(*Menu, ID_EDIT, uimsg, sizeof(uimsg), MF_BYPOSITION);
1285     get_lang_msg("MENU_EDIT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1286     ModifyMenu(*Menu, ID_EDIT, MF_BYPOSITION, ID_EDIT, ts.UIMsg);
1287     GetMenuString(EditMenu, ID_EDIT_COPY2, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1288     get_lang_msg("MENU_EDIT_COPY", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1289     ModifyMenu(EditMenu, ID_EDIT_COPY2, MF_BYCOMMAND, ID_EDIT_COPY2, ts.UIMsg);
1290     GetMenuString(EditMenu, ID_EDIT_COPYTABLE, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1291     get_lang_msg("MENU_EDIT_COPYTABLE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1292     ModifyMenu(EditMenu, ID_EDIT_COPYTABLE, MF_BYCOMMAND, ID_EDIT_COPYTABLE, ts.UIMsg);
1293     GetMenuString(EditMenu, ID_EDIT_PASTE2, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1294     get_lang_msg("MENU_EDIT_PASTE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1295     ModifyMenu(EditMenu, ID_EDIT_PASTE2, MF_BYCOMMAND, ID_EDIT_PASTE2, ts.UIMsg);
1296     GetMenuString(EditMenu, ID_EDIT_PASTECR, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1297     get_lang_msg("MENU_EDIT_PASTECR", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1298     ModifyMenu(EditMenu, ID_EDIT_PASTECR, MF_BYCOMMAND, ID_EDIT_PASTECR, ts.UIMsg);
1299     GetMenuString(EditMenu, ID_EDIT_CLEARSCREEN, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1300     get_lang_msg("MENU_EDIT_CLSCREEN", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1301     ModifyMenu(EditMenu, ID_EDIT_CLEARSCREEN, MF_BYCOMMAND, ID_EDIT_CLEARSCREEN, ts.UIMsg);
1302     GetMenuString(EditMenu, ID_EDIT_CLEARBUFFER, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1303     get_lang_msg("MENU_EDIT_CLBUFFER", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1304     ModifyMenu(EditMenu, ID_EDIT_CLEARBUFFER, MF_BYCOMMAND, ID_EDIT_CLEARBUFFER, ts.UIMsg);
1305     GetMenuString(EditMenu, ID_EDIT_CANCELSELECT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1306     get_lang_msg("MENU_EDIT_CANCELSELECT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1307     ModifyMenu(EditMenu, ID_EDIT_CANCELSELECT, MF_BYCOMMAND, ID_EDIT_CANCELSELECT, ts.UIMsg);
1308     GetMenuString(EditMenu, ID_EDIT_SELECTSCREEN, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1309     get_lang_msg("MENU_EDIT_SELECTSCREEN", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1310     ModifyMenu(EditMenu, ID_EDIT_SELECTSCREEN, MF_BYCOMMAND, ID_EDIT_SELECTSCREEN, ts.UIMsg);
1311     GetMenuString(EditMenu, ID_EDIT_SELECTALL, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1312     get_lang_msg("MENU_EDIT_SELECTALL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1313     ModifyMenu(EditMenu, ID_EDIT_SELECTALL, MF_BYCOMMAND, ID_EDIT_SELECTALL, ts.UIMsg);
1314    
1315     GetMenuString(*Menu, ID_SETUP, uimsg, sizeof(uimsg), MF_BYPOSITION);
1316     get_lang_msg("MENU_SETUP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1317     ModifyMenu(*Menu, ID_SETUP, MF_BYPOSITION, ID_SETUP, ts.UIMsg);
1318     GetMenuString(SetupMenu, ID_SETUP_TERMINAL, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1319     get_lang_msg("MENU_SETUP_TERMINAL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1320     ModifyMenu(SetupMenu, ID_SETUP_TERMINAL, MF_BYCOMMAND, ID_SETUP_TERMINAL, ts.UIMsg);
1321     GetMenuString(SetupMenu, ID_SETUP_WINDOW, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1322     get_lang_msg("MENU_SETUP_WINDOW", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1323     ModifyMenu(SetupMenu, ID_SETUP_WINDOW, MF_BYCOMMAND, ID_SETUP_WINDOW, ts.UIMsg);
1324     GetMenuString(SetupMenu, ID_SETUP_FONT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1325     get_lang_msg("MENU_SETUP_FONT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1326     ModifyMenu(SetupMenu, ID_SETUP_FONT, MF_BYCOMMAND, ID_SETUP_FONT, ts.UIMsg);
1327     GetMenuString(SetupMenu, ID_SETUP_KEYBOARD, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1328     get_lang_msg("MENU_SETUP_KEYBOARD", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1329     ModifyMenu(SetupMenu, ID_SETUP_KEYBOARD, MF_BYCOMMAND, ID_SETUP_KEYBOARD, ts.UIMsg);
1330     GetMenuString(SetupMenu, ID_SETUP_SERIALPORT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1331     get_lang_msg("MENU_SETUP_SERIALPORT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1332     ModifyMenu(SetupMenu, ID_SETUP_SERIALPORT, MF_BYCOMMAND, ID_SETUP_SERIALPORT, ts.UIMsg);
1333     GetMenuString(SetupMenu, ID_SETUP_TCPIP, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1334     get_lang_msg("MENU_SETUP_TCPIP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1335     ModifyMenu(SetupMenu, ID_SETUP_TCPIP, MF_BYCOMMAND, ID_SETUP_TCPIP, ts.UIMsg);
1336     GetMenuString(SetupMenu, ID_SETUP_GENERAL, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1337     get_lang_msg("MENU_SETUP_GENERAL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1338     ModifyMenu(SetupMenu, ID_SETUP_GENERAL, MF_BYCOMMAND, ID_SETUP_GENERAL, ts.UIMsg);
1339     GetMenuString(SetupMenu, ID_SETUP_ADDITIONALSETTINGS, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1340     get_lang_msg("MENU_SETUP_ADDITION", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1341     ModifyMenu(SetupMenu, ID_SETUP_ADDITIONALSETTINGS, MF_BYCOMMAND, ID_SETUP_ADDITIONALSETTINGS, ts.UIMsg);
1342     GetMenuString(SetupMenu, ID_SETUP_SAVE, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1343     get_lang_msg("MENU_SETUP_SAVE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1344     ModifyMenu(SetupMenu, ID_SETUP_SAVE, MF_BYCOMMAND, ID_SETUP_SAVE, ts.UIMsg);
1345     GetMenuString(SetupMenu, ID_SETUP_RESTORE, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1346     get_lang_msg("MENU_SETUP_RESTORE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1347     ModifyMenu(SetupMenu, ID_SETUP_RESTORE, MF_BYCOMMAND, ID_SETUP_RESTORE, ts.UIMsg);
1348 yutakapon 5809 GetMenuString(SetupMenu, ID_OPEN_SETUP, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1349 doda 6660 get_lang_msg("MENU_SETUP_OPENSETUP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1350 yutakapon 5809 ModifyMenu(SetupMenu, ID_OPEN_SETUP, MF_BYCOMMAND, ID_OPEN_SETUP, ts.UIMsg);
1351 maya 3227 GetMenuString(SetupMenu, ID_SETUP_LOADKEYMAP, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1352     get_lang_msg("MENU_SETUP_LOADKEYMAP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1353     ModifyMenu(SetupMenu, ID_SETUP_LOADKEYMAP, MF_BYCOMMAND, ID_SETUP_LOADKEYMAP, ts.UIMsg);
1354    
1355     GetMenuString(*Menu, ID_CONTROL, uimsg, sizeof(uimsg), MF_BYPOSITION);
1356     get_lang_msg("MENU_CONTROL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1357     ModifyMenu(*Menu, ID_CONTROL, MF_BYPOSITION, ID_CONTROL, ts.UIMsg);
1358     GetMenuString(ControlMenu, ID_CONTROL_RESETTERMINAL, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1359     get_lang_msg("MENU_CONTROL_RESET", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1360     ModifyMenu(ControlMenu, ID_CONTROL_RESETTERMINAL, MF_BYCOMMAND, ID_CONTROL_RESETTERMINAL, ts.UIMsg);
1361     GetMenuString(ControlMenu, ID_CONTROL_RESETREMOTETITLE, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1362     get_lang_msg("MENU_CONTROL_RESETTITLE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1363     ModifyMenu(ControlMenu, ID_CONTROL_RESETREMOTETITLE, MF_BYCOMMAND, ID_CONTROL_RESETREMOTETITLE, ts.UIMsg);
1364     GetMenuString(ControlMenu, ID_CONTROL_AREYOUTHERE, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1365     get_lang_msg("MENU_CONTROL_AREYOUTHERE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1366     ModifyMenu(ControlMenu, ID_CONTROL_AREYOUTHERE, MF_BYCOMMAND, ID_CONTROL_AREYOUTHERE, ts.UIMsg);
1367     GetMenuString(ControlMenu, ID_CONTROL_SENDBREAK, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1368     get_lang_msg("MENU_CONTROL_SENDBREAK", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1369     ModifyMenu(ControlMenu, ID_CONTROL_SENDBREAK, MF_BYCOMMAND, ID_CONTROL_SENDBREAK, ts.UIMsg);
1370     GetMenuString(ControlMenu, ID_CONTROL_RESETPORT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1371     get_lang_msg("MENU_CONTROL_RESETPORT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1372     ModifyMenu(ControlMenu, ID_CONTROL_RESETPORT, MF_BYCOMMAND, ID_CONTROL_RESETPORT, ts.UIMsg);
1373     GetMenuString(ControlMenu, ID_CONTROL_BROADCASTCOMMAND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1374     get_lang_msg("MENU_CONTROL_BROADCAST", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1375     ModifyMenu(ControlMenu, ID_CONTROL_BROADCASTCOMMAND, MF_BYCOMMAND, ID_CONTROL_BROADCASTCOMMAND, ts.UIMsg);
1376     GetMenuString(ControlMenu, ID_CONTROL_OPENTEK, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1377     get_lang_msg("MENU_CONTROL_OPENTEK", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1378     ModifyMenu(ControlMenu, ID_CONTROL_OPENTEK, MF_BYCOMMAND, ID_CONTROL_OPENTEK, ts.UIMsg);
1379     GetMenuString(ControlMenu, ID_CONTROL_CLOSETEK, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1380     get_lang_msg("MENU_CONTROL_CLOSETEK", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1381     ModifyMenu(ControlMenu, ID_CONTROL_CLOSETEK, MF_BYCOMMAND, ID_CONTROL_CLOSETEK, ts.UIMsg);
1382 yutakapon 3839
1383 maya 3227 GetMenuString(ControlMenu, ID_CONTROL_MACRO, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1384     get_lang_msg("MENU_CONTROL_MACRO", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1385     ModifyMenu(ControlMenu, ID_CONTROL_MACRO, MF_BYCOMMAND, ID_CONTROL_MACRO, ts.UIMsg);
1386 maya 3842 GetMenuString(ControlMenu, ID_CONTROL_SHOW_MACRO, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1387     get_lang_msg("MENU_CONTROL_SHOW_MACRO", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1388     ModifyMenu(ControlMenu, ID_CONTROL_SHOW_MACRO, MF_BYCOMMAND, ID_CONTROL_SHOW_MACRO, ts.UIMsg);
1389 maya 3227
1390     GetMenuString(*Menu, ID_HELPMENU, uimsg, sizeof(uimsg), MF_BYPOSITION);
1391     get_lang_msg("MENU_HELP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1392     ModifyMenu(*Menu, ID_HELPMENU, MF_BYPOSITION, ID_HELPMENU, ts.UIMsg);
1393     GetMenuString(HelpMenu, ID_HELP_INDEX2, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1394     get_lang_msg("MENU_HELP_INDEX", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1395     ModifyMenu(HelpMenu, ID_HELP_INDEX2, MF_BYCOMMAND, ID_HELP_INDEX2, ts.UIMsg);
1396     GetMenuString(HelpMenu, ID_HELP_ABOUT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1397     get_lang_msg("MENU_HELP_ABOUT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1398     ModifyMenu(HelpMenu, ID_HELP_ABOUT, MF_BYCOMMAND, ID_HELP_ABOUT, ts.UIMsg);
1399    
1400     if ((ts.MenuFlag & MF_SHOWWINMENU) !=0) {
1401     WinMenu = CreatePopupMenu();
1402     get_lang_msg("MENU_WINDOW", ts.UIMsg, sizeof(ts.UIMsg),
1403     "&Window", ts.UILanguageFile);
1404     ::InsertMenu(*Menu,ID_HELPMENU,
1405     MF_STRING | MF_ENABLED | MF_POPUP | MF_BYPOSITION,
1406     (int)WinMenu, ts.UIMsg);
1407     }
1408    
1409     TTXModifyMenu(*Menu); /* TTPLUG */
1410     }
1411    
1412     void CVTWindow::InitMenuPopup(HMENU SubMenu)
1413     {
1414     if ( SubMenu == FileMenu )
1415     {
1416 maya 3966 if (ts.DisableMenuNewConnection) {
1417     if ( Connecting || cv.Open ) {
1418 maya 3965 EnableMenuItem(FileMenu,ID_FILE_NEWCONNECTION,MF_BYCOMMAND | MF_GRAYED);
1419     }
1420     else {
1421     EnableMenuItem(FileMenu,ID_FILE_NEWCONNECTION,MF_BYCOMMAND | MF_ENABLED);
1422     }
1423 maya 3227 }
1424 maya 3966 else {
1425     if ( Connecting ) {
1426     EnableMenuItem(FileMenu,ID_FILE_NEWCONNECTION,MF_BYCOMMAND | MF_GRAYED);
1427     }
1428     else {
1429     EnableMenuItem(FileMenu,ID_FILE_NEWCONNECTION,MF_BYCOMMAND | MF_ENABLED);
1430     }
1431     }
1432 maya 3227
1433     if ( (! cv.Ready) || (SendVar!=NULL) ||
1434     (FileVar!=NULL) || (cv.PortType==IdFile) ) {
1435     EnableMenuItem(FileMenu,ID_FILE_SENDFILE,MF_BYCOMMAND | MF_GRAYED);
1436     EnableMenuItem(FileMenu,ID_TRANSFER,MF_BYPOSITION | MF_GRAYED); /* Transfer */
1437     EnableMenuItem(FileMenu,ID_FILE_CHANGEDIR,MF_BYCOMMAND | MF_GRAYED);
1438     EnableMenuItem(FileMenu,ID_FILE_DISCONNECT,MF_BYCOMMAND | MF_GRAYED);
1439     EnableMenuItem(FileMenu,ID_FILE_DUPLICATESESSION,MF_BYCOMMAND | MF_GRAYED);
1440     }
1441     else {
1442     EnableMenuItem(FileMenu,ID_FILE_SENDFILE,MF_BYCOMMAND | MF_ENABLED);
1443     EnableMenuItem(FileMenu,ID_TRANSFER,MF_BYPOSITION | MF_ENABLED); /* Transfer */
1444     EnableMenuItem(FileMenu,ID_FILE_CHANGEDIR,MF_BYCOMMAND | MF_ENABLED);
1445     EnableMenuItem(FileMenu,ID_FILE_DISCONNECT,MF_BYCOMMAND | MF_ENABLED);
1446 maya 3964 if (ts.DisableMenuDuplicateSession) {
1447     EnableMenuItem(FileMenu,ID_FILE_DUPLICATESESSION,MF_BYCOMMAND | MF_GRAYED);
1448     }
1449     else {
1450     EnableMenuItem(FileMenu,ID_FILE_DUPLICATESESSION,MF_BYCOMMAND | MF_ENABLED);
1451     }
1452 maya 3227 }
1453    
1454     // �V�K���j���[������ (2004.12.5 yutaka)
1455     EnableMenuItem(FileMenu,ID_FILE_CYGWINCONNECTION,MF_BYCOMMAND | MF_ENABLED);
1456     EnableMenuItem(FileMenu,ID_FILE_TERATERMMENU,MF_BYCOMMAND | MF_ENABLED);
1457     EnableMenuItem(FileMenu,ID_FILE_LOGMEIN,MF_BYCOMMAND | MF_ENABLED);
1458    
1459     // XXX: �������u�����������Alog���O���C�����������B (2005.2.1 yutaka)
1460     if (LogVar!=NULL) { // ���O�������[�h������
1461     EnableMenuItem(FileMenu,ID_FILE_LOG,MF_BYCOMMAND | MF_GRAYED);
1462     EnableMenuItem(FileMenu,ID_FILE_COMMENTTOLOG, MF_BYCOMMAND | MF_ENABLED);
1463     EnableMenuItem(FileMenu,ID_FILE_VIEWLOG, MF_BYCOMMAND | MF_ENABLED);
1464 maya 3709 EnableMenuItem(FileMenu,ID_FILE_SHOWLOGDIALOG, MF_BYCOMMAND | MF_ENABLED);
1465 maya 3227 } else {
1466     EnableMenuItem(FileMenu,ID_FILE_LOG,MF_BYCOMMAND | MF_ENABLED);
1467     EnableMenuItem(FileMenu,ID_FILE_COMMENTTOLOG, MF_BYCOMMAND | MF_GRAYED);
1468     EnableMenuItem(FileMenu,ID_FILE_VIEWLOG, MF_BYCOMMAND | MF_GRAYED);
1469     EnableMenuItem(FileMenu,ID_FILE_SHOWLOGDIALOG, MF_BYCOMMAND | MF_GRAYED);
1470     }
1471    
1472     }
1473     else if ( SubMenu == TransMenu )
1474     {
1475     if ((cv.PortType==IdSerial) &&
1476     ((ts.DataBit==IdDataBit7) || (ts.Flow==IdFlowX))) {
1477     EnableMenuItem(TransMenu,1,MF_BYPOSITION | MF_GRAYED); /* XMODEM */
1478     EnableMenuItem(TransMenu,4,MF_BYPOSITION | MF_GRAYED); /* Quick-VAN */
1479     }
1480     else {
1481     EnableMenuItem(TransMenu,1,MF_BYPOSITION | MF_ENABLED); /* XMODEM */
1482     EnableMenuItem(TransMenu,4,MF_BYPOSITION | MF_ENABLED); /* Quick-VAN */
1483     }
1484     if ((cv.PortType==IdSerial) &&
1485     (ts.DataBit==IdDataBit7)) {
1486     EnableMenuItem(TransMenu,2,MF_BYPOSITION | MF_GRAYED); /* ZMODEM */
1487     EnableMenuItem(TransMenu,3,MF_BYPOSITION | MF_GRAYED); /* B-Plus */
1488     }
1489     else {
1490     EnableMenuItem(TransMenu,2,MF_BYPOSITION | MF_ENABLED); /* ZMODEM */
1491     EnableMenuItem(TransMenu,3,MF_BYPOSITION | MF_ENABLED); /* B-Plus */
1492     }
1493     }
1494     else if (SubMenu == EditMenu)
1495     {
1496     if (Selected) {
1497     EnableMenuItem(EditMenu,ID_EDIT_COPY2,MF_BYCOMMAND | MF_ENABLED);
1498     EnableMenuItem(EditMenu,ID_EDIT_COPYTABLE,MF_BYCOMMAND | MF_ENABLED);
1499     }
1500     else {
1501     EnableMenuItem(EditMenu,ID_EDIT_COPY2,MF_BYCOMMAND | MF_GRAYED);
1502     EnableMenuItem(EditMenu,ID_EDIT_COPYTABLE,MF_BYCOMMAND | MF_GRAYED);
1503     }
1504     if (cv.Ready &&
1505     (SendVar==NULL) && (FileVar==NULL) &&
1506     (cv.PortType!=IdFile) &&
1507     (IsClipboardFormatAvailable(CF_TEXT) ||
1508     IsClipboardFormatAvailable(CF_OEMTEXT))) {
1509     EnableMenuItem(EditMenu,ID_EDIT_PASTE2,MF_BYCOMMAND | MF_ENABLED);
1510     EnableMenuItem(EditMenu,ID_EDIT_PASTECR,MF_BYCOMMAND | MF_ENABLED);
1511     }
1512     else {
1513     EnableMenuItem(EditMenu,ID_EDIT_PASTE2,MF_BYCOMMAND | MF_GRAYED);
1514     EnableMenuItem(EditMenu,ID_EDIT_PASTECR,MF_BYCOMMAND | MF_GRAYED);
1515     }
1516     }
1517     else if (SubMenu == SetupMenu)
1518     if (cv.Ready &&
1519     ((cv.PortType==IdTCPIP) || (cv.PortType==IdFile)) ||
1520 maya 3392 (SendVar!=NULL) || (FileVar!=NULL) || Connecting) {
1521 maya 3227 EnableMenuItem(SetupMenu,ID_SETUP_SERIALPORT,MF_BYCOMMAND | MF_GRAYED);
1522 maya 3392 }
1523     else {
1524 maya 3227 EnableMenuItem(SetupMenu,ID_SETUP_SERIALPORT,MF_BYCOMMAND | MF_ENABLED);
1525 maya 3392 }
1526 maya 3227
1527     else if (SubMenu == ControlMenu)
1528     {
1529     if (cv.Ready &&
1530     (SendVar==NULL) && (FileVar==NULL)) {
1531 maya 3283 if (ts.DisableMenuSendBreak) {
1532 maya 3279 EnableMenuItem(ControlMenu,ID_CONTROL_SENDBREAK,MF_BYCOMMAND | MF_GRAYED);
1533     }
1534     else {
1535     EnableMenuItem(ControlMenu,ID_CONTROL_SENDBREAK,MF_BYCOMMAND | MF_ENABLED);
1536     }
1537 maya 3392 if (cv.PortType==IdSerial) {
1538 maya 3227 EnableMenuItem(ControlMenu,ID_CONTROL_RESETPORT,MF_BYCOMMAND | MF_ENABLED);
1539 maya 3392 }
1540     else {
1541 maya 3227 EnableMenuItem(ControlMenu,ID_CONTROL_RESETPORT,MF_BYCOMMAND | MF_GRAYED);
1542 maya 3392 }
1543 maya 3227 }
1544     else {
1545     EnableMenuItem(ControlMenu,ID_CONTROL_SENDBREAK,MF_BYCOMMAND | MF_GRAYED);
1546     EnableMenuItem(ControlMenu,ID_CONTROL_RESETPORT,MF_BYCOMMAND | MF_GRAYED);
1547     }
1548    
1549 maya 3392 if (cv.Ready && cv.TelFlag && (FileVar==NULL)) {
1550 maya 3227 EnableMenuItem(ControlMenu,ID_CONTROL_AREYOUTHERE,MF_BYCOMMAND | MF_ENABLED);
1551 maya 3392 }
1552     else {
1553 maya 3227 EnableMenuItem(ControlMenu,ID_CONTROL_AREYOUTHERE,MF_BYCOMMAND | MF_GRAYED);
1554 maya 3392 }
1555 maya 3227
1556 maya 3392 if (HTEKWin==0) {
1557 maya 3227 EnableMenuItem(ControlMenu,ID_CONTROL_CLOSETEK,MF_BYCOMMAND | MF_GRAYED);
1558 maya 3392 }
1559     else {
1560 maya 3227 EnableMenuItem(ControlMenu,ID_CONTROL_CLOSETEK,MF_BYCOMMAND | MF_ENABLED);
1561 maya 3392 }
1562 maya 3227
1563 maya 3392 if ((ConvH!=0) || (FileVar!=NULL)) {
1564 maya 3227 EnableMenuItem(ControlMenu,ID_CONTROL_MACRO,MF_BYCOMMAND | MF_GRAYED);
1565 maya 3842 EnableMenuItem(ControlMenu,ID_CONTROL_SHOW_MACRO,MF_BYCOMMAND | MF_ENABLED);
1566 maya 3392 }
1567     else {
1568 yutakapon 3837 EnableMenuItem(ControlMenu,ID_CONTROL_MACRO,MF_BYCOMMAND | MF_ENABLED);
1569 maya 3842 EnableMenuItem(ControlMenu,ID_CONTROL_SHOW_MACRO,MF_BYCOMMAND | MF_GRAYED);
1570 maya 3392 }
1571 maya 3227
1572     }
1573     else if (SubMenu == WinMenu)
1574     {
1575 yutakapon 5249 SetWinMenu(WinMenu, ts.UIMsg, sizeof(ts.UIMsg), ts.UILanguageFile, 1);
1576 maya 3227 }
1577    
1578     TTXModifyPopupMenu(SubMenu); /* TTPLUG */
1579     }
1580    
1581     // added ConfirmPasteMouseRButton (2007.3.17 maya)
1582     void CVTWindow::InitPasteMenu(HMENU *Menu)
1583     {
1584     char uimsg[MAX_UIMSG];
1585    
1586     *Menu = LoadMenu(AfxGetInstanceHandle(),
1587     MAKEINTRESOURCE(IDR_PASTEMENU));
1588    
1589     GetMenuString(*Menu, ID_EDIT_PASTE2, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1590     get_lang_msg("MENU_EDIT_PASTE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1591     ModifyMenu(*Menu, ID_EDIT_PASTE2, MF_BYCOMMAND, ID_EDIT_PASTE2, ts.UIMsg);
1592     GetMenuString(*Menu, ID_EDIT_PASTECR, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1593     get_lang_msg("MENU_EDIT_PASTECR", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1594     ModifyMenu(*Menu, ID_EDIT_PASTECR, MF_BYCOMMAND, ID_EDIT_PASTECR, ts.UIMsg);
1595     }
1596    
1597     void CVTWindow::ResetSetup()
1598     {
1599     ChangeFont();
1600     BuffChangeWinSize(WinWidth,WinHeight);
1601     ChangeCaret();
1602    
1603     if (cv.Ready) {
1604     ts.PortType = cv.PortType;
1605     if (cv.PortType==IdSerial) {
1606     /* if serial port, change port parameters */
1607     ts.ComPort = cv.ComPort;
1608     CommResetSerial(&ts, &cv, TRUE);
1609     }
1610     }
1611    
1612     /* setup terminal */
1613     SetupTerm();
1614    
1615     /* background and ANSI color */
1616     #ifdef ALPHABLEND_TYPE2
1617     BGInitialize();
1618     BGSetupPrimary(TRUE);
1619     // 2006/03/17 by 337 : Alpha�l���������X
1620     // Layered��������������������������������
1621 yutakapon 6553 //
1622     // AlphaBlend ���������f�����������������B
1623     // (2016.12.24 yutaka)
1624 zmatsuo 7390 SetWindowAlpha(ts.AlphaBlendActive);
1625 maya 3227 #else
1626     DispApplyANSIColor();
1627     #endif
1628     DispSetNearestColors(IdBack, IdFore+8, NULL);
1629    
1630     /* setup window */
1631     ChangeWin();
1632    
1633     /* Language & IME */
1634     ResetIME();
1635    
1636     /* change TEK window */
1637     if (pTEKWin != NULL)
1638     ((CTEKWindow *)pTEKWin)->RestoreSetup();
1639     }
1640    
1641     void CVTWindow::RestoreSetup()
1642     {
1643     char TempDir[MAXPATHLEN];
1644 maya 4031 char TempName[MAX_PATH];
1645 maya 3227
1646 maya 3392 if ( strlen(ts.SetupFName)==0 ) {
1647 maya 3227 return;
1648 maya 3392 }
1649 maya 3227
1650     ExtractFileName(ts.SetupFName,TempName,sizeof(TempName));
1651     ExtractDirName(ts.SetupFName,TempDir);
1652     if (TempDir[0]==0)
1653     strncpy_s(TempDir, sizeof(TempDir),ts.HomeDir, _TRUNCATE);
1654     FitFileName(TempName,sizeof(TempName),".INI");
1655    
1656     strncpy_s(ts.SetupFName, sizeof(ts.SetupFName),TempDir, _TRUNCATE);
1657     AppendSlash(ts.SetupFName,sizeof(ts.SetupFName));
1658 maya 3392 strncat_s(ts.SetupFName,sizeof(ts.SetupFName),TempName,_TRUNCATE);
1659 maya 3227
1660 maya 3392 if (LoadTTSET()) {
1661 maya 3227 (*ReadIniFile)(ts.SetupFName,&ts);
1662 maya 3392 }
1663 maya 3227 FreeTTSET();
1664    
1665     #if 0
1666     ChangeDefaultSet(&ts,NULL);
1667     #endif
1668    
1669     ResetSetup();
1670     }
1671    
1672     /* called by the [Setup] Terminal command */
1673     void CVTWindow::SetupTerm()
1674     {
1675 doda 3407 if (ts.Language==IdJapanese || ts.Language==IdKorean || ts.Language==IdUtf8) {
1676 maya 3227 ResetCharSet();
1677 maya 3393 }
1678 maya 3227 cv.CRSend = ts.CRSend;
1679    
1680     // for russian mode
1681     cv.RussHost = ts.RussHost;
1682     cv.RussClient = ts.RussClient;
1683    
1684 doda 3932 if (cv.Ready) {
1685     if (cv.TelFlag && (ts.TelEcho>0)) {
1686     TelChangeEcho();
1687     }
1688     _free_locale(cv.locale);
1689     cv.locale = _create_locale(LC_ALL, cv.Locale);
1690 maya 3392 }
1691 maya 3227
1692     if ((ts.TerminalWidth!=NumOfColumns) ||
1693     (ts.TerminalHeight!=NumOfLines-StatusLine)) {
1694     LockBuffer();
1695     HideStatusLine();
1696     ChangeTerminalSize(ts.TerminalWidth,
1697     ts.TerminalHeight);
1698     UnlockBuffer();
1699     }
1700     else if ((ts.TermIsWin>0) &&
1701     ((ts.TerminalWidth!=WinWidth) ||
1702 maya 3392 (ts.TerminalHeight!=WinHeight-StatusLine))) {
1703 maya 3227 BuffChangeWinSize(ts.TerminalWidth,ts.TerminalHeight+StatusLine);
1704 maya 3392 }
1705 doda 4246
1706     ChangeTerminalID();
1707 maya 3227 }
1708    
1709     void CVTWindow::Startup()
1710     {
1711     /* auto log */
1712     /* OnCommOpen ���J�n�������������������J�n������ (2007.5.14 maya) */
1713    
1714     if ((TopicName[0]==0) && (ts.MacroFN[0]!=0)) {
1715     // start the macro specified in the command line or setup file
1716     RunMacro(ts.MacroFN,TRUE);
1717     ts.MacroFN[0] = 0;
1718     }
1719     else {// start connection
1720 maya 3392 if (TopicName[0]!=0) {
1721 maya 3227 cv.NoMsg=1; /* suppress error messages */
1722 maya 3392 }
1723 maya 3227 ::PostMessage(HVTWin,WM_USER_COMMSTART,0,0);
1724     }
1725     }
1726    
1727     void CVTWindow::OpenTEK()
1728     {
1729     ActiveWin = IdTEK;
1730     if (HTEKWin==NULL) {
1731     pTEKWin = new CTEKWindow();
1732     }
1733     else {
1734     ::ShowWindow(HTEKWin,SW_SHOWNORMAL);
1735     ::SetFocus(HTEKWin);
1736     }
1737     }
1738    
1739     /////////////////////////////////////////////////////////////////////////////
1740     // CVTWindow message handler
1741    
1742     LRESULT CVTWindow::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
1743     {
1744     LRESULT Result;
1745    
1746     if (message == MsgDlgHelp) {
1747     OnDlgHelp(wParam,lParam);
1748     return 0;
1749     }
1750     else if ((ts.HideTitle>0) &&
1751     (message == WM_NCHITTEST)) {
1752     Result = CFrameWnd::DefWindowProc(message,wParam,lParam);
1753     if ((Result==HTCLIENT) && AltKey())
1754     #ifdef ALPHABLEND_TYPE2
1755     if(ShiftKey())
1756     Result = HTBOTTOMRIGHT;
1757     else
1758     Result = HTCAPTION;
1759     #else
1760     Result = HTCAPTION;
1761     #endif
1762     return Result;
1763     }
1764    
1765     return (CFrameWnd::DefWindowProc(message,wParam,lParam));
1766     }
1767    
1768     BOOL CVTWindow::OnCommand(WPARAM wParam, LPARAM lParam)
1769     {
1770     WORD wID = LOWORD(wParam);
1771     WORD wNotifyCode = HIWORD(wParam);
1772    
1773     if (wNotifyCode==1) {
1774     switch (wID) {
1775     case ID_ACC_SENDBREAK:
1776     // added DisableAcceleratorSendBreak (2007.3.17 maya)
1777     if (!ts.DisableAcceleratorSendBreak)
1778     OnControlSendBreak();
1779     return TRUE;
1780     case ID_ACC_AREYOUTHERE:
1781     OnControlAreYouThere();
1782     return TRUE;
1783     }
1784     if (ActiveWin==IdVT) {
1785     switch (wID) {
1786     case ID_ACC_NEWCONNECTION:
1787 maya 5684 if (ts.AcceleratorNewConnection)
1788     OnFileNewConnection();
1789 maya 3227 return TRUE;
1790 maya 5691 case ID_ACC_DUPLICATESESSION:
1791     // added DisableAcceleratorDuplicateSession (2009.4.6 maya)
1792     if (!ts.DisableAcceleratorDuplicateSession)
1793     OnDuplicateSession();
1794     return TRUE;
1795 maya 5684 case ID_ACC_CYGWINCONNECTION:
1796     if (ts.AcceleratorCygwinConnection)
1797     OnCygwinConnection();
1798     return TRUE;
1799 maya 5691 case ID_ACC_DISCONNECT:
1800     Disconnect(TRUE);
1801     return TRUE;
1802 maya 3227 case ID_ACC_COPY:
1803     OnEditCopy();
1804     return TRUE;
1805 doda 6459 case ID_ACC_PASTECR:
1806     OnEditPasteCR();
1807     return TRUE;
1808     case ID_ACC_PASTE:
1809     OnEditPaste();
1810     return TRUE;
1811 maya 3227 case ID_ACC_PRINT:
1812     OnFilePrint();
1813     return TRUE;
1814     case ID_ACC_EXIT:
1815     OnFileExit();
1816     return TRUE;
1817     }
1818     }
1819     else { // transfer accelerator message to TEK win
1820     switch (wID) {
1821     case ID_ACC_COPY:
1822     ::PostMessage(HTEKWin,WM_COMMAND,ID_TEKEDIT_COPY,0);
1823     return TRUE;
1824 doda 6459 case ID_ACC_PASTECR:
1825     ::PostMessage(HTEKWin,WM_COMMAND,ID_TEKEDIT_PASTECR,0);
1826     return TRUE;
1827     case ID_ACC_PASTE:
1828     ::PostMessage(HTEKWin,WM_COMMAND,ID_TEKEDIT_PASTE,0);
1829     return TRUE;
1830 maya 3227 case ID_ACC_PRINT:
1831     ::PostMessage(HTEKWin,WM_COMMAND,ID_TEKFILE_PRINT,0);
1832     return TRUE;
1833     case ID_ACC_EXIT:
1834     ::PostMessage(HTEKWin,WM_COMMAND,ID_TEKFILE_EXIT,0);
1835     return TRUE;
1836     }
1837     }
1838     }
1839    
1840     if ((wID>=ID_WINDOW_1) && (wID<ID_WINDOW_1+9)) {
1841     SelectWin(wID-ID_WINDOW_1);
1842     return TRUE;
1843     }
1844     else {
1845 maya 3392 if (TTXProcessCommand(HVTWin, wID)) {
1846 maya 3227 return TRUE;
1847 maya 3392 }
1848     else { /* TTPLUG */
1849 maya 3227 return CFrameWnd::OnCommand(wParam, lParam);
1850 maya 3392 }
1851 maya 3227 }
1852     }
1853    
1854     void CVTWindow::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
1855     {
1856     DispSetActive(nState!=WA_INACTIVE);
1857 zmatsuo 7390 if (nState == WA_INACTIVE) {
1858     SetWindowAlpha(ts.AlphaBlendInactive);
1859     } else {
1860     SetWindowAlpha(ts.AlphaBlendActive);
1861     }
1862 maya 3227 }
1863    
1864     void CVTWindow::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
1865     {
1866     unsigned int i;
1867     char Code;
1868    
1869 maya 3392 if (!KeybEnabled || (TalkStatus!=IdTalkKeyb)) {
1870 maya 3227 return;
1871 maya 3392 }
1872 maya 3227
1873 doda 4414 if (MetaKey(ts.MetaKey)) {
1874 maya 3227 ::PostMessage(HVTWin,WM_SYSCHAR,nChar,MAKELONG(nRepCnt,nFlags));
1875     return;
1876     }
1877     Code = nChar;
1878    
1879     if ((ts.Language==IdRussian) &&
1880 maya 3393 ((BYTE)Code>=128)) {
1881 maya 3227 Code = (char)RussConv(ts.RussKeyb,ts.RussClient,(BYTE)Code);
1882 maya 3392 }
1883 maya 3227
1884     for (i=1 ; i<=nRepCnt ; i++) {
1885     CommTextOut(&cv,&Code,1);
1886 maya 3392 if (ts.LocalEcho>0) {
1887 maya 3227 CommTextEcho(&cv,&Code,1);
1888 maya 3392 }
1889 maya 3227 }
1890    
1891 doda 6421 // �X�N���[�����u�����Z�b�g
1892     if (WinOrgY != 0) {
1893 maya 3227 DispVScroll(SCROLL_BOTTOM, 0);
1894     }
1895     }
1896    
1897     /* copy from ttset.c*/
1898     static void WriteInt2(PCHAR Sect, PCHAR Key, PCHAR FName, int i1, int i2)
1899     {
1900     char Temp[32];
1901     _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%d,%d", i1, i2);
1902     WritePrivateProfileString(Sect, Key, Temp, FName);
1903     }
1904    
1905     static void SaveVTPos()
1906     {
1907     #define Section "Tera Term"
1908     if (ts.SaveVTWinPos) {
1909     /* VT win position */
1910     WriteInt2(Section, "VTPos", ts.SetupFName, ts.VTPos.x, ts.VTPos.y);
1911    
1912     /* VT terminal size */
1913     WriteInt2(Section, "TerminalSize", ts.SetupFName,
1914     ts.TerminalWidth, ts.TerminalHeight);
1915     }
1916     }
1917    
1918     void CVTWindow::OnClose()
1919     {
1920     if ((HTEKWin!=NULL) && ! ::IsWindowEnabled(HTEKWin)) {
1921     MessageBeep(0);
1922     return;
1923     }
1924     get_lang_msg("MSG_DISCONNECT_CONF", ts.UIMsg, sizeof(ts.UIMsg),
1925     "Disconnect?", ts.UILanguageFile);
1926     if (cv.Ready && (cv.PortType==IdTCPIP) &&
1927     ((ts.PortFlag & PF_CONFIRMDISCONN) != 0) &&
1928     ! CloseTT &&
1929     (::MessageBox(HVTWin, ts.UIMsg, "Tera Term",
1930 maya 3392 MB_OKCANCEL | MB_ICONEXCLAMATION | MB_DEFBUTTON2)==IDCANCEL)) {
1931 maya 3227 return;
1932 maya 3392 }
1933 maya 3227
1934     FileTransEnd(0);
1935     ProtoEnd();
1936    
1937     SaveVTPos();
1938     DestroyWindow();
1939     }
1940    
1941 yutakapon 5232 // �STera Term���I�����w������
1942     void CVTWindow::OnAllClose()
1943     {
1944 yutakapon 5351 // ���R�I���������������������A�����������[�U���������������o�������������B
1945     // (2013.8.17 yutaka)
1946     get_lang_msg("MSG_ALL_TERMINATE_CONF", ts.UIMsg, sizeof(ts.UIMsg),
1947     "Terminate ALL Tera Term(s)?", ts.UILanguageFile);
1948     if (::MessageBox(HVTWin, ts.UIMsg, "Tera Term",
1949 doda 6435 MB_OKCANCEL | MB_ICONERROR | MB_DEFBUTTON2)==IDCANCEL)
1950 yutakapon 5351 return;
1951    
1952 yutakapon 5232 BroadcastClosingMessage(HVTWin);
1953     }
1954    
1955     // �I������������������Tera Term���I�������BOnAllClose()���M�p�B
1956     LONG CVTWindow::OnNonConfirmClose(UINT wParam, LONG lParam)
1957     {
1958     // ������ ts �����e�����}�I���������������A�I�����������Z�[�u�����������������������A�������������B
1959     ts.PortFlag &= ~PF_CONFIRMDISCONN;
1960     OnClose();
1961     return 1;
1962     }
1963    
1964 maya 3227 void CVTWindow::OnDestroy()
1965     {
1966     // remove this window from the window list
1967     UnregWin(HVTWin);
1968    
1969 salarm 6100 // USB�f�o�C�X�������m����
1970     UnRegDeviceNotify(HVTWin);
1971    
1972 maya 3227 EndKeyboard();
1973    
1974     /* Disable drag-drop */
1975     ::DragAcceptFiles(HVTWin,FALSE);
1976 zmatsuo 7148 DropListFree();
1977 maya 3227
1978     EndDDE();
1979    
1980 maya 3392 if (cv.TelFlag) {
1981 maya 3227 EndTelnet();
1982 maya 3392 }
1983 maya 3227 CommClose(&cv);
1984    
1985 yutakapon 5636 OpenHelp(HH_CLOSE_ALL, 0, ts.UILanguageFile);
1986 maya 3227
1987     FreeIME();
1988     FreeTTSET();
1989     do { }
1990 maya 3392 while (FreeTTDLG());
1991 maya 3227
1992     do { }
1993 maya 3392 while (FreeTTFILE());
1994 maya 3227
1995 maya 3392 if (HTEKWin != NULL) {
1996 maya 3227 ::DestroyWindow(HTEKWin);
1997 maya 3392 }
1998 maya 3227
1999 doda 3450 EndTerm();
2000 maya 3227 EndDisp();
2001    
2002     FreeBuffer();
2003    
2004     CFrameWnd::OnDestroy();
2005     TTXEnd(); /* TTPLUG */
2006 doda 6662
2007     DeleteNotifyIcon(&cv);
2008 maya 3227 }
2009    
2010 zmatsuo 7148 static void EscapeFilename(const char *src, char *dest)
2011 maya 3227 {
2012 zmatsuo 7148 #define ESCAPE_CHARS " ;&()$!`'[]{}#^~"
2013     const char *s = src;
2014     char *d = dest;
2015     while (*s) {
2016     if (isleadbyte(*s)) { // multi-byte
2017     *d++ = *s++;
2018     *d++ = *s++;
2019     continue;
2020     }
2021     char c = *s++;
2022     if (c == '\\') {
2023     // �p�X���������� \ -> / ��
2024     *d = '/';
2025     } else if (strchr(ESCAPE_CHARS, c) != NULL) {
2026     // �G�X�P�[�v���K�v������
2027     *d++ = '\\';
2028     *d = c;
2029     } else {
2030     *d = c;
2031     }
2032     d++;
2033     }
2034     *d = '\0'; // null-terminate
2035     }
2036 maya 3227
2037 zmatsuo 7148 static void PasteString(PComVar cv, const char *str, bool escape)
2038     {
2039     PCHAR ptr = (PCHAR)str;
2040     char *tmpbuf = NULL;
2041     if (escape) {
2042     size_t len = strlen(str) * 2;
2043     tmpbuf = (char *)malloc(len);
2044     EscapeFilename(str, tmpbuf);
2045     ptr = tmpbuf;
2046     }
2047 yutakapon 4891
2048 zmatsuo 7148 // console�����M
2049     while (*ptr) {
2050     CommTextOut(cv, ptr, 1);
2051     if (ts.LocalEcho > 0) {
2052     CommTextEcho(cv, ptr, 1);
2053     }
2054     ptr++;
2055     }
2056 yutakapon 4891
2057 zmatsuo 7148 if (tmpbuf != NULL) free(tmpbuf);
2058     }
2059 yutakapon 4891
2060 zmatsuo 7148 /* �������t�@�C������(�t�H���_������������) */
2061     static bool SendScp(char *Filenames[], int FileCount, const char *SendDir)
2062     {
2063     typedef int (CALLBACK *PSSH_start_scp)(char *, char *);
2064     static PSSH_start_scp func = NULL;
2065     static HMODULE h = NULL;
2066     char msg[128];
2067 yutakapon 4891
2068 zmatsuo 7148 if (h == NULL) {
2069     if ( ((h = GetModuleHandle("ttxssh.dll")) == NULL) ) {
2070     _snprintf_s(msg, sizeof(msg), _TRUNCATE, "GetModuleHandle(\"ttxssh.dll\")) %d", GetLastError());
2071     scp_send_error:
2072     ::MessageBox(NULL, msg, "Tera Term: scpsend command error", MB_OK | MB_ICONERROR);
2073     return false;
2074     }
2075     }
2076     if (func == NULL) {
2077     func = (PSSH_start_scp)GetProcAddress(h, "TTXScpSendfile");
2078     if (func == NULL) {
2079     _snprintf_s(msg, sizeof(msg), _TRUNCATE, "GetProcAddress(\"TTXScpSendfile\")) %d", GetLastError());
2080     goto scp_send_error;
2081     }
2082     }
2083 yutakapon 4891
2084 zmatsuo 7148 for (int i = 0; i < FileCount; i++) {
2085     const char *FileName = Filenames[i];
2086     func((char *)FileName, ts.ScpSendDir);
2087     }
2088     return true;
2089     }
2090 doda 6620
2091 zmatsuo 7148 void CVTWindow::DropListFree()
2092     {
2093     if (DropListCount > 0) {
2094     for (int i = 0; i < DropListCount; i++) {
2095     free(DropLists[i]);
2096     DropLists[i] = NULL;
2097     }
2098     free(DropLists);
2099     DropLists = NULL;
2100     DropListCount = 0;
2101     }
2102     }
2103 yutakapon 4891
2104 zmatsuo 7148 LONG CVTWindow::OnDropNotify(UINT ShowDialog, LONG lParam)
2105     {
2106     // ini���������������A�����s��������Tera Term�������L��������
2107     static enum drop_type DefaultDropType = DROP_TYPE_CANCEL;
2108     static unsigned char DefaultDropTypePaste = DROP_TYPE_PASTE_ESCAPE;
2109     static bool DefaultShowDialog = ts.ConfirmFileDragAndDrop ? true : false;
2110 doda 6620
2111 zmatsuo 7148 (void)lParam;
2112     int FileCount = 0;
2113     int DirectoryCount = 0;
2114     for (int i = 0; i < DropListCount; i++) {
2115     const char *FileName = DropLists[i];
2116     const DWORD attr = GetFileAttributes(FileName);
2117     if (attr == -1 ) {
2118     goto finish;
2119     }
2120     if (attr & FILE_ATTRIBUTE_DIRECTORY) {
2121     DirectoryCount++;
2122     } else {
2123     FileCount++;
2124     }
2125     }
2126 yutakapon 4891
2127 zmatsuo 7148 bool DoSameProcess = false;
2128     const bool isSSH = (cv.isSSH == 2);
2129     enum drop_type DropType;
2130     unsigned char DropTypePaste = DROP_TYPE_PASTE_ESCAPE;
2131     if (DefaultDropType == DROP_TYPE_CANCEL) {
2132     // default is not set
2133     if (!ShowDialog) {
2134     if (FileCount == 1 && DirectoryCount == 0) {
2135     if (ts.ConfirmFileDragAndDrop) {
2136     if (isSSH) {
2137     DropType = DROP_TYPE_SCP;
2138     } else {
2139     DropType = DROP_TYPE_SEND_FILE;
2140 yutakapon 4891 }
2141 zmatsuo 7148 DoSameProcess = false;
2142     } else {
2143     DropType = DROP_TYPE_SEND_FILE;
2144     DoSameProcess = DefaultShowDialog ? false : true;
2145     }
2146     } else if (FileCount == 0 && DirectoryCount == 1) {
2147     DropType = DROP_TYPE_PASTE_FILENAME;
2148     DoSameProcess = DefaultShowDialog ? false : true;
2149     } else if (FileCount > 0 && DirectoryCount > 0) {
2150     DropType = DROP_TYPE_PASTE_FILENAME;
2151     DoSameProcess = false;
2152     } else if (FileCount > 0 && DirectoryCount == 0) {
2153     // filename only
2154     if (isSSH) {
2155     DropType = DROP_TYPE_SCP;
2156     } else {
2157     DropType = DROP_TYPE_SEND_FILE;
2158     }
2159     DoSameProcess = false;
2160     } else {
2161     // directory only
2162     DropType = DROP_TYPE_PASTE_FILENAME;
2163     DoSameProcess = ts.ConfirmFileDragAndDrop ? false : true;
2164     }
2165     } else {
2166     // show dialog
2167     if (DirectoryCount > 0) {
2168     DropType = DROP_TYPE_PASTE_FILENAME;
2169     } else {
2170     if (isSSH) {
2171     DropType = DROP_TYPE_SCP;
2172     } else {
2173     DropType = DROP_TYPE_SEND_FILE;
2174     }
2175     }
2176     DoSameProcess = false;
2177     }
2178     } else {
2179     if (DirectoryCount > 0 &&
2180     (DefaultDropType == DROP_TYPE_SEND_FILE ||
2181     DefaultDropType == DROP_TYPE_SEND_FILE_BINARY ||
2182     DefaultDropType == DROP_TYPE_SCP))
2183     { // �f�t�H���g�����������������������g��������
2184     DropType = DROP_TYPE_PASTE_FILENAME;
2185     DropTypePaste = DefaultDropTypePaste;
2186     DoSameProcess = false;
2187     } else {
2188     DropType = DefaultDropType;
2189     DropTypePaste = DefaultDropTypePaste;
2190     DoSameProcess = (ShowDialog || DefaultShowDialog) ? false : true;
2191     }
2192     }
2193 yutakapon 4891
2194 zmatsuo 7148 for (int i = 0; i < DropListCount; i++) {
2195     const char *FileName = DropLists[i];
2196 yutakapon 4891
2197 zmatsuo 7148 if (!DoSameProcess) {
2198     bool DoSameProcessNextDrop;
2199     bool DoNotShowDialog = !DefaultShowDialog;
2200     DropType =
2201     ShowDropDialogBox(hInst, HVTWin,
2202     FileName, DropType,
2203     DropListCount - i,
2204     (DirectoryCount == 0 && isSSH) ? true : false,
2205     DirectoryCount == 0 ? true : false,
2206 zmatsuo 7172 &ts,
2207 zmatsuo 7148 &DropTypePaste,
2208     &DoSameProcess,
2209     &DoSameProcessNextDrop,
2210     &DoNotShowDialog);
2211     if (DropType == DROP_TYPE_CANCEL) {
2212     goto finish;
2213     }
2214     if (DoSameProcessNextDrop) {
2215     DefaultDropType = DropType;
2216     DefaultDropTypePaste = DropTypePaste;
2217     }
2218     if (!ts.ConfirmFileDragAndDrop