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