Commit 0099a0bd71c17e280163952bf0266d49b7e9b563

Authored by xiemeng
1 parent c02556d4

更新UI

@@ -109,7 +109,7 @@ void ErrorReporter(char * szMessage) @@ -109,7 +109,7 @@ void ErrorReporter(char * szMessage)
109 109
110 OutputDebugString(szFinal); 110 OutputDebugString(szFinal);
111 111
112 - if (TTYInfo.fDisplayErrors) 112 + if (g_appdata.fDisplayErrors)
113 MessageBox(ghwndMain, szFinal, NULL, MB_OK); 113 MessageBox(ghwndMain, szFinal, NULL, MB_OK);
114 114
115 LocalFree(szFinal); // free final buffer 115 LocalFree(szFinal); // free final buffer
@@ -64,16 +64,12 @@ void GlobalInitialize() @@ -64,16 +64,12 @@ void GlobalInitialize()
64 { 64 {
65 int cyMenuHeight, cyCaptionHeight, cyFrameHeight; 65 int cyMenuHeight, cyCaptionHeight, cyFrameHeight;
66 66
67 - //  
68 // critical sections in status reporting & node management 67 // critical sections in status reporting & node management
69 // 初始化互斥对象 68 // 初始化互斥对象
70 InitializeCriticalSection(&gStatusCritical); 69 InitializeCriticalSection(&gStatusCritical);
71 InitializeCriticalSection(&gcsWriterHeap); 70 InitializeCriticalSection(&gcsWriterHeap);
72 InitializeCriticalSection(&gcsDataHeap); 71 InitializeCriticalSection(&gcsDataHeap);
73 -  
74 - //  
75 // 状态消息事件 72 // 状态消息事件
76 - //  
77 ghStatusMessageEvent = CreateEvent(NULL, FALSE, FALSE, NULL); 73 ghStatusMessageEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
78 if (ghStatusMessageEvent == NULL) 74 if (ghStatusMessageEvent == NULL)
79 ErrorReporter("CreateEvent (Status message event)"); 75 ErrorReporter("CreateEvent (Status message event)");
@@ -149,7 +145,7 @@ HISTORY: Date: Author: Comment: @@ -149,7 +145,7 @@ HISTORY: Date: Author: Comment:
149 -----------------------------------------------------------------------------*/ 145 -----------------------------------------------------------------------------*/
150 BOOL ClearTTYContents() 146 BOOL ClearTTYContents()
151 { 147 {
152 - FillMemory(TTYInfo.Screen, MAXCOLS*MAXROWS, ' '); 148 + FillMemory(g_appdata.Screen, MAXCOLS*MAXROWS, ' ');
153 return TRUE; 149 return TRUE;
154 } 150 }
155 151
@@ -178,27 +174,27 @@ void InitNewFont(LOGFONT LogFont, COLORREF rgbColor) @@ -178,27 +174,27 @@ void InitNewFont(LOGFONT LogFont, COLORREF rgbColor)
178 // 174 //
179 //如果旧字体存在,那么我应该删除它 175 //如果旧字体存在,那么我应该删除它
180 // 176 //
181 - if (TTYInfo.hTTYFont)  
182 - DeleteObject(TTYInfo.hTTYFont); 177 + if (g_appdata.hTTYFont)
  178 + DeleteObject(g_appdata.hTTYFont);
183 179
184 - TTYInfo.lfTTYFont = LogFont;  
185 - TTYInfo.hTTYFont = CreateFontIndirect(&(TTYInfo.lfTTYFont));  
186 - TTYInfo.rgbFGColor = rgbColor;  
187 - TTYInfo.rgbBGColor = RGB(255,255,255); 180 + g_appdata.lfTTYFont = LogFont;
  181 + g_appdata.hTTYFont = CreateFontIndirect(&(g_appdata.lfTTYFont));
  182 + g_appdata.rgbFGColor = rgbColor;
  183 + g_appdata.rgbBGColor = RGB(255,255,255);
188 184
189 hDC = GetDC( ghwndMain ) ; 185 hDC = GetDC( ghwndMain ) ;
190 - SelectObject( hDC, TTYInfo.hTTYFont ) ; 186 + SelectObject( hDC, g_appdata.hTTYFont ) ;
191 GetTextMetrics( hDC, &tm ) ; 187 GetTextMetrics( hDC, &tm ) ;
192 ReleaseDC( ghwndMain, hDC ) ; 188 ReleaseDC( ghwndMain, hDC ) ;
193 189
194 // 190 //
195 //字符的宽度和高度 191 //字符的宽度和高度
196 // 192 //
197 - TTYInfo.xChar = tm.tmAveCharWidth ;  
198 - TTYInfo.yChar = tm.tmHeight + tm.tmExternalLeading ; 193 + g_appdata.xChar = tm.tmAveCharWidth ;
  194 + g_appdata.yChar = tm.tmHeight + tm.tmExternalLeading ;
199 195
200 - TTYInfo.xOffset = 0 ;  
201 - TTYInfo.yOffset = TTYInfo.yChar * TTYInfo.nRow; 196 + g_appdata.xOffset = 0 ;
  197 + g_appdata.yOffset = g_appdata.yChar * g_appdata.nRow;
202 } 198 }
203 199
204 /*----------------------------------------------------------------------------- 200 /*-----------------------------------------------------------------------------
@@ -217,79 +213,79 @@ HISTORY: Date: Author: Comment: @@ -217,79 +213,79 @@ HISTORY: Date: Author: Comment:
217 BOOL InitTTYInfo() 213 BOOL InitTTYInfo()
218 { 214 {
219 215
220 - TTYInfo.hCommPort = NULL ;  
221 - TTYInfo.fConnected = FALSE ;  
222 - TTYInfo.fLocalEcho = FALSE ;  
223 - TTYInfo.wCursorState = CS_HIDE ;  
224 - TTYInfo.bPort = 1 ;  
225 - TTYInfo.dwBaudRate = 921600 ;  
226 - TTYInfo.bByteSize = 8 ;  
227 - TTYInfo.bParity = NOPARITY ;  
228 - TTYInfo.bStopBits = ONESTOPBIT ;  
229 - TTYInfo.fAutowrap = TRUE;  
230 - TTYInfo.fNewLine = FALSE;  
231 - TTYInfo.xSize = 0 ;  
232 - TTYInfo.ySize = 0 ;  
233 - TTYInfo.xScroll = 0 ;  
234 - TTYInfo.yScroll = 0 ;  
235 - TTYInfo.nColumn = 0 ;  
236 - TTYInfo.nRow = MAXROWS - 1 ;  
237 - TTYInfo.fDisplayErrors = TRUE ; 216 + g_appdata.hCommPort = NULL ;
  217 + g_appdata.fConnected = FALSE ;
  218 + g_appdata.fLocalEcho = FALSE ;
  219 + g_appdata.wCursorState = CS_HIDE ;
  220 + g_appdata.bPort = 1 ;
  221 + g_appdata.dwBaudRate = 921600 ;
  222 + g_appdata.bByteSize = 8 ;
  223 + g_appdata.bParity = NOPARITY ;
  224 + g_appdata.bStopBits = ONESTOPBIT ;
  225 + g_appdata.fAutowrap = TRUE;
  226 + g_appdata.fNewLine = FALSE;
  227 + g_appdata.xSize = 0 ;
  228 + g_appdata.ySize = 0 ;
  229 + g_appdata.xScroll = 0 ;
  230 + g_appdata.yScroll = 0 ;
  231 + g_appdata.nColumn = 0 ;
  232 + g_appdata.nRow = MAXROWS - 1 ;
  233 + g_appdata.fDisplayErrors = TRUE ;
238 234
239 // 235 //
240 // 超时 236 // 超时
241 // 237 //
242 - TTYInfo.timeoutsnew = gTimeoutsDefault; 238 + g_appdata.timeoutsnew = gTimeoutsDefault;
243 239
244 // 240 //
245 // read state and status events 241 // read state and status events
246 // 242 //
247 gdwReceiveState = RECEIVE_TTY; 243 gdwReceiveState = RECEIVE_TTY;
248 - TTYInfo.dwEventFlags = EVENTFLAGS_DEFAULT;  
249 - TTYInfo.chFlag = FLAGCHAR_DEFAULT; 244 + g_appdata.dwEventFlags = EVENTFLAGS_DEFAULT;
  245 + g_appdata.chFlag = FLAGCHAR_DEFAULT;
250 246
251 // 247 //
252 // Flow Control Settings 248 // Flow Control Settings
253 // 249 //
254 - TTYInfo.fDtrControl = DTR_CONTROL_ENABLE;  
255 - TTYInfo.fRtsControl = RTS_CONTROL_ENABLE;  
256 - TTYInfo.chXON = ASCII_XON;  
257 - TTYInfo.chXOFF = ASCII_XOFF;  
258 - TTYInfo.wXONLimit = 0;  
259 - TTYInfo.wXOFFLimit = 0;  
260 - TTYInfo.fCTSOutFlow = FALSE;  
261 - TTYInfo.fDSROutFlow = FALSE;  
262 - TTYInfo.fDSRInFlow = FALSE;  
263 - TTYInfo.fXonXoffOutFlow = FALSE;  
264 - TTYInfo.fXonXoffInFlow = FALSE;  
265 - TTYInfo.fTXafterXoffSent = FALSE;  
266 -  
267 - TTYInfo.fNoReading = FALSE;  
268 - TTYInfo.fNoWriting = FALSE;  
269 - TTYInfo.fNoEvents = FALSE;  
270 - TTYInfo.fNoStatus = FALSE;  
271 - TTYInfo.fDisplayTimeouts = FALSE; 250 + g_appdata.fDtrControl = DTR_CONTROL_ENABLE;
  251 + g_appdata.fRtsControl = RTS_CONTROL_ENABLE;
  252 + g_appdata.chXON = ASCII_XON;
  253 + g_appdata.chXOFF = ASCII_XOFF;
  254 + g_appdata.wXONLimit = 0;
  255 + g_appdata.wXOFFLimit = 0;
  256 + g_appdata.fCTSOutFlow = FALSE;
  257 + g_appdata.fDSROutFlow = FALSE;
  258 + g_appdata.fDSRInFlow = FALSE;
  259 + g_appdata.fXonXoffOutFlow = FALSE;
  260 + g_appdata.fXonXoffInFlow = FALSE;
  261 + g_appdata.fTXafterXoffSent = FALSE;
  262 +
  263 + g_appdata.fNoReading = FALSE;
  264 + g_appdata.fNoWriting = FALSE;
  265 + g_appdata.fNoEvents = FALSE;
  266 + g_appdata.fNoStatus = FALSE;
  267 + g_appdata.fDisplayTimeouts = FALSE;
272 268
273 // 269 //
274 // setup default font information 270 // setup default font information
275 // 271 //
276 - TTYInfo.lfTTYFont.lfHeight = 20 ;  
277 - TTYInfo.lfTTYFont.lfWidth = 0 ;  
278 - TTYInfo.lfTTYFont.lfEscapement = 0 ;  
279 - TTYInfo.lfTTYFont.lfOrientation = 0 ;  
280 - TTYInfo.lfTTYFont.lfWeight = 0 ;  
281 - TTYInfo.lfTTYFont.lfItalic = 0 ;  
282 - TTYInfo.lfTTYFont.lfUnderline = 0 ;  
283 - TTYInfo.lfTTYFont.lfStrikeOut = 0 ;  
284 - TTYInfo.lfTTYFont.lfCharSet = OEM_CHARSET ;  
285 - TTYInfo.lfTTYFont.lfOutPrecision = OUT_DEFAULT_PRECIS ;  
286 - TTYInfo.lfTTYFont.lfClipPrecision = CLIP_DEFAULT_PRECIS ;  
287 - TTYInfo.lfTTYFont.lfQuality = DEFAULT_QUALITY ;  
288 - TTYInfo.lfTTYFont.lfPitchAndFamily = FIXED_PITCH | FF_MODERN ;  
289 - strcpy( TTYInfo.lfTTYFont.lfFaceName, "宋体" ) ;  
290 - TTYInfo.DownloadReday = FALSE;  
291 -  
292 - InitNewFont( TTYInfo.lfTTYFont, RGB(0,0,0)); 272 + g_appdata.lfTTYFont.lfHeight = 20 ;
  273 + g_appdata.lfTTYFont.lfWidth = 0 ;
  274 + g_appdata.lfTTYFont.lfEscapement = 0 ;
  275 + g_appdata.lfTTYFont.lfOrientation = 0 ;
  276 + g_appdata.lfTTYFont.lfWeight = 0 ;
  277 + g_appdata.lfTTYFont.lfItalic = 0 ;
  278 + g_appdata.lfTTYFont.lfUnderline = 0 ;
  279 + g_appdata.lfTTYFont.lfStrikeOut = 0 ;
  280 + g_appdata.lfTTYFont.lfCharSet = OEM_CHARSET ;
  281 + g_appdata.lfTTYFont.lfOutPrecision = OUT_DEFAULT_PRECIS ;
  282 + g_appdata.lfTTYFont.lfClipPrecision = CLIP_DEFAULT_PRECIS ;
  283 + g_appdata.lfTTYFont.lfQuality = DEFAULT_QUALITY ;
  284 + g_appdata.lfTTYFont.lfPitchAndFamily = FIXED_PITCH | FF_MODERN ;
  285 + strcpy( g_appdata.lfTTYFont.lfFaceName, "宋体" ) ;
  286 + g_appdata.DownloadReday = FALSE;
  287 +
  288 + InitNewFont( g_appdata.lfTTYFont, RGB(0,0,0));
293 289
294 ClearTTYContents(); 290 ClearTTYContents();
295 291
@@ -309,7 +305,7 @@ HISTORY: Date: Author: Comment: @@ -309,7 +305,7 @@ HISTORY: Date: Author: Comment:
309 -----------------------------------------------------------------------------*/ 305 -----------------------------------------------------------------------------*/
310 void DestroyTTYInfo() 306 void DestroyTTYInfo()
311 { 307 {
312 - DeleteObject(TTYInfo.hTTYFont); 308 + DeleteObject(g_appdata.hTTYFont);
313 } 309 }
314 310
315 /*----------------------------------------------------------------------------- 311 /*-----------------------------------------------------------------------------
@@ -326,11 +322,11 @@ void StartThreads(void) @@ -326,11 +322,11 @@ void StartThreads(void)
326 { 322 {
327 DWORD dwReadStatId; 323 DWORD dwReadStatId;
328 DWORD dwWriterId; 324 DWORD dwWriterId;
329 - TTYInfo.hReaderStatus = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) ReaderAndStatusProc, (LPVOID) ghWndTTY, 0, &dwReadStatId);  
330 - if (TTYInfo.hReaderStatus == NULL) 325 + g_appdata.hReaderStatus = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) ReaderAndStatusProc, (LPVOID) ghWndTTY, 0, &dwReadStatId);
  326 + if (g_appdata.hReaderStatus == NULL)
331 ErrorInComm("CreateThread(Reader/Status)"); 327 ErrorInComm("CreateThread(Reader/Status)");
332 - TTYInfo.hWriter = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) WriterProc, (LPVOID) NULL, 0, &dwWriterId);  
333 - if (TTYInfo.hWriter == NULL) 328 + g_appdata.hWriter = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) WriterProc, (LPVOID) NULL, 0, &dwWriterId);
  329 + if (g_appdata.hWriter == NULL)
334 ErrorInComm("CreateThread (Writer)"); 330 ErrorInComm("CreateThread (Writer)");
335 return; 331 return;
336 } 332 }
@@ -363,7 +359,7 @@ HANDLE SetupCommPort() @@ -363,7 +359,7 @@ HANDLE SetupCommPort()
363 //打开通信端口句柄 359 //打开通信端口句柄
364 // 360 //
365 sprintf(gszPort, "\\\\.\\COM%d", myintPort);///可以显示COM10以上端口//add by itas109 2014-01-09 361 sprintf(gszPort, "\\\\.\\COM%d", myintPort);///可以显示COM10以上端口//add by itas109 2014-01-09
366 - TTYInfo.hCommPort = CreateFile( gszPort, 362 + g_appdata.hCommPort = CreateFile( gszPort,
367 GENERIC_READ | GENERIC_WRITE, 363 GENERIC_READ | GENERIC_WRITE,
368 0, 364 0,
369 0, 365 0,
@@ -371,13 +367,13 @@ HANDLE SetupCommPort() @@ -371,13 +367,13 @@ HANDLE SetupCommPort()
371 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 367 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
372 0); 368 0);
373 369
374 - if (TTYInfo.hCommPort == INVALID_HANDLE_VALUE) { 370 + if (g_appdata.hCommPort == INVALID_HANDLE_VALUE) {
375 ErrorReporter("CreateFile"); 371 ErrorReporter("CreateFile");
376 return NULL; 372 return NULL;
377 } 373 }
378 374
379 //设置新的超时参数 375 //设置新的超时参数
380 - if (!GetCommTimeouts( TTYInfo.hCommPort, &(TTYInfo.timeoutsorig))) 376 + if (!GetCommTimeouts( g_appdata.hCommPort, &(g_appdata.timeoutsorig)))
381 ErrorReporter("GetCommTimeouts"); 377 ErrorReporter("GetCommTimeouts");
382 378
383 // 379 //
@@ -388,12 +384,12 @@ HANDLE SetupCommPort() @@ -388,12 +384,12 @@ HANDLE SetupCommPort()
388 // 384 //
389 // 设置通信缓冲区大小 385 // 设置通信缓冲区大小
390 // 386 //
391 - SetupComm(TTYInfo.hCommPort, MAX_READ_BUFFER, MAX_WRITE_BUFFER); 387 + SetupComm(g_appdata.hCommPort, MAX_READ_BUFFER, MAX_WRITE_BUFFER);
392 388
393 // 389 //
394 // 将DT&线路升成高电位。 390 // 将DT&线路升成高电位。
395 // 参考后面注释 391 // 参考后面注释
396 - if (!EscapeCommFunction(TTYInfo.hCommPort, SETDTR)) 392 + if (!EscapeCommFunction(g_appdata.hCommPort, SETDTR))
397 ErrorReporter("EscapeCommFunction (SETDTR)"); 393 ErrorReporter("EscapeCommFunction (SETDTR)");
398 394
399 // 395 //
@@ -402,9 +398,9 @@ HANDLE SetupCommPort() @@ -402,9 +398,9 @@ HANDLE SetupCommPort()
402 StartThreads(); 398 StartThreads();
403 399
404 //设置连接标志 400 //设置连接标志
405 - TTYInfo.fConnected = TRUE ; 401 + g_appdata.fConnected = TRUE ;
406 402
407 - return TTYInfo.hCommPort; 403 + return g_appdata.hCommPort;
408 } 404 }
409 405
410 /*----------------------------------------------------------------------------- 406 /*-----------------------------------------------------------------------------
@@ -430,8 +426,8 @@ DWORD WaitForThreads(DWORD dwTimeout) @@ -430,8 +426,8 @@ DWORD WaitForThreads(DWORD dwTimeout)
430 HANDLE hThreads[2]; 426 HANDLE hThreads[2];
431 DWORD dwRes; 427 DWORD dwRes;
432 428
433 - hThreads[0] = TTYInfo.hReaderStatus;  
434 - hThreads[1] = TTYInfo.hWriter; 429 + hThreads[0] = g_appdata.hReaderStatus;
  430 + hThreads[1] = g_appdata.hWriter;
435 431
436 // 432 //
437 // 设置线程终止句柄 433 // 设置线程终止句柄
@@ -447,10 +443,10 @@ DWORD WaitForThreads(DWORD dwTimeout) @@ -447,10 +443,10 @@ DWORD WaitForThreads(DWORD dwTimeout)
447 443
448 case WAIT_TIMEOUT: 444 case WAIT_TIMEOUT:
449 //读线程 445 //读线程
450 - if (WaitForSingleObject(TTYInfo.hReaderStatus, 0) == WAIT_TIMEOUT) 446 + if (WaitForSingleObject(g_appdata.hReaderStatus, 0) == WAIT_TIMEOUT)
451 OutputDebugString("Reader/Status Thread didn't exit.\n\r"); 447 OutputDebugString("Reader/Status Thread didn't exit.\n\r");
452 //写线程 448 //写线程
453 - if (WaitForSingleObject(TTYInfo.hWriter, 0) == WAIT_TIMEOUT) 449 + if (WaitForSingleObject(g_appdata.hWriter, 0) == WAIT_TIMEOUT)
454 OutputDebugString("Writer Thread didn't exit.\n\r"); 450 OutputDebugString("Writer Thread didn't exit.\n\r");
455 break; 451 break;
456 452
@@ -485,10 +481,10 @@ HISTORY: Date: Author: Comment: @@ -485,10 +481,10 @@ HISTORY: Date: Author: Comment:
485 -----------------------------------------------------------------------------*/ 481 -----------------------------------------------------------------------------*/
486 BOOL BreakDownCommPort() 482 BOOL BreakDownCommPort()
487 { 483 {
488 - if (!TTYInfo.fConnected) 484 + if (!g_appdata.fConnected)
489 return FALSE; 485 return FALSE;
490 486
491 - TTYInfo.fConnected = FALSE; 487 + g_appdata.fConnected = FALSE;
492 488
493 // 489 //
494 // 等待线程一小段时间 490 // 等待线程一小段时间
@@ -497,17 +493,17 @@ BOOL BreakDownCommPort() @@ -497,17 +493,17 @@ BOOL BreakDownCommPort()
497 //如果线程还没有退出,那么它们将退出 干扰一个新的连接。 必须中止 整个程序。 493 //如果线程还没有退出,那么它们将退出 干扰一个新的连接。 必须中止 整个程序。
498 ErrorHandler("Error closing port."); 494 ErrorHandler("Error closing port.");
499 // 将DTR线路降成低电位。 495 // 将DTR线路降成低电位。
500 - if (!EscapeCommFunction(TTYInfo.hCommPort, CLRDTR)) 496 + if (!EscapeCommFunction(g_appdata.hCommPort, CLRDTR))
501 ErrorReporter("EscapeCommFunction(CLRDTR)"); 497 ErrorReporter("EscapeCommFunction(CLRDTR)");
502 // restore original comm timeouts 498 // restore original comm timeouts
503 - if (!SetCommTimeouts(TTYInfo.hCommPort, &(TTYInfo.timeoutsorig))) 499 + if (!SetCommTimeouts(g_appdata.hCommPort, &(g_appdata.timeoutsorig)))
504 ErrorReporter("SetCommTimeouts (Restoration to original)"); 500 ErrorReporter("SetCommTimeouts (Restoration to original)");
505 // 清除读取/写入,输入缓冲区和输出缓冲区 501 // 清除读取/写入,输入缓冲区和输出缓冲区
506 - if (!PurgeComm(TTYInfo.hCommPort, PURGE_FLAGS)) 502 + if (!PurgeComm(g_appdata.hCommPort, PURGE_FLAGS))
507 ErrorReporter("PurgeComm"); 503 ErrorReporter("PurgeComm");
508 - CloseHandle(TTYInfo.hCommPort);  
509 - CloseHandle(TTYInfo.hReaderStatus);  
510 - CloseHandle(TTYInfo.hWriter); 504 + CloseHandle(g_appdata.hCommPort);
  505 + CloseHandle(g_appdata.hReaderStatus);
  506 + CloseHandle(g_appdata.hWriter);
511 507
512 return TRUE; 508 return TRUE;
513 } 509 }
@@ -528,7 +524,7 @@ HISTORY: Date: Author: Comment: @@ -528,7 +524,7 @@ HISTORY: Date: Author: Comment:
528 -----------------------------------------------------------------------------*/ 524 -----------------------------------------------------------------------------*/
529 BOOL DisconnectOK() 525 BOOL DisconnectOK()
530 { 526 {
531 - if (!TTYInfo.fConnected) return TRUE; 527 + if (!g_appdata.fConnected) return TRUE;
532 return ((MessageBox(ghwndMain, "OK to Disconnect?", gszPort, MB_YESNO)) == IDYES); 528 return ((MessageBox(ghwndMain, "OK to Disconnect?", gszPort, MB_YESNO)) == IDYES);
533 } 529 }
534 530
@@ -153,7 +153,7 @@ BOOL InitializeApp(HINSTANCE hInst, int nShowCmd) @@ -153,7 +153,7 @@ BOOL InitializeApp(HINSTANCE hInst, int nShowCmd)
153 GlobalCleanup(); 153 GlobalCleanup();
154 return FALSE; 154 return FALSE;
155 } 155 }
156 - QuerySerialPortStatusEx(TTYInfo.unOpenedPortAry,2,255); 156 + QuerySerialPortStatusEx(g_appdata.unOpenedPortAry,2,255);
157 //设置程序的tty子窗口类 157 //设置程序的tty子窗口类
158 wc.lpfnWndProc = (WNDPROC) TTYChildProc; 158 wc.lpfnWndProc = (WNDPROC) TTYChildProc;
159 wc.hInstance = hInst; 159 wc.hInstance = hInst;
@@ -220,7 +220,7 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) @@ -220,7 +220,7 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
220 OpenTTYChildWindow(hwnd); 220 OpenTTYChildWindow(hwnd);
221 OpenSettingsToolbar(hwnd); 221 OpenSettingsToolbar(hwnd);
222 OpenStatusToolbar(hwnd); 222 OpenStatusToolbar(hwnd);
223 - ChangeConnection(hwnd, TTYInfo.fConnected); 223 + ChangeConnection(hwnd, g_appdata.fConnected);
224 break; 224 break;
225 225
226 case WM_DESTROY: 226 case WM_DESTROY:
@@ -251,22 +251,7 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) @@ -251,22 +251,7 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
251 case WM_SIZE: 251 case WM_SIZE:
252 { 252 {
253 //主窗口大小已经改变,,所以我需要改变子窗口的位置 253 //主窗口大小已经改变,,所以我需要改变子窗口的位置
254 - WORD wTop;  
255 - WORD wHeight;  
256 - WORD wWidth = LOWORD(lParam);  
257 - // 把设置窗口放在顶部  
258 - wHeight = SETTINGSFACTOR*gwBaseY;  
259 - wTop = 0;  
260 - MoveWindow(ghWndToolbarDlg, 0,wTop, wWidth, wHeight, TRUE);  
261 - // 把状态窗口放在底部  
262 - wHeight = STATUSFACTOR*gwBaseY;  
263 - wTop = HIWORD(lParam) - wHeight;  
264 - MoveWindow(ghWndStatusDlg, 0, wTop, wWidth, wHeight, TRUE);  
265 - // 把TTTY window放在中间  
266 - // height = whole window - height of two previous windows  
267 - wHeight = HIWORD(lParam) - ((STATUSFACTOR + SETTINGSFACTOR)*gwBaseY);  
268 - wTop = SETTINGSFACTOR*gwBaseY;  
269 - MoveWindow(ghWndTTY, 0, wTop, wWidth, wHeight, TRUE); 254 + ResizeAllWindow(LOWORD(lParam),HIWORD(lParam));
270 } 255 }
271 break; 256 break;
272 case WM_COMMAND: 257 case WM_COMMAND:
@@ -281,9 +266,9 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) @@ -281,9 +266,9 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
281 case WM_CLOSE: 266 case WM_CLOSE:
282 if (DisconnectOK()) 267 if (DisconnectOK())
283 { 268 {
284 - if (TTYInfo.fConnected) 269 + if (g_appdata.fConnected)
285 { 270 {
286 - if (TTYInfo.fTransferring) 271 + if (g_appdata.fTransferring)
287 TransferFileTextEnd(); 272 TransferFileTextEnd();
288 BreakDownCommPort(); 273 BreakDownCommPort();
289 } 274 }
@@ -321,7 +306,7 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam) @@ -321,7 +306,7 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
321 break; 306 break;
322 case ID_TRANSFER_SENDFILETEXT: 307 case ID_TRANSFER_SENDFILETEXT:
323 {// 发送文件 308 {// 发送文件
324 - if (strlen(TTYInfo.szFileName) == 0) 309 + if (strlen(g_appdata.szFileName) == 0)
325 { 310 {
326 char * szFilter = "Text Files\0*.*\0"; 311 char * szFilter = "Text Files\0*.*\0";
327 OPENFILENAME ofn = { 0 }; 312 OPENFILENAME ofn = { 0 };
@@ -334,17 +319,16 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam) @@ -334,17 +319,16 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
334 ofn.Flags = OFN_FILEMUSTEXIST; 319 ofn.Flags = OFN_FILEMUSTEXIST;
335 if (!GetOpenFileName(&ofn)) 320 if (!GetOpenFileName(&ofn))
336 break; 321 break;
337 - strcpy(TTYInfo.szFileName, szFileName); 322 + strcpy(g_appdata.szFileName, szFileName);
338 } 323 }
339 if (TRUE) 324 if (TRUE)
340 - TransferFileTextStart(TTYInfo.szFileName); 325 + TransferFileTextStart(g_appdata.szFileName);
341 } 326 }
342 break; 327 break;
343 case ID_TRANSFER_RECEIVEFILETEXT: 328 case ID_TRANSFER_RECEIVEFILETEXT:
344 {// 接收文件 329 {// 接收文件
345 char * szFilter = "Text Files\0*.TXT\0"; 330 char * szFilter = "Text Files\0*.TXT\0";
346 OPENFILENAME ofn = {0}; 331 OPENFILENAME ofn = {0};
347 -  
348 ofn.lStructSize = sizeof(OPENFILENAME); 332 ofn.lStructSize = sizeof(OPENFILENAME);
349 ofn.hwndOwner = hwnd; 333 ofn.hwndOwner = hwnd;
350 ofn.lpstrFilter = szFilter; 334 ofn.lpstrFilter = szFilter;
@@ -352,32 +336,10 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam) @@ -352,32 +336,10 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
352 ofn.nMaxFile = MAX_PATH; 336 ofn.nMaxFile = MAX_PATH;
353 ofn.lpstrTitle = "Receive File"; 337 ofn.lpstrTitle = "Receive File";
354 ofn.Flags = OFN_OVERWRITEPROMPT; 338 ofn.Flags = OFN_OVERWRITEPROMPT;
355 -  
356 - if (!GetSaveFileName(&ofn))  
357 - break;  
358 - 339 + if (!GetSaveFileName(&ofn)) break;
359 ReceiveFileText(szFileName); 340 ReceiveFileText(szFileName);
360 } 341 }
361 break; 342 break;
362 -  
363 - case ID_TRANSFER_ABORTSENDING:  
364 - // 是否从中止按钮发出中止?  
365 - if (LOWORD(lParam) == IDC_ABORTBTN) {  
366 - // am I in a transfer repeat?  
367 - if (TTYInfo.fRepeating)  
368 - TransferRepeatDestroy();  
369 - // am I in a normal recieve state, then stop sending  
370 - else if (gdwReceiveState == RECEIVE_TTY)  
371 - TransferFileTextEnd();  
372 - // if I am not in a normal receive state, then stop capturing  
373 - else  
374 - gfAbortTransfer = TRUE;  
375 - }  
376 - else  
377 - //传输中止  
378 - TransferFileTextEnd();  
379 - break;  
380 -  
381 case ID_TRANSFER_SENDREPEATEDLY: 343 case ID_TRANSFER_SENDREPEATEDLY:
382 {// 重复发送 344 {// 重复发送
383 DWORD dwFreq; 345 DWORD dwFreq;
@@ -391,9 +353,7 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam) @@ -391,9 +353,7 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
391 ofn.nMaxFile = MAX_PATH; 353 ofn.nMaxFile = MAX_PATH;
392 ofn.lpstrTitle = "Send File Repeatedly"; 354 ofn.lpstrTitle = "Send File Repeatedly";
393 ofn.Flags = OFN_FILEMUSTEXIST; 355 ofn.Flags = OFN_FILEMUSTEXIST;
394 -  
395 - if (!GetOpenFileName(&ofn))  
396 - break; 356 + if (!GetOpenFileName(&ofn)) break;
397 TransferRepeatCreate(szFileName, 3000); 357 TransferRepeatCreate(szFileName, 3000);
398 } 358 }
399 break; 359 break;
@@ -417,12 +377,12 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam) @@ -417,12 +377,12 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
417 377
418 case ID_FILE_CONNECT: 378 case ID_FILE_CONNECT:
419 if (SetupCommPort() != NULL) 379 if (SetupCommPort() != NULL)
420 - ChangeConnection(hwnd, TTYInfo.fConnected); 380 + ChangeConnection(hwnd, g_appdata.fConnected);
421 break; 381 break;
422 382
423 case ID_FILE_DISCONNECT: 383 case ID_FILE_DISCONNECT:
424 if (BreakDownCommPort()) 384 if (BreakDownCommPort())
425 - ChangeConnection(hwnd, TTYInfo.fConnected); 385 + ChangeConnection(hwnd, g_appdata.fConnected);
426 break; 386 break;
427 387
428 case ID_FILE_EXIT: 388 case ID_FILE_EXIT:
@@ -484,48 +444,48 @@ BOOL NEAR ScrollTTYVert( HWND hWnd, WORD wScrollCmd, WORD wScrollPos ) @@ -484,48 +444,48 @@ BOOL NEAR ScrollTTYVert( HWND hWnd, WORD wScrollCmd, WORD wScrollPos )
484 switch (wScrollCmd) 444 switch (wScrollCmd)
485 { 445 {
486 case SB_TOP: 446 case SB_TOP:
487 - nScrollAmt = -TTYInfo.yOffset ; 447 + nScrollAmt = -g_appdata.yOffset ;
488 break ; 448 break ;
489 449
490 case SB_BOTTOM: 450 case SB_BOTTOM:
491 - nScrollAmt = TTYInfo.yScroll - TTYInfo.yOffset ; 451 + nScrollAmt = g_appdata.yScroll - g_appdata.yOffset ;
492 break ; 452 break ;
493 453
494 case SB_PAGEUP: 454 case SB_PAGEUP:
495 - nScrollAmt = -TTYInfo.ySize ; 455 + nScrollAmt = -g_appdata.ySize ;
496 break ; 456 break ;
497 457
498 case SB_PAGEDOWN: 458 case SB_PAGEDOWN:
499 - nScrollAmt = TTYInfo.ySize ; 459 + nScrollAmt = g_appdata.ySize ;
500 break ; 460 break ;
501 461
502 case SB_LINEUP: 462 case SB_LINEUP:
503 - nScrollAmt = -TTYInfo.yChar ; 463 + nScrollAmt = -g_appdata.yChar ;
504 break ; 464 break ;
505 465
506 case SB_LINEDOWN: 466 case SB_LINEDOWN:
507 - nScrollAmt = TTYInfo.yChar ; 467 + nScrollAmt = g_appdata.yChar ;
508 break ; 468 break ;
509 469
510 case SB_THUMBPOSITION: 470 case SB_THUMBPOSITION:
511 - nScrollAmt = wScrollPos - TTYInfo.yOffset ; 471 + nScrollAmt = wScrollPos - g_appdata.yOffset ;
512 break ; 472 break ;
513 473
514 default: 474 default:
515 return ( FALSE ) ; 475 return ( FALSE ) ;
516 } 476 }
517 477
518 - if ((TTYInfo.yOffset + nScrollAmt) > TTYInfo.yScroll)  
519 - nScrollAmt = TTYInfo.yScroll - TTYInfo.yOffset ; 478 + if ((g_appdata.yOffset + nScrollAmt) > g_appdata.yScroll)
  479 + nScrollAmt = g_appdata.yScroll - g_appdata.yOffset ;
