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 6887 - (hide annotations) (download) (as text)
Wed Jul 26 03:47:55 2017 UTC (6 years, 8 months ago) by doda
Original Path: trunk/teraterm/teraterm/vtwin.cpp
File MIME type: text/x-c++src
File size: 181943 byte(s)
sendbroadcast, sendlnbroadcast が動かない問題を修正。[Ttssh2-devel 3326], Ticket #37401

・メインのループ部分が大きく違うので、ダイアログでの操作とマクロコマンドで関数を分離した
・parent_only の時にループ変数をいじって無理やり一回で抜けるのは判り辛いので、
  最初に parent_only かどうかを判定するようにした。
  parent_only の時はループしないというのを明示する意味もある。

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