Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /branches/ttcomtester/teraterm/teraterm/teraterm.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9124 - (hide annotations) (download) (as text)
Sat Jan 16 05:19:55 2021 UTC (3 years, 2 months ago) by zmatsuo
Original Path: trunk/teraterm/teraterm/teraterm.cpp
File MIME type: text/x-c++src
File size: 8933 byte(s)
起動時にデバグ用コンソールをオープンできるようにした

- デバグ用 ttdebug.h,cpp を追加
- 例外発生時の処理を ttdebug.cpp に移動
1 doda 6806 /*
2     * Copyright (C) 1994-1998 T. Teranishi
3 nmaya 9048 * (C) 2006- TeraTerm Project
4 doda 6806 * All rights reserved.
5     *
6 doda 6841 * Redistribution and use in source and binary forms, with or without
7     * modification, are permitted provided that the following conditions
8     * are met:
9 doda 6806 *
10 doda 6841 * 1. Redistributions of source code must retain the above copyright
11     * notice, this list of conditions and the following disclaimer.
12     * 2. Redistributions in binary form must reproduce the above copyright
13     * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the distribution.
15     * 3. The name of the author may not be used to endorse or promote products
16     * derived from this software without specific prior written permission.
17 doda 6806 *
18 doda 6841 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
19     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21     * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23     * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 doda 6806 */
29 maya 3227
30     /* TERATERM.EXE, main */
31    
32 zmatsuo 7554 #include "teraterm_conf.h"
33    
34 doda 8445 #include <stdio.h>
35 zmatsuo 7528 #include <crtdbg.h>
36 doda 8445 #include <io.h> // for access()
37 zmatsuo 8582 #include <windows.h>
38     #include <htmlhelp.h>
39 maya 3227 #include "teraterm.h"
40     #include "tttypes.h"
41     #include "commlib.h"
42     #include "ttwinman.h"
43     #include "buffer.h"
44     #include "vtterm.h"
45     #include "vtwin.h"
46     #include "clipboar.h"
47     #include "filesys.h"
48     #include "telnet.h"
49     #include "tektypes.h"
50     #include "tekwin.h"
51     #include "ttdde.h"
52 doda 4414 #include "keyboard.h"
53 zmatsuo 7457 #include "dllutil.h"
54     #include "compat_win.h"
55 maya 3227 #include "compat_w95.h"
56 zmatsuo 7509 #include "dlglib.h"
57 zmatsuo 7528 #include "teraterml.h"
58 doda 8445 #include "sendmem.h"
59 zmatsuo 8518 #include "layer_for_unicode.h"
60 zmatsuo 9124 #include "ttdebug.h"
61 maya 3227
62 zmatsuo 7656 #if defined(_DEBUG) && defined(_MSC_VER)
63 zmatsuo 7457 #define new ::new(_NORMAL_BLOCK, __FILE__, __LINE__)
64 maya 3227 #endif
65    
66 zmatsuo 7457 static BOOL AddFontFlag;
67 zmatsuo 8518 static wchar_t TSpecialFont[MAX_PATH];
68 zmatsuo 7935 static CVTWindow* pVTWin;
69 zmatsuo 8582 static DWORD HtmlHelpCookie;
70 zmatsuo 7457
71     static void LoadSpecialFont()
72     {
73 zmatsuo 8518 if (IsExistFontA("Tera Special", SYMBOL_CHARSET, TRUE)) {
74     // ���������������������[�h������
75     return;
76     }
77 zmatsuo 7457
78 zmatsuo 8843 if (_GetModuleFileNameW(NULL, TSpecialFont, _countof(TSpecialFont)) == 0) {
79 zmatsuo 8518 AddFontFlag = FALSE;
80     return;
81     }
82     *wcsrchr(TSpecialFont, L'\\') = 0;
83     wcscat_s(TSpecialFont, L"\\TSPECIAL1.TTF");
84 zmatsuo 7457
85 zmatsuo 8518 // teraterm.exe�������L�����t�H���g�������B
86     // remove�����������I��������OS������������
87     int r = _AddFontResourceExW(TSpecialFont, FR_PRIVATE, NULL);
88     if (r == 0) {
89     // AddFontResourceEx() ���g����������
90     // �V�X�e���S�����g�����t�H���g������
91     // remove��������OS������������������
92     r = _AddFontResourceW(TSpecialFont);
93 doda 6793 }
94 zmatsuo 8518 if (r != 0) {
95     AddFontFlag = TRUE;
96     }
97 maya 3227 }
98    
99 zmatsuo 7457 static void UnloadSpecialFont()
100     {
101 zmatsuo 8518 if (!AddFontFlag) {
102     return;
103 zmatsuo 7457 }
104 zmatsuo 8518 int r = _RemoveFontResourceExW(TSpecialFont, FR_PRIVATE, NULL);
105     if (r == 0) {
106     _RemoveFontResourceW(TSpecialFont);
107     }
108 zmatsuo 7457 }
109    
110 zmatsuo 7509 static void init()
111 zmatsuo 7457 {
112     DLLInit();
113     WinCompatInit();
114 zmatsuo 9124 DebugSetException();
115 zmatsuo 7509 LoadSpecialFont();
116 zmatsuo 9124 #if defined(DEBUG_OPEN_CONSOLE_AT_STARTUP)
117     DebugConsoleOpen();
118     #endif
119 zmatsuo 7457 }
120    
121 maya 3227 // Tera Term main engine
122 zmatsuo 7528 static BOOL OnIdle(LONG lCount)
123 maya 3227 {
124     static int Busy = 2;
125 zmatsuo 8857 int nx, ny;
126 maya 3227 BOOL Size;
127    
128     if (lCount==0) Busy = 2;
129    
130     if (cv.Ready)
131     {
132     /* Sender */
133     CommSend(&cv);
134    
135     /* Parser */
136     if ((TelStatus==TelIdle) && cv.TelMode)
137     TelStatus = TelIAC;
138    
139     if (TelStatus != TelIdle)
140     {
141     ParseTel(&Size,&nx,&ny);
142     if (Size) {
143     LockBuffer();
144     ChangeTerminalSize(nx,ny);
145     UnlockBuffer();
146     }
147     }
148     else {
149 zmatsuo 8857 int Change;
150 zmatsuo 9103 if (ProtoGetProtoFlag()) Change = ProtoDlgParse();
151 maya 3227 else {
152     switch (ActiveWin) {
153 doda 6435 case IdVT:
154 zmatsuo 7935 Change = pVTWin->Parse();
155 maya 3227 // TEK window���A�N�e�B�u���� pause ���g�����ACPU�g�p��100%������
156     // ���������b�������B(2006.2.6 yutaka)
157     // �����������������A�R���e�L�X�g�X�C�b�`�����������B(2006.3.20 yutaka)
158     Sleep(0);
159     break;
160    
161     case IdTEK:
162     if (pTEKWin != NULL) {
163     Change = ((CTEKWindow*)pTEKWin)->Parse();
164     // TEK window���A�N�e�B�u���� pause ���g�����ACPU�g�p��100%������
165     // ���������b�������B(2006.2.6 yutaka)
166     Sleep(1);
167     }
168 maya 3392 else {
169 maya 3227 Change = IdVT;
170 maya 3392 }
171 maya 3227 break;
172    
173     default:
174     Change = 0;
175     }
176    
177     switch (Change) {
178 maya 3392 case IdVT:
179     VTActivate();
180     break;
181     case IdTEK:
182 zmatsuo 7935 pVTWin->OpenTEK();
183 maya 3392 break;
184 maya 3227 }
185     }
186     }
187    
188 zmatsuo 8897 FLogWriteFile();
189 maya 3227
190 zmatsuo 8860 if (DDELog && AdvFlag) {
191     DDEAdv();
192     }
193 maya 3227
194     /* Talker */
195     switch (TalkStatus) {
196 maya 3392 case IdTalkCB:
197     CBSend();
198     break; /* clip board */
199     case IdTalkFile:
200     FileSend();
201     break; /* file */
202 doda 8445 case IdTalkSendMem:
203     SendMemContinuously();
204     break;
205     default:
206     break;
207 maya 3227 }
208    
209     /* Receiver */
210 zmatsuo 8860 if (DDELog && DDEGetCount() > 0) {
211 maya 3227 // ���O�o�b�t�@������DDE�N���C�A���g�����������������������A
212     // TCP�p�P�b�g�����M���s�������B
213     // �A���������M���s�����A���O�o�b�t�@�����E���h���r�������������M���f�[�^��
214     // �������������������\���������B(2007.6.14 yutaka)
215    
216     } else {
217     CommReceive(&cv);
218     }
219    
220     }
221    
222     if (cv.Ready &&
223 zmatsuo 8897 (cv.RRQ || (cv.OutBuffCount>0) || (cv.InBuffCount>0) || (cv.FlushLen>0) || FLogGetCount() > 0 || (DDEGetCount()>0)) ) {
224 maya 3227 Busy = 2;
225 maya 3392 }
226     else {
227 maya 3227 Busy--;
228 maya 3392 }
229 maya 3227
230     return (Busy>0);
231     }
232    
233 zmatsuo 7528 static HWND main_window;
234     HWND GetHWND()
235     {
236     return main_window;
237     }
238    
239 zmatsuo 7915 static HWND hModelessDlg;
240 zmatsuo 7528
241 zmatsuo 7915 void AddModelessHandle(HWND hWnd)
242 zmatsuo 7528 {
243 zmatsuo 7915 hModelessDlg = hWnd;
244 zmatsuo 7528 }
245    
246 zmatsuo 7915 void RemoveModelessHandle(HWND hWnd)
247 zmatsuo 7528 {
248 zmatsuo 7914 (void)hWnd;
249 zmatsuo 7915 hModelessDlg = 0;
250 zmatsuo 7528 }
251    
252 zmatsuo 7914 static UINT nMsgLast;
253     static POINT ptCursorLast;
254    
255     /**
256     * idle��������������������
257     */
258     static BOOL IsIdleMessage(const MSG* pMsg)
259     {
260     if (pMsg->message == WM_MOUSEMOVE ||
261     pMsg->message == WM_NCMOUSEMOVE)
262     {
263     if (pMsg->message == nMsgLast &&
264     pMsg->pt.x == ptCursorLast.x &&
265     pMsg->pt.y == ptCursorLast.y)
266     { // �������u��������idle������������
267     return FALSE;
268     }
269    
270     ptCursorLast = pMsg->pt;
271     nMsgLast = pMsg->message;
272     return TRUE;
273     }
274    
275     if (pMsg->message == WM_PAINT ||
276     pMsg->message == 0x0118/*WM_SYSTIMER*/)
277     {
278     return FALSE;
279     }
280    
281     return TRUE;
282     }
283    
284 zmatsuo 7528 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
285     LPSTR lpszCmdLine, int nCmdShow)
286     {
287 zmatsuo 7914 (void)hPreInst;
288     (void)lpszCmdLine;
289     (void)nCmdShow;
290 zmatsuo 7528 #ifdef _DEBUG
291 zmatsuo 7656 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
292 zmatsuo 7528 #endif
293 doda 8445
294 zmatsuo 8582 _HtmlHelpW(NULL, NULL, HH_INITIALIZE, (DWORD_PTR)&HtmlHelpCookie);
295 zmatsuo 7528 init();
296     hInst = hInstance;
297 zmatsuo 7916 CVTWindow *m_pMainWnd = new CVTWindow(hInstance);
298 zmatsuo 7528 pVTWin = m_pMainWnd;
299     main_window = m_pMainWnd->m_hWnd;
300 zmatsuo 7589 // [Tera Term]�Z�N�V������DLG_SYSTEM_FONT�������������Z�b�g����
301 zmatsuo 7706 SetDialogFont(ts.DialogFontName, ts.DialogFontPoint, ts.DialogFontCharSet,
302     ts.UILanguageFile, "Tera Term", "DLG_SYSTEM_FONT");
303 zmatsuo 7528
304 zmatsuo 7914 BOOL bIdle = TRUE; // idle������?
305     LONG lCount = 0;
306 zmatsuo 7528 MSG msg;
307 zmatsuo 7914 for (;;) {
308     // idle���������b�Z�[�W����������
309     while (bIdle) {
310     if (::PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE) != FALSE) {
311     // ���b�Z�[�W����������
312     break;
313 zmatsuo 7528 }
314 zmatsuo 7914
315     const BOOL continue_idle = OnIdle(lCount++);
316     if (!continue_idle) {
317     // FALSE��������������idle�������s�v
318     bIdle = FALSE;
319     break;
320     }
321 zmatsuo 7528 }
322    
323 zmatsuo 7914 // ���b�Z�[�W����������������������
324     for(;;) {
325     // ���b�Z�[�W���������������AGetMessage()���u���b�N��������������
326     if (::GetMessage(&msg, NULL, 0, 0) == FALSE) {
327     // WM_QUIT
328     goto exit_message_loop;
329     }
330 zmatsuo 7528
331 zmatsuo 7915 if (hModelessDlg == 0 ||
332     ::IsDialogMessage(hModelessDlg, &msg) == FALSE)
333 zmatsuo 7914 {
334     bool message_processed = false;
335    
336     if (m_pMainWnd->m_hAccel != NULL) {
337     if (!MetaKey(ts.MetaKey)) {
338     // matakey����������������
339     if (::TranslateAccelerator(m_pMainWnd->m_hWnd , m_pMainWnd->m_hAccel, &msg)) {
340     // �A�N�Z�����[�^�[�L�[����������
341     message_processed = true;
342     }
343     }
344 zmatsuo 7528 }
345 zmatsuo 7914
346     if (!message_processed) {
347     ::TranslateMessage(&msg);
348     ::DispatchMessage(&msg);
349     }
350 zmatsuo 7528 }
351    
352 zmatsuo 7914 // idle������������?
353     if (IsIdleMessage(&msg)) {
354     bIdle = TRUE;
355 zmatsuo 7528 lCount = 0;
356     }
357 zmatsuo 7914
358     if (::PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE) == FALSE) {
359     // ���b�Z�[�W������������
360     break;
361     }
362 zmatsuo 7528 }
363 maya 3392 }
364 zmatsuo 7914 exit_message_loop:
365    
366 zmatsuo 7528 delete m_pMainWnd;
367     m_pMainWnd = NULL;
368    
369 zmatsuo 8582 _HtmlHelpW(NULL, NULL, HH_CLOSE_ALL, 0);
370     _HtmlHelpW(NULL, NULL, HH_UNINITIALIZE, HtmlHelpCookie);
371    
372 zmatsuo 7528 UnloadSpecialFont();
373     DLLExit();
374    
375 zmatsuo 7914 return (int)msg.wParam;
376 maya 3227 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26