Commit 725f6c3183c6cc6fac18f405823ba10a746c4c5f

Authored by xiemeng
1 parent 5740e599

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

... ... @@ -13,9 +13,9 @@
13 13 PURPOSE: Implement the About dialog box for the program.
14 14
15 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 24 #include "mttty.h"
25 25
26 26 /*
27   - Prototypes for functions called only in this file
  27 + 仅在此文件中调用的函数原型
28 28 */
29 29 BOOL CALLBACK AboutDlgProc( HWND, UINT, WPARAM, LPARAM );
30 30 UINT InitAboutDlg( HWND );
... ... @@ -33,10 +33,10 @@ UINT InitAboutDlg( HWND );
33 33
34 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 42 BOOL CmdAbout(HWND hwnd)
... ... @@ -49,12 +49,10 @@ BOOL CmdAbout(HWND hwnd)
49 49
50 50 FUNCTION: InitAboutDlg( HWND )
51 51
52   -PURPOSE: Initializes the modal About dialog
53   -
  52 +初始化modal About对话框
54 53 PARMATETERS:
55 54 hDlg - Dialog window handle
56   -
57   -COMMENTS: Sets the icon animation timer and the version info.
  55 +设置图标动画计时器和版本信息。
58 56
59 57 HISTORY: Date: Author: Comment:
60 58 10/27/95 AllenD Wrote it
... ... @@ -89,15 +87,12 @@ UINT InitAboutDlg(HWND hDlg)
89 87 /*-----------------------------------------------------------------------------
90 88
91 89 FUNCTION: AboutDlgProc(HWND, UINT, WPARAM, LPARAM)
92   -
93   -PURPOSE: Dialog procedure for the "About Box"
94   -
  90 +关于对话框的对话程序
95 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 96 HISTORY: Date: Author: Comment:
102 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 111
117 112 case WM_TIMER:
118 113 /*
119   - when timer goes off, then change to next icon
  114 + 当计时器停止,然后改变到下一个图标
120 115 */
121 116 {
122 117 HICON hIcon;
... ...
... ... @@ -15,11 +15,10 @@
15 15 called to report errors.
16 16
17 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 70 /*-----------------------------------------------------------------------------
72 71
73 72 FUNCTION: ErrorReporter(char *)
74   -
75   -PURPOSE: Report error to user
  73 +向用户报告错误
76 74
77 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 80 HISTORY: Date: Author: Comment:
83 81 10/27/95 AllenD Wrote it
... ... @@ -94,13 +92,13 @@ void ErrorReporter(char * szMessage)
94 92 dwErr = GetLastError();
95 93
96 94 /*
97   - Get error string from system
  95 + 从系统获取错误字符串
98 96 */
99 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 103 szFinal = LocalAlloc(LPTR, strlen(szMessage) + dwExtSize + 30);
106 104
... ... @@ -111,14 +109,14 @@ void ErrorReporter(char * szMessage)
111 109
112 110 OutputDebugString(szFinal);
113 111
114   - if (DISPLAYERRORS(TTYInfo))
  112 + if (TTYInfo.fDisplayErrors)
115 113 MessageBox(ghwndMain, szFinal, NULL, MB_OK);
116 114
117 115 LocalFree(szFinal); // free final buffer
118 116 }
119 117
120 118 /*
121   - free extended string buffer
  119 + 释放扩展字符串缓冲区
122 120 */
123 121 LocalFree(szExtended);
124 122
... ... @@ -130,10 +128,10 @@ void ErrorReporter(char * szMessage)
130 128
131 129 FUNCTION: ErrorHandler( char * )
132 130
133   -PURPOSE: Handle a fatal error (before comm port is opened)
  131 +PURPOSE: 处理一个致命错误(在comm端口打开之前)
134 132
135 133 PARAMETERS:
136   - szMessage - Error message from app
  134 + szMessage - 来自app的错误消息
137 135
138 136 HISTORY: Date: Author: Comment:
139 137 10/27/95 AllenD Wrote it
... ... @@ -150,10 +148,10 @@ void ErrorHandler(char * szMessage)
150 148
151 149 FUNCTION: ErrorInComm( char * )
152 150
153   -PURPOSE: Handle a fatal error after comm port is opened
  151 +PURPOSE: 在comm端口打开后处理一个致命错误
154 152
155 153 PARAMETERS:
156   - szMessage - Error message from app
  154 + szMessage - 来自app的错误消息
157 155
158 156 HISTORY: Date: Author: Comment:
159 157 10/27/95 AllenD Wrote it
... ...
... ... @@ -10,23 +10,20 @@
10 10
11 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 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 39
43 40 /*
44 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 46 COMMTIMEOUTS gTimeoutsDefault = { 0x01, 0, 0, 0, 0 };
51 47
... ... @@ -54,9 +50,9 @@ COMMTIMEOUTS gTimeoutsDefault = { 0x01, 0, 0, 0, 0 };
54 50
55 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 57 HISTORY: Date: Author: Comment:
62 58 10/27/95 AllenD Wrote it
... ... @@ -68,37 +64,37 @@ void GlobalInitialize()
68 64
69 65 //
70 66 // critical sections in status reporting & node management
71   - //
  67 + // 初始化互斥对象
72 68 InitializeCriticalSection(&gStatusCritical);
73 69 InitializeCriticalSection(&gcsWriterHeap);
74 70 InitializeCriticalSection(&gcsDataHeap);
75 71
76 72 //
77   - // status message event
  73 + // 状态消息事件
78 74 //
79 75 ghStatusMessageEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
80 76 if (ghStatusMessageEvent == NULL)
81 77 ErrorReporter("CreateEvent (Status message event)");
82 78
83 79 //
84   - // thread exit event
  80 + //线程退出事件
85 81 //
86 82 ghThreadExitEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
87 83 if (ghThreadExitEvent == NULL)
88 84 ErrorReporter("CreateEvent (Thread exit event)");
89 85
90 86 //
91   - // used in file transfer status bar
  87 + //用于文件传输状态栏
92 88 //
93 89 InitCommonControls();
94 90
95 91 //
96   - // font for status reporting control
  92 + // 字体控制
97 93 //
98 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 99 gwBaseY = HIWORD(GetDialogBaseUnits());
104 100 cyMenuHeight = GetSystemMetrics(SM_CYMENU);
... ... @@ -116,7 +112,7 @@ void GlobalInitialize()
116 112
117 113 FUNCTION: GlobalCleanup
118 114
119   -PURPOSE: Cleans up any global variables
  115 +PURPOSE: 清除所有全局变量
120 116
121 117 COMMENTS: Partner to GlobalInitialize
122 118
... ... @@ -141,7 +137,7 @@ void GlobalCleanup()
141 137
142 138 FUNCTION: ClearTTYContents
143 139
144   -PURPOSE: Clears the tty buffer
  140 +PURPOSE: 清除tty缓冲区
145 141
146 142 RETURN: always TRUE
147 143
... ... @@ -151,7 +147,7 @@ HISTORY: Date: Author: Comment:
151 147 -----------------------------------------------------------------------------*/
152 148 BOOL ClearTTYContents()
153 149 {
154   - FillMemory(SCREEN(TTYInfo), MAXCOLS*MAXROWS, ' ');
  150 + FillMemory(TTYInfo.Screen, MAXCOLS*MAXROWS, ' ');
155 151 return TRUE;
156 152 }
157 153
... ... @@ -160,14 +156,13 @@ BOOL ClearTTYContents()
160 156
161 157 FUNCTION: InitNewFont(LOGFONT, COLORREF)
162 158
163   -PURPOSE: Prepares a font for use in the TTY screen
  159 +PURPOSE: 初始化在TTY窗口上使用的字体
