Commit a01030be4069e3c38510e8d4de87bc97e5997e2c

Authored by xiemeng
1 parent 261b3bdf

增加__OPTEK_EDIT__ 区分optek编辑部分

... ... @@ -34,8 +34,6 @@
34 34 #include <commctrl.h>
35 35 #include "mttty.h"
36 36
37   -#pragma comment(lib,"comctl32.lib")
38   -
39 37 /*
40 38 Prototypes for functions called only within this file
41 39 */
... ... @@ -51,13 +49,14 @@ DWORD WaitForThreads( DWORD );
51 49 */
52 50 COMMTIMEOUTS gTimeoutsDefault = { 0x01, 0, 0, 0, 0 };
53 51
  52 +#ifdef __OPTEK_EDIT__
54 53 extern char szFileName[MAX_PATH];
55 54
56 55 void oem_init(void)
57 56 {
58 57 memset(szFileName,0,sizeof(szFileName));
59 58 }
60   -
  59 +#endif
61 60
62 61 /*-----------------------------------------------------------------------------
63 62
... ... @@ -75,7 +74,9 @@ void GlobalInitialize()
75 74 {
76 75 int cyMenuHeight, cyCaptionHeight, cyFrameHeight;
77 76
  77 +#ifdef __OPTEK_EDIT__
78 78 oem_init();
  79 +#endif
79 80 //
80 81 // critical sections in status reporting & node management
81 82 //
... ... @@ -213,7 +214,9 @@ void InitNewFont(LOGFONT LogFont, COLORREF rgbColor)
213 214 YOFFSET( TTYInfo ) = YCHAR(TTYInfo) * ROW(TTYInfo);
214 215 }
215 216
  217 +#ifdef __OPTEK_EDIT__
216 218 extern DWORD BaudTable[];
  219 +#endif
217 220 /*-----------------------------------------------------------------------------
218 221
219 222 FUNCTION: InitTTYInfo
... ... @@ -238,7 +241,11 @@ BOOL InitTTYInfo()
238 241 LOCALECHO( TTYInfo ) = FALSE ;
239 242 CURSORSTATE( TTYInfo ) = CS_HIDE ;
240 243 PORT( TTYInfo ) = 1 ;
  244 +#ifdef __OPTEK_EDIT__
241 245 BAUDRATE( TTYInfo ) = BaudTable[2] ;
  246 +#else
  247 + BAUDRATE( TTYInfo ) = CBR_9600 ;
  248 +#endif
242 249 BYTESIZE( TTYInfo ) = 8 ;
243 250 PARITY( TTYInfo ) = NOPARITY ;
244 251 STOPBITS( TTYInfo ) = ONESTOPBIT ;
... ... @@ -289,7 +296,11 @@ BOOL InitTTYInfo()
289 296 //
290 297 // setup default font information
291 298 //
  299 +#ifdef __OPTEK_EDIT__
292 300 LFTTYFONT( TTYInfo ).lfHeight = 20 ;
  301 +#else
  302 + LFTTYFONT( TTYInfo ).lfHeight = 12 ;
  303 +#endif
293 304 LFTTYFONT( TTYInfo ).lfWidth = 0 ;
294 305 LFTTYFONT( TTYInfo ).lfEscapement = 0 ;
295 306 LFTTYFONT( TTYInfo ).lfOrientation = 0 ;
... ... @@ -297,13 +308,16 @@ BOOL InitTTYInfo()
297 308 LFTTYFONT( TTYInfo ).lfItalic = 0 ;
298 309 LFTTYFONT( TTYInfo ).lfUnderline = 0 ;
299 310 LFTTYFONT( TTYInfo ).lfStrikeOut = 0 ;
  311 +#ifdef __OPTEK_EDIT__
300 312 LFTTYFONT( TTYInfo ).lfCharSet = ANSI_CHARSET;//OEM_CHARSET ;
  313 +#else
  314 + LFTTYFONT( TTYInfo ).lfCharSet = OEM_CHARSET ;
  315 +#endif
301 316 LFTTYFONT( TTYInfo ).lfOutPrecision = OUT_DEFAULT_PRECIS ;
302 317 LFTTYFONT( TTYInfo ).lfClipPrecision = CLIP_DEFAULT_PRECIS ;
303 318 LFTTYFONT( TTYInfo ).lfQuality = DEFAULT_QUALITY ;
304 319 LFTTYFONT( TTYInfo ).lfPitchAndFamily = FIXED_PITCH | FF_MODERN ;
305 320 strcpy( LFTTYFONT( TTYInfo ).lfFaceName, "FixedSys" ) ;
306   -// strcpy( LFTTYFONT( TTYInfo ).lfFaceName, "Courier New" ) ;
307 321
308 322 InitNewFont( LFTTYFONT(TTYInfo), RGB(0,0,0));
309 323
... ... @@ -579,11 +593,14 @@ HISTORY: Date: Author: Comment:
579 593 -----------------------------------------------------------------------------*/
580 594 BOOL DisconnectOK()
581 595 {
  596 +#ifdef __OPTEK_EDIT__
582 597 char gszPort_Temp[20] = { 0 };
  598 +#endif
583 599 if (!CONNECTED(TTYInfo))
584 600 return TRUE;
585 601
586 602
  603 +#ifdef __OPTEK_EDIT__
587 604 GetDlgItemText(ghWndToolbarDlg, IDC_PORTCOMBO, gszPort, sizeof(gszPort));
588 605
589 606 if (gszPort[3] - '0' > 0 && gszPort[4] - '0' > 0)
... ... @@ -592,6 +609,7 @@ BOOL DisconnectOK()
592 609 memset(gszPort, 20, sizeof(char));
593 610 strcpy(gszPort, gszPort_Temp);
594 611 }
  612 +#endif