520 480
521 - if ((TTYInfo.yOffset + nScrollAmt) < 0)  
522 - nScrollAmt = -TTYInfo.yOffset ; 481 + if ((g_appdata.yOffset + nScrollAmt) < 0)
  482 + nScrollAmt = -g_appdata.yOffset ;
523 483
524 ScrollWindowEx( hWnd, 0, -nScrollAmt, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE) ; 484 ScrollWindowEx( hWnd, 0, -nScrollAmt, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE) ;
525 485
526 - TTYInfo.yOffset = TTYInfo.yOffset + nScrollAmt ; 486 + g_appdata.yOffset = g_appdata.yOffset + nScrollAmt ;
527 487
528 - SetScrollPos( hWnd, SB_VERT, TTYInfo.yOffset, TRUE ) ; 488 + SetScrollPos( hWnd, SB_VERT, g_appdata.yOffset, TRUE ) ;
529 489
530 return ( TRUE ) ; 490 return ( TRUE ) ;
531 491
@@ -559,43 +519,43 @@ BOOL NEAR ScrollTTYHorz( HWND hWnd, WORD wScrollCmd, WORD wScrollPos ) @@ -559,43 +519,43 @@ BOOL NEAR ScrollTTYHorz( HWND hWnd, WORD wScrollCmd, WORD wScrollPos )
559 switch (wScrollCmd) 519 switch (wScrollCmd)
560 { 520 {
561 case SB_TOP: 521 case SB_TOP:
562 - nScrollAmt = -TTYInfo.xOffset ; 522 + nScrollAmt = -g_appdata.xOffset ;
563 break ; 523 break ;
564 524
565 case SB_BOTTOM: 525 case SB_BOTTOM:
566 - nScrollAmt = TTYInfo.xScroll - TTYInfo.xOffset ; 526 + nScrollAmt = g_appdata.xScroll - g_appdata.xOffset ;
567 break ; 527 break ;
568 528
569 case SB_PAGEUP: 529 case SB_PAGEUP:
570 - nScrollAmt = -TTYInfo.xSize ; 530 + nScrollAmt = -g_appdata.xSize ;
571 break ; 531 break ;
572 532
573 case SB_PAGEDOWN: 533 case SB_PAGEDOWN:
574 - nScrollAmt = TTYInfo.xSize ; 534 + nScrollAmt = g_appdata.xSize ;
575 break ; 535 break ;
576 536
577 case SB_LINEUP: 537 case SB_LINEUP:
578 - nScrollAmt = -TTYInfo.xChar ; 538 + nScrollAmt = -g_appdata.xChar ;
579 break ; 539 break ;
580 540
581 case SB_LINEDOWN: 541 case SB_LINEDOWN:
582 - nScrollAmt = TTYInfo.xChar ; 542 + nScrollAmt = g_appdata.xChar ;
583 break ; 543 break ;
584 544
585 case SB_THUMBPOSITION: 545 case SB_THUMBPOSITION:
586 - nScrollAmt = wScrollPos - TTYInfo.xOffset ; 546 + nScrollAmt = wScrollPos - g_appdata.xOffset ;
587 break ; 547 break ;
588 548
589 default: 549 default:
590 return ( FALSE ) ; 550 return ( FALSE ) ;
591 } 551 }
592 - if ((TTYInfo.xOffset + nScrollAmt) > TTYInfo.xScroll)  
593 - nScrollAmt = TTYInfo.xScroll - TTYInfo.xOffset ;  
594 - if ((TTYInfo.xOffset + nScrollAmt) < 0)  
595 - nScrollAmt = -TTYInfo.xOffset ; 552 + if ((g_appdata.xOffset + nScrollAmt) > g_appdata.xScroll)
  553 + nScrollAmt = g_appdata.xScroll - g_appdata.xOffset ;
  554 + if ((g_appdata.xOffset + nScrollAmt) < 0)
  555 + nScrollAmt = -g_appdata.xOffset ;
