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