595 613
596 614 return ((MessageBox(ghwndMain, "OK to Disconnect?", gszPort, MB_YESNO)) == IDYES);
597 615 }
... ...
... ... @@ -25,7 +25,7 @@ STD_LIBS = libcmt.lib kernel32.lib \
25 25 user32.lib gdi32.lib \
26 26 comdlg32.lib
27 27 EXTRA_LIBS = winmm.lib comctl32.lib
28   -GLOBAL_DEP = mttty.h ttyinfo.h
  28 +GLOBAL_DEP = mttty.h
29 29 RC_DEP = resource.h mttty.ico \
30 30 mttty2.ico mttty3.ico \
31 31 mttty4.ico
... ...
... ... @@ -46,8 +46,9 @@ BOOL ScrollTTYHorz( HWND, WORD, WORD );
46 46 BOOL VersionCheck();
47 47 BOOL PaintTTY( HWND );
48 48
  49 +#ifdef __OPTEK_EDIT__
49 50 char szFileName[MAX_PATH];
50   -
  51 +#endif
51 52 /*-----------------------------------------------------------------------------
52 53
53 54 FUNCTION: WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
... ... @@ -150,7 +151,11 @@ BOOL InitializeApp(HINSTANCE hInst, int nShowCmd)
150 151 //
151 152 wc.lpfnWndProc = (WNDPROC) MTTTYWndProc;
152 153 wc.hInstance = hInst;
  154 +#ifdef __OPTEK_EDIT__
153 155 wc.hIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_TITLE));
  156 +#else
  157 + wc.hIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_APPICON));
  158 +#endif
154 159 wc.hCursor = LoadCursor(NULL, IDC_ARROW);
155 160 wc.lpszMenuName = MAKEINTRESOURCE(IDR_MTTTYMENU);
156 161 wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1) ;
... ... @@ -180,11 +185,19 @@ BOOL InitializeApp(HINSTANCE hInst, int nShowCmd)
180 185 //
181 186 // create main window
182 187 //
  188 +#ifdef __OPTEK_EDIT__
183 189 ghwndMain = CreateWindow("MTTTYClass", "OPTEK",
184 190 WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
185 191 STARTXWINDOW, STARTYWINDOW,
186 192 MAXXWINDOW, MAXYWINDOW,
187 193 NULL, NULL, hInst, NULL);
  194 +#else
  195 + ghwndMain = CreateWindow("MTTTYClass", "Multi-threaded TTY",
  196 + WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
  197 + STARTXWINDOW, STARTYWINDOW,
  198 + MAXXWINDOW, MAXYWINDOW,
  199 + NULL, NULL, hInst, NULL);
  200 +#endif
188 201
189 202 if (ghwndMain == NULL) {
190 203 GlobalCleanup();
... ... @@ -314,20 +327,24 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
314 327 break;
315 328
316 329 case WM_CLOSE:
317   - /* if (DisconnectOK()) {
318   - if (CONNECTED(TTYInfo)) {
319   - if (TRANSFERRING(TTYInfo))
320   - TransferFileTextEnd();
321   - BreakDownCommPort();
322   - }
323   - DestroyWindow(hwnd);
324   - }*/
  330 +#ifdef __OPTEK_EDIT__
  331 +
325 332 if (CONNECTED(TTYInfo)) {
326 333 if (TRANSFERRING(TTYInfo))
327 334 TransferFileTextEnd();
328 335 BreakDownCommPort();
329 336 }
330 337 DestroyWindow(hwnd);
  338 +#else
  339 + if (DisconnectOK()) {
  340 + if (CONNECTED(TTYInfo)) {
  341 + if (TRANSFERRING(TTYInfo))
  342 + TransferFileTextEnd();
  343 + BreakDownCommPort();
  344 + }
  345 + DestroyWindow(hwnd);
  346 + }
  347 +#endif
331 348 break;
332 349
333 350 default:
... ... @@ -363,7 +380,11 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
363 380
364 381 case ID_TRANSFER_SENDFILETEXT:
365 382 {
  383 +#ifdef __OPTEK_EDIT__
366 384 char * szFilter = "bin Files\0*.bin\0";
  385 +#else
  386 + char * szFilter = "Text Files\0*.TXT\0";
  387 +#endif
367 388 OPENFILENAME ofn = {0};
368 389
369 390 ofn.lStructSize = sizeof(OPENFILENAME);
... ... @@ -371,15 +392,22 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
371 392 ofn.lpstrFilter = szFilter;
372 393 ofn.lpstrFile = szFileName;
373 394 ofn.nMaxFile = MAX_PATH;
  395 +#ifdef __OPTEK_EDIT__
374 396 ofn.lpstrTitle = "Select file";
  397 +#else
  398 + ofn.lpstrTitle = "Send File";
  399 +#endif
375 400 ofn.Flags = OFN_FILEMUSTEXIST;
376 401
377 402 if (!GetOpenFileName(&ofn))
378 403 break;
379 404
  405 +#ifdef __OPTEK_EDIT__
380 406 UpdateStatus(szFileName);
381   - //if (TRUE)
382   - // TransferFileTextStart(szFileName);
  407 +#else
  408 + if (TRUE)
  409 + TransferFileTextStart(szFileName);
  410 +#endif
383 411 }
384 412 break;
385 413
... ... @@ -455,7 +483,9 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
455 483
456 484 // The following correspond to menu choices and buttons in the settings dlog
457 485 case IDC_FONTBTN:
  486 +#ifdef __OPTEK_EDIT__
458 487 case IDC_SENDBTN:
  488 +#endif
459 489 case IDC_COMMEVENTSBTN:
460 490 case IDC_FLOWCONTROLBTN:
461 491 case IDC_TIMEOUTSBTN:
... ... @@ -573,19 +603,20 @@ BOOL NEAR ScrollTTYVert( HWND hWnd, WORD wScrollCmd, WORD wScrollPos )
573 603
574 604 if ((YOFFSET( TTYInfo ) + nScrollAmt) < 0)
575 605 nScrollAmt = -YOFFSET( TTYInfo ) ;
576   -
577   -
578   -
  606 +#ifdef __OPTEK_EDIT__