596 ScrollWindowEx( hWnd, -nScrollAmt, 0, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE) ; 556 ScrollWindowEx( hWnd, -nScrollAmt, 0, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE) ;
597 - TTYInfo.xOffset = TTYInfo.xOffset + nScrollAmt ;  
598 - SetScrollPos( hWnd, SB_HORZ, TTYInfo.xOffset, TRUE ) ; 557 + g_appdata.xOffset = g_appdata.xOffset + nScrollAmt ;
  558 + SetScrollPos( hWnd, SB_HORZ, g_appdata.xOffset, TRUE ) ;
599 559
600 return ( TRUE ) ; 560 return ( TRUE ) ;
601 561
@@ -635,34 +595,34 @@ BOOL NEAR PaintTTY( HWND hWnd ) @@ -635,34 +595,34 @@ BOOL NEAR PaintTTY( HWND hWnd )
635 int nCount, nHorzPos, nVertPos ; 595 int nCount, nHorzPos, nVertPos ;
636 596
637 hDC = BeginPaint( hWnd, &ps ) ; 597 hDC = BeginPaint( hWnd, &ps ) ;
638 - hOldFont = SelectObject( hDC, TTYInfo.hTTYFont ) ;  
639 - SetTextColor( hDC, TTYInfo.rgbFGColor ) ;  
640 - SetBkColor( hDC, TTYInfo.rgbBGColor ) ; 598 + hOldFont = SelectObject( hDC, g_appdata.hTTYFont ) ;
  599 + SetTextColor( hDC, g_appdata.rgbFGColor ) ;
  600 + SetBkColor( hDC, g_appdata.rgbBGColor ) ;
641 rect = ps.rcPaint ; 601 rect = ps.rcPaint ;
642 nRow = 602 nRow =
643 min( MAXROWS - 1, 603 min( MAXROWS - 1,
644 - max( 0, (rect.top + TTYInfo.yOffset) / TTYInfo.yChar ) ) ; 604 + max( 0, (rect.top + g_appdata.yOffset) / g_appdata.yChar ) ) ;
645 nEndRow = 605 nEndRow =
646 min( MAXROWS - 1, 606 min( MAXROWS - 1,
647 - ((rect.bottom + TTYInfo.yOffset - 1) / TTYInfo.yChar ) ) ; 607 + ((rect.bottom + g_appdata.yOffset - 1) / g_appdata.yChar ) ) ;
648 nCol = 608 nCol =
649 min( MAXCOLS - 1, 609 min( MAXCOLS - 1,
650 - max( 0, (rect.left + TTYInfo.xOffset) / TTYInfo.xChar ) ) ; 610 + max( 0, (rect.left + g_appdata.xOffset) / g_appdata.xChar ) ) ;
651 nEndCol = 611 nEndCol =
652 min( MAXCOLS - 1, 612 min( MAXCOLS - 1,
653 - ((rect.right + TTYInfo.xOffset - 1) / TTYInfo.xChar ) ) ; 613 + ((rect.right + g_appdata.xOffset - 1) / g_appdata.xChar ) ) ;
654 nCount = nEndCol - nCol + 1 ; 614 nCount = nEndCol - nCol + 1 ;
655 for (; nRow <= nEndRow; nRow++) 615 for (; nRow <= nEndRow; nRow++)
656 { 616 {
657 - nVertPos = (nRow * TTYInfo.yChar) - TTYInfo.yOffset ;  
658 - nHorzPos = (nCol * TTYInfo.xChar) - TTYInfo.xOffset ; 617 + nVertPos = (nRow * g_appdata.yChar) - g_appdata.yOffset ;
  618 + nHorzPos = (nCol * g_appdata.xChar) - g_appdata.xOffset ;
659 rect.top = nVertPos ; 619 rect.top = nVertPos ;
660 - rect.bottom = nVertPos + TTYInfo.yChar ; 620 + rect.bottom = nVertPos + g_appdata.yChar ;
661 rect.left = nHorzPos ; 621 rect.left = nHorzPos ;
662 - rect.right = nHorzPos + TTYInfo.xChar * nCount ; 622 + rect.right = nHorzPos + g_appdata.xChar * nCount ;
663 SetBkMode( hDC, TRANSPARENT ) ; 623 SetBkMode( hDC, TRANSPARENT ) ;
664 ExtTextOut( hDC, nHorzPos, nVertPos, ETO_OPAQUE | ETO_CLIPPED, &rect, 624 ExtTextOut( hDC, nHorzPos, nVertPos, ETO_OPAQUE | ETO_CLIPPED, &rect,
665 - (LPSTR)( TTYInfo.Screen + nRow * MAXCOLS + nCol ), 625 + (LPSTR)( g_appdata.Screen + nRow * MAXCOLS + nCol ),
666 nCount, NULL ) ; 626 nCount, NULL ) ;
667 } 627 }
668 SelectObject( hDC, hOldFont ) ; 628 SelectObject( hDC, hOldFont ) ;
@@ -689,11 +649,11 @@ BOOL NEAR PaintTTY( HWND hWnd ) @@ -689,11 +649,11 @@ BOOL NEAR PaintTTY( HWND hWnd )
689 //--------------------------------------------------------------------------- 649 //---------------------------------------------------------------------------
690 BOOL NEAR MoveTTYCursor( HWND hWnd ) 650 BOOL NEAR MoveTTYCursor( HWND hWnd )
691 { 651 {
692 - if (TTYInfo.fConnected && (TTYInfo.wCursorState& CS_SHOW))  
693 - SetCaretPos( (TTYInfo.nColumn * TTYInfo.xChar) -  
694 - TTYInfo.xOffset,  
695 - (TTYInfo.nRow * TTYInfo.yChar) -  
696 - TTYInfo.yOffset ) ; 652 + if (g_appdata.fConnected && (g_appdata.wCursorState& CS_SHOW))
  653 + SetCaretPos( (g_appdata.nColumn * g_appdata.xChar) -
  654 + g_appdata.xOffset,
  655 + (g_appdata.nRow * g_appdata.yChar) -
  656 + g_appdata.yOffset ) ;
697 657
698 return ( TRUE ) ; 658 return ( TRUE ) ;
699 659
@@ -716,11 +676,11 @@ BOOL NEAR MoveTTYCursor( HWND hWnd ) @@ -716,11 +676,11 @@ BOOL NEAR MoveTTYCursor( HWND hWnd )
716 //--------------------------------------------------------------------------- 676 //---------------------------------------------------------------------------
717 BOOL NEAR SetTTYFocus( HWND hWnd ) 677 BOOL NEAR SetTTYFocus( HWND hWnd )
718 { 678 {
719 - if (TTYInfo.fConnected && (TTYInfo.wCursorState!= CS_SHOW) ) 679 + if (g_appdata.fConnected && (g_appdata.wCursorState!= CS_SHOW) )
720 { 680 {
721 - CreateCaret( hWnd, NULL, TTYInfo.xChar, TTYInfo.yChar ) ; 681 + CreateCaret( hWnd, NULL, g_appdata.xChar, g_appdata.yChar ) ;
722 ShowCaret( hWnd ) ; 682 ShowCaret( hWnd ) ;
723 - TTYInfo.wCursorState= CS_SHOW ; 683 + g_appdata.wCursorState= CS_SHOW ;
724 } 684 }
725 685
726 MoveTTYCursor( hWnd ) ; 686 MoveTTYCursor( hWnd ) ;
@@ -745,11 +705,11 @@ BOOL NEAR SetTTYFocus( HWND hWnd ) @@ -745,11 +705,11 @@ BOOL NEAR SetTTYFocus( HWND hWnd )
745 //--------------------------------------------------------------------------- 705 //---------------------------------------------------------------------------
746 BOOL NEAR KillTTYFocus( HWND hWnd ) 706 BOOL NEAR KillTTYFocus( HWND hWnd )
747 { 707 {
748 - if (TTYInfo.wCursorState!= CS_HIDE) 708 + if (g_appdata.wCursorState!= CS_HIDE)
749 { 709 {
750 HideCaret( hWnd ) ; 710 HideCaret( hWnd ) ;
751 DestroyCaret() ; 711 DestroyCaret() ;
752 - TTYInfo.wCursorState= CS_HIDE ; 712 + g_appdata.wCursorState= CS_HIDE ;
753 } 713 }
754 return ( TRUE ) ; 714 return ( TRUE ) ;
755 715
@@ -784,29 +744,29 @@ BOOL NEAR SizeTTY( HWND hWnd, WORD wWidth, WORD wHeight ) @@ -784,29 +744,29 @@ BOOL NEAR SizeTTY( HWND hWnd, WORD wWidth, WORD wHeight )
784 // 744 //
785 // adjust vert settings 745 // adjust vert settings
786 // 746 //
787 - TTYInfo.ySize = (int) wHeight ;  
788 - TTYInfo.yScroll = max( 0, (MAXROWS * TTYInfo.yChar) -  
789 - TTYInfo.ySize ) ;  
790 - nScrollAmt = min( TTYInfo.yScroll, TTYInfo.yOffset ) -  
791 - TTYInfo.yOffset ; 747 + g_appdata.ySize = (int) wHeight ;
  748 + g_appdata.yScroll = max( 0, (MAXROWS * g_appdata.yChar) -
  749 + g_appdata.ySize ) ;
  750 + nScrollAmt = min( g_appdata.yScroll, g_appdata.yOffset ) -
  751 + g_appdata.yOffset ;
792 ScrollWindow( hWnd, 0, -nScrollAmt, NULL, NULL ) ; 752 ScrollWindow( hWnd, 0, -nScrollAmt, NULL, NULL ) ;
793 753
794 - TTYInfo.yOffset = TTYInfo.yOffset + nScrollAmt ;  
795 - SetScrollPos( hWnd, SB_VERT, TTYInfo.yOffset, FALSE ) ;  
796 - SetScrollRange( hWnd, SB_VERT, 0, TTYInfo.yScroll, TRUE ) ; 754 + g_appdata.yOffset = g_appdata.yOffset + nScrollAmt ;
  755 + SetScrollPos( hWnd, SB_VERT, g_appdata.yOffset, FALSE ) ;
  756 + SetScrollRange( hWnd, SB_VERT, 0, g_appdata.yScroll, TRUE ) ;
797 757
798 // 758 //
799 // adjust horz settings 759 // adjust horz settings
800 // 760 //
801 - TTYInfo.xSize = (int) wHeight ;  
802 - TTYInfo.xScroll = max( 0, (MAXCOLS * TTYInfo.xChar) -  
803 - TTYInfo.xSize ) ;  
804 - nScrollAmt = min( TTYInfo.xScroll, TTYInfo.xOffset) -  
805 - TTYInfo.xOffset ; 761 + g_appdata.xSize = (int) wHeight ;
  762 + g_appdata.xScroll = max( 0, (MAXCOLS * g_appdata.xChar) -
  763 + g_appdata.xSize ) ;
  764 + nScrollAmt = min( g_appdata.xScroll, g_appdata.xOffset) -
  765 + g_appdata.xOffset ;
806 ScrollWindow( hWnd, nScrollAmt, 0, NULL, NULL ); 766 ScrollWindow( hWnd, nScrollAmt, 0, NULL, NULL );
807 - TTYInfo.xOffset = TTYInfo.xOffset + nScrollAmt ;  
808 - SetScrollRange( hWnd, SB_HORZ, 0, TTYInfo.xScroll, FALSE ) ;  
809 - SetScrollPos( hWnd, SB_HORZ, TTYInfo.xOffset, TRUE ) ; 767 + g_appdata.xOffset = g_appdata.xOffset + nScrollAmt ;
  768 + SetScrollRange( hWnd, SB_HORZ, 0, g_appdata.xScroll, FALSE ) ;
  769 + SetScrollPos( hWnd, SB_HORZ, g_appdata.xOffset, TRUE ) ;
810 770
811 InvalidateRect( hWnd, NULL, FALSE ) ; // redraw entire window 771 InvalidateRect( hWnd, NULL, FALSE ) ; // redraw entire window
812 772
@@ -855,12 +815,12 @@ int WINAPI TTYChildProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) @@ -855,12 +815,12 @@ int WINAPI TTYChildProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
855 // 815 //
856 // keyboard activity in TTY Window 816 // keyboard activity in TTY Window
857 // 817 //
858 - if (TTYInfo.fConnected) { 818 + if (g_appdata.fConnected) {
859 819
860 if (!WriterAddNewNode(WRITE_CHAR, 0, (char) wParam, NULL, NULL, NULL)) 820 if (!WriterAddNewNode(WRITE_CHAR, 0, (char) wParam, NULL, NULL, NULL))
861 return FALSE; 821 return FALSE;
862 822
863 - if (TTYInfo.fLocalEcho) 823 + if (g_appdata.fLocalEcho)
864 OutputABufferToWindow(ghWndTTY, (CHAR *) &wParam, 1); 824 OutputABufferToWindow(ghWndTTY, (CHAR *) &wParam, 1);
865 } 825 }
866 } 826 }
@@ -885,3 +845,41 @@ int WINAPI TTYChildProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) @@ -885,3 +845,41 @@ int WINAPI TTYChildProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
885 } 845 }
886 return 0L; 846 return 0L;
887 } 847 }
  848 +BOOL ResizeAllWindow(DWORD mainwidth, WORD mainheigh)
  849 +{
  850 + RECT rect_setting,rect_info,rect_stauts;
  851 + rect_setting.left = 0;
  852 + rect_setting.top = 0;
  853 + rect_setting.right = mainwidth;
  854 + rect_setting.bottom = SETTINGSFACTOR*gwBaseY;
  855 +
  856 + rect_info.left = mainwidth*2/3;
  857 + rect_info.top = rect_setting.bottom;
  858 + rect_info.right = mainwidth;
  859 + rect_info.bottom = mainheigh;
  860 +
  861 + rect_stauts.left = 0;
  862 + rect_stauts.top = rect_setting.bottom;
  863 + rect_stauts.right = rect_info.left ;
  864 + rect_stauts.bottom = mainheigh;
  865 +
  866 + MoveWindow(ghWndToolbarDlg,
  867 + rect_setting.left,
  868 + rect_setting.top,
  869 + rect_setting.right -rect_setting.left,
  870 + rect_setting.bottom -rect_setting.top,
  871 + TRUE);
  872 + MoveWindow(ghWndTTY,
  873 + rect_info.left,
  874 + rect_info.top,
  875 + rect_info.right -rect_info.left,
  876 + rect_info.bottom -rect_info.top,
  877 + TRUE);
  878 + MoveWindow(ghWndStatusDlg,
  879 + rect_stauts.left,
  880 + rect_stauts.top,
  881 + rect_stauts.right -rect_stauts.left,
  882 + rect_stauts.bottom -rect_stauts.top,
  883 + TRUE);
  884 +
  885 +}