164 160
165 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 167 HISTORY: Date: Author: Comment:
173 168 10/27/95 AllenD Wrote it
... ... @@ -179,38 +174,37 @@ void InitNewFont(LOGFONT LogFont, COLORREF rgbColor)
179 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 186 hDC = GetDC( ghwndMain ) ;
192   - SelectObject( hDC, HTTYFONT( TTYInfo ) ) ;
  187 + SelectObject( hDC, TTYInfo.hTTYFont ) ;
193 188 GetTextMetrics( hDC, &tm ) ;
194 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 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 209 HISTORY: Date: Author: Comment:
216 210 10/27/95 AllenD Wrote it
... ... @@ -222,79 +216,79 @@ BOOL InitTTYInfo()
222 216 //
223 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 239 // timeouts
246 240 //
247   - TIMEOUTSNEW( TTYInfo ) = gTimeoutsDefault;
  241 + TTYInfo.timeoutsnew = gTimeoutsDefault;
248 242
249 243 //
250 244 // read state and status events
251 245 //
252 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 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 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 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 293 ClearTTYContents();
300 294
... ... @@ -305,7 +299,7 @@ BOOL InitTTYInfo()
305 299
306 300 FUNCTION: DestroyTTYInfo
307 301
308   -PURPOSE: Frees objects associated with the TTYInfo structure
  302 +PURPOSE: 释放与TTYInfo结构体相关的对象
309 303
310 304 HISTORY: Date: Author: Comment:
311 305 10/27/95 AllenD Wrote it
... ... @@ -314,14 +308,14 @@ HISTORY: Date: Author: Comment:
314 308 -----------------------------------------------------------------------------*/
315 309 void DestroyTTYInfo()
316 310 {
317   - DeleteObject(HTTYFONT(TTYInfo));
  311 + DeleteObject(TTYInfo.hTTYFont);
318 312 }
319 313
320 314 /*-----------------------------------------------------------------------------
321 315
322 316 FUNCTION: StartThreads
323 317
324   -PURPOSE: Creates the Reader/Status and Writer threads
  318 +PURPOSE:创建读取/状态和写入线程
325 319
326 320 HISTORY: Date: Author: Comment:
327 321 10/27/95 AllenD Wrote it
... ... @@ -329,43 +323,27 @@ HISTORY: Date: Author: Comment:
329 323 -----------------------------------------------------------------------------*/
330 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 341 FUNCTION: SetupCommPort( void )
363 342
364   -PURPOSE: Setup Communication Port with our settings
  343 +PURPOSE: 配置串口
365 344
366 345 RETURN:
367   - Handle of comm port is successful
368   - NULL is error occurs
  346 + 如果成功返回串口句柄, 否则返回NULL
