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 8582 - (hide annotations) (download) (as text)
Tue Mar 10 14:09:15 2020 UTC (4 years, 1 month ago) by zmatsuo
Original Path: trunk/teraterm/teraterm/teraterm.cpp
File MIME type: text/x-c++src
File size: 9387 byte(s)
htmlhelp の初期化と終了処理を vtwin.cpp から teraterm.cpp に移動

- HtmlHelp() の HH_INITIALIZE, HH_UNINITIALIZE, HH_CLOSE_ALL コマンド
- 引数に hWnd がないので、exe の最初と最後で呼ぶことが意図されていると思われる
  - ウィンドウの生成、破棄時に呼ぶのではない
- r8576
1 doda 6806 /*
2     * Copyright (C) 1994-1998 T. Teranishi
3 zmatsuo 8582 * (C) 2006-2020 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 "ttftypes.h"
48     #include "filesys.h"
49     #include "telnet.h"
50     #include "tektypes.h"
51     #include "tekwin.h"
52     #include "ttdde.h"
53 doda 4414 #include "keyboard.h"
54 zmatsuo 7457 #include "dllutil.h"
55     #include "compat_win.h"
56 maya 3227 #include "compat_w95.h"
57 zmatsuo 7509 #include "dlglib.h"
58 zmatsuo 7528 #include "teraterml.h"
59 doda 8445 #include "unicode_test.h"
60     #if UNICODE_INTERNAL_BUFF
61     #include "sendmem.h"
62     #endif
63 zmatsuo 8518 #include "layer_for_unicode.h"
64 maya 3227
65 zmatsuo 7656 #if defined(_DEBUG) && defined(_MSC_VER)
66 zmatsuo 7457 #define new ::new(_NORMAL_BLOCK, __FILE__, __LINE__)
67 maya 3227 #endif
68    
69 zmatsuo 7457 static BOOL AddFontFlag;
70 zmatsuo 8518 static wchar_t TSpecialFont[MAX_PATH];
71 zmatsuo 7935 static CVTWindow* pVTWin;
72 zmatsuo 8582 static DWORD HtmlHelpCookie;
73 zmatsuo 7457
74     static void LoadSpecialFont()
75     {
76 zmatsuo 8518 if (IsExistFontA("Tera Special", SYMBOL_CHARSET, TRUE)) {
77     // ���������������������[�h������
78     return;
79     }
80 zmatsuo 7457
81 zmatsuo 8518 if (GetModuleFileNameW(NULL, TSpecialFont, _countof(TSpecialFont)) == 0) {
82     AddFontFlag = FALSE;
83     return;
84     }
85     *wcsrchr(TSpecialFont, L'\\') = 0;
86     wcscat_s(TSpecialFont, L"\\TSPECIAL1.TTF");
87 zmatsuo 7457
88 zmatsuo 8518 // teraterm.exe�������L�����t�H���g�������B
89     // remove�����������I��������OS������������
90     int r = _AddFontResourceExW(TSpecialFont, FR_PRIVATE, NULL);
91     if (r == 0) {
92     // AddFontResourceEx() ���g����������
93     // �V�X�e���S�����g�����t�H���g������
94     // remove��������OS������������������
95     r = _AddFontResourceW(TSpecialFont);
96 doda 6793 }
97 zmatsuo 8518 if (r != 0) {
98     AddFontFlag = TRUE;
99     }
100 maya 3227 }
101    
102 zmatsuo 7457 static void UnloadSpecialFont()
103     {
104 zmatsuo 8518 if (!AddFontFlag) {
105     return;
106 zmatsuo 7457 }
107 zmatsuo 8518 int r = _RemoveFontResourceExW(TSpecialFont, FR_PRIVATE, NULL);
108     if (r == 0) {
109     _RemoveFontResourceW(TSpecialFont);
110     }
111 zmatsuo 7457 }
112    
113 zmatsuo 7509 static void init()
114 zmatsuo 7457 {
115     DLLInit();
116     WinCompatInit();
117 zmatsuo 7509 LoadSpecialFont();
118 zmatsuo 7457 }
119    
120 maya 3227 // Tera Term main engine
121 zmatsuo 7528 static BOOL OnIdle(LONG lCount)
122 maya 3227 {
123     static int Busy = 2;
124     int Change, nx, ny;
125     BOOL Size;
126    
127     if (lCount==0) Busy = 2;
128    
129     if (cv.Ready)
130     {
131     /* Sender */
132     CommSend(&cv);
133    
134     /* Parser */
135     if ((cv.HLogBuf!=NULL) && (cv.LogBuf==NULL))
136     cv.LogBuf = (PCHAR)GlobalLock(cv.HLogBuf);
137    
138     if ((cv.HBinBuf!=NULL) && (cv.BinBuf==NULL))
139     cv.BinBuf = (PCHAR)GlobalLock(cv.HBinBuf);
140    
141     if ((TelStatus==TelIdle) && cv.TelMode)
142     TelStatus = TelIAC;
143    
144     if (TelStatus != TelIdle)
145     {
146     ParseTel(&Size,&nx,&ny);
147     if (Size) {
148     LockBuffer();
149     ChangeTerminalSize(nx,ny);
150     UnlockBuffer();
151     }
152     }
153     else {
154     if (cv.ProtoFlag) Change = ProtoDlgParse();
155     else {
156     switch (ActiveWin) {
157 doda 6435 case IdVT:
158 zmatsuo 7935 Change = pVTWin->Parse();
159 maya 3227 // TEK window���A�N�e�B�u���� pause ���g�����ACPU�g�p��100%������
160     // ���������b�������B(2006.2.6 yutaka)
161     // �����������������A�R���e�L�X�g�X�C�b�`�����������B(2006.3.20 yutaka)
162     Sleep(0);
163     break;
164    
165     case IdTEK:
166     if (pTEKWin != NULL) {
167     Change = ((CTEKWindow*)pTEKWin)->Parse();
168     // TEK window���A�N�e�B�u���� pause ���g�����ACPU�g�p��100%������
169     // ���������b�������B(2006.2.6 yutaka)
170     Sleep(1);
171     }
172 maya 3392 else {
173 maya 3227 Change = IdVT;
174 maya 3392 }
175 maya 3227 break;
176    
177     default:
178     Change = 0;
179     }
180    
181     switch (Change) {
182 maya 3392 case IdVT:
183     VTActivate();
184     break;
185     case IdTEK:
186 zmatsuo 7935 pVTWin->OpenTEK();
187 maya 3392 break;
188 maya 3227 }
189     }
190     }
191    
192     if (cv.LogBuf!=NULL)
193     {
194 maya 3392 if (FileLog) {
195     LogToFile();
196     }
197     if (DDELog && AdvFlag) {
198     DDEAdv();
199     }
200 maya 3227 GlobalUnlock(cv.HLogBuf);
201     cv.LogBuf = NULL;
202     }
203    
204     if (cv.BinBuf!=NULL)
205     {
206 maya 3392 if (BinLog) {
207     LogToFile();
208     }
209 maya 3227 GlobalUnlock(cv.HBinBuf);
210     cv.BinBuf = NULL;
211     }
212    
213     /* Talker */
214     switch (TalkStatus) {
215 maya 3392 case IdTalkCB:
216     CBSend();
217     break; /* clip board */
218     case IdTalkFile:
219     FileSend();
220     break; /* file */
221 doda 8445 case IdTalkSendMem:
222     SendMemContinuously();
223     break;
224     default:
225     break;
226 maya 3227 }
227    
228     /* Receiver */
229     if (DDELog && cv.DCount >0) {
230     // ���O�o�b�t�@������DDE�N���C�A���g�����������������������A
231     // TCP�p�P�b�g�����M���s�������B
232     // �A���������M���s�����A���O�o�b�t�@�����E���h���r�������������M���f�[�^��
233     // �������������������\���������B(2007.6.14 yutaka)
234    
235     } else {
236     CommReceive(&cv);
237     }
238    
239     }
240    
241     if (cv.Ready &&
242 doda 3494 (cv.RRQ || (cv.OutBuffCount>0) || (cv.InBuffCount>0) || (cv.FlushLen>0) || (cv.LCount>0) || (cv.BCount>0) || (cv.DCount>0)) ) {
243 maya 3227 Busy = 2;
244 maya 3392 }
245     else {
246 maya 3227 Busy--;
247 maya 3392 }
248 maya 3227
249     return (Busy>0);
250     }
251    
252 zmatsuo 7528 BOOL CallOnIdle(LONG lCount)
253 maya 3227 {
254 zmatsuo 7528 return OnIdle(lCount);
255     }
256    
257     static HWND main_window;
258     HWND GetHWND()
259     {
260     return main_window;
261     }
262    
263 zmatsuo 7915 static HWND hModelessDlg;
264 zmatsuo 7528
265 zmatsuo 7915 void AddModelessHandle(HWND hWnd)
266 zmatsuo 7528 {
267 zmatsuo 7915 hModelessDlg = hWnd;
268 zmatsuo 7528 }
269    
270 zmatsuo 7915 void RemoveModelessHandle(HWND hWnd)
271 zmatsuo 7528 {
272 zmatsuo 7914 (void)hWnd;
273 zmatsuo 7915 hModelessDlg = 0;
274 zmatsuo 7528 }
275    
276 zmatsuo 7914 static UINT nMsgLast;
277     static POINT ptCursorLast;
278    
279     /**
280     * idle��������������������
281     */
282     static BOOL IsIdleMessage(const MSG* pMsg)
283     {
284     if (pMsg->message == WM_MOUSEMOVE ||
285     pMsg->message == WM_NCMOUSEMOVE)
286     {
287     if (pMsg->message == nMsgLast &&
288     pMsg->pt.x == ptCursorLast.x &&
289     pMsg->pt.y == ptCursorLast.y)
290     { // �������u��������idle������������
291     return FALSE;
292     }
293    
294     ptCursorLast = pMsg->pt;
295     nMsgLast = pMsg->message;
296     return TRUE;
297     }
298    
299     if (pMsg->message == WM_PAINT ||
300     pMsg->message == 0x0118/*WM_SYSTIMER*/)
301     {
302     return FALSE;
303     }
304    
305     return TRUE;
306     }
307    
308 zmatsuo 7528 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
309     LPSTR lpszCmdLine, int nCmdShow)
310     {
311 zmatsuo 7914 (void)hPreInst;
312     (void)lpszCmdLine;
313     (void)nCmdShow;
314 zmatsuo 7528 #ifdef _DEBUG
315 zmatsuo 7656 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
316 zmatsuo 7528 #endif
317 doda 8445
318 zmatsuo 8582 _HtmlHelpW(NULL, NULL, HH_INITIALIZE, (DWORD_PTR)&HtmlHelpCookie);
319 zmatsuo 7528 init();
320     hInst = hInstance;
321 zmatsuo 7916 CVTWindow *m_pMainWnd = new CVTWindow(hInstance);
322 zmatsuo 7528 pVTWin = m_pMainWnd;
323     main_window = m_pMainWnd->m_hWnd;
324 zmatsuo 7589 // [Tera Term]�Z�N�V������DLG_SYSTEM_FONT�������������Z�b�g����
325 zmatsuo 7706 SetDialogFont(ts.DialogFontName, ts.DialogFontPoint, ts.DialogFontCharSet,
326     ts.UILanguageFile, "Tera Term", "DLG_SYSTEM_FONT");
327 zmatsuo 7528
328 zmatsuo 7914 BOOL bIdle = TRUE; // idle������?
329     LONG lCount = 0;
330 zmatsuo 7528 MSG msg;
331 zmatsuo 7914 for (;;) {
332     // idle���������b�Z�[�W����������
333     while (bIdle) {
334     if (::PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE) != FALSE) {
335     // ���b�Z�[�W����������
336     break;
337 zmatsuo 7528 }
338 zmatsuo 7914
339     const BOOL continue_idle = OnIdle(lCount++);
340     if (!continue_idle) {
341     // FALSE��������������idle�������s�v
342     bIdle = FALSE;
343     break;
344     }
345 zmatsuo 7528 }
346    
347 zmatsuo 7914 // ���b�Z�[�W����������������������
348     for(;;) {
349     // ���b�Z�[�W���������������AGetMessage()���u���b�N��������������
350     if (::GetMessage(&msg, NULL, 0, 0) == FALSE) {
351     // WM_QUIT
352     goto exit_message_loop;
353     }
354 zmatsuo 7528
355 zmatsuo 7915 if (hModelessDlg == 0 ||
356     ::IsDialogMessage(hModelessDlg, &msg) == FALSE)
357 zmatsuo 7914 {
358     bool message_processed = false;
359    
360     if (m_pMainWnd->m_hAccel != NULL) {
361     if (!MetaKey(ts.MetaKey)) {
362     // matakey����������������
363     if (::TranslateAccelerator(m_pMainWnd->m_hWnd , m_pMainWnd->m_hAccel, &msg)) {
364     // �A�N�Z�����[�^�[�L�[����������
365     message_processed = true;
366     }
367     }
368 zmatsuo 7528 }
369 zmatsuo 7914
370     if (!message_processed) {
371     ::TranslateMessage(&msg);
372     ::DispatchMessage(&msg);
373     }
374 zmatsuo 7528 }
375    
376 zmatsuo 7914 // idle������������?
377     if (IsIdleMessage(&msg)) {
378     bIdle = TRUE;
379 zmatsuo 7528 lCount = 0;
380     }
381 zmatsuo 7914
382     if (::PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE) == FALSE) {
383     // ���b�Z�[�W������������
384     break;
385     }
386 zmatsuo 7528 }
387 maya 3392 }
388 zmatsuo 7914 exit_message_loop:
389    
390 zmatsuo 7528 delete m_pMainWnd;
391     m_pMainWnd = NULL;
392    
393 zmatsuo 8582 _HtmlHelpW(NULL, NULL, HH_CLOSE_ALL, 0);
394     _HtmlHelpW(NULL, NULL, HH_UNINITIALIZE, HtmlHelpCookie);
395    
396 zmatsuo 7528 UnloadSpecialFont();
397     DLLExit();
398    
399 zmatsuo 7914 return (int)msg.wParam;
400 maya 3227 }

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