Commit 725f6c3183c6cc6fac18f405823ba10a746c4c5f

Authored by xiemeng
1 parent 5740e599

去掉TTYINFO.H中的宏定义转换, 增加代码可读性

@@ -13,9 +13,9 @@ @@ -13,9 +13,9 @@
13 PURPOSE: Implement the About dialog box for the program. 13 PURPOSE: Implement the About dialog box for the program.
14 14
15 FUNCTIONS: 15 FUNCTIONS:
16 - CmdAbout - Creates the About dialog in response to menu selection  
17 - AboutDlgProc - Processes messages for the About dialog  
18 - InitAboutDlg - Initialzes about dialog controls 16 + CmdAbout - 创建About对话框以响应菜单选择
  17 + AboutDlgProc - 处理关于对话框的消息
  18 + InitAboutDlg - 初始化about对话框控件
19 19
20 -----------------------------------------------------------------------------*/ 20 -----------------------------------------------------------------------------*/
21 21
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 #include "mttty.h" 24 #include "mttty.h"
25 25
26 /* 26 /*
27 - Prototypes for functions called only in this file 27 + 仅在此文件中调用的函数原型
28 */ 28 */
29 BOOL CALLBACK AboutDlgProc( HWND, UINT, WPARAM, LPARAM ); 29 BOOL CALLBACK AboutDlgProc( HWND, UINT, WPARAM, LPARAM );
30 UINT InitAboutDlg( HWND ); 30 UINT InitAboutDlg( HWND );
@@ -33,10 +33,10 @@ UINT InitAboutDlg( HWND ); @@ -33,10 +33,10 @@ UINT InitAboutDlg( HWND );
33 33
34 FUNCTION: CmdAbout( HWND ) 34 FUNCTION: CmdAbout( HWND )
35 35
36 -PARAMETERS:  
37 - hwnd - Owner of the window 36 +参数:
  37 +hwnd -窗口的所有者
38 38
39 -PURPOSE: Creates the modal About dialog 39 +创建模态About对话框
40 40
41 -----------------------------------------------------------------------------*/ 41 -----------------------------------------------------------------------------*/
42 BOOL CmdAbout(HWND hwnd) 42 BOOL CmdAbout(HWND hwnd)
@@ -49,12 +49,10 @@ BOOL CmdAbout(HWND hwnd) @@ -49,12 +49,10 @@ BOOL CmdAbout(HWND hwnd)
49 49
50 FUNCTION: InitAboutDlg( HWND ) 50 FUNCTION: InitAboutDlg( HWND )
51 51
52 -PURPOSE: Initializes the modal About dialog  
53 - 52 +初始化modal About对话框
54 PARMATETERS: 53 PARMATETERS:
55 hDlg - Dialog window handle 54 hDlg - Dialog window handle
56 -  
57 -COMMENTS: Sets the icon animation timer and the version info. 55 +设置图标动画计时器和版本信息。
58 56
59 HISTORY: Date: Author: Comment: 57 HISTORY: Date: Author: Comment:
60 10/27/95 AllenD Wrote it 58 10/27/95 AllenD Wrote it
@@ -89,15 +87,12 @@ UINT InitAboutDlg(HWND hDlg) @@ -89,15 +87,12 @@ UINT InitAboutDlg(HWND hDlg)
89 /*----------------------------------------------------------------------------- 87 /*-----------------------------------------------------------------------------
90 88
91 FUNCTION: AboutDlgProc(HWND, UINT, WPARAM, LPARAM) 89 FUNCTION: AboutDlgProc(HWND, UINT, WPARAM, LPARAM)
92 -  
93 -PURPOSE: Dialog procedure for the "About Box"  
94 - 90 +关于对话框的对话程序
95 PARAMETERS: 91 PARAMETERS:
96 - hdlg - dialog window handle  
97 - uMessage - window message  
98 - wparam - message parameter (depends on message value)  
99 - lparam - message prarmeter (depends on message value)  
100 - 92 +hdlg 对话框窗口句柄
  93 +uMessage 窗口消息
  94 +wparam 消息参数(取决于消息值)
  95 +lparam 消息参数(取决于消息值)
101 HISTORY: Date: Author: Comment: 96 HISTORY: Date: Author: Comment:
102 10/27/95 AllenD Wrote it 97 10/27/95 AllenD Wrote it
103 98
@@ -116,7 +111,7 @@ BOOL CALLBACK AboutDlgProc(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lpara @@ -116,7 +111,7 @@ BOOL CALLBACK AboutDlgProc(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lpara
116 111
117 case WM_TIMER: 112 case WM_TIMER:
118 /* 113 /*
119 - when timer goes off, then change to next icon 114 + 当计时器停止,然后改变到下一个图标
120 */ 115 */
121 { 116 {
122 HICON hIcon; 117 HICON hIcon;
@@ -15,11 +15,10 @@ @@ -15,11 +15,10 @@
15 called to report errors. 15 called to report errors.
16 16
17 FUNCTIONS: 17 FUNCTIONS:
18 - ErrorExtender - Calls FormatMessage to translate error code to  
19 - error text  
20 - ErrorReporter - Reports errors to user  
21 - ErrorHandler - Reports errors, then exits the process  
22 - ErrorInComm - Reports errors, closes comm connection, then exits 18 + ErrorExtender - 调用FormatMessage将错误代码转换为错误文本
  19 + ErrorReporter - 向用户报告错误
  20 + ErrorHandler -报告错误,然后退出进程
  21 + ErrorInComm - 报告错误,关闭通信连接,然后退出
23 22
24 -----------------------------------------------------------------------------*/ 23 -----------------------------------------------------------------------------*/
25 24
@@ -71,13 +70,12 @@ DWORD ErrorExtender(DWORD dwError, char ** szBuffer) @@ -71,13 +70,12 @@ DWORD ErrorExtender(DWORD dwError, char ** szBuffer)
71 /*----------------------------------------------------------------------------- 70 /*-----------------------------------------------------------------------------
72 71
73 FUNCTION: ErrorReporter(char *) 72 FUNCTION: ErrorReporter(char *)
74 -  
75 -PURPOSE: Report error to user 73 +向用户报告错误
76 74
77 PARAMETERS: 75 PARAMETERS:
78 - szMessage - Error message from app 76 + szMessage - 来自app的错误消息
79 77
80 -COMMENTS: Reports error string in console and in debugger 78 +COMMENTS: 报告控制台和调试器中的错误字符串
81 79
82 HISTORY: Date: Author: Comment: 80 HISTORY: Date: Author: Comment:
83 10/27/95 AllenD Wrote it 81 10/27/95 AllenD Wrote it
@@ -94,13 +92,13 @@ void ErrorReporter(char * szMessage) @@ -94,13 +92,13 @@ void ErrorReporter(char * szMessage)
94 dwErr = GetLastError(); 92 dwErr = GetLastError();
95 93
96 /* 94 /*
97 - Get error string from system 95 + 从系统获取错误字符串
98 */ 96 */
99 dwExtSize = ErrorExtender(dwErr, &szExtended); 97 dwExtSize = ErrorExtender(dwErr, &szExtended);
100 98
101 /* 99 /*
102 - allocate buffer for error string from system, passed in string  
103 - and extra stuff from the szFormat string 100 + 为系统中传入的错误字符串分配缓冲区
  101 + 以及szFormat字符串中的额外内容
104 */ 102 */
105 szFinal = LocalAlloc(LPTR, strlen(szMessage) + dwExtSize + 30); 103 szFinal = LocalAlloc(LPTR, strlen(szMessage) + dwExtSize + 30);
106 104
@@ -111,14 +109,14 @@ void ErrorReporter(char * szMessage) @@ -111,14 +109,14 @@ void ErrorReporter(char * szMessage)
111 109
112 OutputDebugString(szFinal); 110 OutputDebugString(szFinal);
113 111
114 - if (DISPLAYERRORS(TTYInfo)) 112 + if (TTYInfo.fDisplayErrors)
115 MessageBox(ghwndMain, szFinal, NULL, MB_OK); 113 MessageBox(ghwndMain, szFinal, NULL, MB_OK);
116 114
117 LocalFree(szFinal); // free final buffer 115 LocalFree(szFinal); // free final buffer
118 } 116 }
119 117
120 /* 118 /*
121 - free extended string buffer 119 + 释放扩展字符串缓冲区
122 */ 120 */
123 LocalFree(szExtended); 121 LocalFree(szExtended);
124 122
@@ -130,10 +128,10 @@ void ErrorReporter(char * szMessage) @@ -130,10 +128,10 @@ void ErrorReporter(char * szMessage)
130 128
131 FUNCTION: ErrorHandler( char * ) 129 FUNCTION: ErrorHandler( char * )
132 130
133 -PURPOSE: Handle a fatal error (before comm port is opened) 131 +PURPOSE: 处理一个致命错误(在comm端口打开之前)
134 132
135 PARAMETERS: 133 PARAMETERS:
136 - szMessage - Error message from app 134 + szMessage - 来自app的错误消息
137 135
138 HISTORY: Date: Author: Comment: 136 HISTORY: Date: Author: Comment:
139 10/27/95 AllenD Wrote it 137 10/27/95 AllenD Wrote it
@@ -150,10 +148,10 @@ void ErrorHandler(char * szMessage) @@ -150,10 +148,10 @@ void ErrorHandler(char * szMessage)
150 148
151 FUNCTION: ErrorInComm( char * ) 149 FUNCTION: ErrorInComm( char * )
152 150
153 -PURPOSE: Handle a fatal error after comm port is opened 151 +PURPOSE: 在comm端口打开后处理一个致命错误
154 152
155 PARAMETERS: 153 PARAMETERS:
156 - szMessage - Error message from app 154 + szMessage - 来自app的错误消息
157 155
158 HISTORY: Date: Author: Comment: 156 HISTORY: Date: Author: Comment:
159 10/27/95 AllenD Wrote it 157 10/27/95 AllenD Wrote it
@@ -10,23 +10,20 @@ @@ -10,23 +10,20 @@
10 10
11 MODULE: Init.c 11 MODULE: Init.c
12 12
13 - PURPOSE: Intializes global data and comm port connects.  
14 - Closes comm ports and cleans up global data. 13 + PURPOSE: 初始化全局数据和通信端口连接。 关闭通信端口并清除全局数据。
15 14
16 FUNCTIONS: 15 FUNCTIONS:
17 - GlobalInitialize - Init global variables and system objects  
18 - GlobalCleanup - cleanup global variables and system objects  
19 - ClearTTYContents - Clears the tty buffer  
20 - InitNewFont - Creates a new font for the TTY child window  
21 - CreateTTYInfo - Creates the dynamic tty info structure controlling  
22 - behavior of tty  
23 - DestroyTTYInfo - deallocates tty info structure  
24 - StartThreads - Starts worker threads when a port is opened  
25 - SetupCommPort - Opens the port for the first time  
26 - WaitForThreads - Sets the thread exit event and wait for worker  
27 - threads to exit  
28 - BreakDownCommPort - Closes a connection to the comm port  
29 - DisconnectOK - Asks user if it is ok to disconnect 16 + GlobalInitialize - 初始化全局变量和系统对象
  17 + GlobalCleanup - 清除全局变量和系统对象
  18 + ClearTTYContents - 清除tty缓冲区
  19 + InitNewFont - 为TTY子窗口创建一个新字体
  20 + CreateTTYInfo - 创建动态tty数据,控制tty的行为
  21 + DestroyTTYInfo - 销毁tty信息数据
  22 + StartThreads - 打开端口时启动工作线程
  23 + SetupCommPort - 第一次打开港口
  24 + WaitForThreads - 设置线程退出事件并等待工作线程退出
  25 + BreakDownCommPort - 关闭与comm端口的连接
  26 + DisconnectOK - 询问用户是否可以断开连接
30 27
31 -----------------------------------------------------------------------------*/ 28 -----------------------------------------------------------------------------*/
32 29
@@ -42,10 +39,9 @@ DWORD WaitForThreads( DWORD ); @@ -42,10 +39,9 @@ DWORD WaitForThreads( DWORD );
42 39
43 /* 40 /*
44 TimeoutsDefault 41 TimeoutsDefault
45 - We need ReadIntervalTimeout here to cause the read operations  
46 - that we do to actually timeout and become overlapped.  
47 - Specifying 1 here causes ReadFile to return very quickly  
48 - so that our reader thread will continue execution. 42 + 我们需要ReadIntervalTimeout来执行读取操作 我们这样做是为了超时并变得重叠。 在这里指定1会使ReadFile很快返回
  43 + 这样我们的读取线程将继续执行。
  44 + 参考定义
49 */ 45 */
50 COMMTIMEOUTS gTimeoutsDefault = { 0x01, 0, 0, 0, 0 }; 46 COMMTIMEOUTS gTimeoutsDefault = { 0x01, 0, 0, 0, 0 };
51 47
@@ -54,9 +50,9 @@ COMMTIMEOUTS gTimeoutsDefault = { 0x01, 0, 0, 0, 0 }; @@ -54,9 +50,9 @@ COMMTIMEOUTS gTimeoutsDefault = { 0x01, 0, 0, 0, 0 };
54 50
55 FUNCTION: GlobalInitialize 51 FUNCTION: GlobalInitialize
56 52
57 -PURPOSE: Intializes global variables before any windows are created 53 +PURPOSE: 在创建任何窗口之前初始化全局变量
58 54
59 -COMMENTS: Partner to GlobalCleanup 55 +COMMENTS: 相应函数 GlobalCleanup
60 56
61 HISTORY: Date: Author: Comment: 57 HISTORY: Date: Author: Comment:
62 10/27/95 AllenD Wrote it 58 10/27/95 AllenD Wrote it
@@ -68,37 +64,37 @@ void GlobalInitialize() @@ -68,37 +64,37 @@ void GlobalInitialize()
68 64
69 // 65 //
70 // critical sections in status reporting & node management 66 // critical sections in status reporting & node management
71 - // 67 + // 初始化互斥对象
72 InitializeCriticalSection(&gStatusCritical); 68 InitializeCriticalSection(&gStatusCritical);
73 InitializeCriticalSection(&gcsWriterHeap); 69 InitializeCriticalSection(&gcsWriterHeap);
74 InitializeCriticalSection(&gcsDataHeap); 70 InitializeCriticalSection(&gcsDataHeap);
75 71
76 // 72 //
77 - // status message event 73 + // 状态消息事件
78 // 74 //
79 ghStatusMessageEvent = CreateEvent(NULL, FALSE, FALSE, NULL); 75 ghStatusMessageEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
80 if (ghStatusMessageEvent == NULL) 76 if (ghStatusMessageEvent == NULL)
81 ErrorReporter("CreateEvent (Status message event)"); 77 ErrorReporter("CreateEvent (Status message event)");
82 78
83 // 79 //
84 - // thread exit event 80 + //线程退出事件
85 // 81 //
86 ghThreadExitEvent = CreateEvent(NULL, TRUE, FALSE, NULL); 82 ghThreadExitEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
87 if (ghThreadExitEvent == NULL) 83 if (ghThreadExitEvent == NULL)
88 ErrorReporter("CreateEvent (Thread exit event)"); 84 ErrorReporter("CreateEvent (Thread exit event)");
89 85
90 // 86 //
91 - // used in file transfer status bar 87 + //用于文件传输状态栏
92 // 88 //
93 InitCommonControls(); 89 InitCommonControls();
94 90
95 // 91 //
96 - // font for status reporting control 92 + // 字体控制
97 // 93 //
98 ghFontStatus = CreateStatusEditFont(); 94 ghFontStatus = CreateStatusEditFont();
99 95
100 // 96 //
101 - // the following are used for sizing the tty window and dialog windows 97 + //下面的内容用于调整tty窗口和对话框窗口的大小
102 // 98 //
103 gwBaseY = HIWORD(GetDialogBaseUnits()); 99 gwBaseY = HIWORD(GetDialogBaseUnits());
104 cyMenuHeight = GetSystemMetrics(SM_CYMENU); 100 cyMenuHeight = GetSystemMetrics(SM_CYMENU);
@@ -116,7 +112,7 @@ void GlobalInitialize() @@ -116,7 +112,7 @@ void GlobalInitialize()
116 112
117 FUNCTION: GlobalCleanup 113 FUNCTION: GlobalCleanup
118 114
119 -PURPOSE: Cleans up any global variables 115 +PURPOSE: 清除所有全局变量
120 116
121 COMMENTS: Partner to GlobalInitialize 117 COMMENTS: Partner to GlobalInitialize
122 118
@@ -141,7 +137,7 @@ void GlobalCleanup() @@ -141,7 +137,7 @@ void GlobalCleanup()
141 137
142 FUNCTION: ClearTTYContents 138 FUNCTION: ClearTTYContents
143 139
144 -PURPOSE: Clears the tty buffer 140 +PURPOSE: 清除tty缓冲区
145 141
146 RETURN: always TRUE 142 RETURN: always TRUE
147 143
@@ -151,7 +147,7 @@ HISTORY: Date: Author: Comment: @@ -151,7 +147,7 @@ HISTORY: Date: Author: Comment:
151 -----------------------------------------------------------------------------*/ 147 -----------------------------------------------------------------------------*/
152 BOOL ClearTTYContents() 148 BOOL ClearTTYContents()
153 { 149 {
154 - FillMemory(SCREEN(TTYInfo), MAXCOLS*MAXROWS, ' '); 150 + FillMemory(TTYInfo.Screen, MAXCOLS*MAXROWS, ' ');
155 return TRUE; 151 return TRUE;
156 } 152 }
157 153
@@ -160,14 +156,13 @@ BOOL ClearTTYContents() @@ -160,14 +156,13 @@ BOOL ClearTTYContents()
160 156
161 FUNCTION: InitNewFont(LOGFONT, COLORREF) 157 FUNCTION: InitNewFont(LOGFONT, COLORREF)
162 158
163 -PURPOSE: Prepares a font for use in the TTY screen 159 +PURPOSE: 初始化在TTY窗口上使用的字体
164 160
165 PARAMETERS: 161 PARAMETERS:
166 - LogFont - New logical font for tty screen  
167 - rgbColor - New color for TTY painting 162 + LogFont - 逻辑字体
  163 + rgbColor - 字体颜色
