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 6806 - (hide annotations) (download) (as text)
Thu Jun 15 00:37:01 2017 UTC (6 years, 9 months ago) by doda
Original Path: trunk/teraterm/teraterm/vtwin.cpp
File MIME type: text/x-c++src
File size: 181957 byte(s)
TeraTerm Project としてのライセンス表記を追加

とりあえず Tera Term 本体分。
TeraTerm Project としての copyright 表記の年部分はコミットログを確認して書いたつもりだけど、ミスってたらすみません。

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