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 7935 - (hide annotations) (download) (as text)
Sat Aug 10 07:32:33 2019 UTC (4 years, 8 months ago) by zmatsuo
Original Path: trunk/teraterm/teraterm/teraterm.cpp
File MIME type: text/x-c++src
File size: 8890 byte(s)
グローバル変数void *pVTWinをファイル内static変数にした

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

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