@@ -203,7 +203,7 @@ $(OUTDIR)/MTTTY.exe : $(OUTDIR) $(DEF_FILE) $(LINK32_OBJS) @@ -203,7 +203,7 @@ $(OUTDIR)/MTTTY.exe : $(OUTDIR) $(DEF_FILE) $(LINK32_OBJS)
203 SOURCE=.\MTTTY.c 203 SOURCE=.\MTTTY.c
204 DEP_MTTTY=\ 204 DEP_MTTTY=\
205 .\MTTTY.h\ 205 .\MTTTY.h\
206 - .\TTYInfo.h 206 + .\g_appdata.h
207 207
208 $(INTDIR)/MTTTY.obj : $(SOURCE) $(DEP_MTTTY) $(INTDIR) 208 $(INTDIR)/MTTTY.obj : $(SOURCE) $(DEP_MTTTY) $(INTDIR)
209 209
@@ -214,7 +214,7 @@ $(INTDIR)/MTTTY.obj : $(SOURCE) $(DEP_MTTTY) $(INTDIR) @@ -214,7 +214,7 @@ $(INTDIR)/MTTTY.obj : $(SOURCE) $(DEP_MTTTY) $(INTDIR)
214 SOURCE=.\Status.c 214 SOURCE=.\Status.c
215 DEP_STATU=\ 215 DEP_STATU=\
216 .\MTTTY.h\ 216 .\MTTTY.h\
217 - .\TTYInfo.h 217 + .\g_appdata.h
218 218
219 $(INTDIR)/Status.obj : $(SOURCE) $(DEP_STATU) $(INTDIR) 219 $(INTDIR)/Status.obj : $(SOURCE) $(DEP_STATU) $(INTDIR)
220 220
@@ -225,7 +225,7 @@ $(INTDIR)/Status.obj : $(SOURCE) $(DEP_STATU) $(INTDIR) @@ -225,7 +225,7 @@ $(INTDIR)/Status.obj : $(SOURCE) $(DEP_STATU) $(INTDIR)
225 SOURCE=.\Reader.c 225 SOURCE=.\Reader.c
226 DEP_READE=\ 226 DEP_READE=\
227 .\MTTTY.h\ 227 .\MTTTY.h\
228 - .\TTYInfo.h 228 + .\g_appdata.h
229 229
230 $(INTDIR)/Reader.obj : $(SOURCE) $(DEP_READE) $(INTDIR) 230 $(INTDIR)/Reader.obj : $(SOURCE) $(DEP_READE) $(INTDIR)
231 231
@@ -236,7 +236,7 @@ $(INTDIR)/Reader.obj : $(SOURCE) $(DEP_READE) $(INTDIR) @@ -236,7 +236,7 @@ $(INTDIR)/Reader.obj : $(SOURCE) $(DEP_READE) $(INTDIR)
236 SOURCE=.\Error.c 236 SOURCE=.\Error.c
237 DEP_ERROR=\ 237 DEP_ERROR=\
238 .\MTTTY.h\ 238 .\MTTTY.h\
239 - .\TTYInfo.h 239 + .\g_appdata.h
240 240
241 $(INTDIR)/Error.obj : $(SOURCE) $(DEP_ERROR) $(INTDIR) 241 $(INTDIR)/Error.obj : $(SOURCE) $(DEP_ERROR) $(INTDIR)
242 242
@@ -247,7 +247,7 @@ $(INTDIR)/Error.obj : $(SOURCE) $(DEP_ERROR) $(INTDIR) @@ -247,7 +247,7 @@ $(INTDIR)/Error.obj : $(SOURCE) $(DEP_ERROR) $(INTDIR)
247 SOURCE=.\About.c 247 SOURCE=.\About.c
248 DEP_ABOUT=\ 248 DEP_ABOUT=\
249 .\MTTTY.h\ 249 .\MTTTY.h\
250 - .\TTYInfo.h 250 + .\g_appdata.h
251 251
252 $(INTDIR)/About.obj : $(SOURCE) $(DEP_ABOUT) $(INTDIR) 252 $(INTDIR)/About.obj : $(SOURCE) $(DEP_ABOUT) $(INTDIR)
253 253
@@ -272,7 +272,7 @@ $(INTDIR)/MTTTY.res : $(SOURCE) $(DEP_MTTTY_) $(INTDIR) @@ -272,7 +272,7 @@ $(INTDIR)/MTTTY.res : $(SOURCE) $(DEP_MTTTY_) $(INTDIR)
272 SOURCE=.\Settings.c 272 SOURCE=.\Settings.c
273 DEP_SETTI=\ 273 DEP_SETTI=\
274 .\MTTTY.h\ 274 .\MTTTY.h\
275 - .\TTYInfo.h 275 + .\g_appdata.h
276 276
277 $(INTDIR)/Settings.obj : $(SOURCE) $(DEP_SETTI) $(INTDIR) 277 $(INTDIR)/Settings.obj : $(SOURCE) $(DEP_SETTI) $(INTDIR)
278 278
@@ -283,7 +283,7 @@ $(INTDIR)/Settings.obj : $(SOURCE) $(DEP_SETTI) $(INTDIR) @@ -283,7 +283,7 @@ $(INTDIR)/Settings.obj : $(SOURCE) $(DEP_SETTI) $(INTDIR)
283 SOURCE=.\Init.c 283 SOURCE=.\Init.c
284 DEP_INIT_=\ 284 DEP_INIT_=\
285 .\MTTTY.h\ 285 .\MTTTY.h\
286 - .\TTYInfo.h 286 + .\g_appdata.h
287 287
288 $(INTDIR)/Init.obj : $(SOURCE) $(DEP_INIT_) $(INTDIR) 288 $(INTDIR)/Init.obj : $(SOURCE) $(DEP_INIT_) $(INTDIR)
289 289
@@ -294,7 +294,7 @@ $(INTDIR)/Init.obj : $(SOURCE) $(DEP_INIT_) $(INTDIR) @@ -294,7 +294,7 @@ $(INTDIR)/Init.obj : $(SOURCE) $(DEP_INIT_) $(INTDIR)
294 SOURCE=.\Writer.c 294 SOURCE=.\Writer.c
295 DEP_WRITE=\ 295 DEP_WRITE=\
296 .\MTTTY.h\ 296 .\MTTTY.h\
297 - .\TTYInfo.h 297 + .\g_appdata.h
298 298
299 $(INTDIR)/Writer.obj : $(SOURCE) $(DEP_WRITE) $(INTDIR) 299 $(INTDIR)/Writer.obj : $(SOURCE) $(DEP_WRITE) $(INTDIR)
300 300
@@ -305,7 +305,7 @@ $(INTDIR)/Writer.obj : $(SOURCE) $(DEP_WRITE) $(INTDIR) @@ -305,7 +305,7 @@ $(INTDIR)/Writer.obj : $(SOURCE) $(DEP_WRITE) $(INTDIR)
305 SOURCE=.\Transfer.c 305 SOURCE=.\Transfer.c
306 DEP_TRANS=\ 306 DEP_TRANS=\
307 .\MTTTY.h\ 307 .\MTTTY.h\
308 - .\TTYInfo.h 308 + .\g_appdata.h
309 309
310 $(INTDIR)/Transfer.obj : $(SOURCE) $(DEP_TRANS) $(INTDIR) 310 $(INTDIR)/Transfer.obj : $(SOURCE) $(DEP_TRANS) $(INTDIR)
311 311
@@ -316,7 +316,7 @@ $(INTDIR)/Transfer.obj : $(SOURCE) $(DEP_TRANS) $(INTDIR) @@ -316,7 +316,7 @@ $(INTDIR)/Transfer.obj : $(SOURCE) $(DEP_TRANS) $(INTDIR)
316 SOURCE=.\ReadStat.c 316 SOURCE=.\ReadStat.c
317 DEP_READS=\ 317 DEP_READS=\
318 .\MTTTY.h\ 318 .\MTTTY.h\
319 - .\TTYInfo.h 319 + .\g_appdata.h
320 320
321 $(INTDIR)/ReadStat.obj : $(SOURCE) $(DEP_READS) $(INTDIR) 321 $(INTDIR)/ReadStat.obj : $(SOURCE) $(DEP_READS) $(INTDIR)
322 322
@@ -29,7 +29,6 @@ IDR_MTTTYACCELERATOR ACCELERATORS @@ -29,7 +29,6 @@ IDR_MTTTYACCELERATOR ACCELERATORS
29 BEGIN 29 BEGIN
30 VK_F5, ID_TRANSFER_SENDFILETEXT, VIRTKEY, NOINVERT 30 VK_F5, ID_TRANSFER_SENDFILETEXT, VIRTKEY, NOINVERT
31 VK_F5, ID_TRANSFER_ABORTREPEATEDSENDING, VIRTKEY, ALT, NOINVERT 31 VK_F5, ID_TRANSFER_ABORTREPEATEDSENDING, VIRTKEY, ALT, NOINVERT
32 - VK_F5, ID_TRANSFER_ABORTSENDING, VIRTKEY, SHIFT, NOINVERT  
33 "x", ID_FILE_EXIT, ASCII, ALT, NOINVERT 32 "x", ID_FILE_EXIT, ASCII, ALT, NOINVERT
34 END 33 END
35 34
@@ -53,7 +52,7 @@ BEGIN @@ -53,7 +52,7 @@ BEGIN
53 EDITTEXT IDC_OSVERSIONINFO,36,81,104,46,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY 52 EDITTEXT IDC_OSVERSIONINFO,36,81,104,46,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY
54 END 53 END
55 54
56 -IDD_TOOLBARSETTINGS DIALOGEX 0, 0, 414, 18 55 +IDD_TOOLBARSETTINGS DIALOGEX 0, 0, 340, 14
57 STYLE DS_ABSALIGN | DS_SETFONT | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER 56 STYLE DS_ABSALIGN | DS_SETFONT | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER
58 FONT 12, "??", 400, 0, 0x0 57 FONT 12, "??", 400, 0, 0x0
59 BEGIN 58 BEGIN
@@ -62,13 +61,11 @@ BEGIN @@ -62,13 +61,11 @@ BEGIN
62 PUSHBUTTON "软件路径",IDC_BUTTON2_SEC_BINFILE,109,0,50,14 61 PUSHBUTTON "软件路径",IDC_BUTTON2_SEC_BINFILE,109,0,50,14
63 END 62 END
64 63
65 -IDD_STATUSDIALOG DIALOGEX 0, 0, 448, 19 64 +IDD_STATUSDIALOG DIALOGEX 0, 0, 392, 281
66 STYLE DS_ABSALIGN | DS_SETFONT | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER 65 STYLE DS_ABSALIGN | DS_SETFONT | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER
67 FONT 8, "MS Sans Serif", 0, 0, 0x0 66 FONT 8, "MS Sans Serif", 0, 0, 0x0
68 BEGIN 67 BEGIN
69 - PUSHBUTTON "",IDC_ABORTBTN,0,1,60,12,NOT WS_VISIBLE  
70 - CONTROL "Generic1",IDC_TRANSFERPROGRESS,"msctls_progress32",NOT WS_VISIBLE | WS_BORDER,68,3,65,6  
71 - EDITTEXT IDC_STATUSEDIT,178,0,262,16,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL 68 + EDITTEXT IDC_STATUSEDIT,151,25,111,101,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
72 END 69 END
73 70
74 71
@@ -110,7 +107,6 @@ BEGIN @@ -110,7 +107,6 @@ BEGIN
110 BEGIN 107 BEGIN
111 MENUITEM "&Send Bin File .\tF5", ID_TRANSFER_SENDFILETEXT 108 MENUITEM "&Send Bin File .\tF5", ID_TRANSFER_SENDFILETEXT
112 MENUITEM "&Receive File (Text)...", ID_TRANSFER_RECEIVEFILETEXT 109 MENUITEM "&Receive File (Text)...", ID_TRANSFER_RECEIVEFILETEXT
113 - MENUITEM "&Abort Sending\tShift+F5", ID_TRANSFER_ABORTSENDING, GRAYED  
114 MENUITEM SEPARATOR 110 MENUITEM SEPARATOR
115 MENUITEM "S&end Repeatedly...", ID_TRANSFER_SENDREPEATEDLY 111 MENUITEM "S&end Repeatedly...", ID_TRANSFER_SENDREPEATEDLY
116 MENUITEM "A&bort Repeated Sending\tAlt+F5", ID_TRANSFER_ABORTREPEATEDSENDING 112 MENUITEM "A&bort Repeated Sending\tAlt+F5", ID_TRANSFER_ABORTREPEATEDSENDING
@@ -186,6 +182,22 @@ BEGIN @@ -186,6 +182,22 @@ BEGIN
186 END 182 END
187 END 183 END
188 184
  185 +
  186 +/////////////////////////////////////////////////////////////////////////////
  187 +//
  188 +// DESIGNINFO
  189 +//
  190 +
  191 +#ifdef APSTUDIO_INVOKED
  192 +GUIDELINES DESIGNINFO
  193 +BEGIN
  194 + IDD_TOOLBARSETTINGS, DIALOG
  195 + BEGIN
  196 + RIGHTMARGIN, 332
  197 + END
  198 +END
  199 +#endif // APSTUDIO_INVOKED
  200 +
189 #endif // 中文(中华人民共和国) resources 201 #endif // 中文(中华人民共和国) resources
190 ///////////////////////////////////////////////////////////////////////////// 202 /////////////////////////////////////////////////////////////////////////////
191 203
@@ -61,40 +61,40 @@ void OutputABufferToWindow(HWND hTTY, char * lpBuf, DWORD dwBufLen) @@ -61,40 +61,40 @@ void OutputABufferToWindow(HWND hTTY, char * lpBuf, DWORD dwBufLen)
61 MessageBeep(0); 61 MessageBeep(0);
62 break; 62 break;
63 case ASCII_BS: // Backspace CHAR 63 case ASCII_BS: // Backspace CHAR
64 - if (TTYInfo.nColumn > 0)  
65 - TTYInfo.nColumn--; 64 + if (g_appdata.nColumn > 0)
  65 + g_appdata.nColumn--;
66 break; 66 break;
67 case ASCII_CR: // Carriage Return 67 case ASCII_CR: // Carriage Return
68 - TTYInfo.nColumn = 0;  
69 - if (!TTYInfo.fNewLine) 68 + g_appdata.nColumn = 0;
  69 + if (!g_appdata.fNewLine)
70 break; 70 break;
71 71
72 // 72 //
73 // FALL THROUGH 73 // FALL THROUGH
74 // 74 //
75 case ASCII_LF: // Line Feed 75 case ASCII_LF: // Line Feed
76 - if (TTYInfo.nRow++ == MAXROWS - 1) 76 + if (g_appdata.nRow++ == MAXROWS - 1)
77 { 77 {
78 - MoveMemory((LPSTR) (TTYInfo.Screen),  
79 - (LPSTR) (TTYInfo.Screen + MAXCOLS), 78 + MoveMemory((LPSTR) (g_appdata.Screen),
  79 + (LPSTR) (g_appdata.Screen + MAXCOLS),
80 (MAXROWS - 1) *MAXCOLS); 80 (MAXROWS - 1) *MAXCOLS);
81 - FillMemory((LPSTR) (TTYInfo.Screen + (MAXROWS - 1) *MAXCOLS), 81 + FillMemory((LPSTR) (g_appdata.Screen + (MAXROWS - 1) *MAXCOLS),
82 MAXCOLS, ' '); 82 MAXCOLS, ' ');
83 InvalidateRect(hTTY, NULL, FALSE); 83 InvalidateRect(hTTY, NULL, FALSE);
84 - TTYInfo.nRow--; 84 + g_appdata.nRow--;
85 } 85 }
86 break; 86 break;
87 default: // standard character 87 default: // standard character
88 - TTYInfo.Screen[TTYInfo.nRow * MAXCOLS + TTYInfo.nColumn] = lpBuf[i];  
89 - rect.left = (TTYInfo.nColumn * TTYInfo.xChar) -TTYInfo.xOffset;  
90 - rect.right = rect.left + TTYInfo.xChar;  
91 - rect.top = (TTYInfo.nRow * TTYInfo.yChar) -TTYInfo.yOffset;  
92 - rect.bottom = rect.top + TTYInfo.yChar; 88 + g_appdata.Screen[g_appdata.nRow * MAXCOLS + g_appdata.nColumn] = lpBuf[i];
  89 + rect.left = (g_appdata.nColumn * g_appdata.xChar) -g_appdata.xOffset;
  90 + rect.right = rect.left + g_appdata.xChar;
  91 + rect.top = (g_appdata.nRow * g_appdata.yChar) -g_appdata.yOffset;
  92 + rect.bottom = rect.top + g_appdata.yChar;
