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