168 164
169 -COMMENTS: Called when a new connection is made, or the TTY font  
170 - is changed by the user. 165 +COMMENTS: 当用户建立新连接或更改TTY字体时调用。
171 166
172 HISTORY: Date: Author: Comment: 167 HISTORY: Date: Author: Comment:
173 10/27/95 AllenD Wrote it 168 10/27/95 AllenD Wrote it
@@ -179,38 +174,37 @@ void InitNewFont(LOGFONT LogFont, COLORREF rgbColor) @@ -179,38 +174,37 @@ void InitNewFont(LOGFONT LogFont, COLORREF rgbColor)
179 HDC hDC; 174 HDC hDC;
180 175
181 // 176 //
182 - // if old one exists, then I should delete it 177 + //如果旧字体存在,那么我应该删除它
183 // 178 //
184 - if (HTTYFONT(TTYInfo))  
185 - DeleteObject(HTTYFONT(TTYInfo)); 179 + if (TTYInfo.hTTYFont)
  180 + DeleteObject(TTYInfo.hTTYFont);
186 181
187 - LFTTYFONT(TTYInfo) = LogFont;  
188 - HTTYFONT(TTYInfo) = CreateFontIndirect(&(LFTTYFONT(TTYInfo)));  
189 - FGCOLOR(TTYInfo) = rgbColor; 182 + TTYInfo.lfTTYFont = LogFont;
  183 + TTYInfo.hTTYFont = CreateFontIndirect(&(TTYInfo.lfTTYFont));
  184 + TTYInfo.rgbFGColor = rgbColor;
190 185
191 hDC = GetDC( ghwndMain ) ; 186 hDC = GetDC( ghwndMain ) ;
192 - SelectObject( hDC, HTTYFONT( TTYInfo ) ) ; 187 + SelectObject( hDC, TTYInfo.hTTYFont ) ;
193 GetTextMetrics( hDC, &tm ) ; 188 GetTextMetrics( hDC, &tm ) ;
194 ReleaseDC( ghwndMain, hDC ) ; 189 ReleaseDC( ghwndMain, hDC ) ;
195 190
196 // 191 //
197 - // character width and height 192 + //字符的宽度和高度
198 // 193 //
199 - XCHAR( TTYInfo ) = tm.tmAveCharWidth ;  
200 - YCHAR( TTYInfo ) = tm.tmHeight + tm.tmExternalLeading ; 194 + TTYInfo.xChar = tm.tmAveCharWidth ;
  195 + TTYInfo.yChar = tm.tmHeight + tm.tmExternalLeading ;
201 196
202 - XOFFSET( TTYInfo ) = 0 ;  
203 - YOFFSET( TTYInfo ) = YCHAR(TTYInfo) * ROW(TTYInfo); 197 + TTYInfo.xOffset = 0 ;
  198 + TTYInfo.yOffset = TTYInfo.yChar * TTYInfo.nRow;
204 } 199 }
205 200
206 /*----------------------------------------------------------------------------- 201 /*-----------------------------------------------------------------------------
207 202
208 FUNCTION: InitTTYInfo 203 FUNCTION: InitTTYInfo
209 204
210 -PURPOSE: Initializes TTY structure 205 +PURPOSE: 初始化TTY数据
211 206
212 -COMMENTS: This structure is a collection of TTY attributes  
213 - used by all parts of this program 207 +COMMENTS: 这个结构是这个程序所有部分使用的TTY属性的集合
214 208
215 HISTORY: Date: Author: Comment: 209 HISTORY: Date: Author: Comment:
216 10/27/95 AllenD Wrote it 210 10/27/95 AllenD Wrote it
@@ -222,79 +216,79 @@ BOOL InitTTYInfo() @@ -222,79 +216,79 @@ BOOL InitTTYInfo()
222 // 216 //
223 // initialize generial TTY info 217 // initialize generial TTY info
224 // 218 //
225 - COMDEV( TTYInfo ) = NULL ;  
226 - CONNECTED( TTYInfo ) = FALSE ;  
227 - LOCALECHO( TTYInfo ) = FALSE ;  
228 - CURSORSTATE( TTYInfo ) = CS_HIDE ;  
229 - PORT( TTYInfo ) = 1 ;  
230 - BAUDRATE( TTYInfo ) = 921600 ;  
231 - BYTESIZE( TTYInfo ) = 8 ;  
232 - PARITY( TTYInfo ) = NOPARITY ;  
233 - STOPBITS( TTYInfo ) = ONESTOPBIT ;  
234 - AUTOWRAP( TTYInfo ) = TRUE;  
235 - NEWLINE( TTYInfo ) = FALSE;  
236 - XSIZE( TTYInfo ) = 0 ;  
237 - YSIZE( TTYInfo ) = 0 ;  
238 - XSCROLL( TTYInfo ) = 0 ;  
239 - YSCROLL( TTYInfo ) = 0 ;  
240 - COLUMN( TTYInfo ) = 0 ;  
241 - ROW( TTYInfo ) = MAXROWS - 1 ;  
242 - DISPLAYERRORS( TTYInfo ) = TRUE ; 219 + TTYInfo.hCommPort = NULL ;
  220 + TTYInfo.fConnected = FALSE ;
  221 + TTYInfo.fLocalEcho = FALSE ;
  222 + TTYInfo.wCursorState = CS_HIDE ;
  223 + TTYInfo.bPort = 1 ;
  224 + TTYInfo.dwBaudRate = 921600 ;
  225 + TTYInfo.bByteSize = 8 ;
  226 + TTYInfo.bParity = NOPARITY ;
  227 + TTYInfo.bStopBits = ONESTOPBIT ;
  228 + TTYInfo.fAutowrap = TRUE;
  229 + TTYInfo.fNewLine = FALSE;
  230 + TTYInfo.xSize = 0 ;
  231 + TTYInfo.ySize = 0 ;
  232 + TTYInfo.xScroll = 0 ;
  233 + TTYInfo.yScroll = 0 ;
  234 + TTYInfo.nColumn = 0 ;
  235 + TTYInfo.nRow = MAXROWS - 1 ;
  236 + TTYInfo.fDisplayErrors = TRUE ;
243 237
244 // 238 //
245 // timeouts 239 // timeouts
246 // 240 //
247 - TIMEOUTSNEW( TTYInfo ) = gTimeoutsDefault; 241 + TTYInfo.timeoutsnew = gTimeoutsDefault;
248 242
249 // 243 //
250 // read state and status events 244 // read state and status events
251 // 245 //
252 gdwReceiveState = RECEIVE_TTY; 246 gdwReceiveState = RECEIVE_TTY;
253 - EVENTFLAGS( TTYInfo ) = EVENTFLAGS_DEFAULT;  
254 - FLAGCHAR( TTYInfo ) = FLAGCHAR_DEFAULT; 247 + TTYInfo.dwEventFlags = EVENTFLAGS_DEFAULT;
  248 + TTYInfo.chFlag = FLAGCHAR_DEFAULT;
255 249
256 // 250 //
257 // Flow Control Settings 251 // Flow Control Settings
258 // 252 //
259 - DTRCONTROL( TTYInfo ) = DTR_CONTROL_ENABLE;  
260 - RTSCONTROL( TTYInfo ) = RTS_CONTROL_ENABLE;  
261 - XONCHAR( TTYInfo ) = ASCII_XON;  
262 - XOFFCHAR( TTYInfo ) = ASCII_XOFF;  
263 - XONLIMIT( TTYInfo ) = 0;  
264 - XOFFLIMIT( TTYInfo ) = 0;  
265 - CTSOUTFLOW( TTYInfo ) = FALSE;  
266 - DSROUTFLOW( TTYInfo ) = FALSE;  
267 - DSRINFLOW( TTYInfo ) = FALSE;  
268 - XONXOFFOUTFLOW(TTYInfo) = FALSE;  
269 - XONXOFFINFLOW(TTYInfo) = FALSE;  
270 - TXAFTERXOFFSENT(TTYInfo) = FALSE;  
271 -  
272 - NOREADING(TTYInfo) = FALSE;  
273 - NOWRITING(TTYInfo) = FALSE;  
274 - NOEVENTS(TTYInfo) = FALSE;  
275 - NOSTATUS(TTYInfo) = FALSE;  
276 - SHOWTIMEOUTS(TTYInfo) = FALSE; 253 + TTYInfo.fDtrControl = DTR_CONTROL_ENABLE;
  254 + TTYInfo.fRtsControl = RTS_CONTROL_ENABLE;
  255 + TTYInfo.chXON = ASCII_XON;
  256 + TTYInfo.chXOFF = ASCII_XOFF;
  257 + TTYInfo.wXONLimit = 0;
  258 + TTYInfo.wXOFFLimit = 0;
  259 + TTYInfo.fCTSOutFlow = FALSE;
  260 + TTYInfo.fDSROutFlow = FALSE;
  261 + TTYInfo.fDSRInFlow = FALSE;
  262 + TTYInfo.fXonXoffOutFlow = FALSE;
  263 + TTYInfo.fXonXoffInFlow = FALSE;
  264 + TTYInfo.fTXafterXoffSent = FALSE;
  265 +
  266 + TTYInfo.fNoReading = FALSE;
  267 + TTYInfo.fNoWriting = FALSE;
  268 + TTYInfo.fNoEvents = FALSE;
  269 + TTYInfo.fNoStatus = FALSE;
  270 + TTYInfo.fDisplayTimeouts = FALSE;
277 271
278 // 272 //
279 // setup default font information 273 // setup default font information
280 // 274 //
281 - LFTTYFONT( TTYInfo ).lfHeight = 20 ;  
282 - LFTTYFONT( TTYInfo ).lfWidth = 0 ;  
283 - LFTTYFONT( TTYInfo ).lfEscapement = 0 ;  
284 - LFTTYFONT( TTYInfo ).lfOrientation = 0 ;  
285 - LFTTYFONT( TTYInfo ).lfWeight = 0 ;  
286 - LFTTYFONT( TTYInfo ).lfItalic = 0 ;  
287 - LFTTYFONT( TTYInfo ).lfUnderline = 0 ;  
288 - LFTTYFONT( TTYInfo ).lfStrikeOut = 0 ;  
289 - LFTTYFONT( TTYInfo ).lfCharSet = OEM_CHARSET ;  
290 - LFTTYFONT( TTYInfo ).lfOutPrecision = OUT_DEFAULT_PRECIS ;  
291 - LFTTYFONT( TTYInfo ).lfClipPrecision = CLIP_DEFAULT_PRECIS ;  
292 - LFTTYFONT( TTYInfo ).lfQuality = DEFAULT_QUALITY ;  
293 - LFTTYFONT( TTYInfo ).lfPitchAndFamily = FIXED_PITCH | FF_MODERN ;  
294 - strcpy( LFTTYFONT( TTYInfo ).lfFaceName, "宋体" ) ; 275 + TTYInfo.lfTTYFont.lfHeight = 20 ;
  276 + TTYInfo.lfTTYFont.lfWidth = 0 ;
  277 + TTYInfo.lfTTYFont.lfEscapement = 0 ;
  278 + TTYInfo.lfTTYFont.lfOrientation = 0 ;
  279 + TTYInfo.lfTTYFont.lfWeight = 0 ;
  280 + TTYInfo.lfTTYFont.lfItalic = 0 ;
  281 + TTYInfo.lfTTYFont.lfUnderline = 0 ;
  282 + TTYInfo.lfTTYFont.lfStrikeOut = 0 ;
  283 + TTYInfo.lfTTYFont.lfCharSet = OEM_CHARSET ;
  284 + TTYInfo.lfTTYFont.lfOutPrecision = OUT_DEFAULT_PRECIS ;
  285 + TTYInfo.lfTTYFont.lfClipPrecision = CLIP_DEFAULT_PRECIS ;
  286 + TTYInfo.lfTTYFont.lfQuality = DEFAULT_QUALITY ;
  287 + TTYInfo.lfTTYFont.lfPitchAndFamily = FIXED_PITCH | FF_MODERN ;
  288 + strcpy( TTYInfo.lfTTYFont.lfFaceName, "宋体" ) ;
295 TTYInfo.DownloadReday = FALSE; 289 TTYInfo.DownloadReday = FALSE;
296 290
297 - InitNewFont( LFTTYFONT(TTYInfo), RGB(0,0,0)); 291 + InitNewFont( TTYInfo.lfTTYFont, RGB(0,0,0));
298 292
299 ClearTTYContents(); 293 ClearTTYContents();
300 294
@@ -305,7 +299,7 @@ BOOL InitTTYInfo() @@ -305,7 +299,7 @@ BOOL InitTTYInfo()
305 299
306 FUNCTION: DestroyTTYInfo 300 FUNCTION: DestroyTTYInfo
307 301
308 -PURPOSE: Frees objects associated with the TTYInfo structure 302 +PURPOSE: 释放与TTYInfo结构体相关的对象
309 303
310 HISTORY: Date: Author: Comment: 304 HISTORY: Date: Author: Comment:
311 10/27/95 AllenD Wrote it 305 10/27/95 AllenD Wrote it
@@ -314,14 +308,14 @@ HISTORY: Date: Author: Comment: @@ -314,14 +308,14 @@ HISTORY: Date: Author: Comment:
314 -----------------------------------------------------------------------------*/ 308 -----------------------------------------------------------------------------*/
315 void DestroyTTYInfo() 309 void DestroyTTYInfo()
316 { 310 {
317 - DeleteObject(HTTYFONT(TTYInfo)); 311 + DeleteObject(TTYInfo.hTTYFont);
318 } 312 }
319 313
320 /*----------------------------------------------------------------------------- 314 /*-----------------------------------------------------------------------------
321 315
322 FUNCTION: StartThreads 316 FUNCTION: StartThreads
323 317
324 -PURPOSE: Creates the Reader/Status and Writer threads 318 +PURPOSE:创建读取/状态和写入线程
325 319
326 HISTORY: Date: Author: Comment: 320 HISTORY: Date: Author: Comment:
327 10/27/95 AllenD Wrote it 321 10/27/95 AllenD Wrote it
@@ -329,43 +323,27 @@ HISTORY: Date: Author: Comment: @@ -329,43 +323,27 @@ HISTORY: Date: Author: Comment:
329 -----------------------------------------------------------------------------*/ 323 -----------------------------------------------------------------------------*/
330 void StartThreads(void) 324 void StartThreads(void)
331 { 325 {
332 - DWORD dwReadStatId;  
333 - DWORD dwWriterId;  
334 -  
335 - READSTATTHREAD(TTYInfo) =  
336 - CreateThread( NULL,  
337 - 0,  
338 - (LPTHREAD_START_ROUTINE) ReaderAndStatusProc,  
339 - (LPVOID) ghWndTTY,  
340 - 0,  
341 - &dwReadStatId);  
342 -  
343 - if (READSTATTHREAD(TTYInfo) == NULL)  
344 - ErrorInComm("CreateThread(Reader/Status)");  
345 -  
346 - WRITERTHREAD(TTYInfo) =  
347 - CreateThread( NULL,  
348 - 0,  
349 - (LPTHREAD_START_ROUTINE) WriterProc,  
350 - (LPVOID) NULL,  
351 - 0,  
352 - &dwWriterId );  
353 -  
354 - if (WRITERTHREAD(TTYInfo) == NULL)  
355 - ErrorInComm("CreateThread (Writer)");  
356 -  
357 - return; 326 + DWORD dwReadStatId;
  327 + DWORD dwWriterId;
  328 + TTYInfo.hReaderStatus = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) ReaderAndStatusProc, (LPVOID) ghWndTTY, 0, &dwReadStatId);
  329 + if (TTYInfo.hReaderStatus == NULL)
  330 + ErrorInComm("CreateThread(Reader/Status)");
  331 + TTYInfo.hWriter = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) WriterProc, (LPVOID) NULL, 0, &dwWriterId);
  332 + if (TTYInfo.hWriter == NULL)
  333 + ErrorInComm("CreateThread (Writer)");
  334 + return;
