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 2660 - (hide annotations) (download) (as text)
Tue Feb 17 13:53:24 2009 UTC (15 years, 1 month ago) by maya
Original Path: teraterm/trunk/teraterm/teraterm.cpp
File MIME type: text/x-c++src
File size: 5101 byte(s)
* Windows 95
- Winsock2 が必須
- ttermpro の起動に IE4 以上が必須
- ヘルプの表示に IE5 以上が必須
- LogMeTTc は動かない
- TTLEdit はボタンの色がうまく出ない

* NT 4.0
- ヘルプの表示に IE5 以上が必須
- LogMeTT, TTLEdit の起動に SP4(?)以上 が必須
- LogMeTTc の起動に SP6 以上が必須

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     #ifdef _DEBUG
26     #define new DEBUG_NEW
27     #undef THIS_FILE
28     static char THIS_FILE[] = __FILE__;
29     #endif
30    
31     BEGIN_MESSAGE_MAP(CTeraApp, CWinApp)
32     //{{AFX_MSG_MAP(CTeraApp)
33     //}}AFX_MSG_MAP
34     END_MESSAGE_MAP()
35    
36     CTeraApp::CTeraApp()
37     {
38     }
39    
40     // CTeraApp instance
41     CTeraApp theApp;
42    
43 yutakapon 2658 // VS2005でビルドされたバイナリが Windows95 でも起動できるようにするために、
44     // IsDebuggerPresent()のシンボル定義を追加する。
45 yutakapon 2659 //
46     // cf.http://jet2.u-abel.net/program/tips/forceimp.htm
47     // 装飾された名前のアドレスを作るための仮定義
48     // (これだけでインポートを横取りしている)
49     EXTERN_C int WINAPI _imp__IsDebuggerPresent()
50     { return PtrToInt((void*) &_imp__IsDebuggerPresent); }
51     // 実際に横取り処理を行う関数
52     EXTERN_C BOOL WINAPI Cover_IsDebuggerPresent()
53     { return FALSE; }
54     // 関数が実際に呼び出されたときに備えて
55     // 横取り処理関数を呼び出させるための下準備
56     EXTERN_C void __stdcall DoCover_IsDebuggerPresent()
57 yutakapon 2658 {
58 yutakapon 2659 DWORD dw;
59     DWORD_PTR FAR* lpdw;
60     // 横取り関数を設定するアドレスを取得
61     lpdw = (DWORD_PTR FAR*) &_imp__IsDebuggerPresent;
62     // このアドレスを書き込めるように設定
63     // (同じプログラム内なので障害なく行える)
64     VirtualProtect(lpdw, sizeof(DWORD_PTR), PAGE_READWRITE, &dw);
65     // 横取り関数を設定
66     *lpdw = (DWORD_PTR)(FARPROC) Cover_IsDebuggerPresent;
67     // 読み書きの状態を元に戻す
68     VirtualProtect(lpdw, sizeof(DWORD_PTR), dw, NULL);
69 yutakapon 2658 }
70 yutakapon 2659 // アプリケーションが初期化される前に下準備を呼び出す
71     // ※ かなり早くに初期化したいときは、このコードを
72     // ファイルの末尾に書いて「#pragma init_seg(lib)」を、
73     // この変数宣言の手前に書きます。
74     // 初期化を急ぐ必要が無い場合は WinMain 内から
75     // DoCover_IsDebuggerPresent を呼び出して構いません。
76     EXTERN_C int s_DoCover_IsDebuggerPresent
77     = (int) (DoCover_IsDebuggerPresent(), 0);
78 yutakapon 2658
79 yutakapon 2659
80    
81 maya 2476 // CTeraApp initialization
82     BOOL CTeraApp::InitInstance()
83     {
84     // インストーラで実行を検出するために mutex を作成する (2006.8.12 maya)
85     // 2重起動防止のためではないので、特に返り値は見ない
86     HANDLE hMutex;
87     hMutex = CreateMutex(NULL, TRUE, "TeraTermProAppMutex");
88    
89     hInst = m_hInstance;
90     m_pMainWnd = new CVTWindow();
91     pVTWin = m_pMainWnd;
92     return TRUE;
93     }
94    
95     int CTeraApp::ExitInstance()
96     {
97     return CWinApp::ExitInstance();
98     }
99    
100     // Tera Term main engine
101     BOOL CTeraApp::OnIdle(LONG lCount)
102     {
103     static int Busy = 2;
104     int Change, nx, ny;
105     BOOL Size;
106    
107     if (lCount==0) Busy = 2;
108    
109     if (cv.Ready)
110     {
111     /* Sender */
112     CommSend(&cv);
113    
114     /* Parser */
115     if ((cv.HLogBuf!=NULL) && (cv.LogBuf==NULL))
116     cv.LogBuf = (PCHAR)GlobalLock(cv.HLogBuf);
117    
118     if ((cv.HBinBuf!=NULL) && (cv.BinBuf==NULL))
119     cv.BinBuf = (PCHAR)GlobalLock(cv.HBinBuf);
120    
121     if ((TelStatus==TelIdle) && cv.TelMode)
122     TelStatus = TelIAC;
123    
124     if (TelStatus != TelIdle)
125     {
126     ParseTel(&Size,&nx,&ny);
127     if (Size) {
128     LockBuffer();
129     ChangeTerminalSize(nx,ny);
130     UnlockBuffer();
131     }
132     }
133     else {
134     if (cv.ProtoFlag) Change = ProtoDlgParse();
135     else {
136     switch (ActiveWin) {
137     case IdVT:
138     Change = ((CVTWindow*)pVTWin)->Parse();
139     // TEK windowのアクティブ中に pause を使うと、CPU使用率100%となる
140     // 現象への暫定対処。(2006.2.6 yutaka)
141     // 待ち時間をなくし、コンテキストスイッチだけにする。(2006.3.20 yutaka)
142     Sleep(0);
143     break;
144    
145     case IdTEK:
146     if (pTEKWin != NULL) {
147     Change = ((CTEKWindow*)pTEKWin)->Parse();
148     // TEK windowのアクティブ中に pause を使うと、CPU使用率100%となる
149     // 現象への暫定対処。(2006.2.6 yutaka)
150     Sleep(1);
151     }
152     else
153     Change = IdVT;
154     break;
155    
156     default:
157     Change = 0;
158     }
159    
160     switch (Change) {
161     case IdVT: VTActivate(); break;
162     case IdTEK: ((CVTWindow*)pVTWin)->OpenTEK(); break;
163     }
164     }
165     }
166    
167     if (cv.LogBuf!=NULL)
168     {
169     if (FileLog) LogToFile();
170     if (DDELog && AdvFlag) DDEAdv();
171     GlobalUnlock(cv.HLogBuf);
172     cv.LogBuf = NULL;
173     }
174    
175     if (cv.BinBuf!=NULL)
176     {
177     if (BinLog) LogToFile();
178     GlobalUnlock(cv.HBinBuf);
179     cv.BinBuf = NULL;
180     }
181    
182     /* Talker */
183     switch (TalkStatus) {
184     case IdTalkCB: CBSend(); break; /* clip board */
185     case IdTalkFile: FileSend(); break; /* file */
186     }
187    
188     /* Receiver */
189     if (DDELog && cv.DCount >0) {
190     // ログバッファがまだDDEクライアントへ送られていない場合は、
191     // TCPパケットの受信を行わない。
192     // 連続して受信を行うと、ログバッファがラウンドロビンにより未送信のデータを
193     // 上書きしてしまう可能性がある。(2007.6.14 yutaka)
194    
195     } else {
196     CommReceive(&cv);
197     }
198    
199     }
200    
201     if (cv.Ready &&
202     (cv.RRQ || (cv.OutBuffCount>0) || (cv.InBuffCount>0) ||
203     (cv.LCount>0) || (cv.BCount>0) || (cv.DCount>0)) )
204     Busy = 2;
205     else
206     Busy--;
207    
208     return (Busy>0);
209     }
210    
211     BOOL CTeraApp::PreTranslateMessage(MSG* pMsg)
212     {
213     if (ts.MetaKey>0)
214     return FALSE; /* ignore accelerator keys */
215     else
216     return CWinApp::PreTranslateMessage(pMsg);
217     }

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