Open-Source-Software-Entwicklung und Downloads

Browse Subversion Repository

Contents of /trunk/teraterm/teraterm/vtwin.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3227 - (show annotations) (download) (as text)
Tue Mar 24 15:10:33 2009 UTC (15 years, 1 month ago) by maya
File MIME type: text/x-c++src
File size: 134378 byte(s)
CVS から SVN へ移行: 改行コードを LF から CR+LF へ変換
1 /* Tera Term
2 Copyright(C) 1994-1998 T. Teranishi
3 All rights reserved. */
4 /* IPv6 modification is Copyright(C) 2000 Jun-ya Kato <kato@win6.jp> */
5
6 /* TERATERM.EXE, VT window */
7
8 #include "stdafx.h"
9 #include "teraterm.h"
10 #include "tttypes.h"
11
12 #include "ttcommon.h"
13 #include "ttwinman.h"
14 #include "ttsetup.h"
15 #include "keyboard.h"
16 #include "buffer.h"
17 #include "vtterm.h"
18 #include "vtdisp.h"
19 #include "ttdialog.h"
20 #include "ttime.h"
21 #include "commlib.h"
22 #include "clipboar.h"
23 #include "ttftypes.h"
24 #include "filesys.h"
25 #include "telnet.h"
26 #include "tektypes.h"
27 #include "tekwin.h"
28 #include "ttdde.h"
29 #include "ttlib.h"
30 #include "helpid.h"
31 #include "teraprn.h"
32 #ifndef NO_INET6
33 #include <winsock2.h>
34 #include <ws2tcpip.h>
35 #else
36 #include <winsock.h>
37 #endif /* NO_INET6 */
38 #include "ttplug.h" /* TTPLUG */
39
40 #include <stdio.h>
41 #include <stdlib.h>
42 #include <string.h>
43 #include <locale.h>
44
45 #include <shlobj.h>
46 #include <io.h>
47 #include <errno.h>
48 #include <imagehlp.h>
49
50 #include <windowsx.h>
51
52 #include "tt_res.h"
53 #include "vtwin.h"
54 #include "addsetting.h"
55
56 #define VTClassName "VTWin32"
57
58 /* mouse buttons */
59 #define IdLeftButton 0
60 #define IdMiddleButton 1
61 #define IdRightButton 2
62
63 #ifdef _DEBUG
64 #define new DEBUG_NEW
65 #undef THIS_FILE
66 static char THIS_FILE[] = __FILE__;
67 #endif
68
69 // �E�B���h�E�������{�^�����L�������� (2005.1.15 yutaka)
70 #define WINDOW_MAXMIMUM_ENABLED 1
71
72 // WM_COPYDATA�������v���Z�X�����M������ (2005.1.22 yutaka)
73 #define IPC_BROADCAST_COMMAND 1 // �S�[�������M
74 #define IPC_MULTICAST_COMMAND 2 // �C�����[���Q�����M
75
76 #define BROADCAST_LOGFILE "broadcast.log"
77
78 static HFONT DlgBroadcastFont;
79 static HFONT DlgCommentFont;
80
81 // �{���� addsetting.cpp
82 extern mouse_cursor_t MouseCursor[];
83
84 /////////////////////////////////////////////////////////////////////////////
85 // CVTWindow
86
87 BEGIN_MESSAGE_MAP(CVTWindow, CFrameWnd)
88 //{{AFX_MSG_MAP(CVTWindow)
89 ON_WM_ACTIVATE()
90 ON_WM_CHAR()
91 ON_WM_CLOSE()
92 ON_WM_DESTROY()
93 ON_WM_DROPFILES()
94 ON_WM_GETMINMAXINFO()
95 ON_WM_HSCROLL()
96 ON_WM_INITMENUPOPUP()
97 ON_WM_KEYDOWN()
98 ON_WM_KEYUP()
99 ON_WM_KILLFOCUS()
100 ON_WM_LBUTTONDBLCLK()
101 ON_WM_LBUTTONDOWN()
102 ON_WM_LBUTTONUP()
103 ON_WM_MBUTTONDOWN()
104 ON_WM_MBUTTONUP()
105 ON_WM_MOUSEACTIVATE()
106 ON_WM_MOUSEMOVE()
107 ON_WM_MOUSEWHEEL()
108 ON_WM_MOVE()
109 ON_WM_NCLBUTTONDBLCLK()
110 ON_WM_NCRBUTTONDOWN()
111 ON_WM_PAINT()
112 ON_WM_RBUTTONDOWN()
113 ON_WM_RBUTTONUP()
114 ON_WM_SETFOCUS()
115 ON_WM_SIZE()
116 ON_WM_SIZING()
117 ON_WM_SYSCHAR()
118 ON_WM_SYSCOLORCHANGE()
119 ON_WM_SYSCOMMAND()
120 ON_WM_SYSKEYDOWN()
121 ON_WM_SYSKEYUP()
122 ON_WM_TIMER()
123 ON_WM_VSCROLL()
124 ON_MESSAGE(WM_IME_COMPOSITION,OnIMEComposition)
125 //<!--by AKASI
126 ON_MESSAGE(WM_WINDOWPOSCHANGING,OnWindowPosChanging)
127 ON_MESSAGE(WM_SETTINGCHANGE,OnSettingChange)
128 ON_MESSAGE(WM_ENTERSIZEMOVE,OnEnterSizeMove)
129 ON_MESSAGE(WM_EXITSIZEMOVE ,OnExitSizeMove)
130 //-->
131 ON_MESSAGE(WM_USER_ACCELCOMMAND, OnAccelCommand)
132 ON_MESSAGE(WM_USER_CHANGEMENU,OnChangeMenu)
133 ON_MESSAGE(WM_USER_CHANGETBAR,OnChangeTBar)
134 ON_MESSAGE(WM_USER_COMMNOTIFY,OnCommNotify)
135 ON_MESSAGE(WM_USER_COMMOPEN,OnCommOpen)
136 ON_MESSAGE(WM_USER_COMMSTART,OnCommStart)
137 ON_MESSAGE(WM_USER_DDEEND,OnDdeEnd)
138 ON_MESSAGE(WM_USER_DLGHELP2,OnDlgHelp)
139 ON_MESSAGE(WM_USER_FTCANCEL,OnFileTransEnd)
140 ON_MESSAGE(WM_USER_GETSERIALNO,OnGetSerialNo)
141 ON_MESSAGE(WM_USER_KEYCODE,OnKeyCode)
142 ON_MESSAGE(WM_USER_PROTOCANCEL,OnProtoEnd)
143 ON_MESSAGE(WM_USER_CHANGETITLE,OnChangeTitle)
144 ON_MESSAGE(WM_COPYDATA,OnReceiveIpcMessage)
145 ON_COMMAND(ID_FILE_NEWCONNECTION, OnFileNewConnection)
146 ON_COMMAND(ID_FILE_DUPLICATESESSION, OnDuplicateSession)
147 ON_COMMAND(ID_FILE_CYGWINCONNECTION, OnCygwinConnection)
148 ON_COMMAND(ID_FILE_TERATERMMENU, OnTTMenuLaunch)
149 ON_COMMAND(ID_FILE_LOGMEIN, OnLogMeInLaunch)
150 ON_COMMAND(ID_FILE_LOG, OnFileLog)
151 ON_COMMAND(ID_FILE_COMMENTTOLOG, OnCommentToLog)
152 ON_COMMAND(ID_FILE_VIEWLOG, OnViewLog)
153 ON_COMMAND(ID_FILE_SHOWLOGDIALOG, OnShowLogDialog)
154 ON_COMMAND(ID_FILE_REPLAYLOG, OnReplayLog)
155 ON_COMMAND(ID_FILE_SENDFILE, OnFileSend)
156 ON_COMMAND(ID_FILE_KERMITRCV, OnFileKermitRcv)
157 ON_COMMAND(ID_FILE_KERMITGET, OnFileKermitGet)
158 ON_COMMAND(ID_FILE_KERMITSEND, OnFileKermitSend)
159 ON_COMMAND(ID_FILE_KERMITFINISH, OnFileKermitFinish)
160 ON_COMMAND(ID_FILE_XRCV, OnFileXRcv)
161 ON_COMMAND(ID_FILE_XSEND, OnFileXSend)
162 ON_COMMAND(ID_FILE_YRCV, OnFileYRcv)
163 ON_COMMAND(ID_FILE_YSEND, OnFileYSend)
164 ON_COMMAND(ID_FILE_ZRCV, OnFileZRcv)
165 ON_COMMAND(ID_FILE_ZSEND, OnFileZSend)
166 ON_COMMAND(ID_FILE_BPRCV, OnFileBPRcv)
167 ON_COMMAND(ID_FILE_BPSEND, OnFileBPSend)
168 ON_COMMAND(ID_FILE_QVRCV, OnFileQVRcv)
169 ON_COMMAND(ID_FILE_QVSEND, OnFileQVSend)
170 ON_COMMAND(ID_FILE_CHANGEDIR, OnFileChangeDir)
171 ON_COMMAND(ID_FILE_PRINT2, OnFilePrint)
172 ON_COMMAND(ID_FILE_DISCONNECT, OnFileDisconnect)
173 ON_COMMAND(ID_FILE_EXIT, OnFileExit)
174 ON_COMMAND(ID_EDIT_COPY2, OnEditCopy)
175 ON_COMMAND(ID_EDIT_COPYTABLE, OnEditCopyTable)
176 ON_COMMAND(ID_EDIT_PASTE2, OnEditPaste)
177 ON_COMMAND(ID_EDIT_PASTECR, OnEditPasteCR)
178 ON_COMMAND(ID_EDIT_CLEARSCREEN, OnEditClearScreen)
179 ON_COMMAND(ID_EDIT_CLEARBUFFER, OnEditClearBuffer)
180 ON_COMMAND(ID_EDIT_CANCELSELECT, OnEditCancelSelection)
181 ON_COMMAND(ID_EDIT_SELECTALL, OnEditSelectAllBuffer)
182 ON_COMMAND(ID_EDIT_SELECTSCREEN, OnEditSelectScreenBuffer)
183 ON_COMMAND(ID_SETUP_ADDITIONALSETTINGS, OnExternalSetup)
184 ON_COMMAND(ID_SETUP_TERMINAL, OnSetupTerminal)
185 ON_COMMAND(ID_SETUP_WINDOW, OnSetupWindow)
186 ON_COMMAND(ID_SETUP_FONT, OnSetupFont)
187 ON_COMMAND(ID_SETUP_KEYBOARD, OnSetupKeyboard)
188 ON_COMMAND(ID_SETUP_SERIALPORT, OnSetupSerialPort)
189 ON_COMMAND(ID_SETUP_TCPIP, OnSetupTCPIP)
190 ON_COMMAND(ID_SETUP_GENERAL, OnSetupGeneral)
191 ON_COMMAND(ID_SETUP_SAVE, OnSetupSave)
192 ON_COMMAND(ID_SETUP_RESTORE, OnSetupRestore)
193 ON_COMMAND(ID_SETUP_LOADKEYMAP, OnSetupLoadKeyMap)
194 ON_COMMAND(ID_CONTROL_RESETTERMINAL, OnControlResetTerminal)
195 ON_COMMAND(ID_CONTROL_RESETREMOTETITLE, OnControlResetRemoteTitle)
196 ON_COMMAND(ID_CONTROL_AREYOUTHERE, OnControlAreYouThere)
197 ON_COMMAND(ID_CONTROL_SENDBREAK, OnControlSendBreak)
198 ON_COMMAND(ID_CONTROL_RESETPORT, OnControlResetPort)
199 ON_COMMAND(ID_CONTROL_BROADCASTCOMMAND, OnControlBroadcastCommand)
200 ON_COMMAND(ID_CONTROL_OPENTEK, OnControlOpenTEK)
201 ON_COMMAND(ID_CONTROL_CLOSETEK, OnControlCloseTEK)
202 ON_COMMAND(ID_CONTROL_MACRO, OnControlMacro)
203 ON_COMMAND(ID_WINDOW_WINDOW, OnWindowWindow)
204 ON_COMMAND(ID_HELP_INDEX2, OnHelpIndex)
205 ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout)
206 //}}AFX_MSG_MAP
207 END_MESSAGE_MAP()
208
209 /////////////////////////////////////////////////////////////////////////////
210 // CVTWindow constructor
211
212
213 static BOOL MySetLayeredWindowAttributes(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags)
214 {
215 typedef BOOL (WINAPI *func)(HWND,COLORREF,BYTE,DWORD);
216 static HMODULE g_hmodUser32 = NULL;
217 static func g_pSetLayeredWindowAttributes = NULL;
218
219 if (g_hmodUser32 == NULL) {
220 g_hmodUser32 = LoadLibrary("user32.dll");
221 if (g_hmodUser32 == NULL)
222 return FALSE;
223
224 g_pSetLayeredWindowAttributes =
225 (func)GetProcAddress(g_hmodUser32, "SetLayeredWindowAttributes");
226 }
227
228 if (g_pSetLayeredWindowAttributes == NULL)
229 return FALSE;
230
231 return g_pSetLayeredWindowAttributes(hwnd, crKey,
232 bAlpha, dwFlags);
233 }
234
235
236 // Tera Term�N������URL������mouse over������������ (2005.4.2 yutaka)
237 extern "C" void SetMouseCursor(char *cursor)
238 {
239 HCURSOR hc;
240 LPCTSTR name = NULL;
241 int i;
242
243 for (i = 0 ; MouseCursor[i].name ; i++) {
244 if (_stricmp(cursor, MouseCursor[i].name) == 0) {
245 name = MouseCursor[i].id;
246 break;
247 }
248 }
249 if (name == NULL)
250 return;
251
252
253 hc = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(name), IMAGE_CURSOR,
254 0, 0, LR_DEFAULTSIZE | LR_SHARED);
255
256 if (hc != NULL) {
257 SetClassLongPtr(HVTWin, GCLP_HCURSOR, (LONG_PTR)hc);
258 }
259 }
260
261
262 void SetWindowStyle(TTTSet *ts)
263 {
264 LONG_PTR lp;
265
266 SetMouseCursor(ts->MouseCursorName);
267
268 // 2006/03/16 by 337: BGUseAlphaBlendAPI��On������Layered����������
269 //if (ts->EtermLookfeel.BGUseAlphaBlendAPI) {
270 // �A���t�@�l��255�������A�����������������}�����������������������������B(2006.4.1 yutaka)
271 // �����o�������A�l�����X�����������������������f�����B(2007.10.19 maya)
272 if (ts->AlphaBlend < 255) {
273 lp = GetWindowLongPtr(HVTWin, GWL_EXSTYLE);
274 if (lp != 0) {
275 SetWindowLongPtr(HVTWin, GWL_EXSTYLE, lp | WS_EX_LAYERED);
276 MySetLayeredWindowAttributes(HVTWin, 0, ts->AlphaBlend, LWA_ALPHA);
277 }
278 }
279 // �A���t�@�l�� 255 �������A�����������������������`�������B(2007.10.22 maya)
280 else {
281 lp = GetWindowLongPtr(HVTWin, GWL_EXSTYLE);
282 if (lp != 0) {
283 SetWindowLongPtr(HVTWin, GWL_EXSTYLE, lp & ~WS_EX_LAYERED);
284 RedrawWindow(HVTWin, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME);
285 }
286 }
287 }
288
289
290 //
291 // ���O�n���h�����t�b�N�i�X�^�b�N�g���[�X���_���v�j
292 //
293 // cf. http://svn.collab.net/repos/svn/trunk/subversion/libsvn_subr/win32_crashrpt.c
294 // (2007.9.30 yutaka)
295 //
296 // ���O�R�[�h������������������
297 static char *GetExceptionString(int exception)
298 {
299 #define EXCEPTION(x) case EXCEPTION_##x: return (#x);
300 static char buf[16];
301
302 switch (exception)
303 {
304 EXCEPTION(ACCESS_VIOLATION)
305 EXCEPTION(DATATYPE_MISALIGNMENT)
306 EXCEPTION(BREAKPOINT)
307 EXCEPTION(SINGLE_STEP)
308 EXCEPTION(ARRAY_BOUNDS_EXCEEDED)
309 EXCEPTION(FLT_DENORMAL_OPERAND)
310 EXCEPTION(FLT_DIVIDE_BY_ZERO)
311 EXCEPTION(FLT_INEXACT_RESULT)
312 EXCEPTION(FLT_INVALID_OPERATION)
313 EXCEPTION(FLT_OVERFLOW)
314 EXCEPTION(FLT_STACK_CHECK)
315 EXCEPTION(FLT_UNDERFLOW)
316 EXCEPTION(INT_DIVIDE_BY_ZERO)
317 EXCEPTION(INT_OVERFLOW)
318 EXCEPTION(PRIV_INSTRUCTION)
319 EXCEPTION(IN_PAGE_ERROR)
320 EXCEPTION(ILLEGAL_INSTRUCTION)
321 EXCEPTION(NONCONTINUABLE_EXCEPTION)
322 EXCEPTION(STACK_OVERFLOW)
323 EXCEPTION(INVALID_DISPOSITION)
324 EXCEPTION(GUARD_PAGE)
325 EXCEPTION(INVALID_HANDLE)
326
327 default:
328 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "0x%x", exception);
329 return buf;
330 //return "UNKNOWN_ERROR";
331 }
332 #undef EXCEPTION
333 }
334
335 /* ���O�������������������o���������\�������A���O�t�B���^���� */
336 static LONG CALLBACK ApplicationFaultHandler(EXCEPTION_POINTERS *ExInfo)
337 {
338 HGLOBAL gptr;
339 STACKFRAME sf;
340 BOOL bResult;
341 PIMAGEHLP_SYMBOL pSym;
342 DWORD Disp;
343 HANDLE hProcess = GetCurrentProcess();
344 HANDLE hThread = GetCurrentThread();
345 IMAGEHLP_MODULE ih_module;
346 IMAGEHLP_LINE ih_line;
347 int frame;
348 char msg[3072], buf[256];
349 HMODULE h, h2;
350
351 // Windows98/Me/NT4�����������������X�L�b�v�����B(2007.10.9 yutaka)
352 h2 = LoadLibrary("imagehlp.dll");
353 if (((h = GetModuleHandle("imagehlp.dll")) == NULL) ||
354 (GetProcAddress(h, "SymGetLineFromAddr") == NULL)) {
355 FreeLibrary(h2);
356 goto error;
357 }
358 FreeLibrary(h2);
359
360 /* �V���{�������i�[�p�o�b�t�@�������� */
361 gptr = GlobalAlloc(GMEM_FIXED, 10000);
362 if (gptr == NULL)
363 goto error;
364 pSym = (PIMAGEHLP_SYMBOL)GlobalLock(gptr);
365 ZeroMemory(pSym, sizeof(IMAGEHLP_SYMBOL));
366 pSym->SizeOfStruct = 10000;
367 pSym->MaxNameLength = 10000 - sizeof(IMAGEHLP_SYMBOL);
368
369 /* �X�^�b�N�t���[���������� */
370 ZeroMemory(&sf, sizeof(sf));
371 sf.AddrPC.Offset = ExInfo->ContextRecord->Eip;
372 sf.AddrStack.Offset = ExInfo->ContextRecord->Esp;
373 sf.AddrFrame.Offset = ExInfo->ContextRecord->Ebp;
374 sf.AddrPC.Mode = AddrModeFlat;
375 sf.AddrStack.Mode = AddrModeFlat;
376 sf.AddrFrame.Mode = AddrModeFlat;
377
378 /* �V���{���n���h���������� */
379 SymInitialize(hProcess, NULL, TRUE);
380
381 // ���W�X�^�_���v
382 msg[0] = '\0';
383 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "eax=%08X ebx=%08X ecx=%08X edx=%08X esi=%08X edi=%08X\r\n"
384 "ebp=%08X esp=%08X eip=%08X efl=%08X\r\n"
385 "cs=%04X ss=%04X ds=%04X es=%04X fs=%04X gs=%04X\r\n",
386 ExInfo->ContextRecord->Eax,
387 ExInfo->ContextRecord->Ebx,
388 ExInfo->ContextRecord->Ecx,
389 ExInfo->ContextRecord->Edx,
390 ExInfo->ContextRecord->Esi,
391 ExInfo->ContextRecord->Edi,
392 ExInfo->ContextRecord->Ebp,
393 ExInfo->ContextRecord->Esp,
394 ExInfo->ContextRecord->Eip,
395 ExInfo->ContextRecord->EFlags,
396 ExInfo->ContextRecord->SegCs,
397 ExInfo->ContextRecord->SegSs,
398 ExInfo->ContextRecord->SegDs,
399 ExInfo->ContextRecord->SegEs,
400 ExInfo->ContextRecord->SegFs,
401 ExInfo->ContextRecord->SegGs
402 );
403 strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
404
405 if (ExInfo->ExceptionRecord != NULL) {
406 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "Exception: %s\r\n", GetExceptionString(ExInfo->ExceptionRecord->ExceptionCode));
407 strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
408 }
409
410 /* �X�^�b�N�t���[���������\���������� */
411 frame = 0;
412 for (;;) {
413 /* �����X�^�b�N�t���[�������� */
414 bResult = StackWalk(
415 IMAGE_FILE_MACHINE_I386,
416 hProcess,
417 hThread,
418 &sf,
419 NULL,
420 NULL,
421 SymFunctionTableAccess,
422 SymGetModuleBase,
423 NULL);
424
425 /* ���s�������A���[�v�������� */
426 if (!bResult || sf.AddrFrame.Offset == 0)
427 break;
428
429 frame++;
430
431 /* �v���O�����J�E���^�i���z�A�h���X�j�������������I�t�Z�b�g������ */
432 bResult = SymGetSymFromAddr(hProcess, sf.AddrPC.Offset, &Disp, pSym);
433
434 /* �����������\�� */
435 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "#%d 0x%08x in ", frame, sf.AddrPC.Offset);
436 strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
437 if (bResult) {
438 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s() + 0x%x ", pSym->Name, Disp);
439 strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
440 } else {
441 _snprintf_s(buf, sizeof(buf), _TRUNCATE, " --- ");
442 strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
443 }
444
445 // ���s�t�@�C����������
446 ZeroMemory( &(ih_module), sizeof(ih_module) );
447 ih_module.SizeOfStruct = sizeof(ih_module);
448 bResult = SymGetModuleInfo( hProcess, sf.AddrPC.Offset, &(ih_module) );
449 strncat_s(msg, sizeof(msg), "at ", _TRUNCATE);
450 if (bResult) {
451 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s ", ih_module.ImageName );
452 strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
453 } else {
454 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s ", "<Unknown Module>" );
455 strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
456 }
457
458 // �t�@�C�������s����������
459 ZeroMemory( &(ih_line), sizeof(ih_line) );
460 ih_line.SizeOfStruct = sizeof(ih_line);
461 bResult = SymGetLineFromAddr( hProcess, sf.AddrPC.Offset, &Disp, &ih_line );
462 if (bResult)
463 {
464 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s:%lu", ih_line.FileName, ih_line.LineNumber );
465 strncat_s(msg, sizeof(msg), buf, _TRUNCATE);
466 }
467
468 strncat_s(msg, sizeof(msg), "\r\n", _TRUNCATE);
469 }
470
471 /* ������ */
472 SymCleanup(hProcess);
473 GlobalUnlock(pSym);
474 GlobalFree(pSym);
475
476 MessageBox(NULL, msg, "Tera Term: Application fault", MB_OK | MB_ICONEXCLAMATION);
477
478 error:
479 // return (EXCEPTION_EXECUTE_HANDLER); /* ���������v���Z�X���I�������� */
480 return (EXCEPTION_CONTINUE_SEARCH); /* ���������m�A�v���P�[�V�����G���[�n�|�b�v�A�b�v���b�Z�[�W�{�b�N�X�������o�� */
481 }
482
483
484 CVTWindow::CVTWindow()
485 {
486 WNDCLASS wc;
487 RECT rect;
488 DWORD Style;
489 #ifdef ALPHABLEND_TYPE2
490 DWORD ExStyle;
491 #endif
492 char Temp[MAXPATHLEN];
493 char *Param;
494 int CmdShow;
495 PKeyMap tempkm;
496 int fuLoad = LR_DEFAULTCOLOR;
497
498 #ifdef _DEBUG
499 ::_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
500 #endif
501
502 // ���O�n���h�����t�b�N (2007.9.30 yutaka)
503 SetUnhandledExceptionFilter(ApplicationFaultHandler);
504
505 TTXInit(&ts, &cv); /* TTPLUG */
506
507 CommInit(&cv);
508
509 MsgDlgHelp = RegisterWindowMessage(HELPMSGSTRING);
510
511 if (StartTeraTerm(&ts)) {
512 /* first instance */
513 if (LoadTTSET()) {
514 /* read setup info from "teraterm.ini" */
515 (*ReadIniFile)(ts.SetupFName, &ts);
516 /* read keycode map from "keyboard.cnf" */
517 tempkm = (PKeyMap)malloc(sizeof(TKeyMap));
518 if (tempkm!=NULL) {
519 strncpy_s(Temp, sizeof(Temp), ts.HomeDir, _TRUNCATE);
520 AppendSlash(Temp,sizeof(Temp));
521 strncat_s(Temp,sizeof(Temp),"KEYBOARD.CNF",_TRUNCATE);
522 (*ReadKeyboardCnf)(Temp,tempkm,TRUE);
523 }
524 FreeTTSET();
525 /* store default sets in TTCMN */
526 #if 0
527 ChangeDefaultSet(&ts,tempkm);
528 #else
529 ChangeDefaultSet(NULL,tempkm);
530 #endif
531 if (tempkm!=NULL) free(tempkm);
532 }
533
534 } else {
535 // 2�������~���v���Z�X�����������A�f�B�X�N���� TERATERM.INI �������B(2004.11.4 yutaka)
536 if (LoadTTSET()) {
537 /* read setup info from "teraterm.ini" */
538 (*ReadIniFile)(ts.SetupFName, &ts);
539 /* read keycode map from "keyboard.cnf" */
540 tempkm = (PKeyMap)malloc(sizeof(TKeyMap));
541 if (tempkm!=NULL) {
542 strncpy_s(Temp, sizeof(Temp, ts.HomeDir), ts.HomeDir, _TRUNCATE);
543 AppendSlash(Temp,sizeof(Temp));
544 strncat_s(Temp,sizeof(Temp),"KEYBOARD.CNF",_TRUNCATE);
545 (*ReadKeyboardCnf)(Temp,tempkm,TRUE);
546 }
547 FreeTTSET();
548 /* store default sets in TTCMN */
549 if (tempkm!=NULL) free(tempkm);
550 }
551
552 }
553
554 /* Parse command line parameters*/
555 // 256�o�C�g�������R�}���h���C���p�����[�^�w�����������ABOF(Buffer Over Flow)��
556 // �������o�O���C���B(2007.6.12 maya)
557 Param = GetCommandLine();
558 if (LoadTTSET())
559 (*ParseParam)(Param, &ts, &(TopicName[0]));
560 FreeTTSET();
561
562 // duplicate session���w�������������A���L�����������R�s�[���� (2004.12.7 yutaka)
563 if (ts.DuplicateSession == 1) {
564 CopyShmemToTTSet(&ts);
565 }
566
567 InitKeyboard();
568 SetKeyMap();
569
570 // �R�}���h���C�����������t�@�C���������X���������������������� (2008.1.25 maya)
571 cv.isSSH = 0;
572 cv.TitleRemote[0] = '\0';
573
574 /* window status */
575 AdjustSize = TRUE;
576 Minimized = FALSE;
577 LButton = FALSE;
578 MButton = FALSE;
579 RButton = FALSE;
580 DblClk = FALSE;
581 AfterDblClk = FALSE;
582 TplClk = FALSE;
583 Hold = FALSE;
584 FirstPaint = TRUE;
585 ScrollLock = FALSE; // �����l������ (2006.11.14 yutaka)
586
587 /* Initialize scroll buffer */
588 InitBuffer();
589
590 InitDisp();
591
592 if (ts.HideTitle>0) {
593 Style = WS_VSCROLL | WS_HSCROLL |
594 WS_BORDER | WS_THICKFRAME | WS_POPUP;
595
596 #ifdef ALPHABLEND_TYPE2
597 if(BGNoFrame)
598 Style &= ~(WS_BORDER | WS_THICKFRAME);
599 #endif
600 }
601 else
602 #ifdef WINDOW_MAXMIMUM_ENABLED
603 Style = WS_VSCROLL | WS_HSCROLL |
604 WS_BORDER | WS_THICKFRAME |
605 WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
606 #else
607 Style = WS_VSCROLL | WS_HSCROLL |
608 WS_BORDER | WS_THICKFRAME |
609 WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
610 #endif
611
612 wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
613 wc.lpfnWndProc = AfxWndProc;
614 wc.cbClsExtra = 0;
615 wc.cbWndExtra = 0;
616 wc.hInstance = AfxGetInstanceHandle();
617 if (is_NT4()) {
618 fuLoad = LR_VGACOLOR;
619 }
620 wc.hIcon = NULL;
621 //wc.hCursor = LoadCursor(NULL,IDC_IBEAM);
622 wc.hCursor = NULL; // �}�E�X�J�[�\�������I�����X���� (2005.4.2 yutaka)
623 wc.hbrBackground = NULL;
624 wc.lpszMenuName = NULL;
625 wc.lpszClassName = VTClassName;
626
627 RegisterClass(&wc);
628 LoadAccelTable(MAKEINTRESOURCE(IDR_ACC));
629
630 if (ts.VTPos.x==CW_USEDEFAULT)
631 rect = rectDefault;
632 else {
633 rect.left = ts.VTPos.x;
634 rect.top = ts.VTPos.y;
635 rect.right = rect.left + 100;
636 rect.bottom = rect.top + 100;
637 }
638 Create(VTClassName, "Tera Term", Style, rect, NULL, NULL);
639
640 /*--------- Init2 -----------------*/
641 HVTWin = GetSafeHwnd();
642 if (HVTWin == NULL) return;
643 // register this window to the window list
644 SerialNo = RegWin(HVTWin,NULL);
645
646 logfile_lock_initialize();
647 SetWindowStyle(&ts);
648 // ���P�[��������
649 // wctomb ������
650 setlocale(LC_ALL, ts.Locale);
651
652 #ifdef ALPHABLEND_TYPE2
653 //<!--by AKASI
654 if(BGNoFrame && ts.HideTitle > 0) {
655 ExStyle = GetWindowLong(HVTWin,GWL_EXSTYLE);
656 ExStyle &= ~WS_EX_CLIENTEDGE;
657 SetWindowLong(HVTWin,GWL_EXSTYLE,ExStyle);
658 }
659 //-->
660 #endif
661
662 if (is_NT4()) {
663 fuLoad = LR_VGACOLOR;
664 }
665 ::PostMessage(HVTWin,WM_SETICON,ICON_SMALL,
666 (LPARAM)LoadImage(AfxGetInstanceHandle(),
667 MAKEINTRESOURCE((ts.VTIcon!=IdIconDefault)?ts.VTIcon:IDI_VT),
668 IMAGE_ICON,16,16,fuLoad));
669 // Vista �� Aero �������� Alt+Tab �����������\���������A�C�R����
670 // 16x16 �A�C�R�����g���������������������A�������A�C�R����
671 // �Z�b�g���� (2008.9.3 maya)
672 ::PostMessage(HVTWin,WM_SETICON,ICON_BIG,
673 (LPARAM)LoadImage(AfxGetInstanceHandle(),
674 MAKEINTRESOURCE((ts.VTIcon!=IdIconDefault)?ts.VTIcon:IDI_VT),
675 IMAGE_ICON, 0, 0, fuLoad));
676
677 MainMenu = NULL;
678 WinMenu = NULL;
679 if ((ts.HideTitle==0) && (ts.PopupMenu==0)) {
680 InitMenu(&MainMenu);
681 ::SetMenu(HVTWin,MainMenu);
682 }
683
684 /* Reset Terminal */
685 ResetTerminal();
686
687 if ((ts.PopupMenu>0) || (ts.HideTitle>0))
688 ::PostMessage(HVTWin,WM_USER_CHANGEMENU,0,0);
689
690 ChangeFont();
691
692 ResetIME();
693
694 BuffChangeWinSize(NumOfColumns,NumOfLines);
695
696 ChangeTitle();
697 /* Enable drag-drop */
698 ::DragAcceptFiles(HVTWin,TRUE);
699
700 if (ts.HideWindow>0) {
701 if (strlen(TopicName)>0) {
702 InitDDE();
703 SendDDEReady();
704 }
705 FirstPaint = FALSE;
706 Startup();
707 return;
708 }
709 CmdShow = SW_SHOWDEFAULT;
710 if (ts.Minimize>0)
711 CmdShow = SW_SHOWMINIMIZED;
712 ShowWindow(CmdShow);
713 ChangeCaret();
714 }
715
716 /////////////////////////////////////////////////////////////////////////////
717
718 #ifdef _DEBUG
719 void CVTWindow::AssertValid() const
720 {
721 CFrameWnd::AssertValid();
722 }
723
724 void CVTWindow::Dump(CDumpContext& dc) const
725 {
726 CFrameWnd::Dump(dc);
727 }
728
729 #endif //_DEBUG
730
731 /////////////////////////////////////////////////////////////////////////////
732
733 int CVTWindow::Parse()
734 {
735 // added ScrollLock (2006.11.14 yutaka)
736 if (LButton || MButton || RButton || ScrollLock)
737 return 0;
738 return (VTParse()); // Parse received characters
739 }
740
741 void CVTWindow::ButtonUp(BOOL Paste)
742 {
743 BOOL disableBuffEndSelect = false;
744 BOOL pasteRButton = RButton && Paste;
745 BOOL pasteMButton = MButton && Paste;
746
747 /* disable autoscrolling */
748 ::KillTimer(HVTWin,IdScrollTimer);
749 ReleaseCapture();
750
751 if (ts.SelectOnlyByLButton &&
752 (MButton || RButton)) {
753 disableBuffEndSelect = true;
754 }
755
756 LButton = FALSE;
757 MButton = FALSE;
758 RButton = FALSE;
759 DblClk = FALSE;
760 TplClk = FALSE;
761 CaretOn();
762
763 // SelectOnlyByLButton �� on �� ���E�E�N���b�N����������
764 // �o�b�t�@���I���������������A�I�����e���N���b�v�{�[�h��
765 // �R�s�[�������������������C�� (2007.12.6 maya)
766 if (!disableBuffEndSelect) {
767 BuffEndSelect();
768 }
769
770 // added ConfirmPasteMouseRButton (2007.3.17 maya)
771 if (pasteRButton && !ts.ConfirmPasteMouseRButton) {
772 if (CBStartPasteConfirmChange(HVTWin)) {
773 CBStartPaste(HVTWin,FALSE,0,NULL,0);
774 /* �����s�����������X�N���[����������������
775 �y�[�X�g�������X�N���[�������� */
776 if (ts.AutoScrollOnlyInBottomLine != 0 && WinOrgY != 0) {
777 DispVScroll(SCROLL_BOTTOM, 0);
778 }
779 }
780 }
781 else if (pasteMButton) {
782 if (CBStartPasteConfirmChange(HVTWin)) {
783 CBStartPaste(HVTWin,FALSE,0,NULL,0);
784 /* �����s�����������X�N���[����������������
785 �y�[�X�g�������X�N���[�������� */
786 if (ts.AutoScrollOnlyInBottomLine != 0 && WinOrgY != 0) {
787 DispVScroll(SCROLL_BOTTOM, 0);
788 }
789 }
790 }
791 }
792
793 void CVTWindow::ButtonDown(POINT p, int LMR)
794 {
795 HMENU PopupMenu, PopupBase;
796 BOOL mousereport;
797
798 if ((LMR==IdLeftButton) && ControlKey() && (MainMenu==NULL) &&
799 ((ts.MenuFlag & MF_NOPOPUP)==0)) {
800 int i, numItems;
801 char itemText[256];
802
803 InitMenu(&PopupMenu);
804
805 PopupBase = CreatePopupMenu();
806 numItems = GetMenuItemCount(PopupMenu);
807
808 for (i = 0; i < numItems; i++) {
809 HMENU submenu = GetSubMenu(PopupMenu, i);
810
811 if (submenu != NULL) {
812 InitMenuPopup(submenu);
813 }
814
815 if (GetMenuString(PopupMenu, i, itemText, sizeof(itemText), MF_BYPOSITION) != 0) {
816 int state = GetMenuState(PopupMenu, i, MF_BYPOSITION) &
817 (MF_CHECKED | MF_DISABLED | MF_GRAYED | MF_HILITE |
818 MF_MENUBARBREAK | MF_MENUBREAK | MF_SEPARATOR);
819
820 AppendMenu(PopupBase,
821 submenu != NULL ? LOBYTE(state) | MF_POPUP : state,
822 submenu != NULL ? (UINT)submenu : GetMenuItemID(PopupMenu, i),
823 itemText);
824 }
825 }
826
827 ::ClientToScreen(HVTWin, &p);
828 TrackPopupMenu(PopupBase,TPM_LEFTALIGN | TPM_LEFTBUTTON,
829 p.x,p.y,0,HVTWin,NULL);
830 if (WinMenu!=NULL) {
831 DestroyMenu(WinMenu);
832 WinMenu = NULL;
833 }
834 DestroyMenu(PopupBase);
835 DestroyMenu(PopupMenu);
836 PopupMenu = 0;
837 return;
838 }
839
840 mousereport = MouseReport(IdMouseEventBtnDown, LMR, p.x, p.y);
841
842 // added ConfirmPasteMouseRButton (2007.3.17 maya)
843 if ((LMR == IdRightButton) &&
844 !ts.DisablePasteMouseRButton &&
845 ts.ConfirmPasteMouseRButton &&
846 cv.Ready &&
847 !mousereport &&
848 (SendVar==NULL) && (FileVar==NULL) &&
849 (cv.PortType!=IdFile) &&
850 (IsClipboardFormatAvailable(CF_TEXT) ||
851 IsClipboardFormatAvailable(CF_OEMTEXT))) {
852
853 int i, numItems;
854 char itemText[256];
855
856 InitPasteMenu(&PopupMenu);
857 PopupBase = CreatePopupMenu();
858 numItems = GetMenuItemCount(PopupMenu);
859
860 for (i = 0; i < numItems; i++) {
861 if (GetMenuString(PopupMenu, i, itemText, sizeof(itemText), MF_BYPOSITION) != 0) {
862 int state = GetMenuState(PopupMenu, i, MF_BYPOSITION) &
863 (MF_CHECKED | MF_DISABLED | MF_GRAYED | MF_HILITE |
864 MF_MENUBARBREAK | MF_MENUBREAK | MF_SEPARATOR);
865
866 AppendMenu(PopupBase, state,
867 GetMenuItemID(PopupMenu, i), itemText);
868 }
869 }
870
871 ::ClientToScreen(HVTWin, &p);
872 TrackPopupMenu(PopupBase,TPM_LEFTALIGN | TPM_LEFTBUTTON,
873 p.x,p.y,0,HVTWin,NULL);
874 if (WinMenu!=NULL) {
875 DestroyMenu(WinMenu);
876 WinMenu = NULL;
877 }
878 DestroyMenu(PopupBase);
879 DestroyMenu(PopupMenu);
880 PopupMenu = 0;
881 return;
882 }
883
884 if (AfterDblClk && (LMR==IdLeftButton) &&
885 (abs(p.x-DblClkX)<=GetSystemMetrics(SM_CXDOUBLECLK)) &&
886 (abs(p.y-DblClkY)<=GetSystemMetrics(SM_CYDOUBLECLK))) {
887 /* triple click */
888 ::KillTimer(HVTWin, IdDblClkTimer);
889 AfterDblClk = FALSE;
890 BuffTplClk(p.y);
891 LButton = TRUE;
892 TplClk = TRUE;
893 /* for AutoScrolling */
894 ::SetCapture(HVTWin);
895 ::SetTimer(HVTWin, IdScrollTimer, 100, NULL);
896 }
897 else {
898 if (! (LButton || MButton || RButton)) {
899 BOOL box = FALSE;
900
901 // select several pages of output from Tera Term window (2005.5.15 yutaka)
902 if (LMR == IdLeftButton && ShiftKey()) {
903 BuffSeveralPagesSelect(p.x, p.y);
904
905 } else {
906 // Select rectangular block with Alt Key. Delete Shift key.(2005.5.15 yutaka)
907 if (LMR == IdLeftButton && AltKey()) {
908 box = TRUE;
909 }
910
911 // Starting the selection only by a left button.(2007.11.20 maya)
912 if (!ts.SelectOnlyByLButton ||
913 (ts.SelectOnlyByLButton && LMR == IdLeftButton) ) {
914 BuffStartSelect(p.x,p.y, box);
915 TplClk = FALSE;
916
917 /* for AutoScrolling */
918 ::SetCapture(HVTWin);
919 ::SetTimer(HVTWin, IdScrollTimer, 100, NULL);
920 }
921 }
922 }
923
924 switch (LMR) {
925 case IdRightButton:
926 RButton = TRUE;
927 break;
928 case IdMiddleButton:
929 MButton = TRUE;
930 break;
931 case IdLeftButton:
932 LButton = TRUE;
933 break;
934 }
935 }
936 }
937
938 // LogMeIn.exe -> LogMeTT.exe �����l�[�� (2005.2.21 yutaka)
939 char *LogMeTTexename = "LogMeTT.exe";
940 static char LogMeTTMenuString[] = "Log&MeTT";
941 static BOOL isLogMeTTExist()
942 {
943 char LogMeTT[MAX_PATH];
944
945 strncpy_s(LogMeTT, sizeof(LogMeTT), ts.HomeDir, _TRUNCATE);
946 AppendSlash(LogMeTT, sizeof(LogMeTT));
947 strncat_s(LogMeTT, sizeof(LogMeTT), LogMeTTexename, _TRUNCATE);
948
949 if (_access(LogMeTT, 0) == -1) {
950 return FALSE;
951 }
952 return TRUE;
953 }
954
955 void CVTWindow::InitMenu(HMENU *Menu)
956 {
957 *Menu = LoadMenu(AfxGetInstanceHandle(),
958 MAKEINTRESOURCE(IDR_MENU));
959 char uimsg[MAX_UIMSG];
960 int ret;
961
962 FileMenu = GetSubMenu(*Menu,ID_FILE);
963 TransMenu = GetSubMenu(FileMenu,ID_TRANSFER);
964 EditMenu = GetSubMenu(*Menu,ID_EDIT);
965 SetupMenu = GetSubMenu(*Menu,ID_SETUP);
966 ControlMenu = GetSubMenu(*Menu,ID_CONTROL);
967 HelpMenu = GetSubMenu(*Menu,ID_HELPMENU);
968
969 /* LogMeTT ���������m�F�������j���[���������� */
970 if (isLogMeTTExist()) {
971 ::InsertMenu(FileMenu, ID_FILE_PRINT2, MF_STRING | MF_ENABLED | MF_BYCOMMAND,
972 ID_FILE_LOGMEIN, LogMeTTMenuString);
973 ::InsertMenu(FileMenu, ID_FILE_PRINT2, MF_SEPARATOR, NULL, NULL);
974 }
975
976 GetMenuString(*Menu, ID_FILE, uimsg, sizeof(uimsg), MF_BYPOSITION);
977 get_lang_msg("MENU_FILE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
978 ModifyMenu(*Menu, ID_FILE, MF_BYPOSITION, ID_FILE, ts.UIMsg);
979 GetMenuString(FileMenu, ID_FILE_NEWCONNECTION, uimsg, sizeof(uimsg), MF_BYCOMMAND);
980 get_lang_msg("MENU_FILE_NEW", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
981 ModifyMenu(FileMenu, ID_FILE_NEWCONNECTION, MF_BYCOMMAND, ID_FILE_NEWCONNECTION, ts.UIMsg);
982 GetMenuString(FileMenu, ID_FILE_DUPLICATESESSION, uimsg, sizeof(uimsg), MF_BYCOMMAND);
983 get_lang_msg("MENU_FILE_DUPLICATE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
984 ModifyMenu(FileMenu, ID_FILE_DUPLICATESESSION, MF_BYCOMMAND, ID_FILE_DUPLICATESESSION, ts.UIMsg);
985 GetMenuString(FileMenu, ID_FILE_CYGWINCONNECTION, uimsg, sizeof(uimsg), MF_BYCOMMAND);
986 get_lang_msg("MENU_FILE_GYGWIN", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
987 ModifyMenu(FileMenu, ID_FILE_CYGWINCONNECTION, MF_BYCOMMAND, ID_FILE_CYGWINCONNECTION, ts.UIMsg);
988 GetMenuString(FileMenu, ID_FILE_LOG, uimsg, sizeof(uimsg), MF_BYCOMMAND);
989 get_lang_msg("MENU_FILE_LOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
990 ModifyMenu(FileMenu, ID_FILE_LOG, MF_BYCOMMAND, ID_FILE_LOG, ts.UIMsg);
991 GetMenuString(FileMenu, ID_FILE_COMMENTTOLOG, uimsg, sizeof(uimsg), MF_BYCOMMAND);
992 get_lang_msg("MENU_FILE_COMMENTLOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
993 ModifyMenu(FileMenu, ID_FILE_COMMENTTOLOG, MF_BYCOMMAND, ID_FILE_COMMENTTOLOG, ts.UIMsg);
994 GetMenuString(FileMenu, ID_FILE_VIEWLOG, uimsg, sizeof(uimsg), MF_BYCOMMAND);
995 get_lang_msg("MENU_FILE_VIEWLOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
996 ModifyMenu(FileMenu, ID_FILE_VIEWLOG, MF_BYCOMMAND, ID_FILE_VIEWLOG, ts.UIMsg);
997 GetMenuString(FileMenu, ID_FILE_SHOWLOGDIALOG, uimsg, sizeof(uimsg), MF_BYCOMMAND);
998 get_lang_msg("MENU_FILE_SHOWLOGDIALOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
999 ModifyMenu(FileMenu, ID_FILE_SHOWLOGDIALOG, MF_BYCOMMAND, ID_FILE_SHOWLOGDIALOG, ts.UIMsg);
1000 GetMenuString(FileMenu, ID_FILE_SENDFILE, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1001 get_lang_msg("MENU_FILE_SENDFILE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1002 ModifyMenu(FileMenu, ID_FILE_SENDFILE, MF_BYCOMMAND, ID_FILE_SENDFILE, ts.UIMsg);
1003 GetMenuString(FileMenu, ID_FILE_REPLAYLOG, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1004 get_lang_msg("MENU_FILE_REPLAYLOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1005 ModifyMenu(FileMenu, ID_FILE_REPLAYLOG, MF_BYCOMMAND, ID_FILE_REPLAYLOG, ts.UIMsg);
1006 GetMenuString(FileMenu, ID_FILE_CHANGEDIR, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1007 get_lang_msg("MENU_FILE_CHANGEDIR", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1008 ModifyMenu(FileMenu, ID_FILE_CHANGEDIR, MF_BYCOMMAND, ID_FILE_CHANGEDIR, ts.UIMsg);
1009 ret = GetMenuString(FileMenu, ID_FILE_LOGMEIN, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1010 if (ret != 0) {
1011 get_lang_msg("MENU_FILE_LOGMETT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1012 ModifyMenu(FileMenu, ID_FILE_LOGMEIN, MF_BYCOMMAND, ID_FILE_LOGMEIN, ts.UIMsg);
1013 }
1014 GetMenuString(FileMenu, ID_FILE_PRINT2, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1015 get_lang_msg("MENU_FILE_PRINT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1016 ModifyMenu(FileMenu, ID_FILE_PRINT2, MF_BYCOMMAND, ID_FILE_PRINT2, ts.UIMsg);
1017 GetMenuString(FileMenu, ID_FILE_DISCONNECT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1018 get_lang_msg("MENU_FILE_DISCONNECT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1019 ModifyMenu(FileMenu, ID_FILE_DISCONNECT, MF_BYCOMMAND, ID_FILE_DISCONNECT, ts.UIMsg);
1020 GetMenuString(FileMenu, ID_FILE_EXIT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1021 get_lang_msg("MENU_FILE_EXIT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1022 ModifyMenu(FileMenu, ID_FILE_EXIT, MF_BYCOMMAND, ID_FILE_EXIT, ts.UIMsg);
1023
1024 GetMenuString(FileMenu, 9, uimsg, sizeof(uimsg), MF_BYPOSITION);
1025 get_lang_msg("MENU_TRANS", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1026 ModifyMenu(FileMenu, 9, MF_BYPOSITION, 9, ts.UIMsg);
1027
1028 GetMenuString(FileMenu, ID_FILE_KERMITRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1029 get_lang_msg("MENU_TRANS_KERMIT_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1030 ModifyMenu(FileMenu, ID_FILE_KERMITRCV, MF_BYCOMMAND, ID_FILE_KERMITRCV, ts.UIMsg);
1031 GetMenuString(FileMenu, ID_FILE_KERMITGET, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1032 get_lang_msg("MENU_TRANS_KERMIT_GET", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1033 ModifyMenu(FileMenu, ID_FILE_KERMITGET, MF_BYCOMMAND, ID_FILE_KERMITGET, ts.UIMsg);
1034 GetMenuString(FileMenu, ID_FILE_KERMITSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1035 get_lang_msg("MENU_TRANS_KERMIT_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1036 ModifyMenu(FileMenu, ID_FILE_KERMITSEND, MF_BYCOMMAND, ID_FILE_KERMITSEND, ts.UIMsg);
1037 GetMenuString(FileMenu, ID_FILE_KERMITFINISH, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1038 get_lang_msg("MENU_TRANS_KERMIT_FINISH", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1039 ModifyMenu(FileMenu, ID_FILE_KERMITFINISH, MF_BYCOMMAND, ID_FILE_KERMITFINISH, ts.UIMsg);
1040
1041 GetMenuString(FileMenu, ID_FILE_XRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1042 get_lang_msg("MENU_TRANS_X_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1043 ModifyMenu(FileMenu, ID_FILE_XRCV, MF_BYCOMMAND, ID_FILE_XRCV, ts.UIMsg);
1044 GetMenuString(FileMenu, ID_FILE_XSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1045 get_lang_msg("MENU_TRANS_X_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1046 ModifyMenu(FileMenu, ID_FILE_XSEND, MF_BYCOMMAND, ID_FILE_XSEND, ts.UIMsg);
1047
1048 // TBD: YMODEM���������T�|�[�g�������A���j���[���B���B(2008.5.15 yutaka)
1049 //#define YMODEM_TBD
1050 #ifndef YMODEM_TBD
1051 DeleteMenu(TransMenu, 2, MF_BYPOSITION);
1052 DeleteMenu(FileMenu, ID_FILE_YRCV, MF_BYCOMMAND);
1053 DeleteMenu(FileMenu, ID_FILE_YSEND, MF_BYCOMMAND);
1054 #endif
1055 #undef YMODEM_TBD
1056
1057 GetMenuString(FileMenu, ID_FILE_ZRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1058 get_lang_msg("MENU_TRANS_Z_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1059 ModifyMenu(FileMenu, ID_FILE_ZRCV, MF_BYCOMMAND, ID_FILE_ZRCV, ts.UIMsg);
1060 GetMenuString(FileMenu, ID_FILE_ZSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1061 get_lang_msg("MENU_TRANS_Z_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1062 ModifyMenu(FileMenu, ID_FILE_ZSEND, MF_BYCOMMAND, ID_FILE_ZSEND, ts.UIMsg);
1063
1064 GetMenuString(FileMenu, ID_FILE_BPRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1065 get_lang_msg("MENU_TRANS_BP_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1066 ModifyMenu(FileMenu, ID_FILE_BPRCV, MF_BYCOMMAND, ID_FILE_BPRCV, ts.UIMsg);
1067 GetMenuString(FileMenu, ID_FILE_BPSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1068 get_lang_msg("MENU_TRANS_BP_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1069 ModifyMenu(FileMenu, ID_FILE_BPSEND, MF_BYCOMMAND, ID_FILE_BPSEND, ts.UIMsg);
1070
1071 GetMenuString(FileMenu, ID_FILE_QVRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1072 get_lang_msg("MENU_TRANS_QV_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1073 ModifyMenu(FileMenu, ID_FILE_QVRCV, MF_BYCOMMAND, ID_FILE_QVRCV, ts.UIMsg);
1074 GetMenuString(FileMenu, ID_FILE_QVSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1075 get_lang_msg("MENU_TRANS_QV_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1076 ModifyMenu(FileMenu, ID_FILE_QVSEND, MF_BYCOMMAND, ID_FILE_QVSEND, ts.UIMsg);
1077
1078 GetMenuString(*Menu, ID_EDIT, uimsg, sizeof(uimsg), MF_BYPOSITION);
1079 get_lang_msg("MENU_EDIT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1080 ModifyMenu(*Menu, ID_EDIT, MF_BYPOSITION, ID_EDIT, ts.UIMsg);
1081 GetMenuString(EditMenu, ID_EDIT_COPY2, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1082 get_lang_msg("MENU_EDIT_COPY", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1083 ModifyMenu(EditMenu, ID_EDIT_COPY2, MF_BYCOMMAND, ID_EDIT_COPY2, ts.UIMsg);
1084 GetMenuString(EditMenu, ID_EDIT_COPYTABLE, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1085 get_lang_msg("MENU_EDIT_COPYTABLE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1086 ModifyMenu(EditMenu, ID_EDIT_COPYTABLE, MF_BYCOMMAND, ID_EDIT_COPYTABLE, ts.UIMsg);
1087 GetMenuString(EditMenu, ID_EDIT_PASTE2, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1088 get_lang_msg("MENU_EDIT_PASTE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1089 ModifyMenu(EditMenu, ID_EDIT_PASTE2, MF_BYCOMMAND, ID_EDIT_PASTE2, ts.UIMsg);
1090 GetMenuString(EditMenu, ID_EDIT_PASTECR, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1091 get_lang_msg("MENU_EDIT_PASTECR", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1092 ModifyMenu(EditMenu, ID_EDIT_PASTECR, MF_BYCOMMAND, ID_EDIT_PASTECR, ts.UIMsg);
1093 GetMenuString(EditMenu, ID_EDIT_CLEARSCREEN, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1094 get_lang_msg("MENU_EDIT_CLSCREEN", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1095 ModifyMenu(EditMenu, ID_EDIT_CLEARSCREEN, MF_BYCOMMAND, ID_EDIT_CLEARSCREEN, ts.UIMsg);
1096 GetMenuString(EditMenu, ID_EDIT_CLEARBUFFER, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1097 get_lang_msg("MENU_EDIT_CLBUFFER", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1098 ModifyMenu(EditMenu, ID_EDIT_CLEARBUFFER, MF_BYCOMMAND, ID_EDIT_CLEARBUFFER, ts.UIMsg);
1099 GetMenuString(EditMenu, ID_EDIT_CANCELSELECT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1100 get_lang_msg("MENU_EDIT_CANCELSELECT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1101 ModifyMenu(EditMenu, ID_EDIT_CANCELSELECT, MF_BYCOMMAND, ID_EDIT_CANCELSELECT, ts.UIMsg);
1102 GetMenuString(EditMenu, ID_EDIT_SELECTSCREEN, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1103 get_lang_msg("MENU_EDIT_SELECTSCREEN", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1104 ModifyMenu(EditMenu, ID_EDIT_SELECTSCREEN, MF_BYCOMMAND, ID_EDIT_SELECTSCREEN, ts.UIMsg);
1105 GetMenuString(EditMenu, ID_EDIT_SELECTALL, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1106 get_lang_msg("MENU_EDIT_SELECTALL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1107 ModifyMenu(EditMenu, ID_EDIT_SELECTALL, MF_BYCOMMAND, ID_EDIT_SELECTALL, ts.UIMsg);
1108
1109 GetMenuString(*Menu, ID_SETUP, uimsg, sizeof(uimsg), MF_BYPOSITION);
1110 get_lang_msg("MENU_SETUP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1111 ModifyMenu(*Menu, ID_SETUP, MF_BYPOSITION, ID_SETUP, ts.UIMsg);
1112 GetMenuString(SetupMenu, ID_SETUP_TERMINAL, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1113 get_lang_msg("MENU_SETUP_TERMINAL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1114 ModifyMenu(SetupMenu, ID_SETUP_TERMINAL, MF_BYCOMMAND, ID_SETUP_TERMINAL, ts.UIMsg);
1115 GetMenuString(SetupMenu, ID_SETUP_WINDOW, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1116 get_lang_msg("MENU_SETUP_WINDOW", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1117 ModifyMenu(SetupMenu, ID_SETUP_WINDOW, MF_BYCOMMAND, ID_SETUP_WINDOW, ts.UIMsg);
1118 GetMenuString(SetupMenu, ID_SETUP_FONT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1119 get_lang_msg("MENU_SETUP_FONT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1120 ModifyMenu(SetupMenu, ID_SETUP_FONT, MF_BYCOMMAND, ID_SETUP_FONT, ts.UIMsg);
1121 GetMenuString(SetupMenu, ID_SETUP_KEYBOARD, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1122 get_lang_msg("MENU_SETUP_KEYBOARD", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1123 ModifyMenu(SetupMenu, ID_SETUP_KEYBOARD, MF_BYCOMMAND, ID_SETUP_KEYBOARD, ts.UIMsg);
1124 GetMenuString(SetupMenu, ID_SETUP_SERIALPORT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1125 get_lang_msg("MENU_SETUP_SERIALPORT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1126 ModifyMenu(SetupMenu, ID_SETUP_SERIALPORT, MF_BYCOMMAND, ID_SETUP_SERIALPORT, ts.UIMsg);
1127 GetMenuString(SetupMenu, ID_SETUP_TCPIP, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1128 get_lang_msg("MENU_SETUP_TCPIP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1129 ModifyMenu(SetupMenu, ID_SETUP_TCPIP, MF_BYCOMMAND, ID_SETUP_TCPIP, ts.UIMsg);
1130 GetMenuString(SetupMenu, ID_SETUP_GENERAL, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1131 get_lang_msg("MENU_SETUP_GENERAL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1132 ModifyMenu(SetupMenu, ID_SETUP_GENERAL, MF_BYCOMMAND, ID_SETUP_GENERAL, ts.UIMsg);
1133 GetMenuString(SetupMenu, ID_SETUP_ADDITIONALSETTINGS, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1134 get_lang_msg("MENU_SETUP_ADDITION", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1135 ModifyMenu(SetupMenu, ID_SETUP_ADDITIONALSETTINGS, MF_BYCOMMAND, ID_SETUP_ADDITIONALSETTINGS, ts.UIMsg);
1136 GetMenuString(SetupMenu, ID_SETUP_SAVE, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1137 get_lang_msg("MENU_SETUP_SAVE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1138 ModifyMenu(SetupMenu, ID_SETUP_SAVE, MF_BYCOMMAND, ID_SETUP_SAVE, ts.UIMsg);
1139 GetMenuString(SetupMenu, ID_SETUP_RESTORE, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1140 get_lang_msg("MENU_SETUP_RESTORE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1141 ModifyMenu(SetupMenu, ID_SETUP_RESTORE, MF_BYCOMMAND, ID_SETUP_RESTORE, ts.UIMsg);
1142 GetMenuString(SetupMenu, ID_SETUP_LOADKEYMAP, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1143 get_lang_msg("MENU_SETUP_LOADKEYMAP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1144 ModifyMenu(SetupMenu, ID_SETUP_LOADKEYMAP, MF_BYCOMMAND, ID_SETUP_LOADKEYMAP, ts.UIMsg);
1145
1146 GetMenuString(*Menu, ID_CONTROL, uimsg, sizeof(uimsg), MF_BYPOSITION);
1147 get_lang_msg("MENU_CONTROL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1148 ModifyMenu(*Menu, ID_CONTROL, MF_BYPOSITION, ID_CONTROL, ts.UIMsg);
1149 GetMenuString(ControlMenu, ID_CONTROL_RESETTERMINAL, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1150 get_lang_msg("MENU_CONTROL_RESET", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1151 ModifyMenu(ControlMenu, ID_CONTROL_RESETTERMINAL, MF_BYCOMMAND, ID_CONTROL_RESETTERMINAL, ts.UIMsg);
1152 GetMenuString(ControlMenu, ID_CONTROL_RESETREMOTETITLE, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1153 get_lang_msg("MENU_CONTROL_RESETTITLE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1154 ModifyMenu(ControlMenu, ID_CONTROL_RESETREMOTETITLE, MF_BYCOMMAND, ID_CONTROL_RESETREMOTETITLE, ts.UIMsg);
1155 GetMenuString(ControlMenu, ID_CONTROL_AREYOUTHERE, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1156 get_lang_msg("MENU_CONTROL_AREYOUTHERE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1157 ModifyMenu(ControlMenu, ID_CONTROL_AREYOUTHERE, MF_BYCOMMAND, ID_CONTROL_AREYOUTHERE, ts.UIMsg);
1158 GetMenuString(ControlMenu, ID_CONTROL_SENDBREAK, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1159 get_lang_msg("MENU_CONTROL_SENDBREAK", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1160 ModifyMenu(ControlMenu, ID_CONTROL_SENDBREAK, MF_BYCOMMAND, ID_CONTROL_SENDBREAK, ts.UIMsg);
1161 GetMenuString(ControlMenu, ID_CONTROL_RESETPORT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1162 get_lang_msg("MENU_CONTROL_RESETPORT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1163 ModifyMenu(ControlMenu, ID_CONTROL_RESETPORT, MF_BYCOMMAND, ID_CONTROL_RESETPORT, ts.UIMsg);
1164 GetMenuString(ControlMenu, ID_CONTROL_BROADCASTCOMMAND, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1165 get_lang_msg("MENU_CONTROL_BROADCAST", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1166 ModifyMenu(ControlMenu, ID_CONTROL_BROADCASTCOMMAND, MF_BYCOMMAND, ID_CONTROL_BROADCASTCOMMAND, ts.UIMsg);
1167 GetMenuString(ControlMenu, ID_CONTROL_OPENTEK, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1168 get_lang_msg("MENU_CONTROL_OPENTEK", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1169 ModifyMenu(ControlMenu, ID_CONTROL_OPENTEK, MF_BYCOMMAND, ID_CONTROL_OPENTEK, ts.UIMsg);
1170 GetMenuString(ControlMenu, ID_CONTROL_CLOSETEK, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1171 get_lang_msg("MENU_CONTROL_CLOSETEK", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1172 ModifyMenu(ControlMenu, ID_CONTROL_CLOSETEK, MF_BYCOMMAND, ID_CONTROL_CLOSETEK, ts.UIMsg);
1173 GetMenuString(ControlMenu, ID_CONTROL_MACRO, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1174 get_lang_msg("MENU_CONTROL_MACRO", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1175 ModifyMenu(ControlMenu, ID_CONTROL_MACRO, MF_BYCOMMAND, ID_CONTROL_MACRO, ts.UIMsg);
1176
1177 GetMenuString(*Menu, ID_HELPMENU, uimsg, sizeof(uimsg), MF_BYPOSITION);
1178 get_lang_msg("MENU_HELP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1179 ModifyMenu(*Menu, ID_HELPMENU, MF_BYPOSITION, ID_HELPMENU, ts.UIMsg);
1180 GetMenuString(HelpMenu, ID_HELP_INDEX2, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1181 get_lang_msg("MENU_HELP_INDEX", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1182 ModifyMenu(HelpMenu, ID_HELP_INDEX2, MF_BYCOMMAND, ID_HELP_INDEX2, ts.UIMsg);
1183 GetMenuString(HelpMenu, ID_HELP_ABOUT, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1184 get_lang_msg("MENU_HELP_ABOUT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1185 ModifyMenu(HelpMenu, ID_HELP_ABOUT, MF_BYCOMMAND, ID_HELP_ABOUT, ts.UIMsg);
1186
1187 if ((ts.MenuFlag & MF_SHOWWINMENU) !=0) {
1188 WinMenu = CreatePopupMenu();
1189 get_lang_msg("MENU_WINDOW", ts.UIMsg, sizeof(ts.UIMsg),
1190 "&Window", ts.UILanguageFile);
1191 ::InsertMenu(*Menu,ID_HELPMENU,
1192 MF_STRING | MF_ENABLED | MF_POPUP | MF_BYPOSITION,
1193 (int)WinMenu, ts.UIMsg);
1194 }
1195
1196 TTXModifyMenu(*Menu); /* TTPLUG */
1197 }
1198
1199 void CVTWindow::InitMenuPopup(HMENU SubMenu)
1200 {
1201 if ( SubMenu == FileMenu )
1202 {
1203 if ( Connecting ) {
1204 EnableMenuItem(FileMenu,ID_FILE_NEWCONNECTION,MF_BYCOMMAND | MF_GRAYED);
1205 } else {
1206 EnableMenuItem(FileMenu,ID_FILE_NEWCONNECTION,MF_BYCOMMAND | MF_ENABLED);
1207 }
1208
1209 if ( (! cv.Ready) || (SendVar!=NULL) ||
1210 (FileVar!=NULL) || (cv.PortType==IdFile) ) {
1211 EnableMenuItem(FileMenu,ID_FILE_SENDFILE,MF_BYCOMMAND | MF_GRAYED);
1212 EnableMenuItem(FileMenu,ID_TRANSFER,MF_BYPOSITION | MF_GRAYED); /* Transfer */
1213 EnableMenuItem(FileMenu,ID_FILE_CHANGEDIR,MF_BYCOMMAND | MF_GRAYED);
1214 EnableMenuItem(FileMenu,ID_FILE_DISCONNECT,MF_BYCOMMAND | MF_GRAYED);
1215 EnableMenuItem(FileMenu,ID_FILE_DUPLICATESESSION,MF_BYCOMMAND | MF_GRAYED);
1216 }
1217 else {
1218 EnableMenuItem(FileMenu,ID_FILE_SENDFILE,MF_BYCOMMAND | MF_ENABLED);
1219 EnableMenuItem(FileMenu,ID_TRANSFER,MF_BYPOSITION | MF_ENABLED); /* Transfer */
1220 EnableMenuItem(FileMenu,ID_FILE_CHANGEDIR,MF_BYCOMMAND | MF_ENABLED);
1221 EnableMenuItem(FileMenu,ID_FILE_DISCONNECT,MF_BYCOMMAND | MF_ENABLED);
1222 EnableMenuItem(FileMenu,ID_FILE_DUPLICATESESSION,MF_BYCOMMAND | MF_ENABLED);
1223 }
1224
1225 // �V�K���j���[������ (2004.12.5 yutaka)
1226 EnableMenuItem(FileMenu,ID_FILE_CYGWINCONNECTION,MF_BYCOMMAND | MF_ENABLED);
1227 EnableMenuItem(FileMenu,ID_FILE_TERATERMMENU,MF_BYCOMMAND | MF_ENABLED);
1228 EnableMenuItem(FileMenu,ID_FILE_LOGMEIN,MF_BYCOMMAND | MF_ENABLED);
1229
1230 // XXX: �������u�����������Alog���O���C�����������B (2005.2.1 yutaka)
1231 if (LogVar!=NULL) { // ���O�������[�h������
1232 EnableMenuItem(FileMenu,ID_FILE_LOG,MF_BYCOMMAND | MF_GRAYED);
1233 EnableMenuItem(FileMenu,ID_FILE_COMMENTTOLOG, MF_BYCOMMAND | MF_ENABLED);
1234 EnableMenuItem(FileMenu,ID_FILE_VIEWLOG, MF_BYCOMMAND | MF_ENABLED);
1235 if (ts.LogHideDialog) {
1236 EnableMenuItem(FileMenu,ID_FILE_SHOWLOGDIALOG, MF_BYCOMMAND | MF_ENABLED);
1237 }
1238 else {
1239 EnableMenuItem(FileMenu,ID_FILE_SHOWLOGDIALOG, MF_BYCOMMAND | MF_GRAYED);
1240 }
1241 } else {
1242 EnableMenuItem(FileMenu,ID_FILE_LOG,MF_BYCOMMAND | MF_ENABLED);
1243 EnableMenuItem(FileMenu,ID_FILE_COMMENTTOLOG, MF_BYCOMMAND | MF_GRAYED);
1244 EnableMenuItem(FileMenu,ID_FILE_VIEWLOG, MF_BYCOMMAND | MF_GRAYED);
1245 EnableMenuItem(FileMenu,ID_FILE_SHOWLOGDIALOG, MF_BYCOMMAND | MF_GRAYED);
1246 }
1247
1248 }
1249 else if ( SubMenu == TransMenu )
1250 {
1251 if ((cv.PortType==IdSerial) &&
1252 ((ts.DataBit==IdDataBit7) || (ts.Flow==IdFlowX))) {
1253 EnableMenuItem(TransMenu,1,MF_BYPOSITION | MF_GRAYED); /* XMODEM */
1254 EnableMenuItem(TransMenu,4,MF_BYPOSITION | MF_GRAYED); /* Quick-VAN */
1255 }
1256 else {
1257 EnableMenuItem(TransMenu,1,MF_BYPOSITION | MF_ENABLED); /* XMODEM */
1258 EnableMenuItem(TransMenu,4,MF_BYPOSITION | MF_ENABLED); /* Quick-VAN */
1259 }
1260 if ((cv.PortType==IdSerial) &&
1261 (ts.DataBit==IdDataBit7)) {
1262 EnableMenuItem(TransMenu,2,MF_BYPOSITION | MF_GRAYED); /* ZMODEM */
1263 EnableMenuItem(TransMenu,3,MF_BYPOSITION | MF_GRAYED); /* B-Plus */
1264 }
1265 else {
1266 EnableMenuItem(TransMenu,2,MF_BYPOSITION | MF_ENABLED); /* ZMODEM */
1267 EnableMenuItem(TransMenu,3,MF_BYPOSITION | MF_ENABLED); /* B-Plus */
1268 }
1269 }
1270 else if (SubMenu == EditMenu)
1271 {
1272 if (Selected) {
1273 EnableMenuItem(EditMenu,ID_EDIT_COPY2,MF_BYCOMMAND | MF_ENABLED);
1274 EnableMenuItem(EditMenu,ID_EDIT_COPYTABLE,MF_BYCOMMAND | MF_ENABLED);
1275 }
1276 else {
1277 EnableMenuItem(EditMenu,ID_EDIT_COPY2,MF_BYCOMMAND | MF_GRAYED);
1278 EnableMenuItem(EditMenu,ID_EDIT_COPYTABLE,MF_BYCOMMAND | MF_GRAYED);
1279 }
1280 if (cv.Ready &&
1281 (SendVar==NULL) && (FileVar==NULL) &&
1282 (cv.PortType!=IdFile) &&
1283 (IsClipboardFormatAvailable(CF_TEXT) ||
1284 IsClipboardFormatAvailable(CF_OEMTEXT))) {
1285 EnableMenuItem(EditMenu,ID_EDIT_PASTE2,MF_BYCOMMAND | MF_ENABLED);
1286 EnableMenuItem(EditMenu,ID_EDIT_PASTECR,MF_BYCOMMAND | MF_ENABLED);
1287 }
1288 else {
1289 EnableMenuItem(EditMenu,ID_EDIT_PASTE2,MF_BYCOMMAND | MF_GRAYED);
1290 EnableMenuItem(EditMenu,ID_EDIT_PASTECR,MF_BYCOMMAND | MF_GRAYED);
1291 }
1292 }
1293 else if (SubMenu == SetupMenu)
1294 if (cv.Ready &&
1295 ((cv.PortType==IdTCPIP) || (cv.PortType==IdFile)) ||
1296 (SendVar!=NULL) || (FileVar!=NULL) || Connecting)
1297 EnableMenuItem(SetupMenu,ID_SETUP_SERIALPORT,MF_BYCOMMAND | MF_GRAYED);
1298 else
1299 EnableMenuItem(SetupMenu,ID_SETUP_SERIALPORT,MF_BYCOMMAND | MF_ENABLED);
1300
1301 else if (SubMenu == ControlMenu)
1302 {
1303 if (cv.Ready &&
1304 (SendVar==NULL) && (FileVar==NULL)) {
1305 EnableMenuItem(ControlMenu,ID_CONTROL_SENDBREAK,MF_BYCOMMAND | MF_ENABLED);
1306 if (cv.PortType==IdSerial)
1307 EnableMenuItem(ControlMenu,ID_CONTROL_RESETPORT,MF_BYCOMMAND | MF_ENABLED);
1308 else
1309 EnableMenuItem(ControlMenu,ID_CONTROL_RESETPORT,MF_BYCOMMAND | MF_GRAYED);
1310 }
1311 else {
1312 EnableMenuItem(ControlMenu,ID_CONTROL_SENDBREAK,MF_BYCOMMAND | MF_GRAYED);
1313 EnableMenuItem(ControlMenu,ID_CONTROL_RESETPORT,MF_BYCOMMAND | MF_GRAYED);
1314 }
1315
1316 if (cv.Ready && cv.TelFlag && (FileVar==NULL))
1317 EnableMenuItem(ControlMenu,ID_CONTROL_AREYOUTHERE,MF_BYCOMMAND | MF_ENABLED);
1318 else
1319 EnableMenuItem(ControlMenu,ID_CONTROL_AREYOUTHERE,MF_BYCOMMAND | MF_GRAYED);
1320
1321 if (HTEKWin==0)
1322 EnableMenuItem(ControlMenu,ID_CONTROL_CLOSETEK,MF_BYCOMMAND | MF_GRAYED);
1323 else
1324 EnableMenuItem(ControlMenu,ID_CONTROL_CLOSETEK,MF_BYCOMMAND | MF_ENABLED);
1325
1326 if ((ConvH!=0) || (FileVar!=NULL))
1327 EnableMenuItem(ControlMenu,ID_CONTROL_MACRO,MF_BYCOMMAND | MF_GRAYED);
1328 else
1329 EnableMenuItem(ControlMenu,ID_CONTROL_MACRO,MF_BYCOMMAND | MF_ENABLED);
1330
1331 }
1332 else if (SubMenu == WinMenu)
1333 {
1334 SetWinMenu(WinMenu, ts.UIMsg, sizeof(ts.UIMsg), ts.UILanguageFile, 1);
1335 }
1336
1337 TTXModifyPopupMenu(SubMenu); /* TTPLUG */
1338 }
1339
1340 // added ConfirmPasteMouseRButton (2007.3.17 maya)
1341 void CVTWindow::InitPasteMenu(HMENU *Menu)
1342 {
1343 char uimsg[MAX_UIMSG];
1344
1345 *Menu = LoadMenu(AfxGetInstanceHandle(),
1346 MAKEINTRESOURCE(IDR_PASTEMENU));
1347
1348 GetMenuString(*Menu, ID_EDIT_PASTE2, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1349 get_lang_msg("MENU_EDIT_PASTE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1350 ModifyMenu(*Menu, ID_EDIT_PASTE2, MF_BYCOMMAND, ID_EDIT_PASTE2, ts.UIMsg);
1351 GetMenuString(*Menu, ID_EDIT_PASTECR, uimsg, sizeof(uimsg), MF_BYCOMMAND);
1352 get_lang_msg("MENU_EDIT_PASTECR", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
1353 ModifyMenu(*Menu, ID_EDIT_PASTECR, MF_BYCOMMAND, ID_EDIT_PASTECR, ts.UIMsg);
1354 }
1355
1356 void CVTWindow::ResetSetup()
1357 {
1358 ChangeFont();
1359 BuffChangeWinSize(WinWidth,WinHeight);
1360 ChangeCaret();
1361
1362 if (cv.Ready) {
1363 ts.PortType = cv.PortType;
1364 if (cv.PortType==IdSerial) {
1365 /* if serial port, change port parameters */
1366 ts.ComPort = cv.ComPort;
1367 CommResetSerial(&ts, &cv, TRUE);
1368 }
1369 }
1370
1371 /* setup terminal */
1372 SetupTerm();
1373
1374 /* background and ANSI color */
1375 #ifdef ALPHABLEND_TYPE2
1376 BGInitialize();
1377 BGSetupPrimary(TRUE);
1378 // 2006/03/17 by 337 : Alpha�l���������X
1379 // Layered��������������������������������
1380 if (ts.EtermLookfeel.BGUseAlphaBlendAPI) {
1381 MySetLayeredWindowAttributes(HVTWin, 0, ts.AlphaBlend, LWA_ALPHA);
1382 }
1383 #else
1384 DispApplyANSIColor();
1385 #endif
1386 DispSetNearestColors(IdBack, IdFore+8, NULL);
1387
1388 /* setup window */
1389 ChangeWin();
1390
1391 /* Language & IME */
1392 ResetIME();
1393
1394 /* change TEK window */
1395 if (pTEKWin != NULL)
1396 ((CTEKWindow *)pTEKWin)->RestoreSetup();
1397 }
1398
1399 void CVTWindow::RestoreSetup()
1400 {
1401 char TempDir[MAXPATHLEN];
1402 char TempName[MAXPATHLEN];
1403
1404 if ( strlen(ts.SetupFName)==0 )
1405 return;
1406
1407 ExtractFileName(ts.SetupFName,TempName,sizeof(TempName));
1408 ExtractDirName(ts.SetupFName,TempDir);
1409 if (TempDir[0]==0)
1410 strncpy_s(TempDir, sizeof(TempDir),ts.HomeDir, _TRUNCATE);
1411 FitFileName(TempName,sizeof(TempName),".INI");
1412
1413 strncpy_s(ts.SetupFName, sizeof(ts.SetupFName),TempDir, _TRUNCATE);
1414 AppendSlash(ts.SetupFName,sizeof(ts.SetupFName));
1415 strncat_s(ts.SetupFName,sizeof(ts.SetupFName),TempName,_TRUNCATE);
1416
1417 if (LoadTTSET())
1418 (*ReadIniFile)(ts.SetupFName,&ts);
1419 FreeTTSET();
1420
1421 #if 0
1422 ChangeDefaultSet(&ts,NULL);
1423 #endif
1424
1425 ResetSetup();
1426 }
1427
1428 /* called by the [Setup] Terminal command */
1429 void CVTWindow::SetupTerm()
1430 {
1431 if (ts.Language==IdJapanese)
1432 ResetCharSet();
1433 if (ts.Language==IdKorean) // HKS
1434 ResetCharSet();
1435 cv.CRSend = ts.CRSend;
1436
1437 // for russian mode
1438 cv.RussHost = ts.RussHost;
1439 cv.RussClient = ts.RussClient;
1440
1441 if (cv.Ready && cv.TelFlag && (ts.TelEcho>0))
1442 TelChangeEcho();
1443
1444 if ((ts.TerminalWidth!=NumOfColumns) ||
1445 (ts.TerminalHeight!=NumOfLines-StatusLine)) {
1446 LockBuffer();
1447 HideStatusLine();
1448 ChangeTerminalSize(ts.TerminalWidth,
1449 ts.TerminalHeight);
1450 UnlockBuffer();
1451 }
1452 else if ((ts.TermIsWin>0) &&
1453 ((ts.TerminalWidth!=WinWidth) ||
1454 (ts.TerminalHeight!=WinHeight-StatusLine)))
1455 BuffChangeWinSize(ts.TerminalWidth,ts.TerminalHeight+StatusLine);
1456 }
1457
1458 void CVTWindow::Startup()
1459 {
1460 /* auto log */
1461 /* OnCommOpen ���J�n�������������������J�n������ (2007.5.14 maya) */
1462
1463 if ((TopicName[0]==0) && (ts.MacroFN[0]!=0)) {
1464 // start the macro specified in the command line or setup file
1465 RunMacro(ts.MacroFN,TRUE);
1466 ts.MacroFN[0] = 0;
1467 }
1468 else {// start connection
1469 if (TopicName[0]!=0)
1470 cv.NoMsg=1; /* suppress error messages */
1471 ::PostMessage(HVTWin,WM_USER_COMMSTART,0,0);
1472 }
1473 }
1474
1475 void CVTWindow::OpenTEK()
1476 {
1477 ActiveWin = IdTEK;
1478 if (HTEKWin==NULL) {
1479 pTEKWin = new CTEKWindow();
1480 }
1481 else {
1482 ::ShowWindow(HTEKWin,SW_SHOWNORMAL);
1483 ::SetFocus(HTEKWin);
1484 }
1485 }
1486
1487 /////////////////////////////////////////////////////////////////////////////
1488 // CVTWindow message handler
1489
1490 LRESULT CVTWindow::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
1491 {
1492 LRESULT Result;
1493
1494 if (message == MsgDlgHelp) {
1495 OnDlgHelp(wParam,lParam);
1496 return 0;
1497 }
1498 else if ((ts.HideTitle>0) &&
1499 (message == WM_NCHITTEST)) {
1500 Result = CFrameWnd::DefWindowProc(message,wParam,lParam);
1501 if ((Result==HTCLIENT) && AltKey())
1502 #ifdef ALPHABLEND_TYPE2
1503 if(ShiftKey())
1504 Result = HTBOTTOMRIGHT;
1505 else
1506 Result = HTCAPTION;
1507 #else
1508 Result = HTCAPTION;
1509 #endif
1510 return Result;
1511 }
1512
1513 return (CFrameWnd::DefWindowProc(message,wParam,lParam));
1514 }
1515
1516 BOOL CVTWindow::OnCommand(WPARAM wParam, LPARAM lParam)
1517 {
1518 WORD wID = LOWORD(wParam);
1519 WORD wNotifyCode = HIWORD(wParam);
1520
1521 if (wNotifyCode==1) {
1522 switch (wID) {
1523 case ID_ACC_SENDBREAK:
1524 // added DisableAcceleratorSendBreak (2007.3.17 maya)
1525 if (!ts.DisableAcceleratorSendBreak)
1526 OnControlSendBreak();
1527 return TRUE;
1528 case ID_ACC_PASTECR:
1529 OnEditPasteCR();
1530 return TRUE;
1531 case ID_ACC_AREYOUTHERE:
1532 OnControlAreYouThere();
1533 return TRUE;
1534 case ID_ACC_PASTE:
1535 OnEditPaste();
1536 return TRUE;
1537 case ID_ACC_DISCONNECT:
1538 OnFileDisconnect();
1539 return TRUE;
1540 }
1541 if (ActiveWin==IdVT) {
1542 switch (wID) {
1543 case ID_ACC_NEWCONNECTION:
1544 OnFileNewConnection();
1545 return TRUE;
1546 case ID_ACC_COPY:
1547 OnEditCopy();
1548 return TRUE;
1549 case ID_ACC_PRINT:
1550 OnFilePrint();
1551 return TRUE;
1552 case ID_ACC_EXIT:
1553 OnFileExit();
1554 return TRUE;
1555 }
1556 }
1557 else { // transfer accelerator message to TEK win
1558 switch (wID) {
1559 case ID_ACC_COPY:
1560 ::PostMessage(HTEKWin,WM_COMMAND,ID_TEKEDIT_COPY,0);
1561 return TRUE;
1562 case ID_ACC_PRINT:
1563 ::PostMessage(HTEKWin,WM_COMMAND,ID_TEKFILE_PRINT,0);
1564 return TRUE;
1565 case ID_ACC_EXIT:
1566 ::PostMessage(HTEKWin,WM_COMMAND,ID_TEKFILE_EXIT,0);
1567 return TRUE;
1568 }
1569 }
1570 }
1571
1572 if ((wID>=ID_WINDOW_1) && (wID<ID_WINDOW_1+9)) {
1573 SelectWin(wID-ID_WINDOW_1);
1574 return TRUE;
1575 }
1576 else {
1577 if (TTXProcessCommand(HVTWin, wID))
1578 return TRUE;
1579 else /* TTPLUG */
1580 return CFrameWnd::OnCommand(wParam, lParam);
1581 }
1582 }
1583
1584 void CVTWindow::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
1585 {
1586 DispSetActive(nState!=WA_INACTIVE);
1587 }
1588
1589 void CVTWindow::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
1590 {
1591 unsigned int i;
1592 char Code;
1593
1594 if (!KeybEnabled || (TalkStatus!=IdTalkKeyb))
1595 return;
1596
1597 if ((ts.MetaKey>0) && AltKey()) {
1598 ::PostMessage(HVTWin,WM_SYSCHAR,nChar,MAKELONG(nRepCnt,nFlags));
1599 return;
1600 }
1601 Code = nChar;
1602
1603 if ((ts.Language==IdRussian) &&
1604 ((BYTE)Code>=128))
1605 Code = (char)RussConv(ts.RussKeyb,ts.RussClient,(BYTE)Code);
1606
1607 for (i=1 ; i<=nRepCnt ; i++) {
1608 CommTextOut(&cv,&Code,1);
1609 if (ts.LocalEcho>0)
1610 CommTextEcho(&cv,&Code,1);
1611 }
1612
1613 /* �����s�����������X�N���[����������������
1614 �����[�g�����L�[�������M���X�N���[�������� */
1615 if (ts.AutoScrollOnlyInBottomLine != 0 && WinOrgY != 0) {
1616 DispVScroll(SCROLL_BOTTOM, 0);
1617 }
1618 }
1619
1620 /* copy from ttset.c*/
1621 static void WriteInt2(PCHAR Sect, PCHAR Key, PCHAR FName, int i1, int i2)
1622 {
1623 char Temp[32];
1624 _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%d,%d", i1, i2);
1625 WritePrivateProfileString(Sect, Key, Temp, FName);
1626 }
1627
1628 static void SaveVTPos()
1629 {
1630 #define Section "Tera Term"
1631 if (ts.SaveVTWinPos) {
1632 /* VT win position */
1633 WriteInt2(Section, "VTPos", ts.SetupFName, ts.VTPos.x, ts.VTPos.y);
1634
1635 /* VT terminal size */
1636 WriteInt2(Section, "TerminalSize", ts.SetupFName,
1637 ts.TerminalWidth, ts.TerminalHeight);
1638 }
1639 }
1640
1641 void CVTWindow::OnClose()
1642 {
1643 if ((HTEKWin!=NULL) && ! ::IsWindowEnabled(HTEKWin)) {
1644 MessageBeep(0);
1645 return;
1646 }
1647 get_lang_msg("MSG_DISCONNECT_CONF", ts.UIMsg, sizeof(ts.UIMsg),
1648 "Disconnect?", ts.UILanguageFile);
1649 if (cv.Ready && (cv.PortType==IdTCPIP) &&
1650 ((ts.PortFlag & PF_CONFIRMDISCONN) != 0) &&
1651 ! CloseTT &&
1652 (::MessageBox(HVTWin, ts.UIMsg, "Tera Term",
1653 MB_OKCANCEL | MB_ICONEXCLAMATION | MB_DEFBUTTON2)==IDCANCEL))
1654 return;
1655
1656 FileTransEnd(0);
1657 ProtoEnd();
1658
1659 SaveVTPos();
1660 DestroyWindow();
1661 }
1662
1663 void CVTWindow::OnDestroy()
1664 {
1665 // remove this window from the window list
1666 UnregWin(HVTWin);
1667
1668 EndKeyboard();
1669
1670 /* Disable drag-drop */
1671 ::DragAcceptFiles(HVTWin,FALSE);
1672
1673 EndDDE();
1674
1675 if (cv.TelFlag)
1676 EndTelnet();
1677 CommClose(&cv);
1678
1679 OpenHelp(HVTWin,HH_CLOSE_ALL,0);
1680
1681 FreeIME();
1682 FreeTTSET();
1683 do { }
1684 while (FreeTTDLG());
1685
1686 do { }
1687 while (FreeTTFILE());
1688
1689 if (HTEKWin != NULL)
1690 ::DestroyWindow(HTEKWin);
1691
1692 EndDisp();
1693
1694 FreeBuffer();
1695
1696 CFrameWnd::OnDestroy();
1697 TTXEnd(); /* TTPLUG */
1698 }
1699
1700 // MessageBox���{�^�������X�p�n���h��
1701 static LRESULT CALLBACK MsgBoxHootProc( INT hc, WPARAM wParam, LPARAM lParam )
1702 {
1703 if ( hc == HCBT_ACTIVATE ) {
1704 // &Send file �� S&CP ���������A�N�Z�����[�^�L�[����������
1705 get_lang_msg("FILEDLG_TRANS_TITLE_SENDFILE", ts.UIMsg, sizeof(ts.UIMsg),
1706 "Send file", ts.UILanguageFile);
1707 SetDlgItemText( (HWND)wParam, IDOK, ts.UIMsg );
1708 SetDlgItemText( (HWND)wParam, IDYES, ts.UIMsg );
1709 SetDlgItemText( (HWND)wParam, IDNO, "SCP" );
1710
1711 return FALSE;
1712 }
1713
1714 return CallNextHookEx( NULL, hc, wParam, lParam );
1715 }
1716
1717 void CVTWindow::OnDropFiles(HDROP hDropInfo)
1718 {
1719 ::SetForegroundWindow(HVTWin);
1720 if (cv.Ready && (SendVar==NULL) && NewFileVar(&SendVar))
1721 {
1722 if (DragQueryFile(hDropInfo,0,SendVar->FullName,
1723 sizeof(SendVar->FullName))>0)
1724 {
1725 DWORD attr;
1726 char *ptr, *q;
1727 char tmpbuf[_MAX_PATH * 2];
1728
1729 // �f�B���N�g�����������t���p�X�����\���t���� (2004.11.3 yutaka)
1730 attr = GetFileAttributes(SendVar->FullName);
1731 if (attr != -1 && (attr & FILE_ATTRIBUTE_DIRECTORY)) {
1732 ptr = SendVar->FullName;
1733 // �p�X���������� \ -> / ��
1734 setlocale(LC_ALL, ts.Locale);
1735 while (*ptr) {
1736 if (isleadbyte(*ptr)) { // multi-byte
1737 ptr += 2;
1738 continue;
1739 }
1740 if (*ptr == '\\')
1741 *ptr = '/';
1742 ptr++;
1743 }
1744
1745 // �p�X���������������G�X�P�[�v����
1746 q = tmpbuf;
1747 ptr = SendVar->FullName;
1748 while (*ptr) {
1749 if (*ptr == ' ')
1750 *q++ = '\\';
1751 *q++ = *ptr;
1752 ptr++;
1753 }
1754 *q = '\0'; // null-terminate
1755
1756 ptr = tmpbuf;
1757
1758 // console�����M
1759 while (*ptr) {
1760 FSOut1(*ptr);
1761 if (ts.LocalEcho > 0) {
1762 FSEcho1(*ptr);
1763 }
1764 ptr++;
1765 }
1766 FreeFileVar(&SendVar); // �������Y������
1767
1768 } else {
1769 // Confirm send a file when drag and drop (2007.12.28 maya)
1770 if (ts.ConfirmFileDragAndDrop) {
1771 // ���������t�@�C�������e�����������O���A���[�U���������������s���B(2006.1.21 yutaka)
1772 // MessageBox��SCP���I�������������������B(2008.1.25 yutaka)
1773 char uimsg[MAX_UIMSG];
1774 HHOOK hook = NULL;
1775 DWORD dwThreadID = GetCurrentThreadId();
1776 int ret;
1777
1778 get_lang_msg("MSG_DANDD_CONF_TITLE", uimsg, sizeof(uimsg),
1779 "Tera Term: File Drag and Drop", ts.UILanguageFile);
1780 get_lang_msg("MSG_DANDD_CONF", ts.UIMsg, sizeof(ts.UIMsg),
1781 "Are you sure that you want to send the file content?", ts.UILanguageFile);
1782
1783 hook = SetWindowsHookEx( WH_CBT, MsgBoxHootProc, NULL, dwThreadID );
1784 if (cv.isSSH == 2) {
1785 ret = MessageBox(ts.UIMsg, uimsg, MB_YESNOCANCEL | MB_ICONINFORMATION | MB_DEFBUTTON3);
1786 }
1787 else {
1788 // SSH2 �������������������� "SCP" ���o������ (2008.1.25 maya)
1789 ret = MessageBox(ts.UIMsg, uimsg, MB_OKCANCEL | MB_ICONINFORMATION | MB_DEFBUTTON2);
1790 }
1791 UnhookWindowsHookEx( hook );
1792
1793 if (ret == IDOK || ret == IDYES) { // sendfile
1794 SendVar->DirLen = 0;
1795 ts.TransBin = 0;
1796 FileSendStart();
1797
1798 } else if (ret == IDNO) { // SCP
1799 typedef int (CALLBACK *PSSH_start_scp)(char *, char *);
1800 static PSSH_start_scp func = NULL;
1801 static HMODULE h = NULL, h2 = NULL;
1802 char msg[128];
1803
1804 if (func == NULL) {
1805 h2 = LoadLibrary("ttxssh.dll");
1806 if ( ((h = GetModuleHandle("ttxssh.dll")) == NULL) ) {
1807 _snprintf_s(msg, sizeof(msg), _TRUNCATE, "GetModuleHandle(\"ttxssh.dll\")) %d", GetLastError());
1808 goto scp_send_error;
1809 }
1810 func = (PSSH_start_scp)GetProcAddress(h, "TTXScpSendfile");
1811 if (func == NULL) {
1812 _snprintf_s(msg, sizeof(msg), _TRUNCATE, "GetProcAddress(\"TTXScpSendfile\")) %d", GetLastError());
1813 goto scp_send_error;
1814 }
1815 }
1816
1817 if (func != NULL) {
1818 func(SendVar->FullName, NULL);
1819 goto send_success;
1820 }
1821
1822 scp_send_error:
1823 ::MessageBox(NULL, msg, "Tera Term: scpsend command error", MB_OK | MB_ICONERROR);
1824 FreeLibrary(h2);
1825 send_success:
1826 FreeFileVar(&SendVar); // �������Y������
1827
1828 } else {
1829 FreeFileVar(&SendVar);
1830
1831 }
1832 }
1833 else {
1834 SendVar->DirLen = 0;
1835 ts.TransBin = 0;
1836 FileSendStart();
1837
1838 }
1839 }
1840 }
1841 else
1842 FreeFileVar(&SendVar);
1843 }
1844 DragFinish(hDropInfo);
1845 }
1846
1847 void CVTWindow::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
1848 {
1849 #ifndef WINDOW_MAXMIMUM_ENABLED
1850 lpMMI->ptMaxSize.x = 10000;
1851 lpMMI->ptMaxSize.y = 10000;
1852 lpMMI->ptMaxTrackSize.x = 10000;
1853 lpMMI->ptMaxTrackSize.y = 10000;
1854 #endif
1855 }
1856
1857 void CVTWindow::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
1858 {
1859 int Func;
1860
1861 switch (nSBCode) {
1862 case SB_BOTTOM:
1863 Func = SCROLL_BOTTOM;
1864 break;
1865 case SB_ENDSCROLL:
1866 return;
1867 case SB_LINEDOWN:
1868 Func = SCROLL_LINEDOWN;
1869 break;
1870 case SB_LINEUP:
1871 Func = SCROLL_LINEUP;
1872 break;
1873 case SB_PAGEDOWN:
1874 Func = SCROLL_PAGEDOWN;
1875 break;
1876 case SB_PAGEUP:
1877 Func = SCROLL_PAGEUP;
1878 break;
1879 case SB_THUMBPOSITION:
1880 case SB_THUMBTRACK:
1881 Func = SCROLL_POS;
1882 break;
1883 case SB_TOP:
1884 Func = SCROLL_TOP;
1885 break;
1886 default:
1887 return;
1888 }
1889 DispHScroll(Func,nPos);
1890 }
1891
1892 void CVTWindow::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
1893 {
1894 InitMenuPopup(pPopupMenu->m_hMenu);
1895 }
1896
1897 void CVTWindow::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
1898 {
1899 BYTE KeyState[256];
1900 MSG M;
1901
1902 switch (KeyDown(HVTWin,nChar,nRepCnt,nFlags & 0x1ff)) {
1903 case KEYDOWN_OTHER:
1904 break;
1905 case KEYDOWN_CONTROL:
1906 return;
1907 case KEYDOWN_COMMOUT:
1908 /* �����s�����������X�N���[����������������
1909 �����[�g�����L�[�������M���X�N���[�������� */
1910 if (ts.AutoScrollOnlyInBottomLine != 0 && WinOrgY != 0) {
1911 DispVScroll(SCROLL_BOTTOM, 0);
1912 }
1913 return;
1914 }
1915
1916
1917 if ((ts.MetaKey>0) && ((nFlags & 0x2000) != 0)) {
1918 /* for Ctrl+Alt+Key combination */
1919 GetKeyboardState((PBYTE)KeyState);
1920 KeyState[VK_MENU] = 0;
1921 SetKeyboardState((PBYTE)KeyState);
1922 M.hwnd = HVTWin;
1923 M.message = WM_KEYDOWN;
1924 M.wParam = nChar;
1925 M.lParam = MAKELONG(nRepCnt,nFlags & 0xdfff);
1926 TranslateMessage(&M);
1927
1928 } else {
1929 // ScrollLock�L�[���_�����������������A�}�E�X���N���b�N����������������������
1930 // �������B���������A�p�[�W���O�������������~�����B
1931 // ���Y�L�[���������������A���������J�������B(2006.11.14 yutaka)
1932 #if 0
1933 GetKeyboardState((PBYTE)KeyState);
1934 if (KeyState[VK_SCROLL] == 0x81) { // on : scroll locked
1935 ScrollLock = TRUE;
1936 } else if (KeyState[VK_SCROLL] == 0x80) { // off : scroll unlocked
1937 ScrollLock = FALSE;
1938 } else {
1939 // do nothing
1940 }
1941 #endif
1942 }
1943
1944 }
1945
1946 void CVTWindow::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
1947 {
1948 KeyUp(nChar);
1949 }
1950
1951 void CVTWindow::OnKillFocus(CWnd* pNewWnd)
1952 {
1953 DispDestroyCaret();
1954 FocusReport(FALSE);
1955 CFrameWnd::OnKillFocus(pNewWnd);
1956
1957 if (IsCaretOn())
1958 CaretKillFocus(TRUE);
1959 }
1960
1961 void CVTWindow::OnLButtonDblClk(UINT nFlags, CPoint point)
1962 {
1963 if (LButton || MButton || RButton)
1964 return;
1965
1966 DblClkX = point.x;
1967 DblClkY = point.y;
1968
1969
1970 if (! MouseReport(IdMouseEventBtnDown, IdLeftButton, DblClkX, DblClkY) &&
1971 BuffUrlDblClk(DblClkX, DblClkY)) // �u���E�U�����o���������������������B (2005.4.3 yutaka)
1972 return;
1973
1974 BuffDblClk(DblClkX, DblClkY);
1975
1976 LButton = TRUE;
1977 DblClk = TRUE;
1978 AfterDblClk = TRUE;
1979 ::SetTimer(HVTWin, IdDblClkTimer, GetDoubleClickTime(), NULL);
1980
1981 /* for AutoScrolling */
1982 ::SetCapture(HVTWin);
1983 ::SetTimer(HVTWin, IdScrollTimer, 100, NULL);
1984 }
1985
1986 void CVTWindow::OnLButtonDown(UINT nFlags, CPoint point)
1987 {
1988 POINT p;
1989
1990 p.x = point.x;
1991 p.y = point.y;
1992 ButtonDown(p,IdLeftButton);
1993 }
1994
1995 void CVTWindow::OnLButtonUp(UINT nFlags, CPoint point)
1996 {
1997 MouseReport(IdMouseEventBtnUp, IdLeftButton, point.x, point.y);
1998
1999 if (! LButton)
2000 return;
2001
2002 ButtonUp(FALSE);
2003 }
2004
2005 void CVTWindow::OnMButtonDown(UINT nFlags, CPoint point)
2006 {
2007 POINT p;
2008
2009 p.x = point.x;
2010 p.y = point.y;
2011 ButtonDown(p,IdMiddleButton);
2012 }
2013
2014 void CVTWindow::OnMButtonUp(UINT nFlags, CPoint point)
2015 {
2016 BOOL mousereport;
2017
2018 mousereport = MouseReport(IdMouseEventBtnUp, IdMiddleButton, point.x, point.y);
2019
2020 if (! MButton)
2021 return;
2022
2023 // added DisablePasteMouseMButton (2008.3.2 maya)
2024 if (ts.DisablePasteMouseMButton)
2025 ButtonUp(FALSE);
2026 else
2027 ButtonUp(TRUE);
2028 }
2029
2030 int CVTWindow::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
2031 {
2032 if ((ts.SelOnActive==0) &&
2033 (nHitTest==HTCLIENT)) //disable mouse event for text selection
2034 return MA_ACTIVATEANDEAT; // when window is activated
2035 else
2036 return MA_ACTIVATE;
2037 }
2038
2039 void CVTWindow::OnMouseMove(UINT nFlags, CPoint point)
2040 {
2041 int i;
2042
2043 if (! (LButton || MButton || RButton)) {
2044 // �}�E�X�J�[�\��������URL������������������������ (2005.4.2 yutaka)
2045 BuffChangeSelect(point.x, point.y,0);
2046 return;
2047 }
2048
2049 if (DblClk)
2050 i = 2;
2051 else if (TplClk)
2052 i = 3;
2053 else
2054 i = 1;
2055
2056 if (!ts.SelectOnlyByLButton ||
2057 (ts.SelectOnlyByLButton && LButton) ) {
2058 // SelectOnlyByLButton == TRUE ���������A���{�^���_�E���������I������ (2007.11.21 maya)
2059 BuffChangeSelect(point.x, point.y,i);
2060 }
2061 }
2062
2063 void CVTWindow::OnMove(int x, int y)
2064 {
2065 DispSetWinPos();
2066 }
2067
2068 // �}�E�X�z�C�[�������]
2069 BOOL CVTWindow::OnMouseWheel(
2070 UINT nFlags, // ���z�L�[
2071 short zDelta, // ���]����
2072 CPoint pt // �J�[�\�����u
2073 )
2074 {
2075 int line, i;
2076
2077 ::ScreenToClient(HVTWin, &pt);
2078
2079 line = abs(zDelta) / WHEEL_DELTA; // ���C����
2080 if (line < 1) line = 1;
2081
2082 // ���X�N���[�����������s������������ (2008.4.6 yutaka)
2083 if (line == 1 && ts.MouseWheelScrollLine > 0)
2084 line *= ts.MouseWheelScrollLine;
2085
2086 if (MouseReport(IdMouseEventWheel, zDelta<0, pt.x, pt.y))
2087 return TRUE;
2088
2089 if (ts.TranslateWheelToCursor && AppliCursorMode && !ts.DisableAppCursor &&
2090 !(ControlKey() && ts.DisableWheelToCursorByCtrl)) {
2091 if (zDelta < 0) {
2092 KeyDown(HVTWin, VK_DOWN, line, MapVirtualKey(VK_DOWN, 0) | 0x100);
2093 KeyUp(VK_DOWN);
2094 } else {
2095 KeyDown(HVTWin, VK_UP, line, MapVirtualKey(VK_UP, 0) | 0x100);
2096 KeyUp(VK_UP);
2097 }
2098 } else {
2099 for (i = 0 ; i < line ; i++) {
2100 if (zDelta < 0) {
2101 OnVScroll(SB_LINEDOWN, 0, NULL);
2102 } else {
2103 OnVScroll(SB_LINEUP, 0, NULL);
2104 }
2105 }
2106 }
2107
2108 return (TRUE);
2109 }
2110
2111
2112 void CVTWindow::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
2113 {
2114 if (! Minimized && (nHitTest == HTCAPTION))
2115 DispRestoreWinSize();
2116 else
2117 CFrameWnd::OnNcLButtonDblClk(nHitTest,point);
2118 }
2119
2120 void CVTWindow::OnNcRButtonDown(UINT nHitTest, CPoint point)
2121 {
2122 if ((nHitTest==HTCAPTION) &&
2123 (ts.HideTitle>0) &&
2124 AltKey())
2125 ::CloseWindow(HVTWin); /* iconize */
2126 }
2127
2128 void CVTWindow::OnPaint()
2129 {
2130 PAINTSTRUCT ps;
2131 CDC *cdc;
2132 HDC PaintDC;
2133 int Xs, Ys, Xe, Ye;
2134
2135 #ifdef ALPHABLEND_TYPE2
2136 //<!--by AKASI
2137 BGSetupPrimary(FALSE);
2138 //-->
2139 #endif
2140
2141 cdc = BeginPaint(&ps);
2142 PaintDC = cdc->GetSafeHdc();
2143
2144 PaintWindow(PaintDC,ps.rcPaint,ps.fErase, &Xs,&Ys,&Xe,&Ye);
2145 LockBuffer();
2146 BuffUpdateRect(Xs,Ys,Xe,Ye);
2147 UnlockBuffer();
2148 DispEndPaint();
2149
2150 EndPaint(&ps);
2151
2152 if (FirstPaint) {
2153 if (strlen(TopicName)>0) {
2154 InitDDE();
2155 SendDDEReady();
2156 }
2157 FirstPaint = FALSE;
2158 Startup();
2159 }
2160 }
2161
2162 void CVTWindow::OnRButtonDown(UINT nFlags, CPoint point)
2163 {
2164 POINT p;
2165
2166 p.x = point.x;
2167 p.y = point.y;
2168 ButtonDown(p,IdRightButton);
2169 }
2170
2171 void CVTWindow::OnRButtonUp(UINT nFlags, CPoint point)
2172 {
2173 BOOL mousereport;
2174
2175 mousereport = MouseReport(IdMouseEventBtnUp, IdRightButton, point.x, point.y);
2176
2177 if (! RButton) return;
2178
2179 // �E�{�^�����������y�[�X�g�����~���� (2005.3.16 yutaka)
2180 if (ts.DisablePasteMouseRButton || mousereport) {
2181 ButtonUp(FALSE);
2182 } else {
2183 ButtonUp(TRUE);
2184 }
2185 }
2186
2187 void CVTWindow::OnSetFocus(CWnd* pOldWnd)
2188 {
2189 ChangeCaret();
2190 FocusReport(TRUE);
2191 CFrameWnd::OnSetFocus(pOldWnd);
2192 }
2193
2194
2195 //
2196 // ���T�C�Y�c�[���`�b�v(based on PuTTY sizetip.c)
2197 //
2198 static ATOM tip_class = 0;
2199 static HFONT tip_font;
2200 static COLORREF tip_bg;
2201 static COLORREF tip_text;
2202 static HWND tip_wnd = NULL;
2203 static int tip_enabled = 0;
2204
2205 static LRESULT CALLBACK SizeTipWndProc(HWND hWnd, UINT nMsg,
2206 WPARAM wParam, LPARAM lParam)
2207 {
2208
2209 switch (nMsg) {
2210 case WM_ERASEBKGND:
2211 return TRUE;
2212
2213 case WM_PAINT:
2214 {
2215 HBRUSH hbr;
2216 HGDIOBJ holdbr;
2217 RECT cr;
2218 int wtlen;
2219 LPTSTR wt;
2220 HDC hdc;
2221
2222 PAINTSTRUCT ps;
2223 hdc = BeginPaint(hWnd, &ps);
2224
2225 SelectObject(hdc, tip_font);
2226 SelectObject(hdc, GetStockObject(BLACK_PEN));
2227
2228 hbr = CreateSolidBrush(tip_bg);
2229 holdbr = SelectObject(hdc, hbr);
2230
2231 GetClientRect(hWnd, &cr);
2232 Rectangle(hdc, cr.left, cr.top, cr.right, cr.bottom);
2233
2234 wtlen = GetWindowTextLength(hWnd);
2235 wt = (LPTSTR) malloc((wtlen + 1) * sizeof(TCHAR));
2236 GetWindowText(hWnd, wt, wtlen + 1);
2237
2238 SetTextColor(hdc, tip_text);
2239 SetBkColor(hdc, tip_bg);
2240
2241 TextOut(hdc, cr.left + 3, cr.top + 3, wt, wtlen);
2242
2243 free(wt);
2244
2245 SelectObject(hdc, holdbr);
2246 DeleteObject(hbr);
2247
2248 EndPaint(hWnd, &ps);
2249 }
2250 return 0;
2251
2252 case WM_NCHITTEST:
2253 return HTTRANSPARENT;
2254
2255 case WM_DESTROY:
2256 DeleteObject(tip_font);
2257 tip_font = NULL;
2258 break;
2259
2260 case WM_SETTEXT:
2261 {
2262 LPCTSTR str = (LPCTSTR) lParam;
2263 SIZE sz;
2264 HDC hdc = CreateCompatibleDC(NULL);
2265
2266 SelectObject(hdc, tip_font);
2267 GetTextExtentPoint32(hdc, str, _tcslen(str), &sz);
2268
2269 SetWindowPos(hWnd, NULL, 0, 0, sz.cx + 6, sz.cy + 6,
2270 SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE);
2271 InvalidateRect(hWnd, NULL, FALSE);
2272
2273 DeleteDC(hdc);
2274 }
2275 break;
2276 }
2277
2278 return DefWindowProc(hWnd, nMsg, wParam, lParam);
2279 }
2280
2281 static void UpdateSizeTip(HWND src, int cx, int cy)
2282 {
2283 TCHAR str[32];
2284
2285 if (!tip_enabled)
2286 return;
2287
2288 if (!tip_wnd) {
2289 NONCLIENTMETRICS nci;
2290
2291 /* First make sure the window class is registered */
2292
2293 if (!tip_class) {
2294 WNDCLASS wc;
2295 wc.style = CS_HREDRAW | CS_VREDRAW;
2296 wc.lpfnWndProc = SizeTipWndProc;
2297 wc.cbClsExtra = 0;
2298 wc.cbWndExtra = 0;
2299 wc.hInstance = hInst;
2300 wc.hIcon = NULL;
2301 wc.hCursor = NULL;
2302 wc.hbrBackground = NULL;
2303 wc.lpszMenuName = NULL;
2304 wc.lpszClassName = "SizeTipClass";
2305
2306 tip_class = RegisterClass(&wc);
2307 }
2308 #if 0
2309 /* Default values based on Windows Standard color scheme */
2310
2311 tip_font = GetStockObject(SYSTEM_FONT);
2312 tip_bg = RGB(255, 255, 225);
2313 tip_text = RGB(0, 0, 0);
2314 #endif
2315
2316 /* Prepare other GDI objects and drawing info */
2317
2318 tip_bg = GetSysColor(COLOR_INFOBK);
2319 tip_text = GetSysColor(COLOR_INFOTEXT);
2320
2321 memset(&nci, 0, sizeof(NONCLIENTMETRICS));
2322 nci.cbSize = sizeof(NONCLIENTMETRICS);
2323 SystemParametersInfo(SPI_GETNONCLIENTMETRICS,
2324 sizeof(NONCLIENTMETRICS), &nci, 0);
2325 tip_font = CreateFontIndirect(&nci.lfStatusFont);
2326 }
2327
2328 /* Generate the tip text */
2329
2330 sprintf(str, "%dx%d", cx, cy);
2331
2332 if (!tip_wnd) {
2333 HDC hdc;
2334 SIZE sz;
2335 RECT wr;
2336 int ix, iy;
2337
2338 /* calculate the tip's size */
2339
2340 hdc = CreateCompatibleDC(NULL);
2341 GetTextExtentPoint32(hdc, str, _tcslen(str), &sz);
2342 DeleteDC(hdc);
2343
2344 GetWindowRect(src, &wr);
2345
2346 ix = wr.left;
2347 if (ix < 16)
2348 ix = 16;
2349
2350 iy = wr.top - sz.cy;
2351 if (iy < 16)
2352 iy = 16;
2353
2354 /* Create the tip window */
2355
2356 tip_wnd =
2357 CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_TOPMOST,
2358 MAKEINTRESOURCE(tip_class), str, WS_POPUP, ix,
2359 iy, sz.cx, sz.cy, NULL, NULL, hInst, NULL);
2360
2361 ShowWindow(tip_wnd, SW_SHOWNOACTIVATE);
2362
2363 } else {
2364
2365 /* Tip already exists, just set the text */
2366
2367 SetWindowText(tip_wnd, str);
2368 }
2369 }
2370
2371 static void EnableSizeTip(int bEnable)
2372 {
2373 if (tip_wnd && !bEnable) {
2374 DestroyWindow(tip_wnd);
2375 tip_wnd = NULL;
2376 }
2377
2378 tip_enabled = bEnable;
2379 }
2380
2381 void CVTWindow::OnSize(UINT nType, int cx, int cy)
2382 {
2383 RECT R;
2384 int w, h;
2385
2386 Minimized = (nType==SIZE_MINIMIZED);
2387
2388 if (FirstPaint && Minimized)
2389 {
2390 if (strlen(TopicName)>0)
2391 {
2392 InitDDE();
2393 SendDDEReady();
2394 }
2395 FirstPaint = FALSE;
2396 Startup();
2397 return;
2398 }
2399 if (Minimized || DontChangeSize) return;
2400
2401 if (nType == SIZE_MAXIMIZED) {
2402 ts.TerminalOldWidth = ts.TerminalWidth;
2403 ts.TerminalOldHeight = ts.TerminalHeight;
2404 }
2405
2406 ::GetWindowRect(HVTWin,&R);
2407 w = R.right - R.left;
2408 h = R.bottom - R.top;
2409 if (AdjustSize)
2410 ResizeWindow(R.left,R.top,w,h,cx,cy);
2411 else {
2412 w = cx / FontWidth;
2413 h = cy / FontHeight;
2414 HideStatusLine();
2415 BuffChangeWinSize(w,h);
2416 }
2417
2418 #ifdef WINDOW_MAXMIMUM_ENABLED
2419 if (nType == SIZE_MAXIMIZED) {
2420 AdjustSize = 0;
2421 }
2422 #endif
2423 }
2424
2425 // �u�h���b�O�����E�B���h�E�����e���\�������v���`�F�b�N�����������������A
2426 // ���T�C�Y��������"WM_SIZING"�����������������A���T�C�Y�c�[���`�b�v��
2427 // ���`�������B
2428 // (2008.8.1 yutaka)
2429 void CVTWindow::OnSizing(UINT fwSide, LPRECT pRect)
2430 {
2431 int nWidth;
2432 int nHeight;
2433 RECT cr, wr;
2434 int extra_width, extra_height;
2435 int w, h;
2436
2437 ::GetWindowRect(HVTWin, &wr);
2438 ::GetClientRect(HVTWin, &cr);
2439
2440 extra_width = wr.right - wr.left - cr.right + cr.left;
2441 extra_height = wr.bottom - wr.top - cr.bottom + cr.top;
2442 nWidth = (pRect->right) - (pRect->left) - extra_width;
2443 nHeight = (pRect->bottom) - (pRect->top) - extra_height;
2444
2445 w = nWidth / FontWidth;
2446 h = nHeight / FontHeight;
2447 UpdateSizeTip(HVTWin, w, h);
2448 }
2449
2450 void CVTWindow::OnSysChar(UINT nChar, UINT nRepCnt, UINT nFlags)
2451 {
2452 char e = ESC;
2453 char Code;
2454 unsigned int i;
2455
2456 #ifdef WINDOW_MAXMIMUM_ENABLED
2457 // ALT + x������������ WM_SYSCHAR �������������B
2458 // ALT + Enter���E�B���h�E�������� (2005.4.24 yutaka)
2459 if (AltKey() && nChar == 13) {
2460 if (IsZoomed()) { // window is maximum
2461 ShowWindow(SW_RESTORE);
2462 } else {
2463 ShowWindow(SW_MAXIMIZE);
2464 }
2465 }
2466 #endif
2467
2468 if (ts.MetaKey>0)
2469 {
2470 if (!KeybEnabled || (TalkStatus!=IdTalkKeyb)) return;
2471 Code = nChar;
2472 for (i=1 ; i<=nRepCnt ; i++)
2473 {
2474 CommTextOut(&cv,&e,1);
2475 CommTextOut(&cv,&Code,1);
2476 if (ts.LocalEcho>0)
2477 {
2478 CommTextEcho(&cv,&e,1);
2479 CommTextEcho(&cv,&Code,1);
2480 }
2481 }
2482 return;
2483 }
2484 CFrameWnd::OnSysChar(nChar, nRepCnt, nFlags);
2485 }
2486
2487 void CVTWindow::OnSysColorChange()
2488 {
2489 CFrameWnd::OnSysColorChange();
2490 }
2491
2492 void CVTWindow::OnSysCommand(UINT nID, LPARAM lParam)
2493 {
2494 if (nID==ID_SHOWMENUBAR) {
2495 ts.PopupMenu = 0;
2496 SwitchMenu();
2497 }
2498 else if (((nID & 0xfff0)==SC_CLOSE) && (cv.PortType==IdTCPIP) &&
2499 cv.Open && ! cv.Ready && (cv.ComPort>0))
2500 // now getting host address (see CommOpen() in commlib.c)
2501 ::PostMessage(HVTWin,WM_SYSCOMMAND,nID,lParam);
2502 else
2503 CFrameWnd::OnSysCommand(nID,lParam);
2504 }
2505
2506 void CVTWindow::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
2507 {
2508 if ((nChar==VK_F10) ||
2509 (ts.MetaKey>0) &&
2510 ((MainMenu==NULL) || (nChar!=VK_MENU)) &&
2511 ((nFlags & 0x2000) != 0))
2512 KeyDown(HVTWin,nChar,nRepCnt,nFlags & 0x1ff);
2513 // OnKeyDown(nChar,nRepCnt,nFlags);
2514 else
2515 CFrameWnd::OnSysKeyDown(nChar,nRepCnt,nFlags);
2516 }
2517
2518 void CVTWindow::OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
2519 {
2520 if (nChar==VK_F10)
2521 OnKeyUp(nChar,nRepCnt,nFlags);
2522 else
2523 CFrameWnd::OnSysKeyUp(nChar,nRepCnt,nFlags);
2524 }
2525
2526 void CVTWindow::OnTimer(UINT nIDEvent)
2527 {
2528 POINT Point;
2529 WORD PortType;
2530 UINT T;
2531
2532 if (nIDEvent==IdCaretTimer) {
2533 if (ts.NonblinkingCursor!=0) {
2534 T = GetCaretBlinkTime();
2535 SetCaretBlinkTime(T);
2536 }
2537 else
2538 ::KillTimer(HVTWin,IdCaretTimer);
2539 return;
2540 }
2541 else if (nIDEvent==IdScrollTimer) {
2542 GetCursorPos(&Point);
2543 ::ScreenToClient(HVTWin,&Point);
2544 DispAutoScroll(Point);
2545 if ((Point.x < 0) || (Point.x >= ScreenWidth) ||
2546 (Point.y < 0) || (Point.y >= ScreenHeight))
2547 ::PostMessage(HVTWin,WM_MOUSEMOVE,MK_LBUTTON,MAKELONG(Point.x,Point.y));
2548 return;
2549 }
2550 else if (nIDEvent == IdCancelConnectTimer) {
2551 // �����������������������������A�\�P�b�g�������N���[�Y�B
2552 // CloseSocket()�������������A�����������������������A����Win32API���R�[�������B
2553 if (!cv.Ready) {
2554 closesocket(cv.s);
2555 //::PostMessage(HVTWin, WM_USER_COMMNOTIFY, 0, FD_CLOSE);
2556 }
2557 }
2558
2559 ::KillTimer(HVTWin, nIDEvent);
2560
2561 switch (nIDEvent) {
2562 case IdDelayTimer:
2563 cv.CanSend = TRUE;
2564 break;
2565 case IdProtoTimer:
2566 ProtoDlgTimeOut();
2567 case IdDblClkTimer:
2568 AfterDblClk = FALSE;
2569 break;
2570 case IdComEndTimer:
2571 if (! CommCanClose(&cv)) {
2572 // wait if received data remains
2573 SetTimer(IdComEndTimer,1,NULL);
2574 break;
2575 }
2576 cv.Ready = FALSE;
2577 if (cv.TelFlag)
2578 EndTelnet();
2579 PortType = cv.PortType;
2580 CommClose(&cv);
2581 SetDdeComReady(0);
2582 if ((PortType==IdTCPIP) &&
2583 ((ts.PortFlag & PF_BEEPONCONNECT) != 0))
2584 MessageBeep(0);
2585 if ((PortType==IdTCPIP) &&
2586 (ts.AutoWinClose>0) &&
2587 ::IsWindowEnabled(HVTWin) &&
2588 ((HTEKWin==NULL) || ::IsWindowEnabled(HTEKWin)) )
2589 OnClose();
2590 else
2591 ChangeTitle();
2592 break;
2593 case IdPrnStartTimer:
2594 PrnFileStart();
2595 break;
2596 case IdPrnProcTimer:
2597 PrnFileDirectProc();
2598 break;
2599 }
2600 }
2601
2602 void CVTWindow::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
2603 {
2604 int Func;
2605 SCROLLINFO si;
2606
2607 switch (nSBCode) {
2608 case SB_BOTTOM: Func = SCROLL_BOTTOM; break;
2609 case SB_ENDSCROLL: return;
2610 case SB_LINEDOWN: Func = SCROLL_LINEDOWN; break;
2611 case SB_LINEUP: Func = SCROLL_LINEUP; break;
2612 case SB_PAGEDOWN: Func = SCROLL_PAGEDOWN; break;
2613 case SB_PAGEUP: Func = SCROLL_PAGEUP; break;
2614 case SB_THUMBPOSITION:
2615 case SB_THUMBTRACK: Func = SCROLL_POS; break;
2616 case SB_TOP: Func = SCROLL_TOP; break;
2617 default:
2618 return;
2619 }
2620
2621 // �X�N���[�������W�� 16bit ���� 32bit ���g������ (2005.10.4 yutaka)
2622 ZeroMemory(&si, sizeof(SCROLLINFO));
2623 si.cbSize = sizeof(SCROLLINFO);
2624 si.fMask = SIF_TRACKPOS;
2625 if (::GetScrollInfo(HVTWin, SB_VERT, &si)) { // success
2626 nPos = si.nTrackPos;
2627 }
2628
2629 DispVScroll(Func,nPos);
2630 }
2631
2632 //<!--by AKASI
2633 LONG CVTWindow::OnWindowPosChanging(UINT wParam, LONG lParam)
2634 {
2635 #ifdef ALPHABLEND_TYPE2
2636 if(BGEnable && BGNoCopyBits)
2637 ((WINDOWPOS*)lParam)->flags |= SWP_NOCOPYBITS;
2638 #endif
2639
2640 return CFrameWnd::DefWindowProc(WM_WINDOWPOSCHANGING,wParam,lParam);
2641 }
2642
2643 LONG CVTWindow::OnSettingChange(UINT wParam, LONG lParam)
2644 {
2645 #ifdef ALPHABLEND_TYPE2
2646 BGOnSettingChange();
2647 #endif
2648 return CFrameWnd::DefWindowProc(WM_SETTINGCHANGE,wParam,lParam);
2649 }
2650
2651 LONG CVTWindow::OnEnterSizeMove(UINT wParam, LONG lParam)
2652 {
2653 EnableSizeTip(1);
2654
2655 #ifdef ALPHABLEND_TYPE2
2656 BGOnEnterSizeMove();
2657 #endif
2658 return CFrameWnd::DefWindowProc(WM_ENTERSIZEMOVE,wParam,lParam);
2659 }
2660
2661 LONG CVTWindow::OnExitSizeMove(UINT wParam, LONG lParam)
2662 {
2663 #ifdef ALPHABLEND_TYPE2
2664 BGOnExitSizeMove();
2665 #endif
2666
2667 EnableSizeTip(0);
2668
2669 return CFrameWnd::DefWindowProc(WM_EXITSIZEMOVE,wParam,lParam);
2670 }
2671 //-->
2672
2673 LONG CVTWindow::OnIMEComposition(UINT wParam, LONG lParam)
2674 {
2675 HGLOBAL hstr;
2676 //LPSTR lpstr;
2677 wchar_t *lpstr;
2678 int Len;
2679 char *mbstr;
2680 int mlen;
2681
2682 if (CanUseIME())
2683 hstr = GetConvString(wParam, lParam);
2684 else
2685 hstr = NULL;
2686
2687 if (hstr!=NULL) {
2688 //lpstr = (LPSTR)GlobalLock(hstr);
2689 lpstr = (wchar_t *)GlobalLock(hstr);
2690 if (lpstr!=NULL) {
2691 mlen = wcstombs(NULL, lpstr, 0);
2692 mbstr = (char *)malloc(sizeof(char) * (mlen + 1));
2693 if (mbstr == NULL)
2694 goto skip;
2695 Len = wcstombs(mbstr, lpstr, mlen + 1);
2696
2697 // add this string into text buffer of application
2698 Len = strlen(mbstr);
2699 if (Len==1) {
2700 switch (mbstr[0]) {
2701 case 0x20:
2702 if (ControlKey()) mbstr[0] = 0; /* Ctrl-Space */
2703 break;
2704 case 0x5c: // Ctrl-\ support for NEC-PC98
2705 if (ControlKey()) mbstr[0] = 0x1c;
2706 break;
2707 }
2708 }
2709 if (ts.LocalEcho>0)
2710 CommTextEcho(&cv,mbstr,Len);
2711 CommTextOut(&cv,mbstr,Len);
2712
2713 free(mbstr);
2714 GlobalUnlock(hstr);
2715 }
2716 skip:
2717 GlobalFree(hstr);
2718 return 0;
2719 }
2720 return CFrameWnd::DefWindowProc
2721 (WM_IME_COMPOSITION,wParam,lParam);
2722 }
2723
2724 LONG CVTWindow::OnAccelCommand(UINT wParam, LONG lParam)
2725 {
2726 switch (wParam) {
2727 case IdScrollLock:
2728 ScrollLock = ! ScrollLock;
2729 break;
2730
2731 case IdHold:
2732 if (TalkStatus==IdTalkKeyb) {
2733 Hold = ! Hold;
2734 CommLock(&ts,&cv,Hold);
2735 }
2736 break;
2737 case IdPrint:
2738 OnFilePrint();
2739 break;
2740 case IdBreak:
2741 OnControlSendBreak();
2742 break;
2743 case IdCmdEditCopy:
2744 OnEditCopy();
2745 break;
2746 case IdCmdEditPaste:
2747 OnEditPaste();
2748 break;
2749 case IdCmdEditPasteCR:
2750 OnEditPasteCR();
2751 break;
2752 case IdCmdEditCLS:
2753 OnEditClearScreen();
2754 break;
2755 case IdCmdEditCLB:
2756 OnEditClearBuffer();
2757 break;
2758 case IdCmdCtrlOpenTEK:
2759 OnControlOpenTEK();
2760 break;
2761 case IdCmdCtrlCloseTEK:
2762 OnControlCloseTEK();
2763 break;
2764 case IdCmdLineUp:
2765 OnVScroll(SB_LINEUP,0,NULL);
2766 break;
2767 case IdCmdLineDown:
2768 OnVScroll(SB_LINEDOWN,0,NULL);
2769 break;
2770 case IdCmdPageUp:
2771 OnVScroll(SB_PAGEUP,0,NULL);
2772 break;
2773 case IdCmdPageDown:
2774 OnVScroll(SB_PAGEDOWN,0,NULL);
2775 break;
2776 case IdCmdBuffTop:
2777 OnVScroll(SB_TOP,0,NULL);
2778 break;
2779 case IdCmdBuffBottom:
2780 OnVScroll(SB_BOTTOM,0,NULL);
2781 break;
2782 case IdCmdNextWin:
2783 SelectNextWin(HVTWin,1);
2784 break;
2785 case IdCmdPrevWin:
2786 SelectNextWin(HVTWin,-1);
2787 break;
2788 case IdCmdLocalEcho:
2789 if (ts.LocalEcho==0)
2790 ts.LocalEcho = 1;
2791 else
2792 ts.LocalEcho = 0;
2793 if (cv.Ready && cv.TelFlag && (ts.TelEcho>0))
2794 TelChangeEcho();
2795 break;
2796 case IdCmdDisconnect: // called by TTMACRO
2797 OnFileDisconnect();
2798 break;
2799 case IdCmdLoadKeyMap: // called by TTMACRO
2800 SetKeyMap();
2801 break;
2802 case IdCmdRestoreSetup: // called by TTMACRO
2803 RestoreSetup();
2804 break;
2805 }
2806 return 0;
2807 }
2808
2809 LONG CVTWindow::OnChangeMenu(UINT wParam, LONG lParam)
2810 {
2811 HMENU SysMenu;
2812 BOOL Show, B1, B2;
2813
2814 Show = (ts.PopupMenu==0) && (ts.HideTitle==0);
2815
2816 // TTXKanjiMenu ���������A���j���[���\��������������
2817 // ���`�����������������B (2007.7.14 maya)
2818 if (Show != (MainMenu!=NULL))
2819 AdjustSize = TRUE;
2820
2821 if (MainMenu!=NULL) {
2822 DestroyMenu(MainMenu);
2823 MainMenu = NULL;
2824 }
2825
2826 if (! Show) {
2827 if (WinMenu!=NULL)
2828 DestroyMenu(WinMenu);
2829 WinMenu = NULL;
2830 }
2831 else
2832 InitMenu(&MainMenu);
2833
2834 ::SetMenu(HVTWin, MainMenu);
2835 ::DrawMenuBar(HVTWin);
2836
2837 B1 = ((ts.MenuFlag & MF_SHOWWINMENU)!=0);
2838 B2 = (WinMenu!=NULL);
2839 if ((MainMenu!=NULL) &&
2840 (B1 != B2)) {
2841 if (WinMenu==NULL) {
2842 WinMenu = CreatePopupMenu();
2843 get_lang_msg("MENU_WINDOW", ts.UIMsg, sizeof(ts.UIMsg),
2844 "&Window", ts.UILanguageFile);
2845 ::InsertMenu(MainMenu,ID_HELPMENU,
2846 MF_STRING | MF_ENABLED | MF_POPUP | MF_BYPOSITION,
2847 (int)WinMenu, ts.UIMsg);
2848 }
2849 else {
2850 RemoveMenu(MainMenu,ID_HELPMENU,MF_BYPOSITION);
2851 DestroyMenu(WinMenu);
2852 WinMenu = NULL;
2853 }
2854 ::DrawMenuBar(HVTWin);
2855 }
2856
2857 ::GetSystemMenu(HVTWin,TRUE);
2858 if ((! Show) && ((ts.MenuFlag & MF_NOSHOWMENU)==0)) {
2859 SysMenu = ::GetSystemMenu(HVTWin,FALSE);
2860 AppendMenu(SysMenu, MF_SEPARATOR, 0, NULL);
2861 get_lang_msg("MENU_SHOW_MENUBAR", ts.UIMsg, sizeof(ts.UIMsg),
2862 "Show menu &bar", ts.UILanguageFile);
2863 AppendMenu(SysMenu, MF_STRING, ID_SHOWMENUBAR, ts.UIMsg);
2864 }
2865 return 0;
2866 }
2867
2868 LONG CVTWindow::OnChangeTBar(UINT wParam, LONG lParam)
2869 {
2870 BOOL TBar;
2871 DWORD Style,ExStyle;
2872 HMENU SysMenu;
2873
2874 Style = GetWindowLong (HVTWin, GWL_STYLE);
2875 ExStyle = GetWindowLong (HVTWin, GWL_EXSTYLE);
2876 TBar = ((Style & WS_SYSMENU)!=0);
2877 if (TBar == (ts.HideTitle==0))
2878 return 0;
2879
2880 #ifndef WINDOW_MAXMIMUM_ENABLED
2881 if (ts.HideTitle>0)
2882 Style = Style & ~(WS_SYSMENU | WS_CAPTION |
2883 WS_MINIMIZEBOX) | WS_BORDER | WS_POPUP;
2884 else
2885 Style = Style & ~WS_POPUP | WS_SYSMENU | WS_CAPTION |
2886 WS_MINIMIZEBOX;
2887 #else
2888 if (ts.HideTitle>0) {
2889 Style = Style & ~(WS_SYSMENU | WS_CAPTION |
2890 WS_MINIMIZEBOX | WS_MAXIMIZEBOX) | WS_BORDER | WS_POPUP;
2891
2892 #ifdef ALPHABLEND_TYPE2
2893 if(BGNoFrame) {
2894 Style &= ~(WS_THICKFRAME | WS_BORDER);
2895 ExStyle &= ~WS_EX_CLIENTEDGE;
2896 }else{
2897 ExStyle |= WS_EX_CLIENTEDGE;
2898 }
2899 #endif
2900 }
2901 else {
2902 Style = Style & ~WS_POPUP | WS_SYSMENU | WS_CAPTION |
2903 WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME | WS_BORDER;
2904
2905 ExStyle |= WS_EX_CLIENTEDGE;
2906 }
2907 #endif
2908
2909 AdjustSize = TRUE;
2910 SetWindowLong(HVTWin, GWL_STYLE, Style);
2911 #ifdef ALPHABLEND_TYPE2
2912 SetWindowLong(HVTWin, GWL_EXSTYLE, ExStyle);
2913 #endif
2914 ::SetWindowPos(HVTWin, NULL, 0, 0, 0, 0,
2915 SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
2916 ::ShowWindow(HVTWin, SW_SHOW);
2917
2918 if ((ts.HideTitle==0) && (MainMenu==NULL) &&
2919 ((ts.MenuFlag & MF_NOSHOWMENU) == 0)) {
2920 SysMenu = ::GetSystemMenu(HVTWin,FALSE);
2921 AppendMenu(SysMenu, MF_SEPARATOR, 0, NULL);
2922 get_lang_msg("MENU_SHOW_MENUBAR", ts.UIMsg, sizeof(ts.UIMsg),
2923 "Show menu &bar", ts.UILanguageFile);
2924 AppendMenu(SysMenu, MF_STRING, ID_SHOWMENUBAR, ts.UIMsg);
2925 }
2926 return 0;
2927 }
2928
2929 LONG CVTWindow::OnCommNotify(UINT wParam, LONG lParam)
2930 {
2931 switch (LOWORD(lParam)) {
2932 case FD_READ: // TCP/IP
2933 CommProcRRQ(&cv);
2934 break;
2935 case FD_CLOSE:
2936 Connecting = FALSE;
2937 TCPIPClosed = TRUE;
2938 // disable transmition
2939 cv.OutBuffCount = 0;
2940 SetTimer(IdComEndTimer,1,NULL);
2941 break;
2942 }
2943 return 0;
2944 }
2945
2946 LONG CVTWindow::OnCommOpen(UINT wParam, LONG lParam)
2947 {
2948 CommStart(&cv,lParam,&ts);
2949 #ifndef NO_INET6
2950 if (ts.PortType == IdTCPIP && cv.RetryWithOtherProtocol == TRUE)
2951 Connecting = TRUE;
2952 else
2953 Connecting = FALSE;
2954 #else
2955 Connecting = FALSE;
2956 #endif /* NO_INET6 */
2957 ChangeTitle();
2958 if (! cv.Ready)
2959 return 0;
2960
2961 /* Auto start logging (2007.5.31 maya) */
2962 if (ts.LogAutoStart && ts.LogFN[0]==0) {
2963 strncpy_s(ts.LogFN, sizeof(ts.LogFN), ts.LogDefaultName, _TRUNCATE);
2964 }
2965 /* ���O�������L�����J�n���������������J�n���� (2006.9.18 maya) */
2966 if ((ts.LogFN[0]!=0) && (LogVar==NULL) && NewFileVar(&LogVar)) {
2967 LogVar->DirLen = 0;
2968 strncpy_s(LogVar->FullName, sizeof(LogVar->FullName), ts.LogFN, _TRUNCATE);
2969 LogStart();
2970 }
2971
2972 if ((ts.PortType==IdTCPIP) &&
2973 ((ts.PortFlag & PF_BEEPONCONNECT) != 0))
2974 MessageBeep(0);
2975
2976 if (cv.PortType==IdTCPIP) {
2977 InitTelnet();
2978
2979 if ((cv.TelFlag) && (ts.TCPPort==ts.TelPort)) {
2980 // Start telnet option negotiation from this side
2981 // if telnet flag is set and port#==default telnet port# (23)
2982 TelEnableMyOpt(TERMTYPE);
2983
2984 TelEnableHisOpt(SGA);
2985
2986 TelEnableMyOpt(SGA);
2987
2988 if (ts.TelEcho>0)
2989 TelChangeEcho();
2990 else
2991 TelEnableHisOpt(ECHO);
2992
2993 TelEnableMyOpt(NAWS);
2994 if (ts.TelBin>0) {
2995 TelEnableMyOpt(BINARY);
2996 TelEnableHisOpt(BINARY);
2997 }
2998
2999 // ���O����������Telnet���������������AWindow �����������������������c��������
3000 // (LocalEcho, CRSend �� TCPLocalEcho, TCPCRSend ���l������������������)
3001 // Telnet ���������� LocalEcho/CRSend �������l�������������A
3002 // ���������������������������� (2008.4.22 maya)
3003 ts.CRSend = ts.CRSend_ini;
3004 cv.CRSend = ts.CRSend_ini;
3005 ts.LocalEcho = ts.LocalEcho_ini;
3006
3007 TelStartKeepAliveThread();
3008 }
3009 // SSH, Cygwin �����������������������p������
3010 else if (ts.DisableTCPEchoCR) {
3011 // �����������R���A���������������������������� (2008.4.22 maya)
3012 ts.CRSend = ts.CRSend_ini;