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 3221 - (hide annotations) (download) (as text)
Tue Mar 24 09:37:20 2009 UTC (15 years ago) by maya
Original Path: trunk/teraterm/teraterm/teraterm.cpp
File MIME type: text/x-c++src
File size: 3667 byte(s)
CVS から SVN へ移行: trunk に集約
1 maya 2476 /* Tera Term
2     Copyright(C) 1994-1998 T. Teranishi
3     All rights reserved. */
4    
5     /* TERATERM.EXE, main */
6    
7     #include "stdafx.h"
8     #include "teraterm.h"
9     #include "tttypes.h"
10     #include "commlib.h"
11     #include "ttwinman.h"
12     #include "buffer.h"
13     #include "vtterm.h"
14     #include "vtwin.h"
15     #include "clipboar.h"
16     #include "ttftypes.h"
17     #include "filesys.h"
18     #include "telnet.h"
19     #include "tektypes.h"
20     #include "tekwin.h"
21     #include "ttdde.h"
22    
23     #include "teraapp.h"
24    
25 maya 2664 #include "compat_w95.h"
26    
27 maya 2476 #ifdef _DEBUG
28     #define new DEBUG_NEW
29     #undef THIS_FILE
30     static char THIS_FILE[] = __FILE__;
31     #endif
32    
33     BEGIN_MESSAGE_MAP(CTeraApp, CWinApp)
34     //{{AFX_MSG_MAP(CTeraApp)
35     //}}AFX_MSG_MAP
36     END_MESSAGE_MAP()
37    
38     CTeraApp::CTeraApp()
39     {
40     }
41    
42     // CTeraApp instance
43     CTeraApp theApp;
44    
45 yutakapon 2658
46 yutakapon 2659
47    
48 maya 2664
49 maya 2476 // CTeraApp initialization
50     BOOL CTeraApp::InitInstance()
51     {
52     // インストーラで実行を検出するために mutex を作成する (2006.8.12 maya)
53     // 2重起動防止のためではないので、特に返り値は見ない
54     HANDLE hMutex;
55     hMutex = CreateMutex(NULL, TRUE, "TeraTermProAppMutex");
56    
57     hInst = m_hInstance;
58     m_pMainWnd = new CVTWindow();
59     pVTWin = m_pMainWnd;
60     return TRUE;
61     }
62    
63     int CTeraApp::ExitInstance()
64     {
65     return CWinApp::ExitInstance();
66     }
67    
68     // Tera Term main engine
69     BOOL CTeraApp::OnIdle(LONG lCount)
70     {
71     static int Busy = 2;
72     int Change, nx, ny;
73     BOOL Size;
74    
75     if (lCount==0) Busy = 2;
76    
77     if (cv.Ready)
78     {
79     /* Sender */
80     CommSend(&cv);
81    
82     /* Parser */
83     if ((cv.HLogBuf!=NULL) && (cv.LogBuf==NULL))
84     cv.LogBuf = (PCHAR)GlobalLock(cv.HLogBuf);
85    
86     if ((cv.HBinBuf!=NULL) && (cv.BinBuf==NULL))
87     cv.BinBuf = (PCHAR)GlobalLock(cv.HBinBuf);
88    
89     if ((TelStatus==TelIdle) && cv.TelMode)
90     TelStatus = TelIAC;
91    
92     if (TelStatus != TelIdle)
93     {
94     ParseTel(&Size,&nx,&ny);
95     if (Size) {
96     LockBuffer();
97     ChangeTerminalSize(nx,ny);
98     UnlockBuffer();
99     }
100     }
101     else {
102     if (cv.ProtoFlag) Change = ProtoDlgParse();
103     else {
104     switch (ActiveWin) {
105     case IdVT:
106     Change = ((CVTWindow*)pVTWin)->Parse();
107     // TEK windowのアクティブ中に pause を使うと、CPU使用率100%となる
108     // 現象への暫定対処。(2006.2.6 yutaka)
109     // 待ち時間をなくし、コンテキストスイッチだけにする。(2006.3.20 yutaka)
110     Sleep(0);
111     break;
112    
113     case IdTEK:
114     if (pTEKWin != NULL) {
115     Change = ((CTEKWindow*)pTEKWin)->Parse();
116     // TEK windowのアクティブ中に pause を使うと、CPU使用率100%となる
117     // 現象への暫定対処。(2006.2.6 yutaka)
118     Sleep(1);
119     }
120     else
121     Change = IdVT;
122     break;
123    
124     default:
125     Change = 0;
126     }
127    
128     switch (Change) {
129     case IdVT: VTActivate(); break;
130     case IdTEK: ((CVTWindow*)pVTWin)->OpenTEK(); break;
131     }
132     }
133     }
134    
135     if (cv.LogBuf!=NULL)
136     {
137     if (FileLog) LogToFile();
138     if (DDELog && AdvFlag) DDEAdv();
139     GlobalUnlock(cv.HLogBuf);
140     cv.LogBuf = NULL;
141     }
142    
143     if (cv.BinBuf!=NULL)
144     {
145     if (BinLog) LogToFile();
146     GlobalUnlock(cv.HBinBuf);
147     cv.BinBuf = NULL;
148     }
149    
150     /* Talker */
151     switch (TalkStatus) {
152     case IdTalkCB: CBSend(); break; /* clip board */
153     case IdTalkFile: FileSend(); break; /* file */
154     }
155    
156     /* Receiver */
157     if (DDELog && cv.DCount >0) {
158     // ログバッファがまだDDEクライアントへ送られていない場合は、
159     // TCPパケットの受信を行わない。
160     // 連続して受信を行うと、ログバッファがラウンドロビンにより未送信のデータを
161     // 上書きしてしまう可能性がある。(2007.6.14 yutaka)
162    
163     } else {
164     CommReceive(&cv);
165     }
166    
167     }
168    
169     if (cv.Ready &&
170     (cv.RRQ || (cv.OutBuffCount>0) || (cv.InBuffCount>0) ||
171     (cv.LCount>0) || (cv.BCount>0) || (cv.DCount>0)) )
172     Busy = 2;
173     else
174     Busy--;
175    
176     return (Busy>0);
177     }
178    
179     BOOL CTeraApp::PreTranslateMessage(MSG* pMsg)
180     {
181     if (ts.MetaKey>0)
182     return FALSE; /* ignore accelerator keys */
183     else
184     return CWinApp::PreTranslateMessage(pMsg);
185     }

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