579 607 if (nScrollAmt != 0)
580 608 {
581 609 YOFFSET( TTYInfo ) = YOFFSET( TTYInfo ) + nScrollAmt ;
582   -
583 610 SetScrollPos( hWnd, SB_VERT, YOFFSET( TTYInfo ), TRUE ) ;
584   -
585 611 ScrollWindowEx( hWnd, 0, -nScrollAmt, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE) ;
586 612 }
  613 +#else
  614 + ScrollWindowEx( hWnd, 0, -nScrollAmt, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE) ;
587 615
  616 + YOFFSET( TTYInfo ) = YOFFSET( TTYInfo ) + nScrollAmt ;
588 617
  618 + SetScrollPos( hWnd, SB_VERT, YOFFSET( TTYInfo ), TRUE ) ;
  619 +#endif
589 620 return ( TRUE ) ;
590 621
591 622 } // end of ScrollTTYVert()
... ...
... ... @@ -19,7 +19,142 @@
19 19 //
20 20
21 21 #include "resource.h"
22   -#include "ttyinfo.h"
  22 +//#include "ttyinfo.h"
  23 +#define __OPTEK_EDIT__
  24 +
  25 +#ifdef __OPTEK_EDIT__
  26 +#pragma comment(lib,"comctl32.lib")
  27 +#pragma comment(lib,"winmm.lib")
  28 +#endif
  29 +
  30 +
  31 +//
  32 +// constant definitions
  33 +//
  34 +
  35 +//
  36 +// hard coded maximum number of ports
  37 +//
  38 +#ifdef __OPTEK_EDIT__
  39 +#define MAXPORTS 32
  40 +#else
  41 +#define MAXPORTS 4
  42 +#endif
  43 +
  44 +//
  45 +// terminal size
  46 +//
  47 +#define MAXROWS 50
  48 +#define MAXCOLS 80
  49 +
  50 +//
  51 +// cursor states
  52 +//
  53 +#define CS_HIDE 0x00
  54 +#define CS_SHOW 0x01
  55 +
  56 +//
  57 +// ascii definitions
  58 +//
  59 +#define ASCII_BEL 0x07
  60 +#define ASCII_BS 0x08
  61 +#define ASCII_LF 0x0A
  62 +#define ASCII_CR 0x0D
  63 +#define ASCII_XON 0x11
  64 +#define ASCII_XOFF 0x13
  65 +
  66 +//
  67 +// data structures
  68 +//
  69 +struct TTYInfoStruct
  70 +{
  71 + HANDLE hCommPort, hReaderStatus, hWriter ;
  72 + DWORD dwEventFlags;
  73 + CHAR Screen[MAXCOLS * MAXROWS];
  74 + CHAR chFlag, chXON, chXOFF;
  75 + WORD wXONLimit, wXOFFLimit;
  76 + DWORD fRtsControl;
  77 + DWORD fDtrControl;
  78 + BOOL fConnected, fTransferring, fRepeating,
  79 + fLocalEcho, fNewLine,
  80 + fDisplayErrors, fAutowrap,
  81 + fCTSOutFlow, fDSROutFlow, fDSRInFlow,
  82 + fXonXoffOutFlow, fXonXoffInFlow,
  83 + fTXafterXoffSent,
  84 + fNoReading, fNoWriting, fNoEvents, fNoStatus,
  85 + fDisplayTimeouts;
  86 + BYTE bPort, bByteSize, bParity, bStopBits ;
  87 + DWORD dwBaudRate ;
  88 + WORD wCursorState ;
  89 + HFONT hTTYFont ;
  90 + LOGFONT lfTTYFont ;
  91 + DWORD rgbFGColor ;
  92 + COMMTIMEOUTS timeoutsorig;
  93 + COMMTIMEOUTS timeoutsnew;
  94 + int xSize, ySize, xScroll, yScroll, xOffset, yOffset,
  95 + nColumn, nRow, xChar, yChar , nCharPos;
  96 +
  97 +} TTYInfo;
  98 +
  99 +//
  100 +// macros ( for easier readability )
  101 +//
  102 +#define COMDEV( x ) (x.hCommPort)
  103 +#define CURSORSTATE( x ) (x.wCursorState)
  104 +#define PORT( x ) (x.bPort)
  105 +#define SCREEN( x ) (x.Screen)
  106 +#define CONNECTED( x ) (x.fConnected)
  107 +#define TRANSFERRING( x ) (x.fTransferring)
  108 +#define REPEATING( x ) (x.fRepeating)
  109 +#define LOCALECHO( x ) (x.fLocalEcho)
  110 +#define NEWLINE( x ) (x.fNewLine)
  111 +#define AUTOWRAP( x ) (x.fAutowrap)
  112 +#define BYTESIZE( x ) (x.bByteSize)
  113 +#define PARITY( x ) (x.bParity)
  114 +#define STOPBITS( x ) (x.bStopBits)
  115 +#define BAUDRATE( x ) (x.dwBaudRate)
  116 +#define HTTYFONT( x ) (x.hTTYFont)
  117 +#define LFTTYFONT( x ) (x.lfTTYFont)
  118 +#define FGCOLOR( x ) (x.rgbFGColor)
  119 +#define XSIZE( x ) (x.xSize)
  120 +#define YSIZE( x ) (x.ySize)
  121 +#define XSCROLL( x ) (x.xScroll)
  122 +#define YSCROLL( x ) (x.yScroll)
  123 +#define XOFFSET( x ) (x.xOffset)
  124 +#define YOFFSET( x ) (x.yOffset)
  125 +#define COLUMN( x ) (x.nColumn)
  126 +#define ROW( x ) (x.nRow)
  127 +#define XCHAR( x ) (x.xChar)
  128 +#define YCHAR( x ) (x.yChar)
  129 +#define DISPLAYERRORS( x ) (x.fDisplayErrors)
  130 +#define TIMEOUTSORIG( x ) (x.timeoutsorig)
  131 +#define TIMEOUTSNEW( x ) (x.timeoutsnew)
  132 +#define WRITERTHREAD( x ) (x.hWriter)
  133 +#define READSTATTHREAD( x ) (x.hReaderStatus)
  134 +#define EVENTFLAGS( x ) (x.dwEventFlags)
  135 +#define FLAGCHAR( x ) (x.chFlag)
  136 +#define SCREENCHAR( x, col, row ) (x.Screen[row * MAXCOLS + col])
  137 +
  138 +#define DTRCONTROL( x ) (x.fDtrControl)
  139 +#define RTSCONTROL( x ) (x.fRtsControl)
  140 +#define XONCHAR( x ) (x.chXON)
  141 +#define XOFFCHAR( x ) (x.chXOFF)
  142 +#define XONLIMIT( x ) (x.wXONLimit)
  143 +#define XOFFLIMIT( x ) (x.wXOFFLimit)
  144 +#define CTSOUTFLOW( x ) (x.fCTSOutFlow)
  145 +#define DSROUTFLOW( x ) (x.fDSROutFlow)
  146 +#define DSRINFLOW( x ) (x.fDSRInFlow)
  147 +#define XONXOFFOUTFLOW( x ) (x.fXonXoffOutFlow)
  148 +#define XONXOFFINFLOW( x ) (x.fXonXoffInFlow)
  149 +#define TXAFTERXOFFSENT(x) (x.fTXafterXoffSent)
  150 +
  151 +#define NOREADING( x ) (x.fNoReading)
  152 +#define NOWRITING( x ) (x.fNoWriting)
  153 +#define NOEVENTS( x ) (x.fNoEvents)
  154 +#define NOSTATUS( x ) (x.fNoStatus)
  155 +#define SHOWTIMEOUTS( x ) (x.fDisplayTimeouts)
  156 +
  157 +
