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 4352 - (hide annotations) (download) (as text)
Mon Feb 28 09:10:09 2011 UTC (13 years, 1 month ago) by maya
Original Path: trunk/teraterm/teraterm/teraterm.cpp
File MIME type: text/x-c++src
File size: 4313 byte(s)
インストーラからの起動チェックのため、グローバルミューテックスも作成するようにした
  http://www.jrsoftware.org/iskb.php?mutexsessions
1 maya 3227 /* 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     #include "compat_w95.h"
26    
27     #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    
46    
47    
48    
49     // CTeraApp initialization
50     BOOL CTeraApp::InitInstance()
51     {
52 maya 3392 // インストーラで実行を検出するために mutex を作成する (2006.8.12 maya)
53     // 2重起動防止のためではないので、特に返り値は見ない
54 maya 4352 SECURITY_DESCRIPTOR sd;
55     SECURITY_ATTRIBUTES sa;
56     HANDLE hMutex, hMutex2;
57     InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
58     SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);
59     sa.nLength = sizeof(sa);
60     sa.lpSecurityDescriptor = &sd;
61     sa.bInheritHandle = FALSE;
62     hMutex = CreateMutex(&sa, FALSE, "TeraTermProAppMutex");
63     hMutex2 = CreateMutex(&sa, FALSE, "Global\\TeraTermProAppMutex");
64 maya 3227
65 maya 3392 hInst = m_hInstance;
66     m_pMainWnd = new CVTWindow();
67     pVTWin = m_pMainWnd;
68     return TRUE;
69 maya 3227 }
70    
71     int CTeraApp::ExitInstance()
72     {
73 maya 3392 return CWinApp::ExitInstance();
74 maya 3227 }
75    
76     // Tera Term main engine
77     BOOL CTeraApp::OnIdle(LONG lCount)
78     {
79     static int Busy = 2;
80     int Change, nx, ny;
81     BOOL Size;
82    
83     if (lCount==0) Busy = 2;
84    
85     if (cv.Ready)
86     {
87     /* Sender */
88     CommSend(&cv);
89    
90     /* Parser */
91     if ((cv.HLogBuf!=NULL) && (cv.LogBuf==NULL))
92     cv.LogBuf = (PCHAR)GlobalLock(cv.HLogBuf);
93    
94     if ((cv.HBinBuf!=NULL) && (cv.BinBuf==NULL))
95     cv.BinBuf = (PCHAR)GlobalLock(cv.HBinBuf);
96    
97     if ((TelStatus==TelIdle) && cv.TelMode)
98     TelStatus = TelIAC;
99    
100     if (TelStatus != TelIdle)
101     {
102     ParseTel(&Size,&nx,&ny);
103     if (Size) {
104     LockBuffer();
105     ChangeTerminalSize(nx,ny);
106     UnlockBuffer();
107     }
108     }
109     else {
110     if (cv.ProtoFlag) Change = ProtoDlgParse();
111     else {
112     switch (ActiveWin) {
113     case IdVT:
114     Change = ((CVTWindow*)pVTWin)->Parse();
115     // TEK windowのアクティブ中に pause を使うと、CPU使用率100%となる
116     // 現象への暫定対処。(2006.2.6 yutaka)
117     // 待ち時間をなくし、コンテキストスイッチだけにする。(2006.3.20 yutaka)
118     Sleep(0);
119     break;
120    
121     case IdTEK:
122     if (pTEKWin != NULL) {
123     Change = ((CTEKWindow*)pTEKWin)->Parse();
124     // TEK windowのアクティブ中に pause を使うと、CPU使用率100%となる
125     // 現象への暫定対処。(2006.2.6 yutaka)
126     Sleep(1);
127     }
128 maya 3392 else {
129 maya 3227 Change = IdVT;
130 maya 3392 }
131 maya 3227 break;
132    
133     default:
134     Change = 0;
135     }
136    
137     switch (Change) {
138 maya 3392 case IdVT:
139     VTActivate();
140     break;
141     case IdTEK:
142     ((CVTWindow*)pVTWin)->OpenTEK();
143     break;
144 maya 3227 }
145     }
146     }
147    
148     if (cv.LogBuf!=NULL)
149     {
150 maya 3392 if (FileLog) {
151     LogToFile();
152     }
153     if (DDELog && AdvFlag) {
154     DDEAdv();
155     }
156 maya 3227 GlobalUnlock(cv.HLogBuf);
157     cv.LogBuf = NULL;
158     }
159    
160     if (cv.BinBuf!=NULL)
161     {
162 maya 3392 if (BinLog) {
163     LogToFile();
164     }
165 maya 3227 GlobalUnlock(cv.HBinBuf);
166     cv.BinBuf = NULL;
167     }
168    
169     /* Talker */
170     switch (TalkStatus) {
171 maya 3392 case IdTalkCB:
172     CBSend();
173     break; /* clip board */
174     case IdTalkFile:
175     FileSend();
176     break; /* file */
177 maya 3227 }
178    
179     /* Receiver */
180     if (DDELog && cv.DCount >0) {
181     // ログバッファがまだDDEクライアントへ送られていない場合は、
182     // TCPパケットの受信を行わない。
183     // 連続して受信を行うと、ログバッファがラウンドロビンにより未送信のデータを
184     // 上書きしてしまう可能性がある。(2007.6.14 yutaka)
185    
186     } else {
187     CommReceive(&cv);
188     }
189    
190     }
191    
192     if (cv.Ready &&
193 doda 3494 (cv.RRQ || (cv.OutBuffCount>0) || (cv.InBuffCount>0) || (cv.FlushLen>0) || (cv.LCount>0) || (cv.BCount>0) || (cv.DCount>0)) ) {
194 maya 3227 Busy = 2;
195 maya 3392 }
196     else {
197 maya 3227 Busy--;
198 maya 3392 }
199 maya 3227
200     return (Busy>0);
201     }
202    
203     BOOL CTeraApp::PreTranslateMessage(MSG* pMsg)
204     {
205 maya 3392 if (ts.MetaKey>0) {
206     return FALSE; /* ignore accelerator keys */
207     }
208     else {
209     return CWinApp::PreTranslateMessage(pMsg);
210     }
211 maya 3227 }

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