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