23 158
24 159 //
25 160 // GLOBAL DEFINES
... ... @@ -127,7 +262,11 @@ typedef struct STATUS_MESSAGE
127 262 //
128 263 // Port name
129 264 //
  265 +#ifdef __OPTEK_EDIT__
130 266 char gszPort[20];
  267 +#else
  268 +char gszPort[10];
  269 +#endif
131 270
132 271 //
133 272 // Writer heap variables
... ...
... ... @@ -77,7 +77,7 @@ BOOL CALLBACK GetADWORDProc( HWND, UINT, WPARAM, LPARAM );
77 77
78 78 DCB dcbTemp;
79 79
80   -#if 1
  80 +#ifdef __OPTEK_EDIT__
81 81 char * szBaud[] = {
82 82 "115200*1", "115200*2", "115200*4", "115200*8"
83 83 };
... ... @@ -90,14 +90,14 @@ DWORD BaudTable[] = {
90 90 char * szBaud[] = {
91 91 "110", "300", "600", "1200", "2400",
92 92 "4800", "9600", "14400", "19200",
93   - "38400", "56000", "57600", "460800",
94   - "128000"
  93 + "38400", "56000", "57600", "115200",
  94 + "128000", "256000"
95 95 };
96 96
97 97 DWORD BaudTable[] = {
98 98 CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400,
99 99 CBR_4800, CBR_9600, CBR_14400, CBR_19200, CBR_38400,
100   - CBR_56000, CBR_57600, (CBR_115200)*4, CBR_128000
  100 + CBR_56000, CBR_57600, CBR_115200, CBR_128000, CBR_256000
101 101 } ;
102 102 #endif
103 103 char * szParity[] = { "None", "Even", "Odd", "Mark", "Space" };
... ... @@ -273,11 +273,11 @@ void UpdateTTYInfo()
273 273 //
274 274 // update globals from dialog settings
275 275 //
  276 +#ifdef __OPTEK_EDIT__
276 277 char gszPort_Temp[20] = {0};
277   -
  278 +#endif
278 279 GetDlgItemText(ghWndToolbarDlg, IDC_PORTCOMBO, gszPort, sizeof(gszPort));
279   - /*MessageBox(NULL, gszPort, "TEST", MB_OK);*/
280   -
  280 +#ifdef __OPTEK_EDIT__
281 281 if (gszPort[3] - '0' > 0 && gszPort[4] - '0' > 0)
282 282 {
283 283 wsprintf(gszPort_Temp,"\\\\.\\%s%d","COM", (gszPort[3] - '0' )*10 + (gszPort[4] - '0'));
... ... @@ -285,7 +285,7 @@ void UpdateTTYInfo()
285 285 strcpy(gszPort, gszPort_Temp);
286 286 /*MessageBox(NULL, gszPort, "TEST---", MB_OK);*/
287 287 }
288   -
  288 +#endif
289 289 BAUDRATE(TTYInfo) = GetdwTTYItem( ghWndToolbarDlg,
290 290 IDC_BAUDCOMBO,
291 291 szBaud,
... ... @@ -474,9 +474,7 @@ void SetComboBox( HWND hCtrlWnd, WORD wTableLen, DWORD dwNewSetting )
474 474 return ;
475 475 }
476 476
477   -//???ù′??ú
478   -//2?êy£obEnablePort£?????′??úóDD§£?bEnablePort[0]±íê?COM1£?bEnablePort[n-1]±íê?COMn
479   -//·μ???μ£oóDD§μ?′??ú??êy
  477 +#ifdef __OPTEK_EDIT__
480 478 int EnumAllComPort(int* bEnablePort)
481 479 {
482 480 int nCommSum = 0;//¡ä??¨²??¨ºy
... ... @@ -517,7 +515,7 @@ int EnumAllComPort(int* bEnablePort)
517 515
518 516 return nCommSum;
519 517 }
520   -
  518 +#endif
521 519
522 520 /*-----------------------------------------------------------------------------
523 521
... ... @@ -541,24 +539,25 @@ BOOL SettingsDlgInit( HWND hDlg )
541 539 {
542 540 char szBuffer[ MAXLEN_TEMPSTR ], szTemp[ MAXLEN_TEMPSTR ] ;
543 541 WORD wCount, wMaxCOM, wPosition ;
  542 +#ifdef __OPTEK_EDIT__
544 543 int cmdT[MAXPORTS];
545   -
  544 +#endif
546 545 wMaxCOM = MAXPORTS ;
547 546 strcpy(szTemp, "COM");
548 547
  548 +#ifdef __OPTEK_EDIT__
549 549 memset(cmdT,0,sizeof(cmdT));
550 550 EnumAllComPort(cmdT);
551   -
552 551 //for (int i=0;i<10;i++)
553 552 {
554 553 //UpdateStatus("com%d:%d\r\n",i+1,cmdT[i]);
555 554 }
556   -
557   -
  555 +#endif
558 556 //
559 557 // fill port combo box and make initial selection
560 558 //
561 559 for (wCount = 0; wCount < wMaxCOM; wCount++) {
  560 +#ifdef __OPTEK_EDIT__
562 561 //wsprintf( szBuffer, "%s%d", (LPSTR) szTemp, wCount + 1 ) ;
563 562 if (cmdT[wCount])
564 563 {
... ... @@ -566,6 +565,11 @@ BOOL SettingsDlgInit( HWND hDlg )
566 565 SendDlgItemMessage( hDlg, IDC_PORTCOMBO, CB_ADDSTRING, 0,
567 566 (LPARAM) (LPSTR) szBuffer ) ;
568 567 }
  568 +#else
  569 + wsprintf( szBuffer, "%s%d", (LPSTR) szTemp, wCount + 1 ) ;
  570 + SendDlgItemMessage( hDlg, IDC_PORTCOMBO, CB_ADDSTRING, 0,
  571 + (LPARAM) (LPSTR) szBuffer ) ;
  572 +#endif
569 573 }
570 574
571 575 SendDlgItemMessage( hDlg, IDC_PORTCOMBO, CB_SETCURSEL,
... ... @@ -717,6 +721,7 @@ BYTE GetbTTYItem(HWND hDlg, int idControl, char ** szString, DWORD * pTable, int
717 721 return 0;
718 722 }
719 723
  724 +#ifdef __OPTEK_EDIT__
720 725 extern char szFileName[MAX_PATH];
721 726
722 727 int szFileName_check(char* fileName)
... ... @@ -733,7 +738,7 @@ int szFileName_check(char* fileName)
733 738
734 739 return ret;
735 740 }
736   -
  741 +#endif
737 742 /*-----------------------------------------------------------------------------
738 743
739 744 FUNCTION: ToolbarProc(HWND, UINT, WPARAM, LPARAM)
... ... @@ -811,6 +816,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
811 816 fRet = FALSE;
812 817 break;
813 818
  819 +#ifdef __OPTEK_EDIT__
814 820 case IDC_SENDBTN: // send button pressed
815 821 if (!EnableWindow( GetDlgItem(ghWndToolbarDlg, IDC_PORTCOMBO), FALSE))
816 822 {
... ... @@ -819,11 +825,9 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
819 825 fRet = FALSE;
820 826 break;
821 827 }
822   -
823 828 if (szFileName_check(szFileName))
824 829 {
825 830 EnableWindow( GetDlgItem(ghWndToolbarDlg, IDC_SENDBTN), FALSE);
826   - // EnableWindow(GetDlgItem(ghWndToolbarDlg, IDC_PORTCOMBO), FALSE);
827 831 TransferFileTextStart(szFileName);
828 832 }
829 833 else
... ... @@ -831,10 +835,9 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
831 835 /*MessageBox(NULL,"-_-","test3", MB_OK);*/
832 836 ErrorReporter("Please select file!\r\n");
833 837 }
834   -
835 838 fRet = FALSE;
836 839 break;
837   -
  840 +#endif