369 347
370 348 HISTORY: Date: Author: Comment:
371 349 10/27/95 AllenD Wrote it
... ... @@ -375,17 +353,16 @@ HANDLE SetupCommPort()
375 353 {
376 354 int myintPort;
377 355 //
378   - // get tty settings from settings dialog
379   -
380   - //
  356 + //从设置对话框获取tty设置
  357 + //
381 358 UpdateTTYInfo();
382 359 myintPort = atoi(gszPort+3);
383 360
384 361 //
385   - // open communication port handle
  362 + //打开通信端口句柄
386 363 //
387 364 sprintf(gszPort, "\\\\.\\COM%d", myintPort);///可以显示COM10以上端口//add by itas109 2014-01-09
388   - COMDEV( TTYInfo ) = CreateFile( gszPort,
  365 + TTYInfo.hCommPort = CreateFile( gszPort,
389 366 GENERIC_READ | GENERIC_WRITE,
390 367 0,
391 368 0,
... ... @@ -393,15 +370,13 @@ HANDLE SetupCommPort()
393 370 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
394 371 0);
395 372
396   - if (COMDEV(TTYInfo) == INVALID_HANDLE_VALUE) {
  373 + if (TTYInfo.hCommPort == INVALID_HANDLE_VALUE) {
397 374 ErrorReporter("CreateFile");
398 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 380 ErrorReporter("GetCommTimeouts");
406 381
407 382 //
... ... @@ -412,12 +387,12 @@ HANDLE SetupCommPort()
412 387 //
413 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 393 // raise DTR
419 394 //
420   - if (!EscapeCommFunction(COMDEV(TTYInfo), SETDTR))
  395 + if (!EscapeCommFunction(TTYInfo.hCommPort, SETDTR))
421 396 ErrorReporter("EscapeCommFunction (SETDTR)");
422 397
423 398 //
... ... @@ -428,9 +403,9 @@ HANDLE SetupCommPort()
428 403 //
429 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 431 HANDLE hThreads[2];
457 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 438 // set thread exit event here
... ... @@ -474,10 +449,10 @@ DWORD WaitForThreads(DWORD dwTimeout)
474 449
475 450 case WAIT_TIMEOUT:
476 451
477   - if (WaitForSingleObject(READSTATTHREAD(TTYInfo), 0) == WAIT_TIMEOUT)
  452 + if (WaitForSingleObject(TTYInfo.hReaderStatus, 0) == WAIT_TIMEOUT)
478 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 456 OutputDebugString("Writer Thread didn't exit.\n\r");
482 457
483 458 break;
... ... @@ -515,10 +490,10 @@ HISTORY: Date: Author: Comment:
515 490 -----------------------------------------------------------------------------*/
516 491 BOOL BreakDownCommPort()
517 492 {
518   - if (!CONNECTED(TTYInfo))
  493 + if (!TTYInfo.fConnected)
519 494 return FALSE;
520 495
521   - CONNECTED( TTYInfo ) = FALSE;
  496 + TTYInfo.fConnected = FALSE;
522 497
523 498 //
524 499 // wait for the threads for a small period
... ... @@ -534,24 +509,24 @@ BOOL BreakDownCommPort()
534 509 //
535 510 // lower DTR
536 511 //
537   - if (!EscapeCommFunction(COMDEV(TTYInfo), CLRDTR))
  512 + if (!EscapeCommFunction(TTYInfo.hCommPort, CLRDTR))
538 513 ErrorReporter("EscapeCommFunction(CLRDTR)");
539 514
540 515 //
541 516 // restore original comm timeouts
542 517 //
543   - if (!SetCommTimeouts(COMDEV(TTYInfo), &(TIMEOUTSORIG(TTYInfo))))
  518 + if (!SetCommTimeouts(TTYInfo.hCommPort, &(TTYInfo.timeoutsorig)))
544 519 ErrorReporter("SetCommTimeouts (Restoration to original)");
545 520
546 521 //
547 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 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 531 return TRUE;
557 532 }
... ... @@ -572,7 +547,7 @@ HISTORY: Date: Author: Comment:
572 547 -----------------------------------------------------------------------------*/
573 548 BOOL DisconnectOK()
574 549 {
575   - if (!CONNECTED(TTYInfo))
  550 + if (!TTYInfo.fConnected)
576 551 return TRUE;
577 552
578 553 return ((MessageBox(ghwndMain, "OK to Disconnect?", gszPort, MB_YESNO)) == IDYES);
... ...
... ... @@ -12,21 +12,20 @@
12 12 PURPOSE: Program entry point and window management
13 13
14 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 160 }
162 161
163 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 166 // setup program's tty child window class
... ... @@ -236,7 +235,7 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
236 235 OpenTTYChildWindow(hwnd);
237 236 OpenSettingsToolbar(hwnd);
238 237 OpenStatusToolbar(hwnd);
239   - ChangeConnection(hwnd, CONNECTED(TTYInfo));
  238 + ChangeConnection(hwnd, TTYInfo.fConnected);
240 239 break;
241 240
242 241 case WM_DESTROY:
... ... @@ -317,8 +316,8 @@ int WINAPI MTTTYWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
317 316
318 317 case WM_CLOSE:
319 318 if (DisconnectOK()) {
320   - if (CONNECTED(TTYInfo)) {
321   - if (TRANSFERRING(TTYInfo))
  319 + if (TTYInfo.fConnected) {
  320 + if (TTYInfo.fTransferring)
322 321 TransferFileTextEnd();
323 322 BreakDownCommPort();
324 323 }
... ... @@ -406,7 +405,7 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
406 405 // was abort sent from the abort button?
407 406 if (LOWORD(lParam) == IDC_ABORTBTN) {
408 407 // am I in a transfer repeat?
409   - if (REPEATING(TTYInfo))
  408 + if (TTYInfo.fRepeating)
410 409 TransferRepeatDestroy();
411 410 // am I in a normal recieve state, then stop sending
412 411 else if (gdwReceiveState == RECEIVE_TTY)
... ... @@ -462,12 +461,12 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
462 461
463 462 case ID_FILE_CONNECT:
464 463 if (SetupCommPort() != NULL)
465   - ChangeConnection(hwnd, CONNECTED(TTYInfo));
  464 + ChangeConnection(hwnd, TTYInfo.fConnected);
466 465 break;
467 466
468 467 case ID_FILE_DISCONNECT:
469 468 if (BreakDownCommPort())
470   - ChangeConnection(hwnd, CONNECTED(TTYInfo));
  469 + ChangeConnection(hwnd, TTYInfo.fConnected);
471 470 break;
472 471
473 472 case ID_FILE_EXIT:
... ... @@ -535,48 +534,48 @@ BOOL NEAR ScrollTTYVert( HWND hWnd, WORD wScrollCmd, WORD wScrollPos )
535 534 switch (wScrollCmd)
536 535 {
537 536 case SB_TOP:
538   - nScrollAmt = -YOFFSET( TTYInfo ) ;
  537 + nScrollAmt = -TTYInfo.yOffset ;
539 538 break ;
540 539
541 540 case SB_BOTTOM:
542   - nScrollAmt = YSCROLL( TTYInfo ) - YOFFSET( TTYInfo ) ;
  541 + nScrollAmt = TTYInfo.yScroll - TTYInfo.yOffset ;
543 542 break ;
544 543
545 544 case SB_PAGEUP:
546   - nScrollAmt = -YSIZE( TTYInfo ) ;
  545 + nScrollAmt = -TTYInfo.ySize ;
547 546 break ;
548 547
549 548 case SB_PAGEDOWN:
550   - nScrollAmt = YSIZE( TTYInfo ) ;
  549 + nScrollAmt = TTYInfo.ySize ;
551 550 break ;
552 551
553 552 case SB_LINEUP:
554   - nScrollAmt = -YCHAR( TTYInfo ) ;
  553 + nScrollAmt = -TTYInfo.yChar ;
555 554 break ;
556 555
557 556 case SB_LINEDOWN:
558   - nScrollAmt = YCHAR( TTYInfo ) ;
  557 + nScrollAmt = TTYInfo.yChar ;
559 558 break ;
560 559
561 560 case SB_THUMBPOSITION:
562   - nScrollAmt = wScrollPos - YOFFSET( TTYInfo ) ;
  561 + nScrollAmt = wScrollPos - TTYInfo.yOffset ;
563 562 break ;
564 563
565 564 default:
566 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 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 580 return ( TRUE ) ;
582 581
... ... @@ -610,43 +609,43 @@ BOOL NEAR ScrollTTYHorz( HWND hWnd, WORD wScrollCmd, WORD wScrollPos )
610 609 switch (wScrollCmd)
611 610 {
612 611 case SB_TOP:
613   - nScrollAmt = -XOFFSET( TTYInfo ) ;
  612 + nScrollAmt = -TTYInfo.xOffset ;
614 613 break ;
615 614
616 615 case SB_BOTTOM:
617   - nScrollAmt = XSCROLL( TTYInfo ) - XOFFSET( TTYInfo ) ;
  616 + nScrollAmt = TTYInfo.xScroll - TTYInfo.xOffset ;
618 617 break ;
619 618
620 619 case SB_PAGEUP:
621   - nScrollAmt = -XSIZE( TTYInfo ) ;
  620 + nScrollAmt = -TTYInfo.xSize ;
622 621 break ;
623 622
624 623 case SB_PAGEDOWN:
625   - nScrollAmt = XSIZE( TTYInfo ) ;
  624 + nScrollAmt = TTYInfo.xSize ;
626 625 break ;
627 626
628 627 case SB_LINEUP:
629   - nScrollAmt = -XCHAR( TTYInfo ) ;
  628 + nScrollAmt = -TTYInfo.xChar ;
630 629 break ;
631 630
632 631 case SB_LINEDOWN:
633   - nScrollAmt = XCHAR( TTYInfo ) ;
  632 + nScrollAmt = TTYInfo.xChar ;
634 633 break ;
635 634
636 635 case SB_THUMBPOSITION:
637   - nScrollAmt = wScrollPos - XOFFSET( TTYInfo ) ;
  636 + nScrollAmt = wScrollPos - TTYInfo.xOffset ;
638 637 break ;
639 638
640 639 default:
641 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 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 650 return ( TRUE ) ;
652 651
... ... @@ -686,34 +685,34 @@ BOOL NEAR PaintTTY( HWND hWnd )
686 685 int nCount, nHorzPos, nVertPos ;
687 686
688 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 691 rect = ps.rcPaint ;
693 692 nRow =
694 693 min( MAXROWS - 1,
695   - max( 0, (rect.top + YOFFSET( TTYInfo )) / YCHAR( TTYInfo ) ) ) ;
  694 + max( 0, (rect.top + TTYInfo.yOffset) / TTYInfo.yChar ) ) ;
696 695 nEndRow =
697 696 min( MAXROWS - 1,
698   - ((rect.bottom + YOFFSET( TTYInfo ) - 1) / YCHAR( TTYInfo ) ) ) ;
  697 + ((rect.bottom + TTYInfo.yOffset - 1) / TTYInfo.yChar ) ) ;
699 698 nCol =
700 699 min( MAXCOLS - 1,
701   - max( 0, (rect.left + XOFFSET( TTYInfo )) / XCHAR( TTYInfo ) ) ) ;
  700 + max( 0, (rect.left + TTYInfo.xOffset) / TTYInfo.xChar ) ) ;
702 701 nEndCol =
703 702 min( MAXCOLS - 1,
704   - ((rect.right + XOFFSET( TTYInfo ) - 1) / XCHAR( TTYInfo ) ) ) ;
  703 + ((rect.right + TTYInfo.xOffset - 1) / TTYInfo.xChar ) ) ;
705 704 nCount = nEndCol - nCol + 1 ;
706 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 709 rect.top = nVertPos ;
711   - rect.bottom = nVertPos + YCHAR( TTYInfo ) ;
  710 + rect.bottom = nVertPos + TTYInfo.yChar ;
712 711 rect.left = nHorzPos ;
713   - rect.right = nHorzPos + XCHAR( TTYInfo ) * nCount ;
  712 + rect.right = nHorzPos + TTYInfo.xChar * nCount ;
714 713 SetBkMode( hDC, TRANSPARENT ) ;
715 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 716 nCount, NULL ) ;
718 717 }
719 718 SelectObject( hDC, hOldFont ) ;
... ... @@ -740,11 +739,11 @@ BOOL NEAR PaintTTY( HWND hWnd )
740 739 //---------------------------------------------------------------------------
741 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 748 return ( TRUE ) ;
750 749
... ... @@ -767,11 +766,11 @@ BOOL NEAR MoveTTYCursor( HWND hWnd )
767 766 //---------------------------------------------------------------------------
768 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 772 ShowCaret( hWnd ) ;
774   - CURSORSTATE( TTYInfo ) = CS_SHOW ;
  773 + TTYInfo.wCursorState= CS_SHOW ;
775 774 }
776 775
777 776 MoveTTYCursor( hWnd ) ;
... ... @@ -796,11 +795,11 @@ BOOL NEAR SetTTYFocus( HWND hWnd )
796 795 //---------------------------------------------------------------------------
797 796 BOOL NEAR KillTTYFocus( HWND hWnd )
798 797 {
799   - if (CURSORSTATE( TTYInfo ) != CS_HIDE)
  798 + if (TTYInfo.wCursorState!= CS_HIDE)
800 799 {
801 800 HideCaret( hWnd ) ;
802 801 DestroyCaret() ;
803   - CURSORSTATE( TTYInfo ) = CS_HIDE ;
  802 + TTYInfo.wCursorState= CS_HIDE ;
804 803 }
805 804 return ( TRUE ) ;
806 805
... ... @@ -835,29 +834,29 @@ BOOL NEAR SizeTTY( HWND hWnd, WORD wWidth, WORD wHeight )
835 834 //
836 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 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 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 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 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 905 //
907 906 // keyboard activity in TTY Window
908 907 //
909   - if (CONNECTED(TTYInfo)) {
  908 + if (TTYInfo.fConnected) {
910 909
911 910 if (!WriterAddNewNode(WRITE_CHAR, 0, (char) wParam, NULL, NULL, NULL))
912 911 return FALSE;
913 912
914   - if (LOCALECHO(TTYInfo))
  913 + if (TTYInfo.fLocalEcho)
915 914 OutputABufferToWindow(ghWndTTY, (CHAR *) &wParam, 1);
916 915 }
917 916 }
... ...
... ... @@ -105,7 +105,7 @@ HANDLE ghFileCapture;
105 105
106 106 //
107 107 // Status updating
108   -//
  108 +//ÁÙ½Ö×ÊÔ´, »¥³â·ÃÎÊ
109 109 CRITICAL_SECTION gStatusCritical;
110 110 HANDLE ghStatusMessageEvent;
111 111 HANDLE ghStatusMessageHeap;
... ... @@ -131,7 +131,7 @@ char gszPort[10];
131 131
132 132 //
133 133 // Writer heap variables
134   -//
  134 +// ÁÙ½Ö×ÊÔ´
135 135 CRITICAL_SECTION gcsWriterHeap;
136 136 CRITICAL_SECTION gcsDataHeap;
137 137 HANDLE ghWriterHeap;
... ...
... ... @@ -64,13 +64,13 @@ void OutputABufferToWindow(HWND hTTY, char * lpBuf, DWORD dwBufLen)
64 64 break ;
65 65
66 66 case ASCII_BS: // Backspace CHAR
67   - if (COLUMN( TTYInfo ) > 0)
68   - COLUMN( TTYInfo ) -- ;
  67 + if (TTYInfo.nColumn > 0)
  68 + TTYInfo.nColumn -- ;
69 69 break ;
70 70
71 71 case ASCII_CR: // Carriage Return
72   - COLUMN( TTYInfo ) = 0 ;
73   - if (!NEWLINE( TTYInfo ))
  72 + TTYInfo.nColumn = 0 ;
  73 + if (!TTYInfo.fNewLine)
74 74 break;
75 75
76 76 //
... ... @@ -78,35 +78,35 @@ void OutputABufferToWindow(HWND hTTY, char * lpBuf, DWORD dwBufLen)
78 78 //
79 79
80 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 85 (MAXROWS - 1) * MAXCOLS ) ;
86   - FillMemory((LPSTR) (SCREEN( TTYInfo ) + (MAXROWS - 1) * MAXCOLS),
  86 + FillMemory((LPSTR) (TTYInfo.Screen + (MAXROWS - 1) * MAXCOLS),
87 87 MAXCOLS, ' ' ) ;
88 88 InvalidateRect( hTTY, NULL, FALSE ) ;
89   - ROW( TTYInfo )-- ;
  89 + TTYInfo.nRow-- ;
90 90 }
91 91 break ;
92 92
93 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 102 InvalidateRect( hTTY, &rect, FALSE ) ;
103 103
104 104 //
105 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 110 OutputABufferToWindow(hTTY, "\r\n", 2 ) ;
111 111
112 112 break;
... ...
... ... @@ -100,21 +100,21 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
100 100 // If no reading is allowed, then set flag to
101 101 // make it look like a read is already outstanding.
102 102 //
103   - if (NOREADING( TTYInfo ))
  103 + if (TTYInfo.fNoReading)
104 104 fWaitingOnRead = TRUE;
105 105
106 106 //
107 107 // if no read is outstanding, then issue another one
108 108 //
109 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 111 if (GetLastError() != ERROR_IO_PENDING) // read not delayed?
112 112 ErrorInComm("ReadFile in ReaderAndStatusProc");
113 113
114 114 fWaitingOnRead = TRUE;
115 115 }
116 116 else { // read completed immediately
117   - if ((dwRead != MAX_READ_BUFFER) && SHOWTIMEOUTS(TTYInfo))
  117 + if ((dwRead != MAX_READ_BUFFER) && TTYInfo.fDisplayTimeouts)
118 118 UpdateStatus("Read timed out immediately.\r\n");
119 119
120 120 if (dwRead)
... ... @@ -129,9 +129,9 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
129 129 // This will cause a pending WaitCommEvent to complete
130 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 135 ErrorReporter("SetCommMask");
136 136 }
137 137
... ... @@ -139,16 +139,16 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
139 139 // If event checks are not allowed, then make it look
140 140 // like an event check operation is outstanding
141 141 //
142   - if (NOEVENTS(TTYInfo))
  142 + if (TTYInfo.fNoEvents)
143 143 fWaitingOnStat = TRUE;
144 144 //
145 145 // if no status check is outstanding, then issue another one
146 146 //
147 147 if (!fWaitingOnStat) {
148   - if (NOEVENTS(TTYInfo))
  148 + if (TTYInfo.fNoEvents)
149 149 fWaitingOnStat = TRUE;
150 150 else {
151   - if (!WaitCommEvent(COMDEV(TTYInfo), &dwCommEvent, &osStatus)) {
  151 + if (!WaitCommEvent(TTYInfo.hCommPort, &dwCommEvent, &osStatus)) {
152 152 if (GetLastError() != ERROR_IO_PENDING) // Wait not delayed?
153 153 ErrorReporter("WaitCommEvent");
154 154 else
... ... @@ -171,14 +171,14 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
171 171 // read completed
172 172 //
173 173 case WAIT_OBJECT_0:
174   - if (!GetOverlappedResult(COMDEV(TTYInfo), &osReader, &dwRead, FALSE)) {
  174 + if (!GetOverlappedResult(TTYInfo.hCommPort, &osReader, &dwRead, FALSE)) {
175 175 if (GetLastError() == ERROR_OPERATION_ABORTED)
176 176 UpdateStatus("Read aborted\r\n");
177 177 else
178 178 ErrorInComm("GetOverlappedResult (in Reader)");
179 179 }
180 180 else { // read completed successfully
181   - if ((dwRead != MAX_READ_BUFFER) && SHOWTIMEOUTS(TTYInfo))
  181 + if ((dwRead != MAX_READ_BUFFER) && TTYInfo.fDisplayTimeouts)
182 182 UpdateStatus("Read timed out overlapped.\r\n");
183 183
184 184 if (dwRead)
... ... @@ -259,7 +259,7 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
259 259 // status completed
260 260 //
261 261 case WAIT_OBJECT_0 + 1:
262   - if (!GetOverlappedResult(COMDEV(TTYInfo), &osStatus, &dwOvRes, FALSE)) {
  262 + if (!GetOverlappedResult(TTYInfo.hCommPort, &osStatus, &dwOvRes, FALSE)) {
263 263 if (GetLastError() == ERROR_OPERATION_ABORTED)
264 264 UpdateStatus("WaitCommEvent aborted\r\n");
265 265 else
... ... @@ -295,7 +295,7 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
295 295 // if status checks are not allowed, then don't issue the
296 296 // modem status check nor the com stat check
297 297 //
298   - if (!NOSTATUS(TTYInfo)) {
  298 + if (!TTYInfo.fNoStatus) {
299 299 CheckModemStatus(FALSE); // take this opportunity to do
300 300 CheckComStat(FALSE); // a modem status check and
301 301 // a comm status check
... ...
... ... @@ -260,36 +260,36 @@ void UpdateTTYInfo()
260 260 //
261 261 GetDlgItemText(ghWndToolbarDlg, IDC_PORTCOMBO, gszPort, sizeof(gszPort));
262 262
263   - BAUDRATE(TTYInfo) = GetdwTTYItem( ghWndToolbarDlg,
  263 + TTYInfo.dwBaudRate = GetdwTTYItem( ghWndToolbarDlg,
264 264 IDC_BAUDCOMBO,
265 265 szBaud,
266 266 BaudTable,
267 267 sizeof(BaudTable)/sizeof(BaudTable[0]));
268 268
269   - PARITY(TTYInfo) = GetbTTYItem( ghWndToolbarDlg,
  269 + TTYInfo.bParity = GetbTTYItem( ghWndToolbarDlg,
270 270 IDC_PARITYCOMBO,
271 271 szParity,
272 272 ParityTable,
273 273 sizeof(ParityTable)/sizeof(ParityTable[0]));
274 274
275   - STOPBITS(TTYInfo) = GetbTTYItem( ghWndToolbarDlg,
  275 + TTYInfo.bStopBits = GetbTTYItem( ghWndToolbarDlg,
276 276 IDC_STOPBITSCOMBO,
277 277 szStopBits,
278 278 StopBitsTable,
279 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 293 UpdateConnection();
294 294
295 295 return;
... ... @@ -317,21 +317,21 @@ BOOL UpdateConnection()
317 317 //
318 318 // get current DCB settings
319 319 //
320   - if (!GetCommState(COMDEV(TTYInfo), &dcb))
  320 + if (!GetCommState(TTYInfo.hCommPort, &dcb))
321 321 ErrorReporter("GetCommState");
322 322
323 323 //
324 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 332 // update event flags
333 333 //
334   - if (EVENTFLAGS(TTYInfo) & EV_RXFLAG)
  334 + if (TTYInfo.dwEventFlags & EV_RXFLAG)
335 335 dcb.EvtChar = TTYInfo.chFlag;
336 336 else
337 337 dcb.EvtChar = '\0';
... ... @@ -339,19 +339,19 @@ BOOL UpdateConnection()
339 339 //
340 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 357 // DCB settings not in the user's control
... ... @@ -361,13 +361,13 @@ BOOL UpdateConnection()
361 361 //
362 362 // set new state
363 363 //
364   - if (!SetCommState(COMDEV(TTYInfo), &dcb))
  364 + if (!SetCommState(TTYInfo.hCommPort, &dcb))
365 365 ErrorReporter("SetCommState");
366 366
367 367 //
368 368 // set new timeouts
369 369 //
370   - if (!SetCommTimeouts(COMDEV(TTYInfo), &(TIMEOUTSNEW(TTYInfo))))
  370 + if (!SetCommTimeouts(TTYInfo.hCommPort, &(TTYInfo.timeoutsnew)))
371 371 ErrorReporter("SetCommTimeouts");
372 372
373 373 return TRUE;
... ... @@ -487,7 +487,7 @@ BOOL SettingsDlgInit( HWND hDlg )
487 487 }
488 488
489 489 SendDlgItemMessage( hDlg, IDC_PORTCOMBO, CB_SETCURSEL,
490   - (WPARAM) (PORT( TTYInfo ) - 1), 0L ) ;
  490 + (WPARAM) (TTYInfo.bPort - 1), 0L ) ;
491 491
492 492 GetDlgItemText(hDlg, IDC_PORTCOMBO, gszPort, sizeof(gszPort));
493 493
... ... @@ -497,7 +497,7 @@ BOOL SettingsDlgInit( HWND hDlg )
497 497 FillComboBox( GetDlgItem( hDlg, IDC_BAUDCOMBO ),
498 498 szBaud, BaudTable,
499 499 sizeof( BaudTable ) / sizeof( BaudTable[ 0 ] ),
500   - BAUDRATE( TTYInfo ) ) ;
  500 + TTYInfo.dwBaudRate ) ;
501 501
502 502 //
503 503 // fill data bits combo box and make initial selection
... ... @@ -511,7 +511,7 @@ BOOL SettingsDlgInit( HWND hDlg )
511 511 //
512 512 // if wCount is current selection, tell the combo box
513 513 //
514   - if (wCount == BYTESIZE( TTYInfo ))
  514 + if (wCount == TTYInfo.bByteSize)
515 515 SendDlgItemMessage( hDlg, IDC_DATABITSCOMBO, CB_SETCURSEL,
516 516 (WPARAM) wPosition, 0L ) ;
517 517 }
... ... @@ -522,7 +522,7 @@ BOOL SettingsDlgInit( HWND hDlg )
522 522 FillComboBox( GetDlgItem( hDlg, IDC_PARITYCOMBO ),
523 523 szParity, ParityTable,
524 524 sizeof( ParityTable ) / sizeof( ParityTable[ 0 ] ),
525   - PARITY( TTYInfo ) ) ;
  525 + TTYInfo.bParity ) ;
526 526
527 527 //
528 528 // fill stop bits combo box and make initial selection
... ... @@ -530,19 +530,19 @@ BOOL SettingsDlgInit( HWND hDlg )
530 530 FillComboBox( GetDlgItem( hDlg, IDC_STOPBITSCOMBO ),
531 531 szStopBits, StopBitsTable,
532 532 sizeof( StopBitsTable ) / sizeof ( StopBitsTable[ 0 ] ),
533   - STOPBITS( TTYInfo ) ) ;
  533 + TTYInfo.bStopBits ) ;
534 534 //
535 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 547 return ( TRUE ) ;
548 548
... ... @@ -706,11 +706,11 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
706 706 break;
707 707 case IDC_BUTTON_CONNECT_UART: // font button pressed
708 708 {
709   - if (!CONNECTED(TTYInfo))
  709 + if (!TTYInfo.fConnected)
710 710 {
711 711 if (SetupCommPort() != NULL)
712 712 {
713   - ChangeConnection(hWndDlg, CONNECTED(TTYInfo));
  713 + ChangeConnection(hWndDlg, TTYInfo.fConnected);
714 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 718 {
719 719 if (BreakDownCommPort())
720 720 {
721   - ChangeConnection(hWndDlg, CONNECTED(TTYInfo));
  721 + ChangeConnection(hWndDlg, TTYInfo.fConnected);
722 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 731 CHOOSEFONT cf = {0};
732 732 LOGFONT lf;
733 733
734   - lf = LFTTYFONT(TTYInfo);
  734 + lf = TTYInfo.lfTTYFont;
735 735 cf.lStructSize = sizeof(CHOOSEFONT);
736 736 cf.hwndOwner = hWndDlg;
737 737 cf.lpLogFont = &lf;
738   - cf.rgbColors = FGCOLOR(TTYInfo);
  738 + cf.rgbColors = TTYInfo.rgbFGColor;
739 739 cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS | CF_FIXEDPITCHONLY | \
740 740 CF_EFFECTS;
741 741
... ... @@ -748,7 +748,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
748 748 // fix scroll bar sizes since we may have more or less pixels per
749 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 754 // repaint screen contents
... ... @@ -784,7 +784,7 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
784 784 break;
785 785
786 786 default: // some other control has been modified
787   - if (CONNECTED(TTYInfo))
  787 + if (TTYInfo.fConnected)
788 788 UpdateTTYInfo();
789 789 break;
790 790 }
... ... @@ -911,7 +911,7 @@ void InitCommEventsDlg(HWND hdlg, DWORD dwEventFlags)
911 911 for (i = IDC_EVBREAKBTN, j = 0; i <= IDC_EVTXEMPTYBTN; i++, j++)
912 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 916 EnableWindow(GetDlgItem(hdlg, IDC_FLAGEDIT), dwEventFlags & EV_RXFLAG);
917 917 EnableWindow(GetDlgItem(hdlg, IDC_FLAGCHAR), dwEventFlags & EV_RXFLAG);
... ... @@ -954,17 +954,17 @@ void SaveCommEventsDlg(HWND hdlg)
954 954 // get current flag character from dialog
955 955 //
956 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 960 UpdateTTYInfo();
961 961 }
962 962
963 963 //
964 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 969 return;
970 970 }
... ... @@ -995,7 +995,7 @@ BOOL CALLBACK CommEventsProc(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lpa
995 995 switch(uMessage)
996 996 {
997 997 case WM_INITDIALOG: // init controls
998   - InitCommEventsDlg(hdlg, EVENTFLAGS(TTYInfo));
  998 + InitCommEventsDlg(hdlg, TTYInfo.dwEventFlags);
999 999 break;
1000 1000
1001 1001 case WM_COMMAND:
... ... @@ -1064,10 +1064,10 @@ void SaveFlowControlDlg(HWND hdlg)
1064 1064 dwNewRTSControl = GetdwTTYItem( hdlg, IDC_RTSCONTROLCOMBO,
1065 1065 szRTSControlStrings, RTSControlTable,
1066 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 1071 fUpdateDCB = TRUE;
1072 1072 }
1073 1073
... ... @@ -1076,10 +1076,10 @@ void SaveFlowControlDlg(HWND hdlg)
1076 1076 //
1077 1077 wNewXONLimit = GetDlgItemInt(hdlg, IDC_XONLIMITEDIT, &fSuccess, FALSE);
1078 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 1083 fUpdateDCB = TRUE;
1084 1084 }
1085 1085
... ... @@ -1088,10 +1088,10 @@ void SaveFlowControlDlg(HWND hdlg)
1088 1088 //
1089 1089 chNewXON = GetHexControl(hdlg, IDC_XONCHAREDIT, IDC_XONCHARDISP);
1090 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 1095 fUpdateDCB = TRUE;
1096 1096 }
1097 1097
... ... @@ -1105,18 +1105,18 @@ void SaveFlowControlDlg(HWND hdlg)
1105 1105 fNewXOut = IsDlgButtonChecked(hdlg, IDC_XONXOFFOUTCHK);
1106 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 1120 fUpdateDCB = TRUE;
1121 1121 }
1122 1122
... ... @@ -1150,7 +1150,7 @@ void InitFlowControlDlg(HWND hdlg)
1150 1150 FillComboBox( GetDlgItem( hdlg, IDC_DTRCONTROLCOMBO ),
1151 1151 szDTRControlStrings, DTRControlTable,
1152 1152 sizeof( DTRControlTable) / sizeof( DTRControlTable[0] ),
1153   - DTRCONTROL( TTYInfo ) );
  1153 + TTYInfo.fDtrControl );
1154 1154
1155 1155 //
1156 1156 // fill and init RTS control combo
... ... @@ -1158,29 +1158,29 @@ void InitFlowControlDlg(HWND hdlg)
1158 1158 FillComboBox( GetDlgItem( hdlg, IDC_RTSCONTROLCOMBO ),
1159 1159 szRTSControlStrings, RTSControlTable,
1160 1160 sizeof( RTSControlTable) / sizeof( RTSControlTable[0] ),
1161   - RTSCONTROL( TTYInfo ) );
  1161 + TTYInfo.fRtsControl );
1162 1162
1163 1163 //
1164 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 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 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 1185 return;
1186 1186 }
... ... @@ -1335,7 +1335,7 @@ void InitTimeoutsDlg(HWND hdlg, COMMTIMEOUTS ct)
1335 1335 SetDlgItemInt(hdlg, IDC_READCONSTANTEDIT, ct.ReadTotalTimeoutConstant, FALSE);
1336 1336 SetDlgItemInt(hdlg, IDC_WRITEMULTIPLIEREDIT, ct.WriteTotalTimeoutMultiplier, FALSE);
1337 1337 SetDlgItemInt(hdlg, IDC_WRITECONSTANTEDIT, ct.WriteTotalTimeoutConstant, FALSE);
1338   - CheckDlgButton(hdlg, IDC_DISPLAYTIMEOUTS, SHOWTIMEOUTS(TTYInfo));
  1338 + CheckDlgButton(hdlg, IDC_DISPLAYTIMEOUTS, TTYInfo.fDisplayTimeouts);
1339 1339 return;
1340 1340 }
1341 1341
... ... @@ -1365,29 +1365,29 @@ void SaveTimeoutsDlg(HWND hdlg)
1365 1365 ctNew.WriteTotalTimeoutMultiplier = GetDlgItemInt(hdlg, IDC_WRITEMULTIPLIEREDIT, NULL, FALSE);
1366 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 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 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 1379 ErrorReporter("SetCommTimeouts");
1380 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 1384 ErrorReporter("PurgeComm");
1385 1385 }
1386 1386
1387 1387 //
1388 1388 // save timeouts in the tty info structure
1389 1389 //
1390   - TIMEOUTSNEW(TTYInfo) = ctNew;
  1390 + TTYInfo.timeoutsnew = ctNew;
1391 1391 }
1392 1392
1393 1393 return;
... ... @@ -1419,7 +1419,7 @@ BOOL CALLBACK TimeoutsProc(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lpara
1419 1419 switch(uMessage)
1420 1420 {
1421 1421 case WM_INITDIALOG: // init controls
1422   - InitTimeoutsDlg(hdlg, TIMEOUTSNEW(TTYInfo));
  1422 + InitTimeoutsDlg(hdlg, TTYInfo.timeoutsnew);
1423 1423 break;
1424 1424
1425 1425 case WM_COMMAND:
... ...
... ... @@ -411,7 +411,7 @@ void CheckModemStatus( BOOL bUpdateNow )
411 411
412 412 DWORD dwNewModemStatus;
413 413
414   - if (!GetCommModemStatus(COMDEV(TTYInfo), &dwNewModemStatus))
  414 + if (!GetCommModemStatus(TTYInfo.hCommPort, &dwNewModemStatus))
415 415 ErrorReporter("GetCommModemStatus");
416 416
417 417 //
... ... @@ -483,7 +483,7 @@ void CheckComStat(BOOL bUpdateNow)
483 483
484 484 BOOL bReport = bUpdateNow;
485 485
486   - if (!ClearCommError(COMDEV(TTYInfo), &dwErrors, &ComStatNew))
  486 + if (!ClearCommError(TTYInfo.hCommPort, &dwErrors, &ComStatNew))
487 487 ErrorReporter("ClearCommError");
488 488
489 489 if (dwErrors != dwErrorsOld) {
... ... @@ -529,7 +529,7 @@ void ReportCommError()
529 529 //
530 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 533 ErrorReporter("ClearCommError");
534 534
535 535 //
... ...
... ... @@ -138,7 +138,7 @@ void TransferRepeatCreate(LPCTSTR lpszFileName, DWORD dwFrequency)
138 138 TransferRepeatDestroy();
139 139 }
140 140 else {
141   - REPEATING(TTYInfo) = TRUE;
  141 + TTYInfo.fRepeating = TRUE;
142 142 OutputDebugString("Timer setup.\n");
143 143 }
144 144
... ... @@ -181,7 +181,7 @@ void TransferRepeatDestroy()
181 181 if (!HeapFree(ghWriterHeap, 0, lpBuf))
182 182 ErrorReporter("HeapFree (data block from writer heap)");
183 183
184   - REPEATING(TTYInfo) = FALSE;
  184 + TTYInfo.fRepeating = FALSE;
185 185 OutputDebugString("Repeated transfer destroyed.\r\n");
186 186
187 187 //
... ... @@ -284,7 +284,7 @@ void TransferFileTextStart(LPCTSTR lpstrFileName)
284 284 TransferFileTextEnd();
285 285 }
286 286 else
287   - TRANSFERRING(TTYInfo) = TRUE;
  287 + TTYInfo.fTransferring = TRUE;
288 288
289 289 return;
290 290 }
... ... @@ -321,7 +321,7 @@ void TransferFileTextEnd()
321 321 CloseHandle(hTransferAbortEvent);
322 322 CloseHandle(hTransferThread);
323 323
324   - TRANSFERRING(TTYInfo) = FALSE;
  324 + TTYInfo.fTransferring = FALSE;
325 325
326 326 //
327 327 // enable transfer menu
... ... @@ -407,7 +407,7 @@ void ReceiveFileText(LPCTSTR lpstrFileName)
407 407 //
408 408 hMenu = GetMenu(ghwndMain);
409 409 MenuFlags = MF_ENABLED;
410   - ChangeConnection(ghwndMain, CONNECTED(TTYInfo));
  410 + ChangeConnection(ghwndMain, TTYInfo.fConnected);
411 411
412 412 //
413 413 // enable transfer menu
... ...
... ... @@ -87,61 +87,63 @@ struct TTYInfoStruct
87 87 //
88 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 149 // End of File: ttyinfo.h
... ...
... ... @@ -432,7 +432,7 @@ void WriterGeneric(char * lpBuf, DWORD dwToWrite)
432 432 //
433 433 // If no writing is allowed, then just return
434 434 //
435   - if (NOWRITING(TTYInfo))
  435 + if (TTYInfo.fNoWriting)
436 436 return ;
437 437
438 438 //
... ... @@ -448,7 +448,7 @@ void WriterGeneric(char * lpBuf, DWORD dwToWrite)
448 448 //
449 449 // issue write
450 450 //
451   - if (!WriteFile(COMDEV(TTYInfo), lpBuf, dwToWrite, &dwWritten, &osWrite)) {
  451 + if (!WriteFile(TTYInfo.hCommPort, lpBuf, dwToWrite, &dwWritten, &osWrite)) {
452 452 if (GetLastError() == ERROR_IO_PENDING) {
453 453 //
454 454 // write is delayed
... ... @@ -461,7 +461,7 @@ void WriterGeneric(char * lpBuf, DWORD dwToWrite)
461 461 //
462 462 case WAIT_OBJECT_0:
463 463 SetLastError(ERROR_SUCCESS);
464   - if (!GetOverlappedResult(COMDEV(TTYInfo), &osWrite, &dwWritten, FALSE)) {
  464 + if (!GetOverlappedResult(TTYInfo.hCommPort, &osWrite, &dwWritten, FALSE)) {
465 465 if (GetLastError() == ERROR_OPERATION_ABORTED)
466 466 UpdateStatus("Write aborted\r\n");
467 467 else
... ... @@ -469,7 +469,7 @@ void WriterGeneric(char * lpBuf, DWORD dwToWrite)
469 469 }
470 470
471 471 if (dwWritten != dwToWrite) {
472   - if ((GetLastError() == ERROR_SUCCESS) && SHOWTIMEOUTS(TTYInfo))
  472 + if ((GetLastError() == ERROR_SUCCESS) && TTYInfo.fDisplayTimeouts)
473 473 UpdateStatus("Write timed out. (overlapped)\r\n");
474 474 else
475 475 ErrorReporter("Error writing data to port (overlapped)");
... ...
Please register or login to post a comment