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 9324 - (hide annotations) (download) (as text)
Tue Jun 29 15:20:20 2021 UTC (2 years, 9 months ago) by zmatsuo
Original Path: trunk/teraterm/teraterm/teraterm.cpp
File MIME type: text/x-c++src
File size: 8853 byte(s)
layer for unicode 向けのコードを削除
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 doda 8445 #include <stdio.h>
33 zmatsuo 7528 #include <crtdbg.h>
34 zmatsuo 8582 #include <windows.h>
35     #include <htmlhelp.h>
36 maya 3227 #include "teraterm.h"
37     #include "tttypes.h"
38     #include "commlib.h"
39     #include "ttwinman.h"
40     #include "buffer.h"
41     #include "vtterm.h"
42     #include "vtwin.h"
43     #include "clipboar.h"
44     #include "filesys.h"
45     #include "telnet.h"
46     #include "tektypes.h"
47     #include "tekwin.h"
48     #include "ttdde.h"
49 doda 4414 #include "keyboard.h"
50 zmatsuo 7457 #include "dllutil.h"
51     #include "compat_win.h"
52 zmatsuo 7509 #include "dlglib.h"
53 zmatsuo 7528 #include "teraterml.h"
54 doda 8445 #include "sendmem.h"
55 zmatsuo 9124 #include "ttdebug.h"
56 maya 3227
57 zmatsuo 7656 #if defined(_DEBUG) && defined(_MSC_VER)
58 zmatsuo 7457 #define new ::new(_NORMAL_BLOCK, __FILE__, __LINE__)
59 maya 3227 #endif
60    
61 zmatsuo 7457 static BOOL AddFontFlag;
62 zmatsuo 8518 static wchar_t TSpecialFont[MAX_PATH];
63 zmatsuo 7935 static CVTWindow* pVTWin;
64 zmatsuo 8582 static DWORD HtmlHelpCookie;
65 zmatsuo 7457
66     static void LoadSpecialFont()
67     {
68 zmatsuo 8518 if (IsExistFontA("Tera Special", SYMBOL_CHARSET, TRUE)) {
69     // ���������������������[�h������
70     return;
71     }
72 zmatsuo 7457
73 zmatsuo 9324 if (GetModuleFileNameW(NULL, TSpecialFont, _countof(TSpecialFont)) == 0) {
74 zmatsuo 8518 AddFontFlag = FALSE;
75     return;
76     }
77     *wcsrchr(TSpecialFont, L'\\') = 0;
78     wcscat_s(TSpecialFont, L"\\TSPECIAL1.TTF");
79 zmatsuo 7457
80 zmatsuo 8518 // teraterm.exe�������L�����t�H���g�������B
81     // remove�����������I��������OS������������
82 zmatsuo 9320 int r = 0;
83     if (pAddFontResourceExW != NULL) {
84     r = pAddFontResourceExW(TSpecialFont, FR_PRIVATE, NULL);
85     }
86 zmatsuo 8518 if (r == 0) {
87     // AddFontResourceEx() ���g����������
88     // �V�X�e���S�����g�����t�H���g������
89     // remove��������OS������������������
90 zmatsuo 9324 r = AddFontResourceW(TSpecialFont);
91 doda 6793 }
92 zmatsuo 8518 if (r != 0) {
93     AddFontFlag = TRUE;
94     }
95 maya 3227 }
96    
97 zmatsuo 7457 static void UnloadSpecialFont()
98     {
99 zmatsuo 8518 if (!AddFontFlag) {
100     return;
101 zmatsuo 7457 }
102 zmatsuo 9320 int r = 0;
103     if (pRemoveFontResourceExW != NULL) {
104     r = pRemoveFontResourceExW(TSpecialFont, FR_PRIVATE, NULL);
105     }
106 zmatsuo 8518 if (r == 0) {
107 zmatsuo 9324 RemoveFontResourceW(TSpecialFont);
108 zmatsuo 8518 }
109 zmatsuo 7457 }
110    
111 zmatsuo 7509 static void init()
112 zmatsuo 7457 {
113     DLLInit();
114     WinCompatInit();
115 zmatsuo 9124 DebugSetException();
116 zmatsuo 7509 LoadSpecialFont();
117 zmatsuo 9124 #if defined(DEBUG_OPEN_CONSOLE_AT_STARTUP)
118     DebugConsoleOpen();
119     #endif
120 zmatsuo 7457 }
121    
122 maya 3227 // Tera Term main engine
123 zmatsuo 7528 static BOOL OnIdle(LONG lCount)
124 maya 3227 {
125     static int Busy = 2;
126 zmatsuo 8857 int nx, ny;
127 maya 3227 BOOL Size;
128    
129     if (lCount==0) Busy = 2;
130    
131     if (cv.Ready)
132     {
133     /* Sender */
134     CommSend(&cv);
135    
136     /* Parser */
137     if ((TelStatus==TelIdle) && cv.TelMode)
138     TelStatus = TelIAC;
139    
140     if (TelStatus != TelIdle)
141     {
142     ParseTel(&Size,&nx,&ny);
143     if (Size) {
144     LockBuffer();
145     ChangeTerminalSize(nx,ny);
146     UnlockBuffer();
147     }
148     }
149     else {
150 zmatsuo 8857 int Change;
151 zmatsuo 9103 if (ProtoGetProtoFlag()) Change = ProtoDlgParse();
152 maya 3227 else {
153     switch (ActiveWin) {
154 doda 6435 case IdVT:
155 zmatsuo 7935 Change = pVTWin->Parse();
156 maya 3227 // TEK window���A�N�e�B�u���� pause ���g�����ACPU�g�p��100%������
157     // ���������b�������B(2006.2.6 yutaka)
158     // �����������������A�R���e�L�X�g�X�C�b�`�����������B(2006.3.20 yutaka)
159     Sleep(0);
160     break;
161    
162     case IdTEK:
163     if (pTEKWin != NULL) {
164     Change = ((CTEKWindow*)pTEKWin)->Parse();
165     // TEK window���A�N�e�B�u���� pause ���g�����ACPU�g�p��100%������
166     // ���������b�������B(2006.2.6 yutaka)
167     Sleep(1);
168     }
169 maya 3392 else {
170 maya 3227 Change = IdVT;
171 maya 3392 }
172 maya 3227 break;
173    
174     default:
175     Change = 0;
176     }
177    
178     switch (Change) {
179 maya 3392 case IdVT:
180     VTActivate();
181     break;
182     case IdTEK:
183 zmatsuo 7935 pVTWin->OpenTEK();
184 maya 3392 break;
185 maya 3227 }
186     }
187     }
188    
189 zmatsuo 8897 FLogWriteFile();
190 maya 3227
191 zmatsuo 8860 if (DDELog && AdvFlag) {
192     DDEAdv();
193     }
194 maya 3227
195     /* Talker */
196     switch (TalkStatus) {
197 maya 3392 case IdTalkFile:
198     FileSend();
199     break; /* file */
200 doda 8445 case IdTalkSendMem:
201     SendMemContinuously();
202     break;
203     default:
204     break;
205 maya 3227 }
206    
207     /* Receiver */
208 zmatsuo 8860 if (DDELog && DDEGetCount() > 0) {
209 maya 3227 // ���O�o�b�t�@������DDE�N���C�A���g�����������������������A
210     // TCP�p�P�b�g�����M���s�������B
211     // �A���������M���s�����A���O�o�b�t�@�����E���h���r�������������M���f�[�^��
212     // �������������������\���������B(2007.6.14 yutaka)
213    
214     } else {
215     CommReceive(&cv);
216     }
217    
218     }
219    
220     if (cv.Ready &&
221 zmatsuo 8897 (cv.RRQ || (cv.OutBuffCount>0) || (cv.InBuffCount>0) || (cv.FlushLen>0) || FLogGetCount() > 0 || (DDEGetCount()>0)) ) {
222 maya 3227 Busy = 2;
223 maya 3392 }
224     else {
225 maya 3227 Busy--;
226 maya 3392 }
227 maya 3227
228     return (Busy>0);
229     }
230    
231 zmatsuo 7528 static HWND main_window;
232     HWND GetHWND()
233     {
234     return main_window;
235     }
236    
237 zmatsuo 7915 static HWND hModelessDlg;
238 zmatsuo 7528
239 zmatsuo 7915 void AddModelessHandle(HWND hWnd)
240 zmatsuo 7528 {
241 zmatsuo 7915 hModelessDlg = hWnd;
242 zmatsuo 7528 }
243    
244 zmatsuo 7915 void RemoveModelessHandle(HWND hWnd)
245 zmatsuo 7528 {
246 zmatsuo 7914 (void)hWnd;
247 zmatsuo 7915 hModelessDlg = 0;
248 zmatsuo 7528 }
249    
250 zmatsuo 7914 static UINT nMsgLast;
251     static POINT ptCursorLast;
252    
253     /**
254     * idle��������������������
255     */
256     static BOOL IsIdleMessage(const MSG* pMsg)
257     {
258     if (pMsg->message == WM_MOUSEMOVE ||
259     pMsg->message == WM_NCMOUSEMOVE)
260     {
261     if (pMsg->message == nMsgLast &&
262     pMsg->pt.x == ptCursorLast.x &&
263     pMsg->pt.y == ptCursorLast.y)
264     { // �������u��������idle������������
265     return FALSE;
266     }
267    
268     ptCursorLast = pMsg->pt;
269     nMsgLast = pMsg->message;
270     return TRUE;
271     }
272    
273     if (pMsg->message == WM_PAINT ||
274     pMsg->message == 0x0118/*WM_SYSTIMER*/)
275     {
276     return FALSE;
277     }
278    
279     return TRUE;
280     }
281    
282 zmatsuo 7528 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
283     LPSTR lpszCmdLine, int nCmdShow)
284     {
285 zmatsuo 7914 (void)hPreInst;
286     (void)lpszCmdLine;
287     (void)nCmdShow;
288 zmatsuo 7528 #ifdef _DEBUG
289 zmatsuo 7656 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
290 zmatsuo 7528 #endif
291 doda 8445
292 zmatsuo 9319 init();
293 zmatsuo 8582 _HtmlHelpW(NULL, NULL, HH_INITIALIZE, (DWORD_PTR)&HtmlHelpCookie);
294 zmatsuo 7528 hInst = hInstance;
295 zmatsuo 7916 CVTWindow *m_pMainWnd = new CVTWindow(hInstance);
296 zmatsuo 7528 pVTWin = m_pMainWnd;
297     main_window = m_pMainWnd->m_hWnd;
298 zmatsuo 7589 // [Tera Term]�Z�N�V������DLG_SYSTEM_FONT�������������Z�b�g����
299 zmatsuo 7706 SetDialogFont(ts.DialogFontName, ts.DialogFontPoint, ts.DialogFontCharSet,
300     ts.UILanguageFile, "Tera Term", "DLG_SYSTEM_FONT");
301 zmatsuo 7528
302 zmatsuo 7914 BOOL bIdle = TRUE; // idle������?
303     LONG lCount = 0;
304 zmatsuo 7528 MSG msg;
305 zmatsuo 7914 for (;;) {
306     // idle���������b�Z�[�W����������
307     while (bIdle) {
308     if (::PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE) != FALSE) {
309     // ���b�Z�[�W����������
310     break;
311 zmatsuo 7528 }
312 zmatsuo 7914
313     const BOOL continue_idle = OnIdle(lCount++);
314     if (!continue_idle) {
315     // FALSE��������������idle�������s�v
316     bIdle = FALSE;
317     break;
318     }
319 zmatsuo 7528 }
320    
321 zmatsuo 7914 // ���b�Z�[�W����������������������
322     for(;;) {
323     // ���b�Z�[�W���������������AGetMessage()���u���b�N��������������
324     if (::GetMessage(&msg, NULL, 0, 0) == FALSE) {
325     // WM_QUIT
326     goto exit_message_loop;
327     }
328 zmatsuo 7528
329 zmatsuo 7915 if (hModelessDlg == 0 ||
330     ::IsDialogMessage(hModelessDlg, &msg) == FALSE)
331 zmatsuo 7914 {
332     bool message_processed = false;
333    
334     if (m_pMainWnd->m_hAccel != NULL) {
335     if (!MetaKey(ts.MetaKey)) {
336     // matakey����������������
337     if (::TranslateAccelerator(m_pMainWnd->m_hWnd , m_pMainWnd->m_hAccel, &msg)) {
338     // �A�N�Z�����[�^�[�L�[����������
339     message_processed = true;
340     }
341     }
342 zmatsuo 7528 }
343 zmatsuo 7914
344     if (!message_processed) {
345     ::TranslateMessage(&msg);
346     ::DispatchMessage(&msg);
347     }
348 zmatsuo 7528 }
349    
350 zmatsuo 7914 // idle������������?
351     if (IsIdleMessage(&msg)) {
352     bIdle = TRUE;
353 zmatsuo 7528 lCount = 0;
354     }
355 zmatsuo 7914
356     if (::PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE) == FALSE) {
357     // ���b�Z�[�W������������
358     break;
359     }
360 zmatsuo 7528 }
361 maya 3392 }
362 zmatsuo 7914 exit_message_loop:
363    
364 zmatsuo 7528 delete m_pMainWnd;
365     m_pMainWnd = NULL;
366    
367 zmatsuo 8582 _HtmlHelpW(NULL, NULL, HH_CLOSE_ALL, 0);
368     _HtmlHelpW(NULL, NULL, HH_UNINITIALIZE, HtmlHelpCookie);
369    
370 zmatsuo 7528 UnloadSpecialFont();
371     DLLExit();
372    
373 zmatsuo 7914 return (int)msg.wParam;
374 maya 3227 }

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