838 841 case IDC_COMMEVENTSBTN: // comm events button pressed
839 842 DialogBox(ghInst, MAKEINTRESOURCE(IDD_COMMEVENTSDLG), ghwndMain, CommEventsProc);
840 843 fRet = FALSE;
... ... @@ -847,7 +850,6 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
847 850
848 851 case IDC_TIMEOUTSBTN:
849 852 DialogBox(ghInst, MAKEINTRESOURCE(IDD_TIMEOUTSDLG), ghwndMain, TimeoutsProc);
850   - break;
851 853 fRet = FALSE;
852 854 break;
853 855
... ...
... ... @@ -35,8 +35,6 @@
35 35 #include <commctrl.h>
36 36 #include "mttty.h"
37 37
38   -#pragma comment(lib,"winmm.lib")
39   -
40 38 //
41 39 // Globals used in this file only
42 40 //
... ... @@ -102,7 +100,9 @@ void TransferRepeatCreate(LPCTSTR lpszFileName, DWORD dwFrequency)
102 100 hMenu = GetMenu(ghwndMain);
103 101 MenuFlags = MF_DISABLED | MF_GRAYED;
104 102 EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags);
  103 +#ifdef __OPTEK_EDIT__
105 104 EnableMenuItem(hMenu, IDC_SENDBTN, MenuFlags);
  105 +#endif
106 106 EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags);
107 107 EnableMenuItem(hMenu, ID_TRANSFER_ABORTREPEATEDSENDING, MF_ENABLED);
108 108 EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags);
... ... @@ -194,7 +194,9 @@ void TransferRepeatDestroy()
194 194 MenuFlags = MF_ENABLED;
195 195 EnableMenuItem(hMenu, ID_TRANSFER_ABORTREPEATEDSENDING, MF_DISABLED | MF_GRAYED);
196 196 EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags);
  197 +#ifdef __OPTEK_EDIT__
197 198 EnableMenuItem(hMenu, IDC_SENDBTN, MenuFlags);
  199 + #endif
198 200 EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags);
199 201 EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags);
200 202
... ... @@ -262,7 +264,9 @@ void TransferFileTextStart(LPCTSTR lpstrFileName)
262 264 hMenu = GetMenu(ghwndMain);
263 265 MenuFlags = MF_DISABLED | MF_GRAYED;
264 266 EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags);
  267 +#ifdef __OPTEK_EDIT__
265 268 EnableMenuItem(hMenu, IDC_SENDBTN, MenuFlags);
  269 +#endif