93 InvalidateRect(hTTY, &rect, FALSE); 93 InvalidateRect(hTTY, &rect, FALSE);
94 // Line wrap 94 // Line wrap
95 - if (TTYInfo.nColumn < MAXCOLS - 1)  
96 - TTYInfo.nColumn++;  
97 - else if (TTYInfo.fAutowrap) 95 + if (g_appdata.nColumn < MAXCOLS - 1)
  96 + g_appdata.nColumn++;
  97 + else if (g_appdata.fAutowrap)
98 OutputABufferToWindow(hTTY, "\r\n", 2); 98 OutputABufferToWindow(hTTY, "\r\n", 2);
99 break; 99 break;
100 } 100 }
@@ -98,21 +98,21 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -98,21 +98,21 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
98 // If no reading is allowed, then set flag to 98 // If no reading is allowed, then set flag to
99 // make it look like a read is already outstanding. 99 // make it look like a read is already outstanding.
100 // 100 //
101 - if (TTYInfo.fNoReading) 101 + if (g_appdata.fNoReading)
102 fWaitingOnRead = TRUE; 102 fWaitingOnRead = TRUE;
103 103
104 // 104 //
105 // if no read is outstanding, then issue another one 105 // if no read is outstanding, then issue another one
106 // 106 //
107 if (!fWaitingOnRead) { 107 if (!fWaitingOnRead) {
108 - if (!ReadFile(TTYInfo.hCommPort, lpBuf_first, AMOUNT_TO_READ, &dwRead, &osReader)) { 108 + if (!ReadFile(g_appdata.hCommPort, lpBuf_first, AMOUNT_TO_READ, &dwRead, &osReader)) {
109 if (GetLastError() != ERROR_IO_PENDING) // read not delayed? 109 if (GetLastError() != ERROR_IO_PENDING) // read not delayed?
110 ErrorInComm("ReadFile in ReaderAndStatusProc"); 110 ErrorInComm("ReadFile in ReaderAndStatusProc");
111 111
112 fWaitingOnRead = TRUE; 112 fWaitingOnRead = TRUE;
113 } 113 }
114 else { // read completed immediately 114 else { // read completed immediately
115 - if ((dwRead != MAX_READ_BUFFER) && TTYInfo.fDisplayTimeouts) 115 + if ((dwRead != MAX_READ_BUFFER) && g_appdata.fDisplayTimeouts)
116 UpdateStatus("Read timed out immediately.\r\n"); 116 UpdateStatus("Read timed out immediately.\r\n");
117 117
118 if (dwRead) 118 if (dwRead)
@@ -127,9 +127,9 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -127,9 +127,9 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
127 // This will cause a pending WaitCommEvent to complete 127 // This will cause a pending WaitCommEvent to complete
128 // and the resultant event flag will be NULL. 128 // and the resultant event flag will be NULL.
129 // 129 //
130 - if (dwStoredFlags != TTYInfo.dwEventFlags) {  
131 - dwStoredFlags = TTYInfo.dwEventFlags;  
132 - if (!SetCommMask(TTYInfo.hCommPort, dwStoredFlags)) 130 + if (dwStoredFlags != g_appdata.dwEventFlags) {
  131 + dwStoredFlags = g_appdata.dwEventFlags;
  132 + if (!SetCommMask(g_appdata.hCommPort, dwStoredFlags))
133 ErrorReporter("SetCommMask"); 133 ErrorReporter("SetCommMask");
134 } 134 }
135 135
@@ -137,16 +137,16 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -137,16 +137,16 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
137 // If event checks are not allowed, then make it look 137 // If event checks are not allowed, then make it look
138 // like an event check operation is outstanding 138 // like an event check operation is outstanding
139 // 139 //
140 - if (TTYInfo.fNoEvents) 140 + if (g_appdata.fNoEvents)
141 fWaitingOnStat = TRUE; 141 fWaitingOnStat = TRUE;
142 // 142 //
143 // if no status check is outstanding, then issue another one 143 // if no status check is outstanding, then issue another one
144 // 144 //
145 if (!fWaitingOnStat) { 145 if (!fWaitingOnStat) {
146 - if (TTYInfo.fNoEvents) 146 + if (g_appdata.fNoEvents)
147 fWaitingOnStat = TRUE; 147 fWaitingOnStat = TRUE;
148 else { 148 else {
149 - if (!WaitCommEvent(TTYInfo.hCommPort, &dwCommEvent, &osStatus)) { 149 + if (!WaitCommEvent(g_appdata.hCommPort, &dwCommEvent, &osStatus)) {
150 if (GetLastError() != ERROR_IO_PENDING) // Wait not delayed? 150 if (GetLastError() != ERROR_IO_PENDING) // Wait not delayed?
151 ErrorReporter("WaitCommEvent"); 151 ErrorReporter("WaitCommEvent");
152 else 152 else
@@ -169,14 +169,14 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -169,14 +169,14 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
169 // read completed 169 // read completed
170 // 170 //
171 case WAIT_OBJECT_0: 171 case WAIT_OBJECT_0:
172 - if (!GetOverlappedResult(TTYInfo.hCommPort, &osReader, &dwRead, FALSE)) { 172 + if (!GetOverlappedResult(g_appdata.hCommPort, &osReader, &dwRead, FALSE)) {
173 if (GetLastError() == ERROR_OPERATION_ABORTED) 173 if (GetLastError() == ERROR_OPERATION_ABORTED)
174 UpdateStatus("Read aborted\r\n"); 174 UpdateStatus("Read aborted\r\n");
175 else 175 else
176 ErrorInComm("GetOverlappedResult (in Reader)"); 176 ErrorInComm("GetOverlappedResult (in Reader)");
177 } 177 }
178 else { // read completed successfully 178 else { // read completed successfully
179 - if ((dwRead != MAX_READ_BUFFER) && TTYInfo.fDisplayTimeouts) 179 + if ((dwRead != MAX_READ_BUFFER) && g_appdata.fDisplayTimeouts)
180 UpdateStatus("Read timed out overlapped.\r\n"); 180 UpdateStatus("Read timed out overlapped.\r\n");
181 181
182 if (dwRead) 182 if (dwRead)
@@ -196,24 +196,24 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -196,24 +196,24 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
196 196
197 if (strstr(lpBuf,"ROM boot")) 197 if (strstr(lpBuf,"ROM boot"))
198 { 198 {
199 - if (GetTickCount() - TTYInfo.tickcountFinish <2000) 199 + if (GetTickCount() - g_appdata.tickcountFinish <2000)
200 {// 在很短的时间内收到PCB板的下载信号, 视为PCB板自动复位, 而不是合上夹具 200 {// 在很短的时间内收到PCB板的下载信号, 视为PCB板自动复位, 而不是合上夹具
201 return; 201 return;
202 } 202 }
203 - TTYInfo.rgbBGColor = RGB(255,255,255); 203 + g_appdata.rgbBGColor = RGB(255,255,255);
204 OutputABuffer(hTTY, "进入下载模式\r\n", dwRead); 204 OutputABuffer(hTTY, "进入下载模式\r\n", dwRead);
205 205
206 - TTYInfo.DownloadReday = TRUE;  
207 - if (strlen(TTYInfo.szFileName) != 0)  
208 - TransferFileTextStart(TTYInfo.szFileName); 206 + g_appdata.DownloadReday = TRUE;
  207 + if (strlen(g_appdata.szFileName) != 0)
  208 + TransferFileTextStart(g_appdata.szFileName);
209 } 209 }
210 // 210 //
211 else if (strstr(lpBuf,"Verify successful")) 211 else if (strstr(lpBuf,"Verify successful"))
212 { 212 {
213 - TTYInfo.tickcountFinish = GetTickCount();  
214 - TTYInfo.rgbBGColor = RGB(50,255,50); 213 + g_appdata.tickcountFinish = GetTickCount();
  214 + g_appdata.rgbBGColor = RGB(50,255,50);
215 OutputABuffer(hTTY, "下载完成\r\n", dwRead); 215 OutputABuffer(hTTY, "下载完成\r\n", dwRead);
216 - TTYInfo.DownloadReday = FALSE; 216 + g_appdata.DownloadReday = FALSE;
217 } 217 }
218 else if (strstr(lpBuf,"Programming:")) 218 else if (strstr(lpBuf,"Programming:"))
219 { 219 {
@@ -221,29 +221,29 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -221,29 +221,29 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
221 char ascbufpercent[64]; 221 char ascbufpercent[64];
222 if(pchar_percent != NULL) 222 if(pchar_percent != NULL)
223 { 223 {
224 - TTYInfo.tickcountFinish = GetTickCount();  
225 - TTYInfo.rgbBGColor = RGB(255,255,255); 224 + g_appdata.tickcountFinish = GetTickCount();
  225 + g_appdata.rgbBGColor = RGB(255,255,255);
226 memset(ascbufpercent,0,64); 226 memset(ascbufpercent,0,64);
227 strncpy(ascbufpercent,pchar_percent+12,2); 227 strncpy(ascbufpercent,pchar_percent+12,2);
228 Flashed_percent = atoi(ascbufpercent); 228 Flashed_percent = atoi(ascbufpercent);
229 sprintf(ascbufpercent,"下载已完成%d\r\n",Flashed_percent); 229 sprintf(ascbufpercent,"下载已完成%d\r\n",Flashed_percent);
230 OutputABuffer(hTTY, ascbufpercent, dwRead); 230 OutputABuffer(hTTY, ascbufpercent, dwRead);
231 - TTYInfo.DownloadReday = FALSE; 231 + g_appdata.DownloadReday = FALSE;
232 } 232 }
233 } 233 }
234 else if (strstr(lpBuf,"Verify fail")) 234 else if (strstr(lpBuf,"Verify fail"))
235 { 235 {
236 - //TTYInfo.tickcountFinish = GetTickCount();  
237 - TTYInfo.rgbBGColor = RGB(255,50,50); 236 + //g_appdata.tickcountFinish = GetTickCount();
  237 + g_appdata.rgbBGColor = RGB(255,50,50);
238 OutputABuffer(hTTY, "下载失败\r\n", dwRead); 238 OutputABuffer(hTTY, "下载失败\r\n", dwRead);
239 239
240 - TTYInfo.DownloadReday = FALSE; 240 + g_appdata.DownloadReday = FALSE;
241 } 241 }
242 else 242 else
243 { 243 {
244 - TTYInfo.rgbBGColor = RGB(255,255,255); 244 + g_appdata.rgbBGColor = RGB(255,255,255);
245 OutputABuffer(hTTY, lpBuf, dwRead); 245 OutputABuffer(hTTY, lpBuf, dwRead);
246 - TTYInfo.DownloadReday = FALSE; 246 + g_appdata.DownloadReday = FALSE;
247 } 247 }
248 248
249 249
@@ -257,7 +257,7 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -257,7 +257,7 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
257 // status completed 257 // status completed
258 // 258 //
259 case WAIT_OBJECT_0 + 1: 259 case WAIT_OBJECT_0 + 1:
260 - if (!GetOverlappedResult(TTYInfo.hCommPort, &osStatus, &dwOvRes, FALSE)) { 260 + if (!GetOverlappedResult(g_appdata.hCommPort, &osStatus, &dwOvRes, FALSE)) {
261 if (GetLastError() == ERROR_OPERATION_ABORTED) 261 if (GetLastError() == ERROR_OPERATION_ABORTED)
262 UpdateStatus("WaitCommEvent aborted\r\n"); 262 UpdateStatus("WaitCommEvent aborted\r\n");
263 else 263 else
@@ -293,7 +293,7 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -293,7 +293,7 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
293 // if status checks are not allowed, then don't issue the 293 // if status checks are not allowed, then don't issue the
294 // modem status check nor the com stat check 294 // modem status check nor the com stat check
295 // 295 //
296 - if (!TTYInfo.fNoStatus) { 296 + if (!g_appdata.fNoStatus) {
297 CheckModemStatus(FALSE); // take this opportunity to do 297 CheckModemStatus(FALSE); // take this opportunity to do
298 CheckComStat(FALSE); // a modem status check and 298 CheckComStat(FALSE); // a modem status check and
299 // a comm status check 299 // a comm status check
@@ -89,26 +89,14 @@ DWORD BaudTable[] = { @@ -89,26 +89,14 @@ DWORD BaudTable[] = {
89 } ; 89 } ;
90 90
91 char * szParity[] = { "None", "Even", "Odd", "Mark", "Space" }; 91 char * szParity[] = { "None", "Even", "Odd", "Mark", "Space" };
92 -  
93 DWORD ParityTable[] = { NOPARITY, EVENPARITY, ODDPARITY, MARKPARITY, SPACEPARITY } ; 92 DWORD ParityTable[] = { NOPARITY, EVENPARITY, ODDPARITY, MARKPARITY, SPACEPARITY } ;
94 -  
95 char * szStopBits[] = { "1", "1.5", "2" }; 93 char * szStopBits[] = { "1", "1.5", "2" };
96 -  
97 DWORD StopBitsTable[] = { ONESTOPBIT, ONE5STOPBITS, TWOSTOPBITS } ; 94 DWORD StopBitsTable[] = { ONESTOPBIT, ONE5STOPBITS, TWOSTOPBITS } ;
98 -  
99 char * szDTRControlStrings[] = { "Enable", "Disable", "Handshake" }; 95 char * szDTRControlStrings[] = { "Enable", "Disable", "Handshake" };
100 -  
101 DWORD DTRControlTable[] = { DTR_CONTROL_ENABLE, DTR_CONTROL_DISABLE, DTR_CONTROL_HANDSHAKE }; 96 DWORD DTRControlTable[] = { DTR_CONTROL_ENABLE, DTR_CONTROL_DISABLE, DTR_CONTROL_HANDSHAKE };
102 -  
103 char * szRTSControlStrings[] = { "Enable", "Disable", "Handshake", "Toggle" }; 97 char * szRTSControlStrings[] = { "Enable", "Disable", "Handshake", "Toggle" };
104 -  
105 -DWORD RTSControlTable[] = { RTS_CONTROL_ENABLE, RTS_CONTROL_DISABLE,  
106 - RTS_CONTROL_HANDSHAKE, RTS_CONTROL_TOGGLE };  
107 -  
108 -DWORD EventFlagsTable[] = {  
109 - EV_BREAK, EV_CTS, EV_DSR, EV_ERR, EV_RING,  
110 - EV_RLSD, EV_RXCHAR, EV_RXFLAG, EV_TXEMPTY  
111 - }; 98 +DWORD RTSControlTable[] = { RTS_CONTROL_ENABLE, RTS_CONTROL_DISABLE, RTS_CONTROL_HANDSHAKE, RTS_CONTROL_TOGGLE };
  99 +DWORD EventFlagsTable[] = { EV_BREAK, EV_CTS, EV_DSR, EV_ERR, EV_RING, EV_RLSD, EV_RXCHAR, EV_RXFLAG, EV_TXEMPTY };
112 100
113 /*----------------------------------------------------------------------------- 101 /*-----------------------------------------------------------------------------
114 102
@@ -173,8 +161,6 @@ void ChangeConnection( HWND hwnd, BOOL fConnected ) @@ -173,8 +161,6 @@ void ChangeConnection( HWND hwnd, BOOL fConnected )
173 MF_ENABLED | MF_BYCOMMAND ) ; 161 MF_ENABLED | MF_BYCOMMAND ) ;
174 EnableMenuItem( hMenu, ID_TRANSFER_SENDREPEATEDLY, 162 EnableMenuItem( hMenu, ID_TRANSFER_SENDREPEATEDLY,
175 MF_ENABLED | MF_BYCOMMAND ) ; 163 MF_ENABLED | MF_BYCOMMAND ) ;
176 - EnableMenuItem( hMenu, ID_TRANSFER_ABORTSENDING,  
177 - MF_DISABLED | MF_GRAYED | MF_BYCOMMAND );  
178 EnableMenuItem( hMenu, ID_TRANSFER_ABORTREPEATEDSENDING, 164 EnableMenuItem( hMenu, ID_TRANSFER_ABORTREPEATEDSENDING,
179 MF_DISABLED | MF_GRAYED | MF_BYCOMMAND ); 165 MF_DISABLED | MF_GRAYED | MF_BYCOMMAND );
180 166
@@ -190,7 +176,6 @@ void ChangeConnection( HWND hwnd, BOOL fConnected ) @@ -190,7 +176,6 @@ void ChangeConnection( HWND hwnd, BOOL fConnected )
190 EnableMenuItem( hMenu, ID_TRANSFER_SENDFILETEXT,MF_DISABLED | MF_GRAYED | MF_BYCOMMAND ) ; 176 EnableMenuItem( hMenu, ID_TRANSFER_SENDFILETEXT,MF_DISABLED | MF_GRAYED | MF_BYCOMMAND ) ;
191 EnableMenuItem( hMenu, ID_TRANSFER_RECEIVEFILETEXT,MF_DISABLED | MF_GRAYED | MF_BYCOMMAND ) ; 177 EnableMenuItem( hMenu, ID_TRANSFER_RECEIVEFILETEXT,MF_DISABLED | MF_GRAYED | MF_BYCOMMAND ) ;
192 EnableMenuItem( hMenu, ID_TRANSFER_SENDREPEATEDLY,MF_DISABLED | MF_GRAYED | MF_BYCOMMAND ) ; 178 EnableMenuItem( hMenu, ID_TRANSFER_SENDREPEATEDLY,MF_DISABLED | MF_GRAYED | MF_BYCOMMAND ) ;
193 - EnableMenuItem( hMenu, ID_TRANSFER_ABORTSENDING,MF_DISABLED | MF_GRAYED | MF_BYCOMMAND ) ;  
194 EnableMenuItem( hMenu, ID_TRANSFER_ABORTREPEATEDSENDING,MF_DISABLED | MF_GRAYED | MF_BYCOMMAND ); 179 EnableMenuItem( hMenu, ID_TRANSFER_ABORTREPEATEDSENDING,MF_DISABLED | MF_GRAYED | MF_BYCOMMAND );
195 EnableWindow( GetDlgItem(ghWndToolbarDlg, IDC_PORTCOMBO), TRUE); 180 EnableWindow( GetDlgItem(ghWndToolbarDlg, IDC_PORTCOMBO), TRUE);
196 SetFocus(ghwndMain); 181 SetFocus(ghwndMain);
@@ -217,7 +202,7 @@ HISTORY: Date: Author: Comment: @@ -217,7 +202,7 @@ HISTORY: Date: Author: Comment:
217 void UpdateTTYInfo() 202 void UpdateTTYInfo()
218 { 203 {
219 GetDlgItemText(ghWndToolbarDlg, IDC_PORTCOMBO, gszPort, sizeof(gszPort)); 204 GetDlgItemText(ghWndToolbarDlg, IDC_PORTCOMBO, gszPort, sizeof(gszPort));
220 - if (TTYInfo.fConnected) // if connected, then update port state 205 + if (g_appdata.fConnected) // if connected, then update port state
221 UpdateConnection(); 206 UpdateConnection();
222 return; 207 return;
223 } 208 }
@@ -243,41 +228,41 @@ BOOL UpdateConnection() @@ -243,41 +228,41 @@ BOOL UpdateConnection()
243 // 228 //
244 // get current DCB settings 229 // get current DCB settings
245 // 230 //
246 - if (!GetCommState(TTYInfo.hCommPort, &dcb)) 231 + if (!GetCommState(g_appdata.hCommPort, &dcb))
247 ErrorReporter("GetCommState"); 232 ErrorReporter("GetCommState");
248 233
249 // 234 //
250 // update DCB rate, byte size, parity, and stop bits size 235 // update DCB rate, byte size, parity, and stop bits size
251 // 236 //
252 - dcb.BaudRate = TTYInfo.dwBaudRate;  
253 - dcb.ByteSize = TTYInfo.bByteSize;  
254 - dcb.Parity = TTYInfo.bParity;  
255 - dcb.StopBits = TTYInfo.bStopBits; 237 + dcb.BaudRate = g_appdata.dwBaudRate;
  238 + dcb.ByteSize = g_appdata.bByteSize;
  239 + dcb.Parity = g_appdata.bParity;
  240 + dcb.StopBits = g_appdata.bStopBits;
256 241
257 // 242 //
258 // update event flags 243 // update event flags
259 // 244 //
260 - if (TTYInfo.dwEventFlags & EV_RXFLAG)  
261 - dcb.EvtChar = TTYInfo.chFlag; 245 + if (g_appdata.dwEventFlags & EV_RXFLAG)
  246 + dcb.EvtChar = g_appdata.chFlag;
262 else 247 else
263 dcb.EvtChar = '\0'; 248 dcb.EvtChar = '\0';
264 249
265 // 250 //
266 // update flow control settings 251 // update flow control settings
267 // 252 //
268 - dcb.fDtrControl = TTYInfo.fDtrControl;  
269 - dcb.fRtsControl = TTYInfo.fRtsControl;  
270 -  
271 - dcb.fOutxCtsFlow = TTYInfo.fCTSOutFlow;  
272 - dcb.fOutxDsrFlow = TTYInfo.fDSROutFlow;  
273 - dcb.fDsrSensitivity = TTYInfo.fDSRInFlow;  
274 - dcb.fOutX = TTYInfo.fXonXoffOutFlow;  
275 - dcb.fInX = TTYInfo.fXonXoffInFlow;  
276 - dcb.fTXContinueOnXoff = TTYInfo.fTXafterXoffSent;  
277 - dcb.XonChar = TTYInfo.chXON;  
278 - dcb.XoffChar = TTYInfo.chXOFF;  
279 - dcb.XonLim = TTYInfo.wXONLimit;  
280 - dcb.XoffLim = TTYInfo.wXOFFLimit; 253 + dcb.fDtrControl = g_appdata.fDtrControl;
  254 + dcb.fRtsControl = g_appdata.fRtsControl;
  255 +
  256 + dcb.fOutxCtsFlow = g_appdata.fCTSOutFlow;
  257 + dcb.fOutxDsrFlow = g_appdata.fDSROutFlow;
  258 + dcb.fDsrSensitivity = g_appdata.fDSRInFlow;
  259 + dcb.fOutX = g_appdata.fXonXoffOutFlow;
  260 + dcb.fInX = g_appdata.fXonXoffInFlow;
  261 + dcb.fTXContinueOnXoff = g_appdata.fTXafterXoffSent;
  262 + dcb.XonChar = g_appdata.chXON;
  263 + dcb.XoffChar = g_appdata.chXOFF;
  264 + dcb.XonLim = g_appdata.wXONLimit;
  265 + dcb.XoffLim = g_appdata.wXOFFLimit;
281 266
282 // 267 //
283 // DCB settings not in the user's control 268 // DCB settings not in the user's control
@@ -287,13 +272,13 @@ BOOL UpdateConnection() @@ -287,13 +272,13 @@ BOOL UpdateConnection()
287 // 272 //
288 // set new state 273 // set new state
289 // 274 //
290 - if (!SetCommState(TTYInfo.hCommPort, &dcb)) 275 + if (!SetCommState(g_appdata.hCommPort, &dcb))
291 ErrorReporter("SetCommState"); 276 ErrorReporter("SetCommState");
292 277
293 // 278 //
294 // set new timeouts 279 // set new timeouts
295 // 280 //
296 - if (!SetCommTimeouts(TTYInfo.hCommPort, &(TTYInfo.timeoutsnew))) 281 + if (!SetCommTimeouts(g_appdata.hCommPort, &(g_appdata.timeoutsnew)))
297 ErrorReporter("SetCommTimeouts"); 282 ErrorReporter("SetCommTimeouts");
298 283
299 return TRUE; 284 return TRUE;
@@ -405,15 +390,15 @@ BOOL SettingsDlgInit( HWND hDlg ) @@ -405,15 +390,15 @@ BOOL SettingsDlgInit( HWND hDlg )
405 // 390 //
406 for (wCount = 0; wCount < 255; wCount++) 391 for (wCount = 0; wCount < 255; wCount++)
407 { 392 {
408 - if (TTYInfo.unOpenedPortAry[wCount] == 0) 393 + if (g_appdata.unOpenedPortAry[wCount] == 0)
409 continue;; 394 continue;;
410 - wsprintf( szBuffer, "%s%d", (LPSTR) szTemp, TTYInfo.unOpenedPortAry[wCount] ) ; 395 + wsprintf( szBuffer, "%s%d", (LPSTR) szTemp, g_appdata.unOpenedPortAry[wCount] ) ;
411 SendDlgItemMessage( hDlg, IDC_PORTCOMBO, CB_ADDSTRING, 0, 396 SendDlgItemMessage( hDlg, IDC_PORTCOMBO, CB_ADDSTRING, 0,
412 (LPARAM) (LPSTR) szBuffer ) ; 397 (LPARAM) (LPSTR) szBuffer ) ;
413 } 398 }
414 399
415 SendDlgItemMessage( hDlg, IDC_PORTCOMBO, CB_SETCURSEL, 400 SendDlgItemMessage( hDlg, IDC_PORTCOMBO, CB_SETCURSEL,
416 - (WPARAM) (TTYInfo.bPort - 1), 0L ) ; 401 + (WPARAM) (g_appdata.bPort - 1), 0L ) ;
417 402
418 GetDlgItemText(hDlg, IDC_PORTCOMBO, gszPort, sizeof(gszPort)); 403 GetDlgItemText(hDlg, IDC_PORTCOMBO, gszPort, sizeof(gszPort));
419 404
@@ -426,13 +411,13 @@ BOOL SettingsDlgInit( HWND hDlg ) @@ -426,13 +411,13 @@ BOOL SettingsDlgInit( HWND hDlg )
426 //wsprintf( szBuffer, "%d", wCount ) ; 411 //wsprintf( szBuffer, "%d", wCount ) ;
427 //wPosition = LOWORD( SendDlgItemMessage( hDlg, IDC_DATABITSCOMBO,CB_ADDSTRING, 0,(LPARAM) (LPSTR) szBuffer ) ) ; 412 //wPosition = LOWORD( SendDlgItemMessage( hDlg, IDC_DATABITSCOMBO,CB_ADDSTRING, 0,(LPARAM) (LPSTR) szBuffer ) ) ;
428 // if wCount is current selection, tell the combo box 413 // if wCount is current selection, tell the combo box
429 - //if (wCount == TTYInfo.bByteSize)SendDlgItemMessage( hDlg, IDC_DATABITSCOMBO, CB_SETCURSEL,(WPARAM) wPosition, 0L ) ; 414 + //if (wCount == g_appdata.bByteSize)SendDlgItemMessage( hDlg, IDC_DATABITSCOMBO, CB_SETCURSEL,(WPARAM) wPosition, 0L ) ;
430 } 415 }
431 416
432 // fill parity combo box and make initial selection 417 // fill parity combo box and make initial selection
433 - //FillComboBox( GetDlgItem( hDlg, IDC_PARITYCOMBO ),szParity, ParityTable,sizeof( ParityTable ) / sizeof( ParityTable[ 0 ] ),TTYInfo.bParity ) ; 418 + //FillComboBox( GetDlgItem( hDlg, IDC_PARITYCOMBO ),szParity, ParityTable,sizeof( ParityTable ) / sizeof( ParityTable[ 0 ] ),g_appdata.bParity ) ;
434 // fill stop bits combo box and make initial selection 419 // fill stop bits combo box and make initial selection
435 - //FillComboBox( GetDlgItem( hDlg, IDC_STOPBITSCOMBO ),szStopBits, StopBitsTable,sizeof( StopBitsTable ) / sizeof ( StopBitsTable[ 0 ] ),TTYInfo.bStopBits ) ; 420 + //FillComboBox( GetDlgItem( hDlg, IDC_STOPBITSCOMBO ),szStopBits, StopBitsTable,sizeof( StopBitsTable ) / sizeof ( StopBitsTable[ 0 ] ),g_appdata.bStopBits ) ;
436 421
437 return ( TRUE ) ; 422 return ( TRUE ) ;
438 423
@@ -564,7 +549,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -564,7 +549,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
564 { 549 {
565 case IDC_BUTTON2_SEC_BINFILE: 550 case IDC_BUTTON2_SEC_BINFILE:
566 { 551 {
567 - if (strlen(TTYInfo.szFileName) == 0) 552 + if (strlen(g_appdata.szFileName) == 0)
568 { 553 {
569 char * szFilter = "Text Files\0*.*\0"; 554 char * szFilter = "Text Files\0*.*\0";
570 OPENFILENAME ofn = {0}; 555 OPENFILENAME ofn = {0};
@@ -578,11 +563,11 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -578,11 +563,11 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
578 563
579 if (!GetOpenFileName(&ofn)) 564 if (!GetOpenFileName(&ofn))
580 break; 565 break;
581 - strcpy(TTYInfo.szFileName,szFileName); 566 + strcpy(g_appdata.szFileName,szFileName);
582 SetWindowText(GetDlgItem(hWndDlg, IDC_BUTTON2_SEC_BINFILE), "下载软件"); 567 SetWindowText(GetDlgItem(hWndDlg, IDC_BUTTON2_SEC_BINFILE), "下载软件");
583 568
584 } 569 }
585 - if (TTYInfo.DownloadReday == FALSE) 570 + if (g_appdata.DownloadReday == FALSE)
586 { 571 {
587 MessageBox(ghwndMain, "请合上夹具", "提示!", MB_OK); 572 MessageBox(ghwndMain, "请合上夹具", "提示!", MB_OK);
588 return; 573 return;
@@ -590,17 +575,17 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -590,17 +575,17 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
590 575
591 576
592 if (TRUE) 577 if (TRUE)
593 - TransferFileTextStart(TTYInfo.szFileName); 578 + TransferFileTextStart(g_appdata.szFileName);
594 579
595 } 580 }
596 break; 581 break;
597 case IDC_BUTTON_CONNECT_UART: // font button pressed 582 case IDC_BUTTON_CONNECT_UART: // font button pressed
598 { 583 {
599 - if (!TTYInfo.fConnected) 584 + if (!g_appdata.fConnected)
600 { 585 {
601 if (SetupCommPort() != NULL) 586 if (SetupCommPort() != NULL)
602 { 587 {
603 - ChangeConnection(hWndDlg, TTYInfo.fConnected); 588 + ChangeConnection(hWndDlg, g_appdata.fConnected);
604 SetWindowText(GetDlgItem(hWndDlg, IDC_BUTTON_CONNECT_UART), "断开夹具"); 589 SetWindowText(GetDlgItem(hWndDlg, IDC_BUTTON_CONNECT_UART), "断开夹具");
605 } 590 }
606 } 591 }
@@ -608,7 +593,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -608,7 +593,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
608 { 593 {
609 if (BreakDownCommPort()) 594 if (BreakDownCommPort())
610 { 595 {
611 - ChangeConnection(hWndDlg, TTYInfo.fConnected); 596 + ChangeConnection(hWndDlg, g_appdata.fConnected);
612 SetWindowText(GetDlgItem(hWndDlg, IDC_BUTTON_CONNECT_UART), "连接夹具"); 597 SetWindowText(GetDlgItem(hWndDlg, IDC_BUTTON_CONNECT_UART), "连接夹具");
613 } 598 }
614 599
@@ -621,11 +606,11 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -621,11 +606,11 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
621 CHOOSEFONT cf = {0}; 606 CHOOSEFONT cf = {0};
622 LOGFONT lf; 607 LOGFONT lf;
623 608
624 - lf = TTYInfo.lfTTYFont; 609 + lf = g_appdata.lfTTYFont;
625 cf.lStructSize = sizeof(CHOOSEFONT); 610 cf.lStructSize = sizeof(CHOOSEFONT);
626 cf.hwndOwner = hWndDlg; 611 cf.hwndOwner = hWndDlg;
627 cf.lpLogFont = &lf; 612 cf.lpLogFont = &lf;
628 - cf.rgbColors = TTYInfo.rgbFGColor; 613 + cf.rgbColors = g_appdata.rgbFGColor;
629 cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS | CF_FIXEDPITCHONLY | \ 614 cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS | CF_FIXEDPITCHONLY | \
630 CF_EFFECTS; 615 CF_EFFECTS;
631 616
@@ -638,7 +623,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -638,7 +623,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
638 // fix scroll bar sizes since we may have more or less pixels per 623 // fix scroll bar sizes since we may have more or less pixels per
639 // character now 624 // character now
640 // 625 //
641 - SizeTTY(ghWndTTY, (WORD)TTYInfo.xSize, (WORD)TTYInfo.ySize); 626 + SizeTTY(ghWndTTY, (WORD)g_appdata.xSize, (WORD)g_appdata.ySize);
642 627
643 // 628 //
644 // repaint screen contents 629 // repaint screen contents
@@ -674,7 +659,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -674,7 +659,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
674 break; 659 break;
675 660
676 default: // some other control has been modified 661 default: // some other control has been modified
677 - if (TTYInfo.fConnected) 662 + if (g_appdata.fConnected)
678 UpdateTTYInfo(); 663 UpdateTTYInfo();
679 break; 664 break;
680 } 665 }
@@ -124,27 +124,39 @@ BOOL CALLBACK StatusDlgProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lPara @@ -124,27 +124,39 @@ BOOL CALLBACK StatusDlgProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lPara
124 switch(uMsg) 124 switch(uMsg)
125 { 125 {
126 case WM_INITDIALOG: // setup dialog with defaults 126 case WM_INITDIALOG: // setup dialog with defaults
  127 + InitStatusWindow(hWndDlg,0,0);
127 SendMessage(GetDlgItem(hWndDlg, IDC_STATUSEDIT), WM_SETFONT, (WPARAM)ghFontStatus, 0); 128 SendMessage(GetDlgItem(hWndDlg, IDC_STATUSEDIT), WM_SETFONT, (WPARAM)ghFontStatus, 0);
128 InitStatusMessage(); 129 InitStatusMessage();
129 break; 130 break;
130 -  
131 case WM_COMMAND: 131 case WM_COMMAND:
132 { 132 {
133 switch(LOWORD(wParam)) 133 switch(LOWORD(wParam))
134 { 134 {
135 case IDC_ABORTBTN: 135 case IDC_ABORTBTN:
136 - SendMessage(ghwndMain, WM_COMMAND, ID_TRANSFER_ABORTSENDING, MAKELPARAM(IDC_ABORTBTN,0) ); 136 + // am I in a transfer repeat?
  137 + if (g_appdata.fRepeating) TransferRepeatDestroy();
  138 + // am I in a normal recieve state, then stop sending
  139 + else if (gdwReceiveState == RECEIVE_TTY)
  140 + TransferFileTextEnd();
  141 + // if I am not in a normal receive state, then stop capturing
  142 + else
  143 + gfAbortTransfer = TRUE;
137 fRet = TRUE; 144 fRet = TRUE;
138 break; 145 break;
139 -  
140 //CheckModemStatus(TRUE); 146 //CheckModemStatus(TRUE);
141 //fRet = TRUE; 147 //fRet = TRUE;
142 //break; 148 //break;
143 -  
144 default: 149 default:
145 break; 150 break;
146 } 151 }
147 } 152 }
  153 + case WM_SIZE:
  154 + {
  155 + DWORD Statuswidth = LOWORD(lParam);
  156 + WORD Statusheigh = HIWORD(lParam);
  157 + ResizeStatusWindow(Statuswidth, Statusheigh);
  158 + //HWND hBtnAbortSend[50];
  159 + }
148 break; 160 break;
149 161
150 default: 162 default:
@@ -394,7 +406,7 @@ void CheckModemStatus( BOOL bUpdateNow ) @@ -394,7 +406,7 @@ void CheckModemStatus( BOOL bUpdateNow )
394 406
395 DWORD dwNewModemStatus; 407 DWORD dwNewModemStatus;
396 408
397 - if (!GetCommModemStatus(TTYInfo.hCommPort, &dwNewModemStatus)) 409 + if (!GetCommModemStatus(g_appdata.hCommPort, &dwNewModemStatus))
398 ErrorReporter("GetCommModemStatus"); 410 ErrorReporter("GetCommModemStatus");
399 411
400 // 412 //
@@ -455,7 +467,7 @@ void CheckComStat(BOOL bUpdateNow) @@ -455,7 +467,7 @@ void CheckComStat(BOOL bUpdateNow)
455 467
456 BOOL bReport = bUpdateNow; 468 BOOL bReport = bUpdateNow;
457 469
458 - if (!ClearCommError(TTYInfo.hCommPort, &dwErrors, &ComStatNew)) 470 + if (!ClearCommError(g_appdata.hCommPort, &dwErrors, &ComStatNew))
459 ErrorReporter("ClearCommError"); 471 ErrorReporter("ClearCommError");
460 472
461 if (dwErrors != dwErrorsOld) { 473 if (dwErrors != dwErrorsOld) {
@@ -501,7 +513,7 @@ void ReportCommError() @@ -501,7 +513,7 @@ void ReportCommError()
501 // 513 //
502 // Get and clear current errors on the port 514 // Get and clear current errors on the port
503 // 515 //
504 - if (!ClearCommError(TTYInfo.hCommPort, &dwErrors, &comStat)) 516 + if (!ClearCommError(g_appdata.hCommPort, &dwErrors, &comStat))
505 ErrorReporter("ClearCommError"); 517 ErrorReporter("ClearCommError");
506 518
507 // 519 //
@@ -680,3 +692,50 @@ void ReportStatusEvent(DWORD dwStatus) @@ -680,3 +692,50 @@ void ReportStatusEvent(DWORD dwStatus)
680 692
681 return; 693 return;
682 } 694 }
  695 +BOOL InitStatusWindow(HWND hwnd,DWORD mainwidth, WORD mainheigh)
  696 +{
  697 + int loop1,loop2,index_ctrl;
  698 + for (loop1 = 0; loop1 < 2; loop1++)
  699 + {
  700 + for (loop2 = 0; loop2 < MAX_DEVICES_NUM; loop2++)
  701 + {
  702 + index_ctrl = loop1*MAX_DEVICES_NUM+loop2;
  703 + g_appdata.hBtnAbortSend[index_ctrl] = CreateWindow("button", "start", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0,0,0,0, hwnd, (HMENU)IDC_ABORTBTN+index_ctrl, ghInst, NULL);
  704 + g_appdata.hprocessFlash[index_ctrl] = CreateWindow("msctls_progress32", "", WS_CHILD|WS_VISIBLE|WS_BORDER, 0,0,0,0, hwnd, (HMENU)IDC_TRANSFERPROGRESS+index_ctrl, ghInst, NULL);
  705 + }
  706 + }
  707 + return TRUE;
  708 +}
  709 +BOOL ResizeStatusWindow(DWORD Statuswidth, WORD Statusheigh)
  710 +{
  711 + int loop1,loop2,index_ctrl;
  712 + RECT rect_statusInfo;
  713 + RECT rect_btn,rect_process;
  714 + for (loop1 = 0; loop1 < 2; loop1++)
  715 + {
  716 + for (loop2 = 0; loop2 < MAX_DEVICES_NUM; loop2++)
  717 + {
  718 + index_ctrl = loop1*MAX_DEVICES_NUM+loop2;
  719 + rect_btn.left = 5+loop1*110;
  720 + rect_btn.top = 5+loop2*25;
  721 + rect_btn.right = rect_btn.left+30;
  722 + rect_btn.bottom = rect_btn.top+20;
  723 +
  724 + rect_process.left = rect_btn.right+5;
  725 + rect_process.top = rect_btn.top;
  726 + rect_process.right = rect_process.left+80;
  727 + rect_process.bottom = rect_btn.bottom;
  728 + MoveWindow(g_appdata.hBtnAbortSend[index_ctrl] , rect_btn.left, rect_btn.top,
  729 + rect_btn.right -rect_btn.left, rect_btn.bottom -rect_btn.top, TRUE);
  730 + MoveWindow(g_appdata.hprocessFlash[index_ctrl] , rect_process.left, rect_process.top,
  731 + rect_process.right -rect_process.left, rect_process.bottom -rect_process.top, TRUE);
  732 + }
  733 + }
  734 + rect_statusInfo.left = rect_process.right + 5;
  735 + rect_statusInfo.top = 0;
  736 + rect_statusInfo.right = Statuswidth;
  737 + rect_statusInfo.bottom = Statusheigh;
  738 + MoveWindow(GetDlgItem(ghWndStatusDlg, IDC_STATUSEDIT), rect_statusInfo.left, rect_statusInfo.top,
  739 + rect_statusInfo.right-rect_statusInfo.left, rect_statusInfo.bottom-rect_statusInfo.top, TRUE);
  740 + return TRUE;
  741 +}
@@ -75,70 +75,61 @@ HISTORY: Date: Author: Comment: @@ -75,70 +75,61 @@ HISTORY: Date: Author: Comment:
75 -----------------------------------------------------------------------------*/ 75 -----------------------------------------------------------------------------*/
76 void TransferRepeatCreate(LPCTSTR lpszFileName, DWORD dwFrequency) 76 void TransferRepeatCreate(LPCTSTR lpszFileName, DWORD dwFrequency)
77 { 77 {
78 - HMENU hMenu;  
79 - UINT MenuFlags ;  
80 - DWORD dwFileSize;  
81 - DWORD dwMaxPackets;  
82 - DWORD dwPacketSize;  
83 - DWORD dwRead;  
84 -  
85 - //  
86 - // open the file  
87 - //  
88 - hFile = OpenTheFile(lpszFileName);  
89 - if (hFile == INVALID_HANDLE_VALUE)  
90 - return;  
91 -  
92 - //  
93 - // modify transfer menu  
94 - //  
95 - hMenu = GetMenu(ghwndMain);  
96 - MenuFlags = MF_DISABLED | MF_GRAYED;  
97 - EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags);  
98 - EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags);  
99 - EnableMenuItem(hMenu, ID_TRANSFER_ABORTREPEATEDSENDING, MF_ENABLED);  
100 - EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags);  
101 -  
102 - //  
103 - // enable abort button and progress bar  
104 - //  
105 - SetWindowText(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), "Abort Tx");  
106 - ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), SW_SHOW);  
107 -  
108 - if (!GetTransferSizes(hFile, &dwPacketSize, &dwMaxPackets, &dwFileSize)) {  
109 - TransferRepeatDestroy();  
110 - return;  
111 - } 78 + HMENU hMenu;
  79 + UINT MenuFlags;
  80 + DWORD dwFileSize;
  81 + DWORD dwMaxPackets;
  82 + DWORD dwPacketSize;
  83 + DWORD dwRead;
  84 +
  85 + // open the file
  86 + hFile = OpenTheFile(lpszFileName);
  87 + if (hFile == INVALID_HANDLE_VALUE)
  88 + return;
  89 + // modify transfer menu
  90 + hMenu = GetMenu(ghwndMain);
  91 + MenuFlags = MF_DISABLED | MF_GRAYED;
  92 + EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags);
  93 + EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags);
  94 + EnableMenuItem(hMenu, ID_TRANSFER_ABORTREPEATEDSENDING, MF_ENABLED);
  95 + EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags);
  96 + // enable abort button and progress bar
  97 + SetWindowText(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), "Abort Tx");
  98 + EnableWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), TRUE);
  99 + if (!GetTransferSizes(hFile, &dwPacketSize, &dwMaxPackets, &dwFileSize))
  100 + {
  101 + TransferRepeatDestroy();
  102 + return;
  103 + }
  104 + lpBuf = HeapAlloc(ghWriterHeap, 0, dwFileSize);
  105 + if (lpBuf == NULL)
  106 + {
  107 + ErrorReporter("HeapAlloc (data block from writer heap).\r\nFile is too large");
  108 + TransferRepeatDestroy();
  109 + return;
  110 + }
  111 + if (!ReadFile(hFile, lpBuf, dwFileSize, &dwRead, NULL))
  112 + {
  113 + ErrorReporter("Can't read from file\n");
  114 + TransferRepeatDestroy();
  115 + }
  116 + if (dwRead != dwFileSize)
  117 + ErrorReporter("Didn't read entire file\n");
  118 + mmTimer = timeSetEvent((UINT) dwFrequency, 10, TransferRepeatDo, dwRead, TIME_PERIODIC);
  119 + if (mmTimer == (MMRESULT) NULL)
  120 + {
  121 + ErrorReporter("Could not create mm timer");
  122 + TransferRepeatDestroy();
  123 + }
  124 + else
  125 + {
  126 + g_appdata.fRepeating = TRUE;
  127 + OutputDebugString("Timer setup.\n");
  128 + }
  129 + return;
  130 +}
112 131
113 - // Allocate a buffer  
114 - lpBuf = HeapAlloc(ghWriterHeap, 0, dwFileSize);  
115 - if (lpBuf == NULL) {  
116 - ErrorReporter("HeapAlloc (data block from writer heap).\r\nFile is too large");  
117 - TransferRepeatDestroy();  
118 - return;  
119 - }  
120 132
121 - // fill the buffer  
122 - if (!ReadFile(hFile, lpBuf, dwFileSize, &dwRead, NULL)) {  
123 - ErrorReporter("Can't read from file\n");  
124 - TransferRepeatDestroy();  
125 - }  
126 -  
127 - if (dwRead != dwFileSize)  
128 - ErrorReporter("Didn't read entire file\n");  
129 -  
130 - mmTimer = timeSetEvent((UINT) dwFrequency, 10, TransferRepeatDo, dwRead, TIME_PERIODIC);  
131 - if (mmTimer == (MMRESULT) NULL) {  
132 - ErrorReporter("Could not create mm timer");  
133 - TransferRepeatDestroy();  
134 - }  
135 - else {  
136 - TTYInfo.fRepeating = TRUE;  
137 - OutputDebugString("Timer setup.\n");  
138 - }  
139 -  
140 - return;  
141 -}  
142 133
143 /*----------------------------------------------------------------------------- 134 /*-----------------------------------------------------------------------------
144 135
@@ -176,7 +167,7 @@ void TransferRepeatDestroy() @@ -176,7 +167,7 @@ void TransferRepeatDestroy()
176 if (!HeapFree(ghWriterHeap, 0, lpBuf)) 167 if (!HeapFree(ghWriterHeap, 0, lpBuf))
177 ErrorReporter("HeapFree (data block from writer heap)"); 168 ErrorReporter("HeapFree (data block from writer heap)");
178 169
179 - TTYInfo.fRepeating = FALSE; 170 + g_appdata.fRepeating = FALSE;
180 OutputDebugString("Repeated transfer destroyed.\r\n"); 171 OutputDebugString("Repeated transfer destroyed.\r\n");
181 172
182 // 173 //
@@ -188,8 +179,7 @@ void TransferRepeatDestroy() @@ -188,8 +179,7 @@ void TransferRepeatDestroy()
188 EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags); 179 EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags);
189 EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags); 180 EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags);
190 EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags); 181 EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags);
191 -  
192 - ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), SW_HIDE); 182 + EnableWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), FALSE);
193 183
194 return; 184 return;
195 } 185 }
@@ -214,8 +204,7 @@ void CALLBACK TransferRepeatDo( UINT uTimerId, @@ -214,8 +204,7 @@ void CALLBACK TransferRepeatDo( UINT uTimerId,
214 DWORD dwRes2) 204 DWORD dwRes2)
215 { 205 {
216 if (!WriterAddNewNodeTimeout(WRITE_BLOCK, dwFileSize, 0, lpBuf, 0, 0, 10)) 206 if (!WriterAddNewNodeTimeout(WRITE_BLOCK, dwFileSize, 0, lpBuf, 0, 0, 10))
217 - PostMessage(ghwndMain, WM_COMMAND, ID_TRANSFER_ABORTSENDING, MAKELPARAM(IDC_ABORTBTN, 0) );  
218 - 207 + PostMessage(ghWndStatusDlg, WM_COMMAND, IDC_ABORTBTN,0);
219 return; 208 return;
220 } 209 }
221 210
@@ -254,7 +243,6 @@ void TransferFileTextStart(LPCTSTR lpstrFileName) @@ -254,7 +243,6 @@ void TransferFileTextStart(LPCTSTR lpstrFileName)
254 MenuFlags = MF_DISABLED | MF_GRAYED; 243 MenuFlags = MF_DISABLED | MF_GRAYED;
255 EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags); 244 EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags);
256 EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags); 245 EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags);
257 - EnableMenuItem(hMenu, ID_TRANSFER_ABORTSENDING, MF_ENABLED);  
258 EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags); 246 EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags);
259 247
260 // 248 //
@@ -262,7 +250,7 @@ void TransferFileTextStart(LPCTSTR lpstrFileName) @@ -262,7 +250,7 @@ void TransferFileTextStart(LPCTSTR lpstrFileName)
262 // 250 //
263 gfAbortTransfer = FALSE; 251 gfAbortTransfer = FALSE;
264 SetWindowText(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), "停止下载"); 252 SetWindowText(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), "停止下载");
265 - ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), SW_SHOW); 253 + EnableWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), TRUE);
266 ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_TRANSFERPROGRESS), SW_SHOW); 254 ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_TRANSFERPROGRESS), SW_SHOW);
267 255
268 // start the transfer thread 256 // start the transfer thread
@@ -279,7 +267,7 @@ void TransferFileTextStart(LPCTSTR lpstrFileName) @@ -279,7 +267,7 @@ void TransferFileTextStart(LPCTSTR lpstrFileName)
279 TransferFileTextEnd(); 267 TransferFileTextEnd();
280 } 268 }
281 else 269 else
282 - TTYInfo.fTransferring = TRUE; 270 + g_appdata.fTransferring = TRUE;
283 271
284 return; 272 return;
285 } 273 }
@@ -316,7 +304,7 @@ void TransferFileTextEnd() @@ -316,7 +304,7 @@ void TransferFileTextEnd()
316 CloseHandle(hTransferAbortEvent); 304 CloseHandle(hTransferAbortEvent);
317 CloseHandle(hTransferThread); 305 CloseHandle(hTransferThread);
318 306
319 - TTYInfo.fTransferring = FALSE; 307 + g_appdata.fTransferring = FALSE;
320 308
321 // 309 //
322 // enable transfer menu 310 // enable transfer menu
@@ -326,12 +314,11 @@ void TransferFileTextEnd() @@ -326,12 +314,11 @@ void TransferFileTextEnd()
326 EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags); 314 EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags);
327 EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags); 315 EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags);
328 EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags); 316 EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags);
329 - EnableMenuItem(hMenu, ID_TRANSFER_ABORTSENDING, MF_DISABLED | MF_GRAYED);  
330 317
331 // 318 //
332 // disable abort button and progress bar 319 // disable abort button and progress bar
333 // 320 //
334 - ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), SW_HIDE); 321 + EnableWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), FALSE);
335 ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_TRANSFERPROGRESS), SW_HIDE); 322 ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_TRANSFERPROGRESS), SW_HIDE);
336 323
337 // 324 //
@@ -389,7 +376,7 @@ void ReceiveFileText(LPCTSTR lpstrFileName) @@ -389,7 +376,7 @@ void ReceiveFileText(LPCTSTR lpstrFileName)
389 // 376 //
390 gfAbortTransfer = FALSE; 377 gfAbortTransfer = FALSE;
391 SetWindowText(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), "Close Capture"); 378 SetWindowText(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), "Close Capture");
392 - ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), SW_SHOW); 379 + EnableWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), TRUE);
393 ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_TRANSFERPROGRESS), SW_SHOW); 380 ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_TRANSFERPROGRESS), SW_SHOW);
394 381
395 // 382 //
@@ -402,7 +389,7 @@ void ReceiveFileText(LPCTSTR lpstrFileName) @@ -402,7 +389,7 @@ void ReceiveFileText(LPCTSTR lpstrFileName)
402 // 389 //
403 hMenu = GetMenu(ghwndMain); 390 hMenu = GetMenu(ghwndMain);
404 MenuFlags = MF_ENABLED; 391 MenuFlags = MF_ENABLED;
405 - ChangeConnection(ghwndMain, TTYInfo.fConnected); 392 + ChangeConnection(ghwndMain, g_appdata.fConnected);
406 393
407 // 394 //
408 // enable transfer menu 395 // enable transfer menu
@@ -414,7 +401,7 @@ void ReceiveFileText(LPCTSTR lpstrFileName) @@ -414,7 +401,7 @@ void ReceiveFileText(LPCTSTR lpstrFileName)
414 // 401 //
415 // hide abort button and progress bar 402 // hide abort button and progress bar
416 // 403 //
417 - ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), SW_HIDE); 404 + EnableWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), FALSE);
418 ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_TRANSFERPROGRESS), SW_HIDE); 405 ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_TRANSFERPROGRESS), SW_HIDE);
419 406
420 gfAbortTransfer = FALSE; 407 gfAbortTransfer = FALSE;
@@ -841,8 +828,7 @@ DWORD WINAPI TransferThreadProc(LPVOID lpV) @@ -841,8 +828,7 @@ DWORD WINAPI TransferThreadProc(LPVOID lpV)
841 // If I am done without user intervention, then post the 828 // If I am done without user intervention, then post the
842 // "abort" message myself. This will cause the main thread to 829 // "abort" message myself. This will cause the main thread to
843 // clean up after the file transfer. 830 // clean up after the file transfer.
844 - if (!fAborting)  
845 - PostMessage(ghwndMain, WM_COMMAND, ID_TRANSFER_ABORTSENDING, 0); 831 + //if (!fAborting) PostMessage(ghwndMain, WM_COMMAND, ID_TRANSFER_ABORTSENDING, 0);
846 832
847 // exit thread 833 // exit thread
848 834
@@ -48,6 +48,9 @@ @@ -48,6 +48,9 @@
48 // 48 //
49 // data structures 49 // data structures
50 // 50 //
  51 +
  52 +#define MAX_DEVICES_NUM 25
  53 +
51 struct TTYInfoStruct 54 struct TTYInfoStruct
52 { 55 {
53 HANDLE hCommPort, hReaderStatus, hWriter ; 56 HANDLE hCommPort, hReaderStatus, hWriter ;
@@ -80,68 +83,70 @@ struct TTYInfoStruct @@ -80,68 +83,70 @@ struct TTYInfoStruct
80 BYTE unOpenedPortAry[255]; 83 BYTE unOpenedPortAry[255];
81 BOOL DownloadReday; 84 BOOL DownloadReday;
82 DWORD tickcountFinish; //Íê³ÉÏÂÔØµÄʱ¼ä 85 DWORD tickcountFinish; //Íê³ÉÏÂÔØµÄʱ¼ä
  86 + HWND hBtnAbortSend[50];
  87 + HWND hprocessFlash[50];
83 88
84 89
85 -} TTYInfo; 90 +} g_appdata;
86 91
87 // 92 //
88 // macros ( for easier readability ) 93 // macros ( for easier readability )
89 // 94 //
90 -//#define COMDEV(TTYInfo) (TTYInfo.hCommPort)  
91 -//#define CURSORSTATE(TTYInfo) (TTYInfo.wCursorState)  
92 -//#define PORT(TTYInfo) (TTYInfo.bPort)  
93 -//#define TTYInfo.Screen (TTYInfo.Screen)  
94 -//#define CONNECTED(TTYInfo) (TTYInfo.fConnected)  
95 -//#define TTYInfo.fTransferring (TTYInfo.fTransferring)  
96 -//#define TTYInfo.fRepeating (TTYInfo.fRepeating)  
97 -//#define TTYInfo.fLocalEcho (TTYInfo.fLocalEcho)  
98 -//#define TTYInfo.fNewLine (TTYInfo.fNewLine)  
99 -//#define TTYInfo.fAutowrap TTYInfo.fAutowrap  
100 -//#define TTYInfo.bByteSize TTYInfo.bByteSize  
101 -//#define TTYInfo.bParity TTYInfo.bParity  
102 -//#define TTYInfo.bStopBits TTYInfo.bStopBits  
103 -//#define TTYInfo.dwBaudRate TTYInfo.dwBaudRate  
104 -//#define TTYInfo.hTTYFont TTYInfo.hTTYFont  
105 -//#define TTYInfo.lfTTYFont TTYInfo.lfTTYFont  
106 -//#define TTYInfo.rgbFGColor TTYInfo.rgbFGColor  
107 -//#define TTYInfo.rgbBGColor TTYInfo.rgbBGColor  
108 -//#define TTYInfo.xSize TTYInfo.xSize  
109 -//#define TTYInfo.ySize TTYInfo.ySize  
110 -//#define TTYInfo.xScroll TTYInfo.xScroll  
111 -//#define TTYInfo.yScroll TTYInfo.yScroll  
112 -//#define TTYInfo.xOffset TTYInfo.xOffset  
113 -//#define TTYInfo.yOffset TTYInfo.yOffset  
114 -//#define TTYInfo.nColumn TTYInfo.nColumn  
115 -//#define TTYInfo.nRow TTYInfo.nRow  
116 -//#define TTYInfo.xChar TTYInfo.xChar  
117 -//#define TTYInfo.yChar TTYInfo.yChar  
118 -//#define TTYInfo.fDisplayErrors TTYInfo.fDisplayErrors  
119 -//#define TTYInfo.timeoutsorig TTYInfo.timeoutsorig  
120 -//#define TTYInfo.timeoutsnew TTYInfo.timeoutsnew  
121 -//#define TTYInfo.hWriter TTYInfo.hWriter  
122 -//#define TTYInfo.hReaderStatus TTYInfo.hReaderStatus  
123 -//#define TTYInfo.dwEventFlags TTYInfo.dwEventFlags  
124 -//#define TTYInfo.chFlag TTYInfo.chFlag  
125 -//#define SCREENCHAR( x, col, row ) TTYInfo.Screen[row * MAXCOLS + col]  
126 -  
127 -//#define TTYInfo.fDtrControl TTYInfo.fDtrControl  
128 -//#define TTYInfo.fRtsControl TTYInfo.fRtsControl  
129 -//#define TTYInfo.chXON TTYInfo.chXON  
130 -//#define TTYInfo.chXOFF TTYInfo.chXOFF  
131 -//#define TTYInfo.wXONLimit TTYInfo.wXONLimit  
132 -//#define TTYInfo.wXOFFLimit TTYInfo.wXOFFLimit  
133 -//#define TTYInfo.fCTSOutFlow TTYInfo.fCTSOutFlow  
134 -//#define TTYInfo.fDSROutFlow TTYInfo.fDSROutFlow  
135 -//#define TTYInfo.fDSRInFlow TTYInfo.fDSRInFlow  
136 -//#define TTYInfo.fXonXoffOutFlow TTYInfo.fXonXoffOutFlow  
137 -//#define TTYInfo.fXonXoffInFlow TTYInfo.fXonXoffInFlow  
138 -//#define TTYInfo.fTXafterXoffSent TTYInfo.fTXafterXoffSent 95 +//#define COMDEV(g_appdata) (g_appdata.hCommPort)
  96 +//#define CURSORSTATE(g_appdata) (g_appdata.wCursorState)
  97 +//#define PORT(g_appdata) (g_appdata.bPort)
  98 +//#define g_appdata.Screen (g_appdata.Screen)
  99 +//#define CONNECTED(g_appdata) (g_appdata.fConnected)
  100 +//#define g_appdata.fTransferring (g_appdata.fTransferring)
  101 +//#define g_appdata.fRepeating (g_appdata.fRepeating)
  102 +//#define g_appdata.fLocalEcho (g_appdata.fLocalEcho)
  103 +//#define g_appdata.fNewLine (g_appdata.fNewLine)
  104 +//#define g_appdata.fAutowrap g_appdata.fAutowrap
  105 +//#define g_appdata.bByteSize g_appdata.bByteSize
  106 +//#define g_appdata.bParity g_appdata.bParity
  107 +//#define g_appdata.bStopBits g_appdata.bStopBits
  108 +//#define g_appdata.dwBaudRate g_appdata.dwBaudRate
  109 +//#define g_appdata.hTTYFont g_appdata.hTTYFont
  110 +//#define g_appdata.lfTTYFont g_appdata.lfTTYFont
  111 +//#define g_appdata.rgbFGColor g_appdata.rgbFGColor
  112 +//#define g_appdata.rgbBGColor g_appdata.rgbBGColor
  113 +//#define g_appdata.xSize g_appdata.xSize
  114 +//#define g_appdata.ySize g_appdata.ySize
  115 +//#define g_appdata.xScroll g_appdata.xScroll
  116 +//#define g_appdata.yScroll g_appdata.yScroll
  117 +//#define g_appdata.xOffset g_appdata.xOffset
  118 +//#define g_appdata.yOffset g_appdata.yOffset
  119 +//#define g_appdata.nColumn g_appdata.nColumn
  120 +//#define g_appdata.nRow g_appdata.nRow
  121 +//#define g_appdata.xChar g_appdata.xChar
  122 +//#define g_appdata.yChar g_appdata.yChar
  123 +//#define g_appdata.fDisplayErrors g_appdata.fDisplayErrors
  124 +//#define g_appdata.timeoutsorig g_appdata.timeoutsorig
  125 +//#define g_appdata.timeoutsnew g_appdata.timeoutsnew
  126 +//#define g_appdata.hWriter g_appdata.hWriter
  127 +//#define g_appdata.hReaderStatus g_appdata.hReaderStatus
  128 +//#define g_appdata.dwEventFlags g_appdata.dwEventFlags
  129 +//#define g_appdata.chFlag g_appdata.chFlag
  130 +//#define SCREENCHAR( x, col, row ) g_appdata.Screen[row * MAXCOLS + col]
  131 +
  132 +//#define g_appdata.fDtrControl g_appdata.fDtrControl
  133 +//#define g_appdata.fRtsControl g_appdata.fRtsControl
  134 +//#define g_appdata.chXON g_appdata.chXON
  135 +//#define g_appdata.chXOFF g_appdata.chXOFF
  136 +//#define g_appdata.wXONLimit g_appdata.wXONLimit
  137 +//#define g_appdata.wXOFFLimit g_appdata.wXOFFLimit
  138 +//#define g_appdata.fCTSOutFlow g_appdata.fCTSOutFlow
  139 +//#define g_appdata.fDSROutFlow g_appdata.fDSROutFlow
  140 +//#define g_appdata.fDSRInFlow g_appdata.fDSRInFlow
  141 +//#define g_appdata.fXonXoffOutFlow g_appdata.fXonXoffOutFlow
  142 +//#define g_appdata.fXonXoffInFlow g_appdata.fXonXoffInFlow
  143 +//#define g_appdata.fTXafterXoffSent g_appdata.fTXafterXoffSent
139 // 144 //
140 -//#define TTYInfo.fNoReading TTYInfo.fNoReading  
141 -//#define TTYInfo.fNoWriting TTYInfo.fNoWriting  
142 -//#define TTYInfo.fNoEvents TTYInfo.fNoEvents  
143 -//#define TTYInfo.fNoStatus TTYInfo.fNoStatus  
144 -//#define TTYInfo.fDisplayTimeouts TTYInfo.fDisplayTimeouts) 145 +//#define g_appdata.fNoReading g_appdata.fNoReading
  146 +//#define g_appdata.fNoWriting g_appdata.fNoWriting
  147 +//#define g_appdata.fNoEvents g_appdata.fNoEvents
  148 +//#define g_appdata.fNoStatus g_appdata.fNoStatus
  149 +//#define g_appdata.fDisplayTimeouts g_appdata.fDisplayTimeouts)
145 150
146 151
147 152
@@ -432,7 +432,7 @@ void WriterGeneric(char * lpBuf, DWORD dwToWrite) @@ -432,7 +432,7 @@ void WriterGeneric(char * lpBuf, DWORD dwToWrite)
432 // 432 //
433 // If no writing is allowed, then just return 433 // If no writing is allowed, then just return
434 // 434 //
435 - if (TTYInfo.fNoWriting) 435 + if (g_appdata.fNoWriting)
436 return ; 436 return ;
437 437
438 // 438 //
@@ -448,7 +448,7 @@ void WriterGeneric(char * lpBuf, DWORD dwToWrite) @@ -448,7 +448,7 @@ void WriterGeneric(char * lpBuf, DWORD dwToWrite)
448 // 448 //
449 // issue write 449 // issue write
450 // 450 //
451 - if (!WriteFile(TTYInfo.hCommPort, lpBuf, dwToWrite, &dwWritten, &osWrite)) { 451 + if (!WriteFile(g_appdata.hCommPort, lpBuf, dwToWrite, &dwWritten, &osWrite)) {
452 if (GetLastError() == ERROR_IO_PENDING) { 452 if (GetLastError() == ERROR_IO_PENDING) {
453 // 453 //
454 // write is delayed 454 // write is delayed
@@ -461,7 +461,7 @@ void WriterGeneric(char * lpBuf, DWORD dwToWrite) @@ -461,7 +461,7 @@ void WriterGeneric(char * lpBuf, DWORD dwToWrite)
461 // 461 //
462 case WAIT_OBJECT_0: 462 case WAIT_OBJECT_0:
463 SetLastError(ERROR_SUCCESS); 463 SetLastError(ERROR_SUCCESS);
464 - if (!GetOverlappedResult(TTYInfo.hCommPort, &osWrite, &dwWritten, FALSE)) { 464 + if (!GetOverlappedResult(g_appdata.hCommPort, &osWrite, &dwWritten, FALSE)) {
465 if (GetLastError() == ERROR_OPERATION_ABORTED) 465 if (GetLastError() == ERROR_OPERATION_ABORTED)
466 UpdateStatus("Write aborted\r\n"); 466 UpdateStatus("Write aborted\r\n");
467 else 467 else
@@ -469,7 +469,7 @@ void WriterGeneric(char * lpBuf, DWORD dwToWrite) @@ -469,7 +469,7 @@ void WriterGeneric(char * lpBuf, DWORD dwToWrite)
469 } 469 }
470 470
471 if (dwWritten != dwToWrite) { 471 if (dwWritten != dwToWrite) {
472 - if ((GetLastError() == ERROR_SUCCESS) && TTYInfo.fDisplayTimeouts) 472 + if ((GetLastError() == ERROR_SUCCESS) && g_appdata.fDisplayTimeouts)
473 UpdateStatus("Write timed out. (overlapped)\r\n"); 473 UpdateStatus("Write timed out. (overlapped)\r\n");
474 else 474 else
475 ErrorReporter("Error writing data to port (overlapped)"); 475 ErrorReporter("Error writing data to port (overlapped)");
@@ -24,8 +24,6 @@ @@ -24,8 +24,6 @@
24 #define IDC_LOCALECHOCHK 1008 24 #define IDC_LOCALECHOCHK 1008
25 #define IDC_DISPLAYERRORSCHK 1009 25 #define IDC_DISPLAYERRORSCHK 1009
26 #define IDC_FONTBTN 1010 26 #define IDC_FONTBTN 1010
27 -#define IDC_ABORTBTN 1011  
28 -#define IDC_TRANSFERPROGRESS 1013  
29 #define IDC_MODEMSTATUSGRP 1018 27 #define IDC_MODEMSTATUSGRP 1018
30 #define IDC_COMMEVENTSBTN 1019 28 #define IDC_COMMEVENTSBTN 1019
31 #define IDC_LFBTN 1032 29 #define IDC_LFBTN 1032
@@ -52,6 +50,8 @@ @@ -52,6 +50,8 @@
52 #define IDC_BUTTON_CONNECT_UART 1085 50 #define IDC_BUTTON_CONNECT_UART 1085
53 #define IDC_BUTTON2 1086 51 #define IDC_BUTTON2 1086
54 #define IDC_BUTTON2_SEC_BINFILE 1086 52 #define IDC_BUTTON2_SEC_BINFILE 1086
  53 +#define IDC_ABORTBTN 1100
  54 +#define IDC_TRANSFERPROGRESS 1200
55 #define ID_FILE_EXIT 40001 55 #define ID_FILE_EXIT 40001
56 #define ID_HELP_ABOUTMTTTY 40002 56 #define ID_HELP_ABOUTMTTTY 40002
57 #define ID_FILE_CONNECT 40004 57 #define ID_FILE_CONNECT 40004
@@ -60,7 +60,6 @@ @@ -60,7 +60,6 @@
60 #define ID_TRANSFER_SENDFILETEXT 40010 60 #define ID_TRANSFER_SENDFILETEXT 40010
61 #define ID_TRANSFER_RECEIVEFILETEXT 40011 61 #define ID_TRANSFER_RECEIVEFILETEXT 40011
62 #define ID_TRANSFER_SENDREPEATEDLY 40012 62 #define ID_TRANSFER_SENDREPEATEDLY 40012
63 -#define ID_TRANSFER_ABORTSENDING 40016  
64 #define ID_TRANSFER_ABORTREPEATEDSENDING 40018 63 #define ID_TRANSFER_ABORTREPEATEDSENDING 40018
65 #define IDC_STATIC 65535 64 #define IDC_STATIC 65535
66 65
Please register or login to post a comment