358 } 335 }
359 336
  337 +
  338 +
360 /*----------------------------------------------------------------------------- 339 /*-----------------------------------------------------------------------------
361 340
362 FUNCTION: SetupCommPort( void ) 341 FUNCTION: SetupCommPort( void )
363 342
364 -PURPOSE: Setup Communication Port with our settings 343 +PURPOSE: 配置串口
365 344
366 RETURN: 345 RETURN:
367 - Handle of comm port is successful  
368 - NULL is error occurs 346 + 如果成功返回串口句柄, 否则返回NULL
369 347
370 HISTORY: Date: Author: Comment: 348 HISTORY: Date: Author: Comment:
371 10/27/95 AllenD Wrote it 349 10/27/95 AllenD Wrote it
@@ -375,17 +353,16 @@ HANDLE SetupCommPort() @@ -375,17 +353,16 @@ HANDLE SetupCommPort()
375 { 353 {
376 int myintPort; 354 int myintPort;
377 // 355 //
378 - // get tty settings from settings dialog  
379 -  
380 - // 356 + //从设置对话框获取tty设置
  357 + //
381 UpdateTTYInfo(); 358 UpdateTTYInfo();
382 myintPort = atoi(gszPort+3); 359 myintPort = atoi(gszPort+3);
383 360
384 // 361 //
385 - // open communication port handle 362 + //打开通信端口句柄
386 // 363 //
387 sprintf(gszPort, "\\\\.\\COM%d", myintPort);///可以显示COM10以上端口//add by itas109 2014-01-09 364 sprintf(gszPort, "\\\\.\\COM%d", myintPort);///可以显示COM10以上端口//add by itas109 2014-01-09
388 - COMDEV( TTYInfo ) = CreateFile( gszPort, 365 + TTYInfo.hCommPort = CreateFile( gszPort,
389 GENERIC_READ | GENERIC_WRITE, 366 GENERIC_READ | GENERIC_WRITE,
390 0, 367 0,
391 0, 368 0,
@@ -393,15 +370,13 @@ HANDLE SetupCommPort() @@ -393,15 +370,13 @@ HANDLE SetupCommPort()
393 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 370 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
394 0); 371 0);
395 372
396 - if (COMDEV(TTYInfo) == INVALID_HANDLE_VALUE) { 373 + if (TTYInfo.hCommPort == INVALID_HANDLE_VALUE) {
397 ErrorReporter("CreateFile"); 374 ErrorReporter("CreateFile");
398 return NULL; 375 return NULL;
399 } 376 }
400 377
401 - //  
402 - // Save original comm timeouts and set new ones  
403 - //  
404 - if (!GetCommTimeouts( COMDEV(TTYInfo), &(TIMEOUTSORIG(TTYInfo)))) 378 + //设置新的超时参数
  379 + if (!GetCommTimeouts( TTYInfo.hCommPort, &(TTYInfo.timeoutsorig)))
405 ErrorReporter("GetCommTimeouts"); 380 ErrorReporter("GetCommTimeouts");
406 381
407 // 382 //
@@ -412,12 +387,12 @@ HANDLE SetupCommPort() @@ -412,12 +387,12 @@ HANDLE SetupCommPort()
412 // 387 //
413 // set comm buffer sizes 388 // set comm buffer sizes
414 // 389 //
415 - SetupComm(COMDEV(TTYInfo), MAX_READ_BUFFER, MAX_WRITE_BUFFER); 390 + SetupComm(TTYInfo.hCommPort, MAX_READ_BUFFER, MAX_WRITE_BUFFER);
416 391
417 // 392 //
418 // raise DTR 393 // raise DTR
419 // 394 //
420 - if (!EscapeCommFunction(COMDEV(TTYInfo), SETDTR)) 395 + if (!EscapeCommFunction(TTYInfo.hCommPort, SETDTR))
421 ErrorReporter("EscapeCommFunction (SETDTR)"); 396 ErrorReporter("EscapeCommFunction (SETDTR)");
422 397
423 // 398 //
@@ -428,9 +403,9 @@ HANDLE SetupCommPort() @@ -428,9 +403,9 @@ HANDLE SetupCommPort()
428 // 403 //
429 // set overall connect flag 404 // set overall connect flag
430 // 405 //
431 - CONNECTED( TTYInfo ) = TRUE ; 406 + TTYInfo.fConnected = TRUE ;
432 407
433 - return COMDEV(TTYInfo); 408 + return TTYInfo.hCommPort;
434 } 409 }
435 410
436 /*----------------------------------------------------------------------------- 411 /*-----------------------------------------------------------------------------
@@ -456,8 +431,8 @@ DWORD WaitForThreads(DWORD dwTimeout) @@ -456,8 +431,8 @@ DWORD WaitForThreads(DWORD dwTimeout)
456 HANDLE hThreads[2]; 431 HANDLE hThreads[2];
457 DWORD dwRes; 432 DWORD dwRes;
458 433
459 - hThreads[0] = READSTATTHREAD(TTYInfo);  
460 - hThreads[1] = WRITERTHREAD(TTYInfo); 434 + hThreads[0] = TTYInfo.hReaderStatus;
  435 + hThreads[1] = TTYInfo.hWriter;
461 436
462 // 437 //
463 // set thread exit event here 438 // set thread exit event here
@@ -474,10 +449,10 @@ DWORD WaitForThreads(DWORD dwTimeout) @@ -474,10 +449,10 @@ DWORD WaitForThreads(DWORD dwTimeout)
474 449
475 case WAIT_TIMEOUT: 450 case WAIT_TIMEOUT:
476 451
477 - if (WaitForSingleObject(READSTATTHREAD(TTYInfo), 0) == WAIT_TIMEOUT) 452 + if (WaitForSingleObject(TTYInfo.hReaderStatus, 0) == WAIT_TIMEOUT)
478 OutputDebugString("Reader/Status Thread didn't exit.\n\r"); 453 OutputDebugString("Reader/Status Thread didn't exit.\n\r");
479 454
480 - if (WaitForSingleObject(WRITERTHREAD(TTYInfo), 0) == WAIT_TIMEOUT) 455 + if (WaitForSingleObject(TTYInfo.hWriter, 0) == WAIT_TIMEOUT)
481 OutputDebugString("Writer Thread didn't exit.\n\r"); 456 OutputDebugString("Writer Thread didn't exit.\n\r");
482 457
483 break; 458 break;
@@ -515,10 +490,10 @@ HISTORY: Date: Author: Comment: @@ -515,10 +490,10 @@ HISTORY: Date: Author: Comment:
515 -----------------------------------------------------------------------------*/ 490 -----------------------------------------------------------------------------*/
516 BOOL BreakDownCommPort() 491 BOOL BreakDownCommPort()
517 { 492 {
518 - if (!CONNECTED(TTYInfo)) 493 + if (!TTYInfo.fConnected)
519 return FALSE; 494 return FALSE;
520 495
521 - CONNECTED( TTYInfo ) = FALSE; 496 + TTYInfo.fConnected = FALSE;
522 497
523 // 498 //
524 // wait for the threads for a small period 499 // wait for the threads for a small period
@@ -534,24 +509,24 @@ BOOL BreakDownCommPort() @@ -534,24 +509,24 @@ BOOL BreakDownCommPort()
534 // 509 //
535 // lower DTR 510 // lower DTR
536 // 511 //
537 - if (!EscapeCommFunction(COMDEV(TTYInfo), CLRDTR)) 512 + if (!EscapeCommFunction(TTYInfo.hCommPort, CLRDTR))
538 ErrorReporter("EscapeCommFunction(CLRDTR)"); 513 ErrorReporter("EscapeCommFunction(CLRDTR)");
539 514
540 // 515 //
541 // restore original comm timeouts 516 // restore original comm timeouts
542 // 517 //
543 - if (!SetCommTimeouts(COMDEV(TTYInfo), &(TIMEOUTSORIG(TTYInfo)))) 518 + if (!SetCommTimeouts(TTYInfo.hCommPort, &(TTYInfo.timeoutsorig)))
544 ErrorReporter("SetCommTimeouts (Restoration to original)"); 519 ErrorReporter("SetCommTimeouts (Restoration to original)");
545 520
546 // 521 //
547 // Purge reads/writes, input buffer and output buffer 522 // Purge reads/writes, input buffer and output buffer
548 // 523 //
549 - if (!PurgeComm(COMDEV(TTYInfo), PURGE_FLAGS)) 524 + if (!PurgeComm(TTYInfo.hCommPort, PURGE_FLAGS))
550 ErrorReporter("PurgeComm"); 525 ErrorReporter("PurgeComm");
551 526
552 - CloseHandle(COMDEV(TTYInfo));  
553 - CloseHandle(READSTATTHREAD(TTYInfo));  
554 - CloseHandle(WRITERTHREAD(TTYInfo)); 527 + CloseHandle(TTYInfo.hCommPort);
  528 + CloseHandle(TTYInfo.hReaderStatus);
  529 + CloseHandle(TTYInfo.hWriter);
555 530
556 return TRUE; 531 return TRUE;
557 } 532 }
@@ -572,7 +547,7 @@ HISTORY: Date: Author: Comment: @@ -572,7 +547,7 @@ HISTORY: Date: Author: Comment:
572 -----------------------------------------------------------------------------*/ 547 -----------------------------------------------------------------------------*/
573 BOOL DisconnectOK() 548 BOOL DisconnectOK()
574 { 549 {
575 - if (!CONNECTED(TTYInfo)) 550 + if (!TTYInfo.fConnected)
576 return TRUE; 551 return TRUE;
577 552
578 return ((MessageBox(ghwndMain, "OK to Disconnect?", gszPort, MB_YESNO)) == IDYES); 553 return ((MessageBox(ghwndMain, "OK to Disconnect?", gszPort, MB_YESNO)) == IDYES);
@@ -12,21 +12,20 @@ @@ -12,21 +12,20 @@
12 PURPOSE: Program entry point and window management 12 PURPOSE: Program entry point and window management
13 13
14 FUNCTIONS: 14 FUNCTIONS:
15 - WinMain - Program entry point  
16 - VersionCheck - Checks OS version to make sure we can run  
17 - InitializeApp - Global program initialization and window class  
18 - creation  
19 - MTTTYWndProc - main window procedure  
20 - CmdDispatch - Carries out menu commands  
21 - OpenTTYChildWindow - Creates the tty child window  
22 - ScrollTTYVert - Scroll TTY window vertically  
23 - ScrollTTYHorz - Scrolls TTY window horizontally  
24 - PaintTTY - Paints the TTY window  
25 - MoveTTYCursor - moves the tty cursor  
26 - SetTTYFocus - responds to tty window getting focus  
27 - KillTTYFocus - responds to tty window losing focus  
28 - SizeTTY - responds to tty window size changes  
29 - TTYChildProc - window procedure for TTY child window 15 + WinMain - 程序入口点
  16 + VersionCheck - 检查操作系统版本以确保我们可以运行
  17 + InitializeApp - 全局程序初始化和窗口类创建
  18 + MTTTYWndProc - 主窗口程序
  19 + CmdDispatch - 执行菜单命令
  20 + OpenTTYChildWindow - 创建tty子窗口
  21 + ScrollTTYVert - 垂直滚动TTY窗口
  22 + ScrollTTYHorz - 水平滚动TTY窗口
  23 + PaintTTY - 在TTY窗口中绘制
  24 + MoveTTYCursor - 移动tty光标
  25 + SetTTYFocus - 响应tty窗口获得焦点
  26 + KillTTYFocus - 响应tty窗口失去焦点
  27 + SizeTTY - 响应tty窗口大小的变化
  28 + TTYChildProc - 用于TTY子窗口的窗口程序
30 29
31 -----------------------------------------------------------------------------*/ 30 -----------------------------------------------------------------------------*/
32 31
@@ -161,7 +160,7 @@ BOOL InitializeApp(HINSTANCE hInst, int nShowCmd) @@ -161,7 +160,7 @@ BOOL InitializeApp(HINSTANCE hInst, int nShowCmd)
161 } 160 }
162 161
163 QuerySerialPortStatusEx(TTYInfo.unOpenedPortAry,2,255); 162 QuerySerialPortStatusEx(TTYInfo.unOpenedPortAry,2,255);
164 - BGCOLOR(TTYInfo) = RGB(255,255,255); 163 + TTYInfo.rgbBGColor = RGB(255,255,255);
165 164
166 // 165 //
167 // setup program's tty child window class 166 // setup program's tty child window class
@@ -236,7 +235,7 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) @@ -236,7 +235,7 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
236 OpenTTYChildWindow(hwnd); 235 OpenTTYChildWindow(hwnd);
237 OpenSettingsToolbar(hwnd); 236 OpenSettingsToolbar(hwnd);
238 OpenStatusToolbar(hwnd); 237 OpenStatusToolbar(hwnd);
239 - ChangeConnection(hwnd, CONNECTED(TTYInfo)); 238 + ChangeConnection(hwnd, TTYInfo.fConnected);
240 break; 239 break;
241 240
242 case WM_DESTROY: 241 case WM_DESTROY:
@@ -317,8 +316,8 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) @@ -317,8 +316,8 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
317 316
318 case WM_CLOSE: 317 case WM_CLOSE:
319 if (DisconnectOK()) { 318 if (DisconnectOK()) {
320 - if (CONNECTED(TTYInfo)) {  
321 - if (TRANSFERRING(TTYInfo)) 319 + if (TTYInfo.fConnected) {
  320 + if (TTYInfo.fTransferring)
322 TransferFileTextEnd(); 321 TransferFileTextEnd();
323 BreakDownCommPort(); 322 BreakDownCommPort();
324 } 323 }
@@ -406,7 +405,7 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam) @@ -406,7 +405,7 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
406 // was abort sent from the abort button? 405 // was abort sent from the abort button?
407 if (LOWORD(lParam) == IDC_ABORTBTN) { 406 if (LOWORD(lParam) == IDC_ABORTBTN) {
408 // am I in a transfer repeat? 407 // am I in a transfer repeat?
409 - if (REPEATING(TTYInfo)) 408 + if (TTYInfo.fRepeating)
410 TransferRepeatDestroy(); 409 TransferRepeatDestroy();
411 // am I in a normal recieve state, then stop sending 410 // am I in a normal recieve state, then stop sending
412 else if (gdwReceiveState == RECEIVE_TTY) 411 else if (gdwReceiveState == RECEIVE_TTY)
@@ -462,12 +461,12 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam) @@ -462,12 +461,12 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
462 461
463 case ID_FILE_CONNECT: 462 case ID_FILE_CONNECT:
464 if (SetupCommPort() != NULL) 463 if (SetupCommPort() != NULL)
465 - ChangeConnection(hwnd, CONNECTED(TTYInfo)); 464 + ChangeConnection(hwnd, TTYInfo.fConnected);
466 break; 465 break;
467 466
468 case ID_FILE_DISCONNECT: 467 case ID_FILE_DISCONNECT:
469 if (BreakDownCommPort()) 468 if (BreakDownCommPort())
470 - ChangeConnection(hwnd, CONNECTED(TTYInfo)); 469 + ChangeConnection(hwnd, TTYInfo.fConnected);
471 break; 470 break;
472 471
473 case ID_FILE_EXIT: 472 case ID_FILE_EXIT:
@@ -535,48 +534,48 @@ BOOL NEAR ScrollTTYVert( HWND hWnd, WORD wScrollCmd, WORD wScrollPos ) @@ -535,48 +534,48 @@ BOOL NEAR ScrollTTYVert( HWND hWnd, WORD wScrollCmd, WORD wScrollPos )
535 switch (wScrollCmd) 534 switch (wScrollCmd)
536 { 535 {
537 case SB_TOP: 536 case SB_TOP:
538 - nScrollAmt = -YOFFSET( TTYInfo ) ; 537 + nScrollAmt = -TTYInfo.yOffset ;
539 break ; 538 break ;
540 539
541 case SB_BOTTOM: 540 case SB_BOTTOM:
542 - nScrollAmt = YSCROLL( TTYInfo ) - YOFFSET( TTYInfo ) ; 541 + nScrollAmt = TTYInfo.yScroll - TTYInfo.yOffset ;
543 break ; 542 break ;
544 543
545 case SB_PAGEUP: 544 case SB_PAGEUP:
546 - nScrollAmt = -YSIZE( TTYInfo ) ; 545 + nScrollAmt = -TTYInfo.ySize ;
547 break ; 546 break ;
548 547
549 case SB_PAGEDOWN: 548 case SB_PAGEDOWN:
550 - nScrollAmt = YSIZE( TTYInfo ) ; 549 + nScrollAmt = TTYInfo.ySize ;
551 break ; 550 break ;
552 551
553 case SB_LINEUP: 552 case SB_LINEUP:
554 - nScrollAmt = -YCHAR( TTYInfo ) ; 553 + nScrollAmt = -TTYInfo.yChar ;
555 break ; 554 break ;
556 555
557 case SB_LINEDOWN: 556 case SB_LINEDOWN:
558 - nScrollAmt = YCHAR( TTYInfo ) ; 557 + nScrollAmt = TTYInfo.yChar ;
559 break ; 558 break ;
560 559
561 case SB_THUMBPOSITION: 560 case SB_THUMBPOSITION:
562 - nScrollAmt = wScrollPos - YOFFSET( TTYInfo ) ; 561 + nScrollAmt = wScrollPos - TTYInfo.yOffset ;
563 break ; 562 break ;
564 563
565 default: 564 default:
566 return ( FALSE ) ; 565 return ( FALSE ) ;
567 } 566 }
568 567
569 - if ((YOFFSET( TTYInfo ) + nScrollAmt) > YSCROLL( TTYInfo ))  
570 - nScrollAmt = YSCROLL( TTYInfo ) - YOFFSET( TTYInfo ) ; 568 + if ((TTYInfo.yOffset + nScrollAmt) > TTYInfo.yScroll)
  569 + nScrollAmt = TTYInfo.yScroll - TTYInfo.yOffset ;
571 570
572 - if ((YOFFSET( TTYInfo ) + nScrollAmt) < 0)  
573 - nScrollAmt = -YOFFSET( TTYInfo ) ; 571 + if ((TTYInfo.yOffset + nScrollAmt) < 0)
  572 + nScrollAmt = -TTYInfo.yOffset ;
574 573
575 ScrollWindowEx( hWnd, 0, -nScrollAmt, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE) ; 574 ScrollWindowEx( hWnd, 0, -nScrollAmt, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE) ;
576 575
577 - YOFFSET( TTYInfo ) = YOFFSET( TTYInfo ) + nScrollAmt ; 576 + TTYInfo.yOffset = TTYInfo.yOffset + nScrollAmt ;
578 577
579 - SetScrollPos( hWnd, SB_VERT, YOFFSET( TTYInfo ), TRUE ) ; 578 + SetScrollPos( hWnd, SB_VERT, TTYInfo.yOffset, TRUE ) ;
580 579
581 return ( TRUE ) ; 580 return ( TRUE ) ;
582 581
@@ -610,43 +609,43 @@ BOOL NEAR ScrollTTYHorz( HWND hWnd, WORD wScrollCmd, WORD wScrollPos ) @@ -610,43 +609,43 @@ BOOL NEAR ScrollTTYHorz( HWND hWnd, WORD wScrollCmd, WORD wScrollPos )
610 switch (wScrollCmd) 609 switch (wScrollCmd)
611 { 610 {
612 case SB_TOP: 611 case SB_TOP:
613 - nScrollAmt = -XOFFSET( TTYInfo ) ; 612 + nScrollAmt = -TTYInfo.xOffset ;
614 break ; 613 break ;
615 614
616 case SB_BOTTOM: 615 case SB_BOTTOM:
617 - nScrollAmt = XSCROLL( TTYInfo ) - XOFFSET( TTYInfo ) ; 616 + nScrollAmt = TTYInfo.xScroll - TTYInfo.xOffset ;
618 break ; 617 break ;
619 618
620 case SB_PAGEUP: 619 case SB_PAGEUP:
621 - nScrollAmt = -XSIZE( TTYInfo ) ; 620 + nScrollAmt = -TTYInfo.xSize ;
622 break ; 621 break ;
623 622
624 case SB_PAGEDOWN: 623 case SB_PAGEDOWN:
625 - nScrollAmt = XSIZE( TTYInfo ) ; 624 + nScrollAmt = TTYInfo.xSize ;
626 break ; 625 break ;
627 626
628 case SB_LINEUP: 627 case SB_LINEUP:
629 - nScrollAmt = -XCHAR( TTYInfo ) ; 628 + nScrollAmt = -TTYInfo.xChar ;
630 break ; 629 break ;
631 630
632 case SB_LINEDOWN: 631 case SB_LINEDOWN:
633 - nScrollAmt = XCHAR( TTYInfo ) ; 632 + nScrollAmt = TTYInfo.xChar ;
634 break ; 633 break ;
635 634
636 case SB_THUMBPOSITION: 635 case SB_THUMBPOSITION:
637 - nScrollAmt = wScrollPos - XOFFSET( TTYInfo ) ; 636 + nScrollAmt = wScrollPos - TTYInfo.xOffset ;
638 break ; 637 break ;
639 638
640 default: 639 default:
641 return ( FALSE ) ; 640 return ( FALSE ) ;
642 } 641 }
643 - if ((XOFFSET( TTYInfo ) + nScrollAmt) > XSCROLL( TTYInfo ))  
644 - nScrollAmt = XSCROLL( TTYInfo ) - XOFFSET( TTYInfo ) ;  
645 - if ((XOFFSET( TTYInfo ) + nScrollAmt) < 0)  
646 - nScrollAmt = -XOFFSET( TTYInfo ) ; 642 + if ((TTYInfo.xOffset + nScrollAmt) > TTYInfo.xScroll)
  643 + nScrollAmt = TTYInfo.xScroll - TTYInfo.xOffset ;
  644 + if ((TTYInfo.xOffset + nScrollAmt) < 0)
  645 + nScrollAmt = -TTYInfo.xOffset ;
647 ScrollWindowEx( hWnd, -nScrollAmt, 0, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE) ; 646 ScrollWindowEx( hWnd, -nScrollAmt, 0, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE) ;
648 - XOFFSET( TTYInfo ) = XOFFSET( TTYInfo ) + nScrollAmt ;  
649 - SetScrollPos( hWnd, SB_HORZ, XOFFSET( TTYInfo ), TRUE ) ; 647 + TTYInfo.xOffset = TTYInfo.xOffset + nScrollAmt ;
  648 + SetScrollPos( hWnd, SB_HORZ, TTYInfo.xOffset, TRUE ) ;
650 649
651 return ( TRUE ) ; 650 return ( TRUE ) ;
652 651
@@ -686,34 +685,34 @@ BOOL NEAR PaintTTY( HWND hWnd ) @@ -686,34 +685,34 @@ BOOL NEAR PaintTTY( HWND hWnd )
686 int nCount, nHorzPos, nVertPos ; 685 int nCount, nHorzPos, nVertPos ;
687 686
688 hDC = BeginPaint( hWnd, &ps ) ; 687 hDC = BeginPaint( hWnd, &ps ) ;
689 - hOldFont = SelectObject( hDC, HTTYFONT( TTYInfo ) ) ;  
690 - SetTextColor( hDC, FGCOLOR( TTYInfo ) ) ;  
691 - SetBkColor( hDC, BGCOLOR( TTYInfo ) ) ; 688 + hOldFont = SelectObject( hDC, TTYInfo.hTTYFont ) ;
  689 + SetTextColor( hDC, TTYInfo.rgbFGColor ) ;
  690 + SetBkColor( hDC, TTYInfo.rgbBGColor ) ;
692 rect = ps.rcPaint ; 691 rect = ps.rcPaint ;
693 nRow = 692 nRow =
694 min( MAXROWS - 1, 693 min( MAXROWS - 1,
695 - max( 0, (rect.top + YOFFSET( TTYInfo )) / YCHAR( TTYInfo ) ) ) ; 694 + max( 0, (rect.top + TTYInfo.yOffset) / TTYInfo.yChar ) ) ;
696 nEndRow = 695 nEndRow =
697 min( MAXROWS - 1, 696 min( MAXROWS - 1,
698 - ((rect.bottom + YOFFSET( TTYInfo ) - 1) / YCHAR( TTYInfo ) ) ) ; 697 + ((rect.bottom + TTYInfo.yOffset - 1) / TTYInfo.yChar ) ) ;
699 nCol = 698 nCol =
700 min( MAXCOLS - 1, 699 min( MAXCOLS - 1,
701 - max( 0, (rect.left + XOFFSET( TTYInfo )) / XCHAR( TTYInfo ) ) ) ; 700 + max( 0, (rect.left + TTYInfo.xOffset) / TTYInfo.xChar ) ) ;
702 nEndCol = 701 nEndCol =
703 min( MAXCOLS - 1, 702 min( MAXCOLS - 1,
704 - ((rect.right + XOFFSET( TTYInfo ) - 1) / XCHAR( TTYInfo ) ) ) ; 703 + ((rect.right + TTYInfo.xOffset - 1) / TTYInfo.xChar ) ) ;
705 nCount = nEndCol - nCol + 1 ; 704 nCount = nEndCol - nCol + 1 ;
706 for (; nRow <= nEndRow; nRow++) 705 for (; nRow <= nEndRow; nRow++)
707 { 706 {
708 - nVertPos = (nRow * YCHAR( TTYInfo )) - YOFFSET( TTYInfo ) ;  
709 - nHorzPos = (nCol * XCHAR( TTYInfo )) - XOFFSET( TTYInfo ) ; 707 + nVertPos = (nRow * TTYInfo.yChar) - TTYInfo.yOffset ;
  708 + nHorzPos = (nCol * TTYInfo.xChar) - TTYInfo.xOffset ;
710 rect.top = nVertPos ; 709 rect.top = nVertPos ;
711 - rect.bottom = nVertPos + YCHAR( TTYInfo ) ; 710 + rect.bottom = nVertPos + TTYInfo.yChar ;
712 rect.left = nHorzPos ; 711 rect.left = nHorzPos ;
713 - rect.right = nHorzPos + XCHAR( TTYInfo ) * nCount ; 712 + rect.right = nHorzPos + TTYInfo.xChar * nCount ;
714 SetBkMode( hDC, TRANSPARENT ) ; 713 SetBkMode( hDC, TRANSPARENT ) ;
715 ExtTextOut( hDC, nHorzPos, nVertPos, ETO_OPAQUE | ETO_CLIPPED, &rect, 714 ExtTextOut( hDC, nHorzPos, nVertPos, ETO_OPAQUE | ETO_CLIPPED, &rect,
716 - (LPSTR)( SCREEN( TTYInfo ) + nRow * MAXCOLS + nCol ), 715 + (LPSTR)( TTYInfo.Screen + nRow * MAXCOLS + nCol ),
717 nCount, NULL ) ; 716 nCount, NULL ) ;
718 } 717 }
719 SelectObject( hDC, hOldFont ) ; 718 SelectObject( hDC, hOldFont ) ;
@@ -740,11 +739,11 @@ BOOL NEAR PaintTTY( HWND hWnd ) @@ -740,11 +739,11 @@ BOOL NEAR PaintTTY( HWND hWnd )
740 //--------------------------------------------------------------------------- 739 //---------------------------------------------------------------------------
741 BOOL NEAR MoveTTYCursor( HWND hWnd ) 740 BOOL NEAR MoveTTYCursor( HWND hWnd )
742 { 741 {
743 - if (CONNECTED( TTYInfo ) && (CURSORSTATE( TTYInfo ) & CS_SHOW))  
744 - SetCaretPos( (COLUMN( TTYInfo ) * XCHAR( TTYInfo )) -  
745 - XOFFSET( TTYInfo ),  
746 - (ROW( TTYInfo ) * YCHAR( TTYInfo )) -  
747 - YOFFSET( TTYInfo ) ) ; 742 + if (TTYInfo.fConnected && (TTYInfo.wCursorState& CS_SHOW))
  743 + SetCaretPos( (TTYInfo.nColumn * TTYInfo.xChar) -
  744 + TTYInfo.xOffset,
  745 + (TTYInfo.nRow * TTYInfo.yChar) -
  746 + TTYInfo.yOffset ) ;
748 747
749 return ( TRUE ) ; 748 return ( TRUE ) ;
750 749
@@ -767,11 +766,11 @@ BOOL NEAR MoveTTYCursor( HWND hWnd ) @@ -767,11 +766,11 @@ BOOL NEAR MoveTTYCursor( HWND hWnd )
767 //--------------------------------------------------------------------------- 766 //---------------------------------------------------------------------------
768 BOOL NEAR SetTTYFocus( HWND hWnd ) 767 BOOL NEAR SetTTYFocus( HWND hWnd )
769 { 768 {
770 - if (CONNECTED(TTYInfo) && (CURSORSTATE( TTYInfo ) != CS_SHOW) ) 769 + if (TTYInfo.fConnected && (TTYInfo.wCursorState!= CS_SHOW) )
771 { 770 {
772 - CreateCaret( hWnd, NULL, XCHAR( TTYInfo ), YCHAR( TTYInfo ) ) ; 771 + CreateCaret( hWnd, NULL, TTYInfo.xChar, TTYInfo.yChar ) ;
773 ShowCaret( hWnd ) ; 772 ShowCaret( hWnd ) ;
774 - CURSORSTATE( TTYInfo ) = CS_SHOW ; 773 + TTYInfo.wCursorState= CS_SHOW ;
775 } 774 }
776 775
777 MoveTTYCursor( hWnd ) ; 776 MoveTTYCursor( hWnd ) ;
@@ -796,11 +795,11 @@ BOOL NEAR SetTTYFocus( HWND hWnd ) @@ -796,11 +795,11 @@ BOOL NEAR SetTTYFocus( HWND hWnd )
796 //--------------------------------------------------------------------------- 795 //---------------------------------------------------------------------------
797 BOOL NEAR KillTTYFocus( HWND hWnd ) 796 BOOL NEAR KillTTYFocus( HWND hWnd )
798 { 797 {
799 - if (CURSORSTATE( TTYInfo ) != CS_HIDE) 798 + if (TTYInfo.wCursorState!= CS_HIDE)
800 { 799 {
801 HideCaret( hWnd ) ; 800 HideCaret( hWnd ) ;
802 DestroyCaret() ; 801 DestroyCaret() ;
803 - CURSORSTATE( TTYInfo ) = CS_HIDE ; 802 + TTYInfo.wCursorState= CS_HIDE ;
804 } 803 }
805 return ( TRUE ) ; 804 return ( TRUE ) ;
806 805
@@ -835,29 +834,29 @@ BOOL NEAR SizeTTY( HWND hWnd, WORD wWidth, WORD wHeight ) @@ -835,29 +834,29 @@ BOOL NEAR SizeTTY( HWND hWnd, WORD wWidth, WORD wHeight )
835 // 834 //
836 // adjust vert settings 835 // adjust vert settings
837 // 836 //
838 - YSIZE( TTYInfo ) = (int) wHeight ;  
839 - YSCROLL( TTYInfo ) = max( 0, (MAXROWS * YCHAR( TTYInfo )) -  
840 - YSIZE( TTYInfo ) ) ;  
841 - nScrollAmt = min( YSCROLL( TTYInfo ), YOFFSET( TTYInfo ) ) -  
842 - YOFFSET( TTYInfo ) ; 837 + TTYInfo.ySize = (int) wHeight ;
  838 + TTYInfo.yScroll = max( 0, (MAXROWS * TTYInfo.yChar) -
  839 + TTYInfo.ySize ) ;
  840 + nScrollAmt = min( TTYInfo.yScroll, TTYInfo.yOffset ) -
  841 + TTYInfo.yOffset ;
843 ScrollWindow( hWnd, 0, -nScrollAmt, NULL, NULL ) ; 842 ScrollWindow( hWnd, 0, -nScrollAmt, NULL, NULL ) ;
844 843
845 - YOFFSET( TTYInfo ) = YOFFSET( TTYInfo ) + nScrollAmt ;  
846 - SetScrollPos( hWnd, SB_VERT, YOFFSET( TTYInfo ), FALSE ) ;  
847 - SetScrollRange( hWnd, SB_VERT, 0, YSCROLL( TTYInfo ), TRUE ) ; 844 + TTYInfo.yOffset = TTYInfo.yOffset + nScrollAmt ;
  845 + SetScrollPos( hWnd, SB_VERT, TTYInfo.yOffset, FALSE ) ;
  846 + SetScrollRange( hWnd, SB_VERT, 0, TTYInfo.yScroll, TRUE ) ;
848 847
849 // 848 //
850 // adjust horz settings 849 // adjust horz settings
851 // 850 //
852 - XSIZE( TTYInfo ) = (int) wHeight ;  
853 - XSCROLL( TTYInfo ) = max( 0, (MAXCOLS * XCHAR( TTYInfo )) -  
854 - XSIZE( TTYInfo ) ) ;  
855 - nScrollAmt = min( XSCROLL( TTYInfo ), XOFFSET( TTYInfo )) -  
856 - XOFFSET( TTYInfo ) ; 851 + TTYInfo.xSize = (int) wHeight ;
  852 + TTYInfo.xScroll = max( 0, (MAXCOLS * TTYInfo.xChar) -
  853 + TTYInfo.xSize ) ;
  854 + nScrollAmt = min( TTYInfo.xScroll, TTYInfo.xOffset) -
  855 + TTYInfo.xOffset ;
857 ScrollWindow( hWnd, nScrollAmt, 0, NULL, NULL ); 856 ScrollWindow( hWnd, nScrollAmt, 0, NULL, NULL );
858 - XOFFSET( TTYInfo ) = XOFFSET( TTYInfo ) + nScrollAmt ;  
859 - SetScrollRange( hWnd, SB_HORZ, 0, XSCROLL( TTYInfo ), FALSE ) ;  
860 - SetScrollPos( hWnd, SB_HORZ, XOFFSET( TTYInfo ), TRUE ) ; 857 + TTYInfo.xOffset = TTYInfo.xOffset + nScrollAmt ;
  858 + SetScrollRange( hWnd, SB_HORZ, 0, TTYInfo.xScroll, FALSE ) ;
  859 + SetScrollPos( hWnd, SB_HORZ, TTYInfo.xOffset, TRUE ) ;
861 860
862 InvalidateRect( hWnd, NULL, FALSE ) ; // redraw entire window 861 InvalidateRect( hWnd, NULL, FALSE ) ; // redraw entire window
863 862
@@ -906,12 +905,12 @@ int WINAPI TTYChildProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) @@ -906,12 +905,12 @@ int WINAPI TTYChildProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
906 // 905 //
907 // keyboard activity in TTY Window 906 // keyboard activity in TTY Window
908 // 907 //
909 - if (CONNECTED(TTYInfo)) { 908 + if (TTYInfo.fConnected) {
910 909
911 if (!WriterAddNewNode(WRITE_CHAR, 0, (char) wParam, NULL, NULL, NULL)) 910 if (!WriterAddNewNode(WRITE_CHAR, 0, (char) wParam, NULL, NULL, NULL))
912 return FALSE; 911 return FALSE;
913 912
914 - if (LOCALECHO(TTYInfo)) 913 + if (TTYInfo.fLocalEcho)
915 OutputABufferToWindow(ghWndTTY, (CHAR *) &wParam, 1); 914 OutputABufferToWindow(ghWndTTY, (CHAR *) &wParam, 1);
916 } 915 }
917 } 916 }
@@ -105,7 +105,7 @@ HANDLE ghFileCapture; @@ -105,7 +105,7 @@ HANDLE ghFileCapture;
105 105
106 // 106 //
107 // Status updating 107 // Status updating
108 -// 108 +//ÁÙ½Ö×ÊÔ´, »¥³â·ÃÎÊ
109 CRITICAL_SECTION gStatusCritical; 109 CRITICAL_SECTION gStatusCritical;
110 HANDLE ghStatusMessageEvent; 110 HANDLE ghStatusMessageEvent;
111 HANDLE ghStatusMessageHeap; 111 HANDLE ghStatusMessageHeap;
@@ -131,7 +131,7 @@ char gszPort[10]; @@ -131,7 +131,7 @@ char gszPort[10];
131 131
132 // 132 //
133 // Writer heap variables 133 // Writer heap variables
134 -// 134 +// ÁÙ½Ö×ÊÔ´
135 CRITICAL_SECTION gcsWriterHeap; 135 CRITICAL_SECTION gcsWriterHeap;
136 CRITICAL_SECTION gcsDataHeap; 136 CRITICAL_SECTION gcsDataHeap;
137 HANDLE ghWriterHeap; 137 HANDLE ghWriterHeap;
@@ -64,13 +64,13 @@ void OutputABufferToWindow(HWND hTTY, char * lpBuf, DWORD dwBufLen) @@ -64,13 +64,13 @@ void OutputABufferToWindow(HWND hTTY, char * lpBuf, DWORD dwBufLen)
64 break ; 64 break ;
65 65
66 case ASCII_BS: // Backspace CHAR 66 case ASCII_BS: // Backspace CHAR
67 - if (COLUMN( TTYInfo ) > 0)  
68 - COLUMN( TTYInfo ) -- ; 67 + if (TTYInfo.nColumn > 0)
  68 + TTYInfo.nColumn -- ;
69 break ; 69 break ;
70 70
71 case ASCII_CR: // Carriage Return 71 case ASCII_CR: // Carriage Return
72 - COLUMN( TTYInfo ) = 0 ;  
73 - if (!NEWLINE( TTYInfo )) 72 + TTYInfo.nColumn = 0 ;
  73 + if (!TTYInfo.fNewLine)
74 break; 74 break;
75 75
76 // 76 //
@@ -78,35 +78,35 @@ void OutputABufferToWindow(HWND hTTY, char * lpBuf, DWORD dwBufLen) @@ -78,35 +78,35 @@ void OutputABufferToWindow(HWND hTTY, char * lpBuf, DWORD dwBufLen)
78 // 78 //
79 79
80 case ASCII_LF: // Line Feed 80 case ASCII_LF: // Line Feed
81 - if (ROW( TTYInfo )++ == MAXROWS - 1) 81 + if (TTYInfo.nRow++ == MAXROWS - 1)
82 { 82 {
83 - MoveMemory( (LPSTR) (SCREEN( TTYInfo )),  
84 - (LPSTR) (SCREEN( TTYInfo ) + MAXCOLS), 83 + MoveMemory( (LPSTR) (TTYInfo.Screen),
  84 + (LPSTR) (TTYInfo.Screen + MAXCOLS),
85 (MAXROWS - 1) * MAXCOLS ) ; 85 (MAXROWS - 1) * MAXCOLS ) ;
86 - FillMemory((LPSTR) (SCREEN( TTYInfo ) + (MAXROWS - 1) * MAXCOLS), 86 + FillMemory((LPSTR) (TTYInfo.Screen + (MAXROWS - 1) * MAXCOLS),
87 MAXCOLS, ' ' ) ; 87 MAXCOLS, ' ' ) ;
88 InvalidateRect( hTTY, NULL, FALSE ) ; 88 InvalidateRect( hTTY, NULL, FALSE ) ;
89 - ROW( TTYInfo )-- ; 89 + TTYInfo.nRow-- ;
90 } 90 }
91 break ; 91 break ;
92 92
93 default: // standard character 93 default: // standard character
94 - SCREENCHAR(TTYInfo, COLUMN(TTYInfo), ROW(TTYInfo)) = lpBuf[ i ];  
95 -  
96 - rect.left = (COLUMN( TTYInfo ) * XCHAR( TTYInfo )) -  
97 - XOFFSET( TTYInfo ) ;  
98 - rect.right = rect.left + XCHAR( TTYInfo ) ;  
99 - rect.top = (ROW( TTYInfo ) * YCHAR( TTYInfo )) -  
100 - YOFFSET( TTYInfo ) ;  
101 - rect.bottom = rect.top + YCHAR( TTYInfo ) ; 94 + TTYInfo.Screen[TTYInfo.nRow * MAXCOLS + TTYInfo.nColumn]= lpBuf[ i ];
  95 +
  96 + rect.left = (TTYInfo.nColumn * TTYInfo.xChar) -
  97 + TTYInfo.xOffset ;
  98 + rect.right = rect.left + TTYInfo.xChar ;
  99 + rect.top = (TTYInfo.nRow * TTYInfo.yChar) -
  100 + TTYInfo.yOffset ;
  101 + rect.bottom = rect.top + TTYInfo.yChar ;
102 InvalidateRect( hTTY, &rect, FALSE ) ; 102 InvalidateRect( hTTY, &rect, FALSE ) ;
103 103
104 // 104 //
105 // Line wrap 105 // Line wrap
106 // 106 //
107 - if (COLUMN( TTYInfo ) < MAXCOLS-1 )  
108 - COLUMN( TTYInfo )++ ;  
109 - else if (AUTOWRAP( TTYInfo )) 107 + if (TTYInfo.nColumn < MAXCOLS-1 )
  108 + TTYInfo.nColumn++ ;
  109 + else if (TTYInfo.fAutowrap)
110 OutputABufferToWindow(hTTY, "\r\n", 2 ) ; 110 OutputABufferToWindow(hTTY, "\r\n", 2 ) ;
111 111
112 break; 112 break;
@@ -100,21 +100,21 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -100,21 +100,21 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
100 // If no reading is allowed, then set flag to 100 // If no reading is allowed, then set flag to
101 // make it look like a read is already outstanding. 101 // make it look like a read is already outstanding.
102 // 102 //
103 - if (NOREADING( TTYInfo )) 103 + if (TTYInfo.fNoReading)
104 fWaitingOnRead = TRUE; 104 fWaitingOnRead = TRUE;
105 105
106 // 106 //
107 // if no read is outstanding, then issue another one 107 // if no read is outstanding, then issue another one
108 // 108 //
109 if (!fWaitingOnRead) { 109 if (!fWaitingOnRead) {
110 - if (!ReadFile(COMDEV(TTYInfo), lpBuf_first, AMOUNT_TO_READ, &dwRead, &osReader)) { 110 + if (!ReadFile(TTYInfo.hCommPort, lpBuf_first, AMOUNT_TO_READ, &dwRead, &osReader)) {
111 if (GetLastError() != ERROR_IO_PENDING) // read not delayed? 111 if (GetLastError() != ERROR_IO_PENDING) // read not delayed?
112 ErrorInComm("ReadFile in ReaderAndStatusProc"); 112 ErrorInComm("ReadFile in ReaderAndStatusProc");
113 113
114 fWaitingOnRead = TRUE; 114 fWaitingOnRead = TRUE;
115 } 115 }
116 else { // read completed immediately 116 else { // read completed immediately
117 - if ((dwRead != MAX_READ_BUFFER) && SHOWTIMEOUTS(TTYInfo)) 117 + if ((dwRead != MAX_READ_BUFFER) && TTYInfo.fDisplayTimeouts)
118 UpdateStatus("Read timed out immediately.\r\n"); 118 UpdateStatus("Read timed out immediately.\r\n");
119 119
120 if (dwRead) 120 if (dwRead)
@@ -129,9 +129,9 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -129,9 +129,9 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
129 // This will cause a pending WaitCommEvent to complete 129 // This will cause a pending WaitCommEvent to complete
130 // and the resultant event flag will be NULL. 130 // and the resultant event flag will be NULL.
131 // 131 //
132 - if (dwStoredFlags != EVENTFLAGS(TTYInfo)) {  
133 - dwStoredFlags = EVENTFLAGS(TTYInfo);  
134 - if (!SetCommMask(COMDEV(TTYInfo), dwStoredFlags)) 132 + if (dwStoredFlags != TTYInfo.dwEventFlags) {
  133 + dwStoredFlags = TTYInfo.dwEventFlags;
  134 + if (!SetCommMask(TTYInfo.hCommPort, dwStoredFlags))
135 ErrorReporter("SetCommMask"); 135 ErrorReporter("SetCommMask");
136 } 136 }
137 137
@@ -139,16 +139,16 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -139,16 +139,16 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
139 // If event checks are not allowed, then make it look 139 // If event checks are not allowed, then make it look
140 // like an event check operation is outstanding 140 // like an event check operation is outstanding
141 // 141 //
142 - if (NOEVENTS(TTYInfo)) 142 + if (TTYInfo.fNoEvents)
143 fWaitingOnStat = TRUE; 143 fWaitingOnStat = TRUE;
144 // 144 //
145 // if no status check is outstanding, then issue another one 145 // if no status check is outstanding, then issue another one
146 // 146 //
147 if (!fWaitingOnStat) { 147 if (!fWaitingOnStat) {
148 - if (NOEVENTS(TTYInfo)) 148 + if (TTYInfo.fNoEvents)
149 fWaitingOnStat = TRUE; 149 fWaitingOnStat = TRUE;
150 else { 150 else {
151 - if (!WaitCommEvent(COMDEV(TTYInfo), &dwCommEvent, &osStatus)) { 151 + if (!WaitCommEvent(TTYInfo.hCommPort, &dwCommEvent, &osStatus)) {
152 if (GetLastError() != ERROR_IO_PENDING) // Wait not delayed? 152 if (GetLastError() != ERROR_IO_PENDING) // Wait not delayed?
153 ErrorReporter("WaitCommEvent"); 153 ErrorReporter("WaitCommEvent");
154 else 154 else
@@ -171,14 +171,14 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -171,14 +171,14 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
171 // read completed 171 // read completed
172 // 172 //
173 case WAIT_OBJECT_0: 173 case WAIT_OBJECT_0:
174 - if (!GetOverlappedResult(COMDEV(TTYInfo), &osReader, &dwRead, FALSE)) { 174 + if (!GetOverlappedResult(TTYInfo.hCommPort, &osReader, &dwRead, FALSE)) {
175 if (GetLastError() == ERROR_OPERATION_ABORTED) 175 if (GetLastError() == ERROR_OPERATION_ABORTED)
176 UpdateStatus("Read aborted\r\n"); 176 UpdateStatus("Read aborted\r\n");
177 else 177 else
178 ErrorInComm("GetOverlappedResult (in Reader)"); 178 ErrorInComm("GetOverlappedResult (in Reader)");
179 } 179 }
180 else { // read completed successfully 180 else { // read completed successfully
181 - if ((dwRead != MAX_READ_BUFFER) && SHOWTIMEOUTS(TTYInfo)) 181 + if ((dwRead != MAX_READ_BUFFER) && TTYInfo.fDisplayTimeouts)
182 UpdateStatus("Read timed out overlapped.\r\n"); 182 UpdateStatus("Read timed out overlapped.\r\n");
183 183
184 if (dwRead) 184 if (dwRead)
@@ -259,7 +259,7 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -259,7 +259,7 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
259 // status completed 259 // status completed
260 // 260 //
261 case WAIT_OBJECT_0 + 1: 261 case WAIT_OBJECT_0 + 1:
262 - if (!GetOverlappedResult(COMDEV(TTYInfo), &osStatus, &dwOvRes, FALSE)) { 262 + if (!GetOverlappedResult(TTYInfo.hCommPort, &osStatus, &dwOvRes, FALSE)) {
263 if (GetLastError() == ERROR_OPERATION_ABORTED) 263 if (GetLastError() == ERROR_OPERATION_ABORTED)
264 UpdateStatus("WaitCommEvent aborted\r\n"); 264 UpdateStatus("WaitCommEvent aborted\r\n");
265 else 265 else
@@ -295,7 +295,7 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV) @@ -295,7 +295,7 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
295 // if status checks are not allowed, then don't issue the 295 // if status checks are not allowed, then don't issue the
296 // modem status check nor the com stat check 296 // modem status check nor the com stat check
297 // 297 //
298 - if (!NOSTATUS(TTYInfo)) { 298 + if (!TTYInfo.fNoStatus) {
299 CheckModemStatus(FALSE); // take this opportunity to do 299 CheckModemStatus(FALSE); // take this opportunity to do
300 CheckComStat(FALSE); // a modem status check and 300 CheckComStat(FALSE); // a modem status check and
301 // a comm status check 301 // a comm status check
@@ -260,36 +260,36 @@ void UpdateTTYInfo() @@ -260,36 +260,36 @@ void UpdateTTYInfo()
260 // 260 //
261 GetDlgItemText(ghWndToolbarDlg, IDC_PORTCOMBO, gszPort, sizeof(gszPort)); 261 GetDlgItemText(ghWndToolbarDlg, IDC_PORTCOMBO, gszPort, sizeof(gszPort));
262 262
263 - BAUDRATE(TTYInfo) = GetdwTTYItem( ghWndToolbarDlg, 263 + TTYInfo.dwBaudRate = GetdwTTYItem( ghWndToolbarDlg,
264 IDC_BAUDCOMBO, 264 IDC_BAUDCOMBO,
265 szBaud, 265 szBaud,
266 BaudTable, 266 BaudTable,
267 sizeof(BaudTable)/sizeof(BaudTable[0])); 267 sizeof(BaudTable)/sizeof(BaudTable[0]));
268 268
269 - PARITY(TTYInfo) = GetbTTYItem( ghWndToolbarDlg, 269 + TTYInfo.bParity = GetbTTYItem( ghWndToolbarDlg,
270 IDC_PARITYCOMBO, 270 IDC_PARITYCOMBO,
271 szParity, 271 szParity,
272 ParityTable, 272 ParityTable,
273 sizeof(ParityTable)/sizeof(ParityTable[0])); 273 sizeof(ParityTable)/sizeof(ParityTable[0]));
274 274
275 - STOPBITS(TTYInfo) = GetbTTYItem( ghWndToolbarDlg, 275 + TTYInfo.bStopBits = GetbTTYItem( ghWndToolbarDlg,
276 IDC_STOPBITSCOMBO, 276 IDC_STOPBITSCOMBO,
277 szStopBits, 277 szStopBits,
278 StopBitsTable, 278 StopBitsTable,
279 sizeof(StopBitsTable)/sizeof(StopBitsTable[0])); 279 sizeof(StopBitsTable)/sizeof(StopBitsTable[0]));
280 280
281 - LOCALECHO(TTYInfo) = IsDlgButtonChecked(ghWndToolbarDlg, IDC_LOCALECHOCHK);  
282 - BYTESIZE(TTYInfo) = GetDlgItemInt(ghWndToolbarDlg, IDC_DATABITSCOMBO, NULL, FALSE);  
283 - NEWLINE(TTYInfo) = IsDlgButtonChecked(ghWndToolbarDlg, IDC_LFBTN);  
284 - AUTOWRAP(TTYInfo) = IsDlgButtonChecked(ghWndToolbarDlg, IDC_AUTOWRAPCHK);  
285 - DISPLAYERRORS(TTYInfo) = IsDlgButtonChecked(ghWndToolbarDlg, IDC_DISPLAYERRORSCHK); 281 + TTYInfo.fLocalEcho = IsDlgButtonChecked(ghWndToolbarDlg, IDC_LOCALECHOCHK);
  282 + TTYInfo.bByteSize = GetDlgItemInt(ghWndToolbarDlg, IDC_DATABITSCOMBO, NULL, FALSE);
  283 + TTYInfo.fNewLine = IsDlgButtonChecked(ghWndToolbarDlg, IDC_LFBTN);
  284 + TTYInfo.fAutowrap = IsDlgButtonChecked(ghWndToolbarDlg, IDC_AUTOWRAPCHK);
  285 + TTYInfo.fDisplayErrors = IsDlgButtonChecked(ghWndToolbarDlg, IDC_DISPLAYERRORSCHK);
286 286
287 - NOREADING(TTYInfo) = IsDlgButtonChecked(ghWndToolbarDlg, IDC_NOREADINGCHK);  
288 - NOWRITING(TTYInfo) = IsDlgButtonChecked(ghWndToolbarDlg, IDC_NOWRITINGCHK);  
289 - NOEVENTS(TTYInfo) = IsDlgButtonChecked(ghWndToolbarDlg, IDC_NOEVENTSCHK);  
290 - NOSTATUS(TTYInfo) = IsDlgButtonChecked(ghWndToolbarDlg, IDC_NOSTATUSCHK); 287 + TTYInfo.fNoReading = IsDlgButtonChecked(ghWndToolbarDlg, IDC_NOREADINGCHK);
  288 + TTYInfo.fNoWriting = IsDlgButtonChecked(ghWndToolbarDlg, IDC_NOWRITINGCHK);
  289 + TTYInfo.fNoEvents = IsDlgButtonChecked(ghWndToolbarDlg, IDC_NOEVENTSCHK);
  290 + TTYInfo.fNoStatus = IsDlgButtonChecked(ghWndToolbarDlg, IDC_NOSTATUSCHK);
291 291
292 - if (CONNECTED(TTYInfo)) // if connected, then update port state 292 + if (TTYInfo.fConnected) // if connected, then update port state
293 UpdateConnection(); 293 UpdateConnection();
294 294
295 return; 295 return;
@@ -317,21 +317,21 @@ BOOL UpdateConnection() @@ -317,21 +317,21 @@ BOOL UpdateConnection()
317 // 317 //
318 // get current DCB settings 318 // get current DCB settings
319 // 319 //
320 - if (!GetCommState(COMDEV(TTYInfo), &dcb)) 320 + if (!GetCommState(TTYInfo.hCommPort, &dcb))
321 ErrorReporter("GetCommState"); 321 ErrorReporter("GetCommState");
322 322
323 // 323 //
324 // update DCB rate, byte size, parity, and stop bits size 324 // update DCB rate, byte size, parity, and stop bits size
325 // 325 //
326 - dcb.BaudRate = BAUDRATE(TTYInfo);  
327 - dcb.ByteSize = BYTESIZE(TTYInfo);  
328 - dcb.Parity = PARITY(TTYInfo);  
329 - dcb.StopBits = STOPBITS(TTYInfo); 326 + dcb.BaudRate = TTYInfo.dwBaudRate;
  327 + dcb.ByteSize = TTYInfo.bByteSize;
  328 + dcb.Parity = TTYInfo.bParity;
  329 + dcb.StopBits = TTYInfo.bStopBits;
330 330
331 // 331 //
332 // update event flags 332 // update event flags
333 // 333 //
334 - if (EVENTFLAGS(TTYInfo) & EV_RXFLAG) 334 + if (TTYInfo.dwEventFlags & EV_RXFLAG)
335 dcb.EvtChar = TTYInfo.chFlag; 335 dcb.EvtChar = TTYInfo.chFlag;
336 else 336 else
337 dcb.EvtChar = '\0'; 337 dcb.EvtChar = '\0';
@@ -339,19 +339,19 @@ BOOL UpdateConnection() @@ -339,19 +339,19 @@ BOOL UpdateConnection()
339 // 339 //
340 // update flow control settings 340 // update flow control settings
341 // 341 //
342 - dcb.fDtrControl = DTRCONTROL(TTYInfo);  
343 - dcb.fRtsControl = RTSCONTROL(TTYInfo); 342 + dcb.fDtrControl = TTYInfo.fDtrControl;
  343 + dcb.fRtsControl = TTYInfo.fRtsControl;
344 344
345 - dcb.fOutxCtsFlow = CTSOUTFLOW(TTYInfo);  
346 - dcb.fOutxDsrFlow = DSROUTFLOW(TTYInfo);  
347 - dcb.fDsrSensitivity = DSRINFLOW(TTYInfo);  
348 - dcb.fOutX = XONXOFFOUTFLOW(TTYInfo);  
349 - dcb.fInX = XONXOFFINFLOW(TTYInfo);  
350 - dcb.fTXContinueOnXoff = TXAFTERXOFFSENT(TTYInfo);  
351 - dcb.XonChar = XONCHAR(TTYInfo);  
352 - dcb.XoffChar = XOFFCHAR(TTYInfo);  
353 - dcb.XonLim = XONLIMIT(TTYInfo);  
354 - dcb.XoffLim = XOFFLIMIT(TTYInfo); 345 + dcb.fOutxCtsFlow = TTYInfo.fCTSOutFlow;
  346 + dcb.fOutxDsrFlow = TTYInfo.fDSROutFlow;
  347 + dcb.fDsrSensitivity = TTYInfo.fDSRInFlow;
  348 + dcb.fOutX = TTYInfo.fXonXoffOutFlow;
  349 + dcb.fInX = TTYInfo.fXonXoffInFlow;
  350 + dcb.fTXContinueOnXoff = TTYInfo.fTXafterXoffSent;
  351 + dcb.XonChar = TTYInfo.chXON;
  352 + dcb.XoffChar = TTYInfo.chXOFF;
  353 + dcb.XonLim = TTYInfo.wXONLimit;
  354 + dcb.XoffLim = TTYInfo.wXOFFLimit;
355 355
356 // 356 //
357 // DCB settings not in the user's control 357 // DCB settings not in the user's control
@@ -361,13 +361,13 @@ BOOL UpdateConnection() @@ -361,13 +361,13 @@ BOOL UpdateConnection()
361 // 361 //
362 // set new state 362 // set new state
363 // 363 //
364 - if (!SetCommState(COMDEV(TTYInfo), &dcb)) 364 + if (!SetCommState(TTYInfo.hCommPort, &dcb))
365 ErrorReporter("SetCommState"); 365 ErrorReporter("SetCommState");
366 366
367 // 367 //
368 // set new timeouts 368 // set new timeouts
369 // 369 //
370 - if (!SetCommTimeouts(COMDEV(TTYInfo), &(TIMEOUTSNEW(TTYInfo)))) 370 + if (!SetCommTimeouts(TTYInfo.hCommPort, &(TTYInfo.timeoutsnew)))
371 ErrorReporter("SetCommTimeouts"); 371 ErrorReporter("SetCommTimeouts");
372 372
373 return TRUE; 373 return TRUE;
@@ -487,7 +487,7 @@ BOOL SettingsDlgInit( HWND hDlg ) @@ -487,7 +487,7 @@ BOOL SettingsDlgInit( HWND hDlg )
487 } 487 }
488 488
489 SendDlgItemMessage( hDlg, IDC_PORTCOMBO, CB_SETCURSEL, 489 SendDlgItemMessage( hDlg, IDC_PORTCOMBO, CB_SETCURSEL,
490 - (WPARAM) (PORT( TTYInfo ) - 1), 0L ) ; 490 + (WPARAM) (TTYInfo.bPort - 1), 0L ) ;
491 491
492 GetDlgItemText(hDlg, IDC_PORTCOMBO, gszPort, sizeof(gszPort)); 492 GetDlgItemText(hDlg, IDC_PORTCOMBO, gszPort, sizeof(gszPort));
493 493
@@ -497,7 +497,7 @@ BOOL SettingsDlgInit( HWND hDlg ) @@ -497,7 +497,7 @@ BOOL SettingsDlgInit( HWND hDlg )
497 FillComboBox( GetDlgItem( hDlg, IDC_BAUDCOMBO ), 497 FillComboBox( GetDlgItem( hDlg, IDC_BAUDCOMBO ),
498 szBaud, BaudTable, 498 szBaud, BaudTable,
499 sizeof( BaudTable ) / sizeof( BaudTable[ 0 ] ), 499 sizeof( BaudTable ) / sizeof( BaudTable[ 0 ] ),
500 - BAUDRATE( TTYInfo ) ) ; 500 + TTYInfo.dwBaudRate ) ;
501 501
502 // 502 //
503 // fill data bits combo box and make initial selection 503 // fill data bits combo box and make initial selection
@@ -511,7 +511,7 @@ BOOL SettingsDlgInit( HWND hDlg ) @@ -511,7 +511,7 @@ BOOL SettingsDlgInit( HWND hDlg )
511 // 511 //
512 // if wCount is current selection, tell the combo box 512 // if wCount is current selection, tell the combo box
513 // 513 //
514 - if (wCount == BYTESIZE( TTYInfo )) 514 + if (wCount == TTYInfo.bByteSize)
515 SendDlgItemMessage( hDlg, IDC_DATABITSCOMBO, CB_SETCURSEL, 515 SendDlgItemMessage( hDlg, IDC_DATABITSCOMBO, CB_SETCURSEL,
516 (WPARAM) wPosition, 0L ) ; 516 (WPARAM) wPosition, 0L ) ;
517 } 517 }
@@ -522,7 +522,7 @@ BOOL SettingsDlgInit( HWND hDlg ) @@ -522,7 +522,7 @@ BOOL SettingsDlgInit( HWND hDlg )
522 FillComboBox( GetDlgItem( hDlg, IDC_PARITYCOMBO ), 522 FillComboBox( GetDlgItem( hDlg, IDC_PARITYCOMBO ),
523 szParity, ParityTable, 523 szParity, ParityTable,
524 sizeof( ParityTable ) / sizeof( ParityTable[ 0 ] ), 524 sizeof( ParityTable ) / sizeof( ParityTable[ 0 ] ),
525 - PARITY( TTYInfo ) ) ; 525 + TTYInfo.bParity ) ;
526 526
527 // 527 //
528 // fill stop bits combo box and make initial selection 528 // fill stop bits combo box and make initial selection
@@ -530,19 +530,19 @@ BOOL SettingsDlgInit( HWND hDlg ) @@ -530,19 +530,19 @@ BOOL SettingsDlgInit( HWND hDlg )
530 FillComboBox( GetDlgItem( hDlg, IDC_STOPBITSCOMBO ), 530 FillComboBox( GetDlgItem( hDlg, IDC_STOPBITSCOMBO ),
531 szStopBits, StopBitsTable, 531 szStopBits, StopBitsTable,
532 sizeof( StopBitsTable ) / sizeof ( StopBitsTable[ 0 ] ), 532 sizeof( StopBitsTable ) / sizeof ( StopBitsTable[ 0 ] ),
533 - STOPBITS( TTYInfo ) ) ; 533 + TTYInfo.bStopBits ) ;
534 // 534 //
535 // set check marks based on TTY data 535 // set check marks based on TTY data
536 // 536 //
537 - CheckDlgButton( hDlg, IDC_LOCALECHOCHK, LOCALECHO( TTYInfo ) ) ;  
538 - CheckDlgButton( hDlg, IDC_DISPLAYERRORSCHK, DISPLAYERRORS( TTYInfo ) );  
539 - CheckDlgButton( hDlg, IDC_LFBTN, NEWLINE( TTYInfo ) );  
540 - CheckDlgButton( hDlg, IDC_AUTOWRAPCHK, AUTOWRAP( TTYInfo ) ); 537 + CheckDlgButton( hDlg, IDC_LOCALECHOCHK, TTYInfo.fLocalEcho ) ;
  538 + CheckDlgButton( hDlg, IDC_DISPLAYERRORSCHK, TTYInfo.fDisplayErrors );
  539 + CheckDlgButton( hDlg, IDC_LFBTN, TTYInfo.fNewLine );
  540 + CheckDlgButton( hDlg, IDC_AUTOWRAPCHK, TTYInfo.fAutowrap );
541 541
542 - CheckDlgButton( hDlg, IDC_NOWRITINGCHK, NOWRITING( TTYInfo ) );  
543 - CheckDlgButton( hDlg, IDC_NOREADINGCHK, NOREADING( TTYInfo ) );  
544 - CheckDlgButton( hDlg, IDC_NOSTATUSCHK, NOSTATUS( TTYInfo ) );  
545 - CheckDlgButton( hDlg, IDC_NOEVENTSCHK, NOEVENTS( TTYInfo ) ); 542 + CheckDlgButton( hDlg, IDC_NOWRITINGCHK, TTYInfo.fNoWriting );
  543 + CheckDlgButton( hDlg, IDC_NOREADINGCHK, TTYInfo.fNoReading );
  544 + CheckDlgButton( hDlg, IDC_NOSTATUSCHK, TTYInfo.fNoStatus );
  545 + CheckDlgButton( hDlg, IDC_NOEVENTSCHK, TTYInfo.fNoEvents );
546 546
547 return ( TRUE ) ; 547 return ( TRUE ) ;
548 548
@@ -706,11 +706,11 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -706,11 +706,11 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
706 break; 706 break;
707 case IDC_BUTTON_CONNECT_UART: // font button pressed 707 case IDC_BUTTON_CONNECT_UART: // font button pressed
708 { 708 {
709 - if (!CONNECTED(TTYInfo)) 709 + if (!TTYInfo.fConnected)
710 { 710 {
711 if (SetupCommPort() != NULL) 711 if (SetupCommPort() != NULL)
712 { 712 {
713 - ChangeConnection(hWndDlg, CONNECTED(TTYInfo)); 713 + ChangeConnection(hWndDlg, TTYInfo.fConnected);
714 SetWindowText(GetDlgItem(hWndDlg, IDC_BUTTON_CONNECT_UART), "断开夹具"); 714 SetWindowText(GetDlgItem(hWndDlg, IDC_BUTTON_CONNECT_UART), "断开夹具");
715 } 715 }
716 } 716 }
@@ -718,7 +718,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -718,7 +718,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
718 { 718 {
719 if (BreakDownCommPort()) 719 if (BreakDownCommPort())
720 { 720 {
721 - ChangeConnection(hWndDlg, CONNECTED(TTYInfo)); 721 + ChangeConnection(hWndDlg, TTYInfo.fConnected);
722 SetWindowText(GetDlgItem(hWndDlg, IDC_BUTTON_CONNECT_UART), "连接夹具"); 722 SetWindowText(GetDlgItem(hWndDlg, IDC_BUTTON_CONNECT_UART), "连接夹具");
723 } 723 }
724 724
@@ -731,11 +731,11 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -731,11 +731,11 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
731 CHOOSEFONT cf = {0}; 731 CHOOSEFONT cf = {0};
732 LOGFONT lf; 732 LOGFONT lf;
733 733
734 - lf = LFTTYFONT(TTYInfo); 734 + lf = TTYInfo.lfTTYFont;
735 cf.lStructSize = sizeof(CHOOSEFONT); 735 cf.lStructSize = sizeof(CHOOSEFONT);
736 cf.hwndOwner = hWndDlg; 736 cf.hwndOwner = hWndDlg;
737 cf.lpLogFont = &lf; 737 cf.lpLogFont = &lf;
738 - cf.rgbColors = FGCOLOR(TTYInfo); 738 + cf.rgbColors = TTYInfo.rgbFGColor;
739 cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS | CF_FIXEDPITCHONLY | \ 739 cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS | CF_FIXEDPITCHONLY | \
740 CF_EFFECTS; 740 CF_EFFECTS;
741 741
@@ -748,7 +748,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -748,7 +748,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
748 // fix scroll bar sizes since we may have more or less pixels per 748 // fix scroll bar sizes since we may have more or less pixels per
749 // character now 749 // character now
750 // 750 //
751 - SizeTTY(ghWndTTY, (WORD)XSIZE(TTYInfo), (WORD)YSIZE(TTYInfo)); 751 + SizeTTY(ghWndTTY, (WORD)TTYInfo.xSize, (WORD)TTYInfo.ySize);
752 752
753 // 753 //
754 // repaint screen contents 754 // repaint screen contents
@@ -784,7 +784,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -784,7 +784,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
784 break; 784 break;
785 785
786 default: // some other control has been modified 786 default: // some other control has been modified
787 - if (CONNECTED(TTYInfo)) 787 + if (TTYInfo.fConnected)
788 UpdateTTYInfo(); 788 UpdateTTYInfo();
789 break; 789 break;
790 } 790 }
@@ -911,7 +911,7 @@ void InitCommEventsDlg(HWND hdlg, DWORD dwEventFlags) @@ -911,7 +911,7 @@ void InitCommEventsDlg(HWND hdlg, DWORD dwEventFlags)
911 for (i = IDC_EVBREAKBTN, j = 0; i <= IDC_EVTXEMPTYBTN; i++, j++) 911 for (i = IDC_EVBREAKBTN, j = 0; i <= IDC_EVTXEMPTYBTN; i++, j++)
912 CheckDlgButton( hdlg, i, dwEventFlags & EventFlagsTable[j]) ; 912 CheckDlgButton( hdlg, i, dwEventFlags & EventFlagsTable[j]) ;
913 913
914 - InitHexControl(hdlg, IDC_FLAGEDIT, IDC_FLAGCHAR, FLAGCHAR(TTYInfo)); 914 + InitHexControl(hdlg, IDC_FLAGEDIT, IDC_FLAGCHAR, TTYInfo.chFlag);
915 915
916 EnableWindow(GetDlgItem(hdlg, IDC_FLAGEDIT), dwEventFlags & EV_RXFLAG); 916 EnableWindow(GetDlgItem(hdlg, IDC_FLAGEDIT), dwEventFlags & EV_RXFLAG);
917 EnableWindow(GetDlgItem(hdlg, IDC_FLAGCHAR), dwEventFlags & EV_RXFLAG); 917 EnableWindow(GetDlgItem(hdlg, IDC_FLAGCHAR), dwEventFlags & EV_RXFLAG);
@@ -954,17 +954,17 @@ void SaveCommEventsDlg(HWND hdlg) @@ -954,17 +954,17 @@ void SaveCommEventsDlg(HWND hdlg)
954 // get current flag character from dialog 954 // get current flag character from dialog
955 // 955 //
956 chNewFlag = GetHexControl(hdlg, IDC_FLAGEDIT, IDC_FLAGCHAR); 956 chNewFlag = GetHexControl(hdlg, IDC_FLAGEDIT, IDC_FLAGCHAR);
957 - fChangingRXFLAG = (EVENTFLAGS(TTYInfo) & EV_RXFLAG) != (dwNew & EV_RXFLAG);  
958 - if (chNewFlag != FLAGCHAR(TTYInfo) || fChangingRXFLAG) {  
959 - FLAGCHAR(TTYInfo) = chNewFlag; 957 + fChangingRXFLAG = (TTYInfo.dwEventFlags & EV_RXFLAG) != (dwNew & EV_RXFLAG);
  958 + if (chNewFlag != TTYInfo.chFlag || fChangingRXFLAG) {
  959 + TTYInfo.chFlag = chNewFlag;
960 UpdateTTYInfo(); 960 UpdateTTYInfo();
961 } 961 }
962 962
963 // 963 //
964 // if new flags have been selected, or 964 // if new flags have been selected, or
965 // 965 //
966 - if (dwNew != EVENTFLAGS(TTYInfo))  
967 - EVENTFLAGS(TTYInfo) = dwNew; 966 + if (dwNew != TTYInfo.dwEventFlags)
  967 + TTYInfo.dwEventFlags = dwNew;
968 968
969 return; 969 return;
970 } 970 }
@@ -995,7 +995,7 @@ BOOL CALLBACK CommEventsProc(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lpa @@ -995,7 +995,7 @@ BOOL CALLBACK CommEventsProc(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lpa
995 switch(uMessage) 995 switch(uMessage)
996 { 996 {
997 case WM_INITDIALOG: // init controls 997 case WM_INITDIALOG: // init controls
998 - InitCommEventsDlg(hdlg, EVENTFLAGS(TTYInfo)); 998 + InitCommEventsDlg(hdlg, TTYInfo.dwEventFlags);
999 break; 999 break;
1000 1000
1001 case WM_COMMAND: 1001 case WM_COMMAND:
@@ -1064,10 +1064,10 @@ void SaveFlowControlDlg(HWND hdlg) @@ -1064,10 +1064,10 @@ void SaveFlowControlDlg(HWND hdlg)
1064 dwNewRTSControl = GetdwTTYItem( hdlg, IDC_RTSCONTROLCOMBO, 1064 dwNewRTSControl = GetdwTTYItem( hdlg, IDC_RTSCONTROLCOMBO,
1065 szRTSControlStrings, RTSControlTable, 1065 szRTSControlStrings, RTSControlTable,
1066 sizeof(RTSControlTable)/sizeof(RTSControlTable[0])); 1066 sizeof(RTSControlTable)/sizeof(RTSControlTable[0]));
1067 - if (dwNewRTSControl != RTSCONTROL(TTYInfo) ||  
1068 - dwNewDTRControl != DTRCONTROL(TTYInfo)) {  
1069 - RTSCONTROL(TTYInfo) = dwNewRTSControl;  
1070 - DTRCONTROL(TTYInfo) = dwNewDTRControl; 1067 + if (dwNewRTSControl != TTYInfo.fRtsControl ||
  1068 + dwNewDTRControl != TTYInfo.fDtrControl) {
  1069 + TTYInfo.fRtsControl = dwNewRTSControl;
  1070 + TTYInfo.fDtrControl = dwNewDTRControl;
1071 fUpdateDCB = TRUE; 1071 fUpdateDCB = TRUE;
1072 } 1072 }
1073 1073
@@ -1076,10 +1076,10 @@ void SaveFlowControlDlg(HWND hdlg) @@ -1076,10 +1076,10 @@ void SaveFlowControlDlg(HWND hdlg)
1076 // 1076 //
1077 wNewXONLimit = GetDlgItemInt(hdlg, IDC_XONLIMITEDIT, &fSuccess, FALSE); 1077 wNewXONLimit = GetDlgItemInt(hdlg, IDC_XONLIMITEDIT, &fSuccess, FALSE);
1078 wNewXOFFLimit = GetDlgItemInt(hdlg, IDC_XOFFLIMITEDIT, &fSuccess, FALSE); 1078 wNewXOFFLimit = GetDlgItemInt(hdlg, IDC_XOFFLIMITEDIT, &fSuccess, FALSE);
1079 - if (wNewXOFFLimit != XOFFLIMIT(TTYInfo) ||  
1080 - wNewXONLimit != XONLIMIT(TTYInfo)) {  
1081 - XOFFLIMIT(TTYInfo) = wNewXOFFLimit;  
1082 - XONLIMIT(TTYInfo) = wNewXONLimit; 1079 + if (wNewXOFFLimit != TTYInfo.wXOFFLimit ||
  1080 + wNewXONLimit != TTYInfo.wXONLimit) {
  1081 + TTYInfo.wXOFFLimit = wNewXOFFLimit;
  1082 + TTYInfo.wXONLimit = wNewXONLimit;
1083 fUpdateDCB = TRUE; 1083 fUpdateDCB = TRUE;
1084 } 1084 }
1085 1085
@@ -1088,10 +1088,10 @@ void SaveFlowControlDlg(HWND hdlg) @@ -1088,10 +1088,10 @@ void SaveFlowControlDlg(HWND hdlg)
1088 // 1088 //
1089 chNewXON = GetHexControl(hdlg, IDC_XONCHAREDIT, IDC_XONCHARDISP); 1089 chNewXON = GetHexControl(hdlg, IDC_XONCHAREDIT, IDC_XONCHARDISP);
1090 chNewXOFF = GetHexControl(hdlg, IDC_XOFFCHAREDIT, IDC_XOFFCHARDISP); 1090 chNewXOFF = GetHexControl(hdlg, IDC_XOFFCHAREDIT, IDC_XOFFCHARDISP);
1091 - if (chNewXOFF != XOFFCHAR(TTYInfo) ||  
1092 - chNewXON != XONCHAR(TTYInfo)) {  
1093 - XOFFCHAR(TTYInfo) = chNewXOFF;  
1094 - XONCHAR(TTYInfo) = chNewXON; 1091 + if (chNewXOFF != TTYInfo.chXOFF ||
  1092 + chNewXON != TTYInfo.chXON) {
  1093 + TTYInfo.chXOFF = chNewXOFF;
  1094 + TTYInfo.chXON = chNewXON;
1095 fUpdateDCB = TRUE; 1095 fUpdateDCB = TRUE;
1096 } 1096 }
1097 1097
@@ -1105,18 +1105,18 @@ void SaveFlowControlDlg(HWND hdlg) @@ -1105,18 +1105,18 @@ void SaveFlowControlDlg(HWND hdlg)
1105 fNewXOut = IsDlgButtonChecked(hdlg, IDC_XONXOFFOUTCHK); 1105 fNewXOut = IsDlgButtonChecked(hdlg, IDC_XONXOFFOUTCHK);
1106 fNewXIn = IsDlgButtonChecked(hdlg, IDC_XONXOFFINCHK); 1106 fNewXIn = IsDlgButtonChecked(hdlg, IDC_XONXOFFINCHK);
1107 1107
1108 - if (fNewTXafterXoffSent != TXAFTERXOFFSENT(TTYInfo) ||  
1109 - fNewCTSOut != CTSOUTFLOW(TTYInfo) ||  
1110 - fNewDSROut != DSROUTFLOW(TTYInfo) ||  
1111 - fNewDSRIn != DSRINFLOW(TTYInfo) ||  
1112 - fNewXOut != XONXOFFOUTFLOW(TTYInfo) ||  
1113 - fNewXIn != XONXOFFINFLOW(TTYInfo) ) {  
1114 - CTSOUTFLOW(TTYInfo) = fNewCTSOut;  
1115 - DSROUTFLOW(TTYInfo) = fNewDSROut;  
1116 - DSRINFLOW(TTYInfo) = fNewDSRIn;  
1117 - XONXOFFOUTFLOW(TTYInfo) = fNewXOut;  
1118 - XONXOFFINFLOW(TTYInfo) = fNewXIn;  
1119 - TXAFTERXOFFSENT(TTYInfo) = fNewTXafterXoffSent; 1108 + if (fNewTXafterXoffSent != TTYInfo.fTXafterXoffSent ||
  1109 + fNewCTSOut != TTYInfo.fCTSOutFlow ||
  1110 + fNewDSROut != TTYInfo.fDSROutFlow ||
  1111 + fNewDSRIn != TTYInfo.fDSRInFlow ||
  1112 + fNewXOut != TTYInfo.fXonXoffOutFlow ||
  1113 + fNewXIn != TTYInfo.fXonXoffInFlow ) {
  1114 + TTYInfo.fCTSOutFlow = fNewCTSOut;
  1115 + TTYInfo.fDSROutFlow = fNewDSROut;
  1116 + TTYInfo.fDSRInFlow = fNewDSRIn;
  1117 + TTYInfo.fXonXoffOutFlow = fNewXOut;
  1118 + TTYInfo.fXonXoffInFlow = fNewXIn;
  1119 + TTYInfo.fTXafterXoffSent = fNewTXafterXoffSent;
1120 fUpdateDCB = TRUE; 1120 fUpdateDCB = TRUE;
1121 } 1121 }
1122 1122
@@ -1150,7 +1150,7 @@ void InitFlowControlDlg(HWND hdlg) @@ -1150,7 +1150,7 @@ void InitFlowControlDlg(HWND hdlg)
1150 FillComboBox( GetDlgItem( hdlg, IDC_DTRCONTROLCOMBO ), 1150 FillComboBox( GetDlgItem( hdlg, IDC_DTRCONTROLCOMBO ),
1151 szDTRControlStrings, DTRControlTable, 1151 szDTRControlStrings, DTRControlTable,
1152 sizeof( DTRControlTable) / sizeof( DTRControlTable[0] ), 1152 sizeof( DTRControlTable) / sizeof( DTRControlTable[0] ),
1153 - DTRCONTROL( TTYInfo ) ); 1153 + TTYInfo.fDtrControl );
1154 1154
1155 // 1155 //
1156 // fill and init RTS control combo 1156 // fill and init RTS control combo
@@ -1158,29 +1158,29 @@ void InitFlowControlDlg(HWND hdlg) @@ -1158,29 +1158,29 @@ void InitFlowControlDlg(HWND hdlg)
1158 FillComboBox( GetDlgItem( hdlg, IDC_RTSCONTROLCOMBO ), 1158 FillComboBox( GetDlgItem( hdlg, IDC_RTSCONTROLCOMBO ),
1159 szRTSControlStrings, RTSControlTable, 1159 szRTSControlStrings, RTSControlTable,
1160 sizeof( RTSControlTable) / sizeof( RTSControlTable[0] ), 1160 sizeof( RTSControlTable) / sizeof( RTSControlTable[0] ),
1161 - RTSCONTROL( TTYInfo ) ); 1161 + TTYInfo.fRtsControl );
1162 1162
1163 // 1163 //
1164 // XON/XOFF characters 1164 // XON/XOFF characters
1165 // 1165 //
1166 - InitHexControl(hdlg, IDC_XONCHAREDIT, IDC_XONCHARDISP, XONCHAR(TTYInfo));  
1167 - InitHexControl(hdlg, IDC_XOFFCHAREDIT, IDC_XOFFCHARDISP, XOFFCHAR(TTYInfo)); 1166 + InitHexControl(hdlg, IDC_XONCHAREDIT, IDC_XONCHARDISP, TTYInfo.chXON);
  1167 + InitHexControl(hdlg, IDC_XOFFCHAREDIT, IDC_XOFFCHARDISP, TTYInfo.chXOFF);
1168 1168
1169 // 1169 //
1170 // XON/XOFF limits 1170 // XON/XOFF limits
1171 // 1171 //
1172 - SetDlgItemInt(hdlg, IDC_XONLIMITEDIT, XONLIMIT(TTYInfo), FALSE);  
1173 - SetDlgItemInt(hdlg, IDC_XOFFLIMITEDIT, XOFFLIMIT(TTYInfo), FALSE); 1172 + SetDlgItemInt(hdlg, IDC_XONLIMITEDIT, TTYInfo.wXONLimit, FALSE);
  1173 + SetDlgItemInt(hdlg, IDC_XOFFLIMITEDIT, TTYInfo.wXOFFLimit, FALSE);
1174 1174
1175 // 1175 //
1176 // check boxes 1176 // check boxes
1177 // 1177 //
1178 - CheckDlgButton(hdlg, IDC_CTSOUTCHK, CTSOUTFLOW(TTYInfo));  
1179 - CheckDlgButton(hdlg, IDC_DSROUTCHK, DSROUTFLOW(TTYInfo));  
1180 - CheckDlgButton(hdlg, IDC_DSRINCHK, DSRINFLOW(TTYInfo));  
1181 - CheckDlgButton(hdlg, IDC_XONXOFFOUTCHK, XONXOFFOUTFLOW(TTYInfo));  
1182 - CheckDlgButton(hdlg, IDC_XONXOFFINCHK, XONXOFFINFLOW(TTYInfo));  
1183 - CheckDlgButton(hdlg, IDC_TXAFTERXOFFSENTCHK, TXAFTERXOFFSENT(TTYInfo)); 1178 + CheckDlgButton(hdlg, IDC_CTSOUTCHK, TTYInfo.fCTSOutFlow);
  1179 + CheckDlgButton(hdlg, IDC_DSROUTCHK, TTYInfo.fDSROutFlow);
  1180 + CheckDlgButton(hdlg, IDC_DSRINCHK, TTYInfo.fDSRInFlow);
  1181 + CheckDlgButton(hdlg, IDC_XONXOFFOUTCHK, TTYInfo.fXonXoffOutFlow);
  1182 + CheckDlgButton(hdlg, IDC_XONXOFFINCHK, TTYInfo.fXonXoffInFlow);
  1183 + CheckDlgButton(hdlg, IDC_TXAFTERXOFFSENTCHK, TTYInfo.fTXafterXoffSent);
1184 1184
1185 return; 1185 return;
1186 } 1186 }
@@ -1335,7 +1335,7 @@ void InitTimeoutsDlg(HWND hdlg, COMMTIMEOUTS ct) @@ -1335,7 +1335,7 @@ void InitTimeoutsDlg(HWND hdlg, COMMTIMEOUTS ct)
1335 SetDlgItemInt(hdlg, IDC_READCONSTANTEDIT, ct.ReadTotalTimeoutConstant, FALSE); 1335 SetDlgItemInt(hdlg, IDC_READCONSTANTEDIT, ct.ReadTotalTimeoutConstant, FALSE);
1336 SetDlgItemInt(hdlg, IDC_WRITEMULTIPLIEREDIT, ct.WriteTotalTimeoutMultiplier, FALSE); 1336 SetDlgItemInt(hdlg, IDC_WRITEMULTIPLIEREDIT, ct.WriteTotalTimeoutMultiplier, FALSE);
1337 SetDlgItemInt(hdlg, IDC_WRITECONSTANTEDIT, ct.WriteTotalTimeoutConstant, FALSE); 1337 SetDlgItemInt(hdlg, IDC_WRITECONSTANTEDIT, ct.WriteTotalTimeoutConstant, FALSE);
1338 - CheckDlgButton(hdlg, IDC_DISPLAYTIMEOUTS, SHOWTIMEOUTS(TTYInfo)); 1338 + CheckDlgButton(hdlg, IDC_DISPLAYTIMEOUTS, TTYInfo.fDisplayTimeouts);
1339 return; 1339 return;
1340 } 1340 }
1341 1341
@@ -1365,29 +1365,29 @@ void SaveTimeoutsDlg(HWND hdlg) @@ -1365,29 +1365,29 @@ void SaveTimeoutsDlg(HWND hdlg)
1365 ctNew.WriteTotalTimeoutMultiplier = GetDlgItemInt(hdlg, IDC_WRITEMULTIPLIEREDIT, NULL, FALSE); 1365 ctNew.WriteTotalTimeoutMultiplier = GetDlgItemInt(hdlg, IDC_WRITEMULTIPLIEREDIT, NULL, FALSE);
1366 ctNew.WriteTotalTimeoutConstant = GetDlgItemInt(hdlg, IDC_WRITECONSTANTEDIT, NULL, FALSE); 1366 ctNew.WriteTotalTimeoutConstant = GetDlgItemInt(hdlg, IDC_WRITECONSTANTEDIT, NULL, FALSE);
1367 1367
1368 - SHOWTIMEOUTS(TTYInfo) = IsDlgButtonChecked(hdlg, IDC_DISPLAYTIMEOUTS); 1368 + TTYInfo.fDisplayTimeouts = IsDlgButtonChecked(hdlg, IDC_DISPLAYTIMEOUTS);
1369 1369
1370 // 1370 //
1371 // set new timeouts if they are different 1371 // set new timeouts if they are different
1372 // 1372 //
1373 - if (memcmp(&ctNew, &(TIMEOUTSNEW(TTYInfo)), sizeof(COMMTIMEOUTS))) { 1373 + if (memcmp(&ctNew, &(TTYInfo.timeoutsnew), sizeof(COMMTIMEOUTS))) {
1374 // 1374 //
1375 // if connected, set new time outs and purge pending operations 1375 // if connected, set new time outs and purge pending operations
1376 // 1376 //
1377 - if (CONNECTED(TTYInfo)) {  
1378 - if (!SetCommTimeouts(COMDEV(TTYInfo), &ctNew)) { 1377 + if (TTYInfo.fConnected) {
  1378 + if (!SetCommTimeouts(TTYInfo.hCommPort, &ctNew)) {
1379 ErrorReporter("SetCommTimeouts"); 1379 ErrorReporter("SetCommTimeouts");
1380 return; 1380 return;
1381 } 1381 }
1382 1382
1383 - if (!PurgeComm(COMDEV(TTYInfo), PURGE_TXABORT | PURGE_RXABORT)) 1383 + if (!PurgeComm(TTYInfo.hCommPort, PURGE_TXABORT | PURGE_RXABORT))
1384 ErrorReporter("PurgeComm"); 1384 ErrorReporter("PurgeComm");
1385 } 1385 }
1386 1386
1387 // 1387 //
1388 // save timeouts in the tty info structure 1388 // save timeouts in the tty info structure
1389 // 1389 //
1390 - TIMEOUTSNEW(TTYInfo) = ctNew; 1390 + TTYInfo.timeoutsnew = ctNew;
1391 } 1391 }
1392 1392
1393 return; 1393 return;
@@ -1419,7 +1419,7 @@ BOOL CALLBACK TimeoutsProc(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lpara @@ -1419,7 +1419,7 @@ BOOL CALLBACK TimeoutsProc(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lpara
1419 switch(uMessage) 1419 switch(uMessage)
1420 { 1420 {
1421 case WM_INITDIALOG: // init controls 1421 case WM_INITDIALOG: // init controls
1422 - InitTimeoutsDlg(hdlg, TIMEOUTSNEW(TTYInfo)); 1422 + InitTimeoutsDlg(hdlg, TTYInfo.timeoutsnew);
1423 break; 1423 break;
1424 1424
1425 case WM_COMMAND: 1425 case WM_COMMAND:
@@ -411,7 +411,7 @@ void CheckModemStatus( BOOL bUpdateNow ) @@ -411,7 +411,7 @@ void CheckModemStatus( BOOL bUpdateNow )
411 411
412 DWORD dwNewModemStatus; 412 DWORD dwNewModemStatus;
413 413
414 - if (!GetCommModemStatus(COMDEV(TTYInfo), &dwNewModemStatus)) 414 + if (!GetCommModemStatus(TTYInfo.hCommPort, &dwNewModemStatus))
415 ErrorReporter("GetCommModemStatus"); 415 ErrorReporter("GetCommModemStatus");
416 416
417 // 417 //
@@ -483,7 +483,7 @@ void CheckComStat(BOOL bUpdateNow) @@ -483,7 +483,7 @@ void CheckComStat(BOOL bUpdateNow)
483 483
484 BOOL bReport = bUpdateNow; 484 BOOL bReport = bUpdateNow;
485 485
486 - if (!ClearCommError(COMDEV(TTYInfo), &dwErrors, &ComStatNew)) 486 + if (!ClearCommError(TTYInfo.hCommPort, &dwErrors, &ComStatNew))
487 ErrorReporter("ClearCommError"); 487 ErrorReporter("ClearCommError");
488 488
489 if (dwErrors != dwErrorsOld) { 489 if (dwErrors != dwErrorsOld) {
@@ -529,7 +529,7 @@ void ReportCommError() @@ -529,7 +529,7 @@ void ReportCommError()
529 // 529 //
530 // Get and clear current errors on the port 530 // Get and clear current errors on the port
531 // 531 //
532 - if (!ClearCommError(COMDEV(TTYInfo), &dwErrors, &comStat)) 532 + if (!ClearCommError(TTYInfo.hCommPort, &dwErrors, &comStat))
533 ErrorReporter("ClearCommError"); 533 ErrorReporter("ClearCommError");
534 534
535 // 535 //
@@ -138,7 +138,7 @@ void TransferRepeatCreate(LPCTSTR lpszFileName, DWORD dwFrequency) @@ -138,7 +138,7 @@ void TransferRepeatCreate(LPCTSTR lpszFileName, DWORD dwFrequency)
138 TransferRepeatDestroy(); 138 TransferRepeatDestroy();
139 } 139 }
140 else { 140 else {
141 - REPEATING(TTYInfo) = TRUE; 141 + TTYInfo.fRepeating = TRUE;
142 OutputDebugString("Timer setup.\n"); 142 OutputDebugString("Timer setup.\n");
143 } 143 }
144 144
@@ -181,7 +181,7 @@ void TransferRepeatDestroy() @@ -181,7 +181,7 @@ void TransferRepeatDestroy()
181 if (!HeapFree(ghWriterHeap, 0, lpBuf)) 181 if (!HeapFree(ghWriterHeap, 0, lpBuf))
182 ErrorReporter("HeapFree (data block from writer heap)"); 182 ErrorReporter("HeapFree (data block from writer heap)");
183 183
184 - REPEATING(TTYInfo) = FALSE; 184 + TTYInfo.fRepeating = FALSE;
185 OutputDebugString("Repeated transfer destroyed.\r\n"); 185 OutputDebugString("Repeated transfer destroyed.\r\n");
186 186
187 // 187 //
@@ -284,7 +284,7 @@ void TransferFileTextStart(LPCTSTR lpstrFileName) @@ -284,7 +284,7 @@ void TransferFileTextStart(LPCTSTR lpstrFileName)
284 TransferFileTextEnd(); 284 TransferFileTextEnd();
285 } 285 }
286 else 286 else
287 - TRANSFERRING(TTYInfo) = TRUE; 287 + TTYInfo.fTransferring = TRUE;
288 288
289 return; 289 return;
290 } 290 }
@@ -321,7 +321,7 @@ void TransferFileTextEnd() @@ -321,7 +321,7 @@ void TransferFileTextEnd()
321 CloseHandle(hTransferAbortEvent); 321 CloseHandle(hTransferAbortEvent);
322 CloseHandle(hTransferThread); 322 CloseHandle(hTransferThread);
323 323
324 - TRANSFERRING(TTYInfo) = FALSE; 324 + TTYInfo.fTransferring = FALSE;
325 325
326 // 326 //
327 // enable transfer menu 327 // enable transfer menu
@@ -407,7 +407,7 @@ void ReceiveFileText(LPCTSTR lpstrFileName) @@ -407,7 +407,7 @@ void ReceiveFileText(LPCTSTR lpstrFileName)
407 // 407 //
408 hMenu = GetMenu(ghwndMain); 408 hMenu = GetMenu(ghwndMain);
409 MenuFlags = MF_ENABLED; 409 MenuFlags = MF_ENABLED;
410 - ChangeConnection(ghwndMain, CONNECTED(TTYInfo)); 410 + ChangeConnection(ghwndMain, TTYInfo.fConnected);
411 411
412 // 412 //
413 // enable transfer menu 413 // enable transfer menu
@@ -87,61 +87,63 @@ struct TTYInfoStruct @@ -87,61 +87,63 @@ struct TTYInfoStruct
87 // 87 //
88 // macros ( for easier readability ) 88 // macros ( for easier readability )
89 // 89 //
90 -#define COMDEV( x ) (x.hCommPort)  
91 -#define CURSORSTATE( x ) (x.wCursorState)  
92 -#define PORT( x ) (x.bPort)  
93 -#define SCREEN( x ) (x.Screen)  
94 -#define CONNECTED( x ) (x.fConnected)  
95 -#define TRANSFERRING( x ) (x.fTransferring)  
96 -#define REPEATING( x ) (x.fRepeating)  
97 -#define LOCALECHO( x ) (x.fLocalEcho)  
98 -#define NEWLINE( x ) (x.fNewLine)  
99 -#define AUTOWRAP( x ) (x.fAutowrap)  
100 -#define BYTESIZE( x ) (x.bByteSize)  
101 -#define PARITY( x ) (x.bParity)  
102 -#define STOPBITS( x ) (x.bStopBits)  
103 -#define BAUDRATE( x ) (x.dwBaudRate)  
104 -#define HTTYFONT( x ) (x.hTTYFont)  
105 -#define LFTTYFONT( x ) (x.lfTTYFont)  
106 -#define FGCOLOR( x ) (x.rgbFGColor)  
107 -#define BGCOLOR( x ) (x.rgbBGColor)  
108 -#define XSIZE( x ) (x.xSize)  
109 -#define YSIZE( x ) (x.ySize)  
110 -#define XSCROLL( x ) (x.xScroll)  
111 -#define YSCROLL( x ) (x.yScroll)  
112 -#define XOFFSET( x ) (x.xOffset)  
113 -#define YOFFSET( x ) (x.yOffset)  
114 -#define COLUMN( x ) (x.nColumn)  
115 -#define ROW( x ) (x.nRow)  
116 -#define XCHAR( x ) (x.xChar)  
117 -#define YCHAR( x ) (x.yChar)  
118 -#define DISPLAYERRORS( x ) (x.fDisplayErrors)  
119 -#define TIMEOUTSORIG( x ) (x.timeoutsorig)  
120 -#define TIMEOUTSNEW( x ) (x.timeoutsnew)  
121 -#define WRITERTHREAD( x ) (x.hWriter)  
122 -#define READSTATTHREAD( x ) (x.hReaderStatus)  
123 -#define EVENTFLAGS( x ) (x.dwEventFlags)  
124 -#define FLAGCHAR( x ) (x.chFlag)  
125 -#define SCREENCHAR( x, col, row ) (x.Screen[row * MAXCOLS + col])  
126 -  
127 -#define DTRCONTROL( x ) (x.fDtrControl)  
128 -#define RTSCONTROL( x ) (x.fRtsControl)  
129 -#define XONCHAR( x ) (x.chXON)  
130 -#define XOFFCHAR( x ) (x.chXOFF)  
131 -#define XONLIMIT( x ) (x.wXONLimit)  
132 -#define XOFFLIMIT( x ) (x.wXOFFLimit)  
133 -#define CTSOUTFLOW( x ) (x.fCTSOutFlow)  
134 -#define DSROUTFLOW( x ) (x.fDSROutFlow)  
135 -#define DSRINFLOW( x ) (x.fDSRInFlow)  
136 -#define XONXOFFOUTFLOW( x ) (x.fXonXoffOutFlow)  
137 -#define XONXOFFINFLOW( x ) (x.fXonXoffInFlow)  
138 -#define TXAFTERXOFFSENT(x) (x.fTXafterXoffSent)  
139 -  
140 -#define NOREADING( x ) (x.fNoReading)  
141 -#define NOWRITING( x ) (x.fNoWriting)  
142 -#define NOEVENTS( x ) (x.fNoEvents)  
143 -#define NOSTATUS( x ) (x.fNoStatus)  
144 -#define SHOWTIMEOUTS( x ) (x.fDisplayTimeouts) 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
  139 +//
  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 +
  146 +
145 147
146 //--------------------------------------------------------------------------- 148 //---------------------------------------------------------------------------
147 // End of File: ttyinfo.h 149 // End of File: ttyinfo.h
@@ -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 (NOWRITING(TTYInfo)) 435 + if (TTYInfo.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(COMDEV(TTYInfo), lpBuf, dwToWrite, &dwWritten, &osWrite)) { 451 + if (!WriteFile(TTYInfo.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(COMDEV(TTYInfo), &osWrite, &dwWritten, FALSE)) { 464 + if (!GetOverlappedResult(TTYInfo.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) && SHOWTIMEOUTS(TTYInfo)) 472 + if ((GetLastError() == ERROR_SUCCESS) && TTYInfo.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)");
Please register or login to post a comment