266 270 EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags);
267 271 EnableMenuItem(hMenu, ID_TRANSFER_ABORTSENDING, MF_ENABLED);
268 272 EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags);
... ... @@ -333,7 +337,9 @@ void TransferFileTextEnd()
333 337 hMenu = GetMenu(ghwndMain);
334 338 MenuFlags = MF_ENABLED;
335 339 EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags);
  340 +#ifdef __OPTEK_EDIT__
336 341 EnableMenuItem(hMenu, IDC_SENDBTN, MenuFlags);
  342 +#endif
337 343 EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags);
338 344 EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags);
339 345 EnableMenuItem(hMenu, ID_TRANSFER_ABORTSENDING, MF_DISABLED | MF_GRAYED);
... ... @@ -343,7 +349,9 @@ void TransferFileTextEnd()
343 349 //
344 350 ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_ABORTBTN), SW_HIDE);
345 351 ShowWindow(GetDlgItem(ghWndStatusDlg, IDC_TRANSFERPROGRESS), SW_HIDE);
  352 +#ifdef __OPTEK_EDIT__
346 353 EnableWindow( GetDlgItem(ghWndToolbarDlg, IDC_SENDBTN), TRUE);
  354 +#endif
347 355 //
348 356 // close the file
349 357 //
... ... @@ -391,7 +399,9 @@ void ReceiveFileText(LPCTSTR lpstrFileName)
391 399 // disable transfer menu
392 400 //
393 401 EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags);
  402 +#ifdef __OPTEK_EDIT__
394 403 EnableMenuItem(hMenu, IDC_SENDBTN, MenuFlags);
  404 +#endif
395 405 EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags);
396 406 EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags);
397 407
... ... @@ -419,7 +429,9 @@ void ReceiveFileText(LPCTSTR lpstrFileName)
419 429 // enable transfer menu
420 430 //
421 431 EnableMenuItem(hMenu, ID_TRANSFER_SENDFILETEXT, MenuFlags);
  432 +#ifdef __OPTEK_EDIT__
422 433 EnableMenuItem(hMenu, IDC_SENDBTN, MenuFlags);
  434 +#endif
423 435 EnableMenuItem(hMenu, ID_TRANSFER_RECEIVEFILETEXT, MenuFlags);
424 436 EnableMenuItem(hMenu, ID_TRANSFER_SENDREPEATEDLY, MenuFlags);
425 437
... ... @@ -685,21 +697,19 @@ HISTORY: Date: Author: Comment:
685 697
686 698 -----------------------------------------------------------------------------*/
687 699
  700 +#ifdef __OPTEK_EDIT__
688 701 #define HEADER_START 0x44332211
689 702 #define BAUDRATE_DET_DATA 0xFFAAFF55
690 703 #define BAUDRATE_DET_DATA_LEN 0xB00
691 704 #define HEADER_LEN 0x20
692 705 #define MAC_ADDR_OFFSET 0x68000
693   -
694 706 #define U32 unsigned int
695   -
696 707 enum {
697 708 READ_CPU_TICKS_ERR,
698 709 WRONG_FILE_FORMAT,
699 710 CHECKSUM_ERROR,
700 711 FILE_CHCK_SUCCESSFUL
701 712 };
702   -
703 713 typedef struct {
704 714 U32 rx_header_start;
705 715 U32 rx_copy_addr;
... ... @@ -894,7 +904,7 @@ int fileCheck(char *fData,char *dataLen)
894 904 }
895 905 return ret;
896 906 }
897   -
  907 +#endif
898 908 DWORD WINAPI TransferThreadProc(LPVOID lpV)
899 909 {
900 910 DWORD dwPacketSize, dwMaxPackets, dwFileSize;
... ... @@ -904,12 +914,13 @@ DWORD WINAPI TransferThreadProc(LPVOID lpV)
904 914 HANDLE hDataHeap;
905 915 BOOL fStarted = TRUE;
906 916 BOOL fAborting = FALSE;
  917 +#ifdef __OPTEK_EDIT__
907 918 BOOL userAborting = TRUE;
908 919 char *lpfileBuf;
909 920 char *pRead;
910 921 DWORD dwRead;
911 922 int err;
912   -
  923 +#endif
913 924
914 925 hFileHandle = (HANDLE) lpV;
915 926 hWndProgress = GetDlgItem(ghWndStatusDlg, IDC_TRANSFERPROGRESS);
... ... @@ -919,7 +930,6 @@ DWORD WINAPI TransferThreadProc(LPVOID lpV)
919 930 fAborting = TRUE;
920 931 else {
921 932 SendMessage(hWndProgress, PBM_SETRANGE, 0, MAKELPARAM(0, dwMaxPackets+1));
922   -// SendMessage(hWndProgress, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
923 933 SendMessage(hWndProgress, PBM_SETSTEP, (WPARAM) 1, 0);
924 934 SendMessage(hWndProgress, PBM_SETPOS, 0, 0);
925 935 }
... ... @@ -928,14 +938,18 @@ DWORD WINAPI TransferThreadProc(LPVOID lpV)
928 938 if (!fAborting) {
929 939 SYSTEM_INFO sysInfo;
930 940 GetSystemInfo(&sysInfo);
931   -// hDataHeap = HeapCreate(0, sysInfo.dwPageSize * 2, sysInfo.dwPageSize * 10);
932   - hDataHeap = HeapCreate(0, sysInfo.dwPageSize * 20,0);
  941 +#ifdef __OPTEK_EDIT__
  942 +hDataHeap = HeapCreate(0, sysInfo.dwPageSize * 20,0);
  943 +#else
  944 +hDataHeap = HeapCreate(0, sysInfo.dwPageSize * 2, sysInfo.dwPageSize * 10);
  945 +#endif
933 946 if (hDataHeap == NULL) {
934 947 ErrorReporter("HeapCreate (Data Heap)");
935 948 fAborting = TRUE;
936 949 }
937 950 }
938 951
  952 +#ifdef __OPTEK_EDIT__
939 953 /**********************check file*********************************/
940 954 lpfileBuf = HeapAlloc(hDataHeap, 0, dwFileSize);
941 955 pRead = lpfileBuf;
... ... @@ -969,17 +983,11 @@ DWORD WINAPI TransferThreadProc(LPVOID lpV)
969 983 userAborting =FALSE;
970 984 fAborting = TRUE;
971 985 }
972   -
973   -
974   -
975   - if (WaitForSingleObject(hTransferAbortEvent, 0) == WAIT_OBJECT_0)
976   - fAborting = TRUE;
977   -
  986 +#endif
978 987 // inform writer thread that a file is about to be transferred
979 988 if (!fAborting) {
980 989 if (!WriterAddNewNode(WRITE_FILESTART, dwFileSize, 0, NULL, NULL, NULL))
981 990 fAborting = TRUE;
982   -
983 991 }
984 992
985 993 OutputDebugString("Xfer: About to start sending data\n");
... ... @@ -987,34 +995,52 @@ DWORD WINAPI TransferThreadProc(LPVOID lpV)
987 995 // Get Transfer Start Time
988 996 dwStartTime = GetTickCount();
989 997
  998 + if (WaitForSingleObject(hTransferAbortEvent, 0) == WAIT_OBJECT_0)
  999 + fAborting = TRUE;
  1000 +
990 1001 while (!fAborting) {
  1002 + char * lpDataBuf;
991 1003 PWRITEREQUEST pWrite;
992   - char * lpDataBuf;
993 1004
994 1005 // transfer file, loop until all blocks of file have been read
995 1006 lpDataBuf = HeapAlloc(hDataHeap, 0, dwPacketSize);
996 1007 pWrite = HeapAlloc(ghWriterHeap, 0, sizeof(WRITEREQUEST));
997 1008
998   - if ((lpDataBuf != NULL) && (pWrite != NULL)) {
  1009 + if ((lpDataBuf != NULL) && (pWrite != NULL))
  1010 + {
999 1011
  1012 +#ifdef __OPTEK_EDIT__
1000 1013 DWORD wrLen;
1001 1014
1002 1015 // read from file into new buffer
1003 1016 //if (ReadFile(hFileHandle, lpDataBuf, dwPacketSize, &dwRead, NULL)) {
1004   - if (dwRead > dwPacketSize){
  1017 + if (dwRead > dwPacketSize)
  1018 + {
1005 1019 memcpy(lpDataBuf,pRead,dwPacketSize);
1006 1020 WriterAddExistingNode(pWrite, WRITE_FILE, dwPacketSize, 0, lpDataBuf, hDataHeap, hWndProgress);
1007 1021 dwRead -= dwPacketSize;
1008 1022 pRead += dwPacketSize;
1009 1023 }
1010   - else{
  1024 + else
  1025 + {
1011 1026 memcpy(lpDataBuf,pRead,dwRead);
1012 1027 WriterAddExistingNode(pWrite, WRITE_FILE, dwRead, 0, lpDataBuf, hDataHeap, hWndProgress);
1013 1028 // eof
1014 1029 break;
1015 1030 }
  1031 +#else
  1032 + DWORD dwRead;
  1033 + // read from file into new buffer
  1034 + if (ReadFile(hFileHandle, lpDataBuf, dwPacketSize, &dwRead, NULL))
  1035 + {
  1036 + WriterAddExistingNode(pWrite, WRITE_FILE, dwRead, 0, lpDataBuf, hDataHeap, hWndProgress);
  1037 + if (dwRead != dwPacketSize) // eof
  1038 + break;
  1039 + }
  1040 +#endif
1016 1041 }
1017   - else {
  1042 + else
  1043 + {
1018 1044 BOOL fRes;
1019 1045 /*
1020 1046 Either the data heap is full, or the writer heap is full.
... ... @@ -1053,16 +1079,17 @@ DWORD WINAPI TransferThreadProc(LPVOID lpV)
1053 1079 fAborting = TRUE;
1054 1080 }
1055 1081
1056   - if (lpfileBuf) {
  1082 +#ifdef __OPTEK_EDIT__
  1083 + if (lpfileBuf)
  1084 + {
1057 1085 BOOL fRes;
1058   -
1059 1086 EnterCriticalSection(&gcsDataHeap);
1060 1087 fRes = HeapFree(hDataHeap, 0, lpfileBuf);
1061 1088 LeaveCriticalSection(&gcsDataHeap);
1062 1089 if (!fRes)
1063 1090 ErrorReporter("HeapFree (Data block)");
1064 1091 }
1065   -
  1092 +#endif
1066 1093 OutputDebugString("Xfer: Done sending packets.\n");
1067 1094
1068 1095 if (fAborting) {
... ... @@ -1127,7 +1154,11 @@ DWORD WINAPI TransferThreadProc(LPVOID lpV)
1127 1154 // If I am done without user intervention, then post the
1128 1155 // "abort" message myself. This will cause the main thread to
1129 1156 // clean up after the file transfer.
  1157 +#ifdef __OPTEK_EDIT__
1130 1158 if ((!fAborting)|| (!userAborting))
  1159 +#else
  1160 + if (!fAborting)
  1161 +#endif
1131 1162 {
1132 1163 PostMessage(ghwndMain, WM_COMMAND, ID_TRANSFER_ABORTSENDING, 0);
1133 1164 }
... ...
... ... @@ -14,127 +14,7 @@
14 14
15 15 -----------------------------------------------------------------------------*/
16 16
17   -//
18   -// constant definitions
19   -//
20 17
21   -//
22   -// hard coded maximum number of ports
23   -//
24   -#define MAXPORTS 32
25   -
26   -//
27   -// terminal size
28   -//
29   -#define MAXROWS 50
30   -#define MAXCOLS 80
31   -
32   -//
33   -// cursor states
34   -//
35   -#define CS_HIDE 0x00
36   -#define CS_SHOW 0x01
37   -
38   -//
39   -// ascii definitions
40   -//
41   -#define ASCII_BEL 0x07
42   -#define ASCII_BS 0x08
43   -#define ASCII_LF 0x0A
44   -#define ASCII_CR 0x0D
45   -#define ASCII_XON 0x11
46   -#define ASCII_XOFF 0x13
47   -
48   -//
49   -// data structures
50   -//
51   -struct TTYInfoStruct
52   -{
53   - HANDLE hCommPort, hReaderStatus, hWriter ;
54   - DWORD dwEventFlags;
55   - CHAR Screen[MAXCOLS * MAXROWS];
56   - CHAR chFlag, chXON, chXOFF;
57   - WORD wXONLimit, wXOFFLimit;
58   - DWORD fRtsControl;
59   - DWORD fDtrControl;
60   - BOOL fConnected, fTransferring, fRepeating,
61   - fLocalEcho, fNewLine,
62   - fDisplayErrors, fAutowrap,
63   - fCTSOutFlow, fDSROutFlow, fDSRInFlow,
64   - fXonXoffOutFlow, fXonXoffInFlow,
65   - fTXafterXoffSent,
66   - fNoReading, fNoWriting, fNoEvents, fNoStatus,
67   - fDisplayTimeouts;
68   - BYTE bPort, bByteSize, bParity, bStopBits ;
69   - DWORD dwBaudRate ;
70   - WORD wCursorState ;
71   - HFONT hTTYFont ;
72   - LOGFONT lfTTYFont ;
73   - DWORD rgbFGColor ;
74   - COMMTIMEOUTS timeoutsorig;
75   - COMMTIMEOUTS timeoutsnew;
76   - int xSize, ySize, xScroll, yScroll, xOffset, yOffset,
77   - nColumn, nRow, xChar, yChar , nCharPos;
78   -
79   -} TTYInfo;
80   -
81   -//
82   -// macros ( for easier readability )
83   -//
84   -#define COMDEV( x ) (x.hCommPort)
85   -#define CURSORSTATE( x ) (x.wCursorState)
86   -#define PORT( x ) (x.bPort)
87   -#define SCREEN( x ) (x.Screen)
88   -#define CONNECTED( x ) (x.fConnected)
89   -#define TRANSFERRING( x ) (x.fTransferring)
90   -#define REPEATING( x ) (x.fRepeating)
91   -#define LOCALECHO( x ) (x.fLocalEcho)
92   -#define NEWLINE( x ) (x.fNewLine)
93   -#define AUTOWRAP( x ) (x.fAutowrap)
94   -#define BYTESIZE( x ) (x.bByteSize)
95   -#define PARITY( x ) (x.bParity)
96   -#define STOPBITS( x ) (x.bStopBits)
97   -#define BAUDRATE( x ) (x.dwBaudRate)
98   -#define HTTYFONT( x ) (x.hTTYFont)
99   -#define LFTTYFONT( x ) (x.lfTTYFont)
100   -#define FGCOLOR( x ) (x.rgbFGColor)
101   -#define XSIZE( x ) (x.xSize)
102   -#define YSIZE( x ) (x.ySize)
103   -#define XSCROLL( x ) (x.xScroll)
104   -#define YSCROLL( x ) (x.yScroll)
105   -#define XOFFSET( x ) (x.xOffset)
106   -#define YOFFSET( x ) (x.yOffset)
107   -#define COLUMN( x ) (x.nColumn)
108   -#define ROW( x ) (x.nRow)
109   -#define XCHAR( x ) (x.xChar)
110   -#define YCHAR( x ) (x.yChar)
111   -#define DISPLAYERRORS( x ) (x.fDisplayErrors)
112   -#define TIMEOUTSORIG( x ) (x.timeoutsorig)
113   -#define TIMEOUTSNEW( x ) (x.timeoutsnew)
114   -#define WRITERTHREAD( x ) (x.hWriter)
115   -#define READSTATTHREAD( x ) (x.hReaderStatus)
116   -#define EVENTFLAGS( x ) (x.dwEventFlags)
117   -#define FLAGCHAR( x ) (x.chFlag)
118   -#define SCREENCHAR( x, col, row ) (x.Screen[row * MAXCOLS + col])
119   -
120   -#define DTRCONTROL( x ) (x.fDtrControl)
121   -#define RTSCONTROL( x ) (x.fRtsControl)
122   -#define XONCHAR( x ) (x.chXON)
123   -#define XOFFCHAR( x ) (x.chXOFF)
124   -#define XONLIMIT( x ) (x.wXONLimit)
125   -#define XOFFLIMIT( x ) (x.wXOFFLimit)
126   -#define CTSOUTFLOW( x ) (x.fCTSOutFlow)
127   -#define DSROUTFLOW( x ) (x.fDSROutFlow)
128   -#define DSRINFLOW( x ) (x.fDSRInFlow)
129   -#define XONXOFFOUTFLOW( x ) (x.fXonXoffOutFlow)
130   -#define XONXOFFINFLOW( x ) (x.fXonXoffInFlow)
131   -#define TXAFTERXOFFSENT(x) (x.fTXafterXoffSent)
132   -
133   -#define NOREADING( x ) (x.fNoReading)
134   -#define NOWRITING( x ) (x.fNoWriting)
135   -#define NOEVENTS( x ) (x.fNoEvents)
136   -#define NOSTATUS( x ) (x.fNoStatus)
137   -#define SHOWTIMEOUTS( x ) (x.fDisplayTimeouts)
138 18
139 19 //---------------------------------------------------------------------------
140 20 // End of File: ttyinfo.h
... ...
... ... @@ -277,7 +277,11 @@ void WriterAbort(PWRITEREQUEST pAbortNode)
277 277 {
278 278 PWRITEREQUEST pCurrent;
279 279 PWRITEREQUEST pNextNode;
  280 +#ifdef __OPTEK_EDIT__
280 281 BOOL fRes = TRUE;
  282 +#else
  283 + BOOL fRes;
  284 +#endif
281 285 int i = 0;
282 286 char szMessage[30];
283 287
... ...
Please register or login to post a comment