|
|
1.1 root 1: //---------------------------------------------------------------------------
2: //
3: // Module: tty.h
4: //
5: // Purpose:
6: // This is the header file for the TTY sample.
7: //
8: // Development Team:
9: // Bryan A. Woodruff
10: //
11: // History: Date Author Comment
12: // 5/ 9/91 BryanW Wrote it.
13: //
14: //---------------------------------------------------------------------------
15: //
16: // Written by Microsoft Product Support Services, Windows Developer Support.
17: // Copyright (c) 1991 Microsoft Corporation. All Rights Reserved.
18: //
19: //---------------------------------------------------------------------------
20:
21: #define USECOMM // yes, we need the COMM API
22:
23: #ifndef WIN32
24: #define WIN31 // this is a Windows 3.1 application
25: #endif
26:
27: #include <windows.h>
28: #include <commdlg.h>
29: #include <string.h>
30:
31: #include "version.h"
32: #include "resource.h"
33:
34: // constant definitions
35:
36: #ifdef WIN32
37: #define GWL_NPTTYINFO 0
38: #define TTYEXTRABYTES sizeof( LONG )
39: #else
40: #define GWW_NPTTYINFO 0
41: #define TTYEXTRABYTES sizeof( WORD )
42: #endif
43:
44: #define ABOUTDLG_USEBITMAP 1
45:
46: #define ATOM_TTYINFO 0x100
47:
48: // terminal size
49:
50: #define MAXROWS 25
51: #define MAXCOLS 80
52:
53: #define MAXBLOCK 80
54:
55: #define MAXLEN_TEMPSTR 81
56:
57: #define RXQUEUE 4096
58: #define TXQUEUE 4096
59:
60: // cursor states
61:
62: #define CS_HIDE 0x00
63: #define CS_SHOW 0x01
64:
65: // Flow control flags
66:
67: #define FC_DTRDSR 0x01
68: #define FC_RTSCTS 0x02
69: #define FC_XONXOFF 0x04
70:
71: // ascii definitions
72:
73: #define ASCII_BEL 0x07
74: #define ASCII_BS 0x08
75: #define ASCII_LF 0x0A
76: #define ASCII_CR 0x0D
77: #define ASCII_XON 0x11
78: #define ASCII_XOFF 0x13
79:
80: // we are going to fake the CN_EVENT notifications using another
81: // thread in Win32
82:
83: #ifdef WIN32
84: #define CN_EVENT 0x04
85: #endif
86:
87: // data structures
88:
89: typedef struct tagTTYINFO
90: {
91: #ifdef WIN32
92: HANDLE idComDev ;
93: #else
94: int idComDev ;
95: #endif
96: BYTE bPort, abScreen[ MAXROWS * MAXCOLS ] ;
97: BOOL fConnected, fXonXoff, fLocalEcho, fNewLine, fAutoWrap,
98: fUseCNReceive, fDisplayErrors;
99: BYTE bByteSize, bFlowCtrl, bParity, bStopBits ;
100: #ifdef WIN32
101: DWORD dwBaudRate ;
102: WORD wCursorState ;
103: #else
104: WORD wBaudRate, wCursorState ;
105: #endif
106: HFONT hTTYFont ;
107: LOGFONT lfTTYFont ;
108: DWORD rgbFGColor ;
109: int xSize, ySize, xScroll, yScroll, xOffset, yOffset,
110: nColumn, nRow, xChar, yChar ;
111: #ifdef WIN32
112: HANDLE hPostEvent, hWatchThread, hWatchEvent ;
113: HWND hTermWnd ;
114: DWORD dwThreadID ;
115: OVERLAPPED osWrite, osRead ;
116: #endif
117:
118: } TTYINFO, NEAR *NPTTYINFO ;
119:
120: // macros ( for easier readability )
121:
122: #ifdef WIN32
123: #define GETHINST( x ) ((HINSTANCE) GetWindowLong( x, GWL_HINSTANCE ))
124: #define GETNPTTYINFO( x ) ((NPTTYINFO) GetWindowLong( x, GWL_NPTTYINFO ))
125: #define SETNPTTYINFO( x, y ) SetWindowLong( x, GWL_NPTTYINFO, (LONG) y )
126: #else
127: #define GETHINST( x ) ((HINSTANCE) GetWindowWord( x, GWW_HINSTANCE ))
128: #define GETNPTTYINFO( x ) ((NPTTYINFO) GetWindowWord( x, GWW_NPTTYINFO ))
129: #define SETNPTTYINFO( x, y ) SetWindowWord( x, GWW_NPTTYINFO, (WPARAM) y )
130: #endif
131:
132: #define COMDEV( x ) (x -> idComDev)
133: #define PORT( x ) (x -> bPort)
134: #define SCREEN( x ) (x -> abScreen)
135: #define CONNECTED( x ) (x -> fConnected)
136: #define XONXOFF( x ) (x -> fXonXoff)
137: #define LOCALECHO( x ) (x -> fLocalEcho)
138: #define NEWLINE( x ) (x -> fNewLine)
139: #define AUTOWRAP( x ) (x -> fAutoWrap)
140: #define BYTESIZE( x ) (x -> bByteSize)
141: #define FLOWCTRL( x ) (x -> bFlowCtrl)
142: #define PARITY( x ) (x -> bParity)
143: #define STOPBITS( x ) (x -> bStopBits)
144: #ifdef WIN32
145: #define BAUDRATE( x ) (x -> dwBaudRate)
146: #else
147: #define BAUDRATE( x ) (x -> wBaudRate)
148: #endif
149: #define CURSORSTATE( x ) (x -> wCursorState)
150: #define HTTYFONT( x ) (x -> hTTYFont)
151: #define LFTTYFONT( x ) (x -> lfTTYFont)
152: #define FGCOLOR( x ) (x -> rgbFGColor)
153: #define XSIZE( x ) (x -> xSize)
154: #define YSIZE( x ) (x -> ySize)
155: #define XSCROLL( x ) (x -> xScroll)
156: #define YSCROLL( x ) (x -> yScroll)
157: #define XOFFSET( x ) (x -> xOffset)
158: #define YOFFSET( x ) (x -> yOffset)
159: #define COLUMN( x ) (x -> nColumn)
160: #define ROW( x ) (x -> nRow)
161: #define XCHAR( x ) (x -> xChar)
162: #define YCHAR( x ) (x -> yChar )
163: #define USECNRECEIVE( x ) (x -> fUseCNReceive)
164: #define DISPLAYERRORS( x ) (x -> fDisplayErrors)
165:
166: #ifdef WIN32
167: #define POSTEVENT( x ) (x -> hPostEvent)
168: #define TERMWND( x ) (x -> hTermWnd)
169: #define HTHREAD( x ) (x -> hWatchThread)
170: #define THREADID( x ) (x -> dwThreadID)
171: #define WRITE_OS( x ) (x -> osWrite)
172: #define READ_OS( x ) (x -> osRead)
173: #endif
174:
175: #define SET_PROP( x, y, z ) SetProp( x, MAKEINTATOM( y ), z )
176: #define GET_PROP( x, y ) GetProp( x, MAKEINTATOM( y ) )
177: #define REMOVE_PROP( x, y ) RemoveProp( x, MAKEINTATOM( y ) )
178:
179: // global stuff
180:
181: char gszTTYClass[] = "TTYWndClass" ;
182: char gszAppName[] = "TTY" ;
183: HANDLE ghAccel ;
184:
185: DWORD BaudTable[] =
186: {
187: CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400,
188: CBR_4800, CBR_9600, CBR_14400, CBR_19200, CBR_38400,
189: CBR_56000, CBR_128000, CBR_256000
190: } ;
191:
192: DWORD ParityTable[] =
193: {
194: NOPARITY, EVENPARITY, ODDPARITY, MARKPARITY, SPACEPARITY
195: } ;
196:
197: DWORD StopBitsTable[] =
198: {
199: ONESTOPBIT, ONE5STOPBITS, TWOSTOPBITS
200: } ;
201:
202: // CRT mappings to NT API
203:
204: #define _fmemset memset
205: #define _fmemmove memmove
206:
207: // function prototypes (private)
208:
209: BOOL NEAR InitApplication( HANDLE ) ;
210: HWND NEAR InitInstance( HANDLE, int ) ;
211: LRESULT NEAR CreateTTYInfo( HWND ) ;
212: BOOL NEAR DestroyTTYInfo( HWND ) ;
213: BOOL NEAR ResetTTYScreen( HWND, NPTTYINFO ) ;
214: BOOL NEAR KillTTYFocus( HWND ) ;
215: BOOL NEAR PaintTTY( HWND ) ;
216: BOOL NEAR SetTTYFocus( HWND ) ;
217: BOOL NEAR ScrollTTYHorz( HWND, WORD, WORD ) ;
218: BOOL NEAR ScrollTTYVert( HWND, WORD, WORD ) ;
219: BOOL NEAR SizeTTY( HWND, WORD, WORD ) ;
220: BOOL NEAR ProcessTTYCharacter( HWND, BYTE ) ;
221: BOOL NEAR WriteTTYBlock( HWND, LPSTR, int ) ;
222: int NEAR ReadCommBlock( HWND, LPSTR, int ) ;
223: BOOL NEAR WriteCommByte( HWND, BYTE ) ;
224: BOOL NEAR MoveTTYCursor( HWND ) ;
225: BOOL NEAR OpenConnection( HWND ) ;
226: BOOL NEAR SetupConnection( HWND ) ;
227: BOOL NEAR CloseConnection( HWND ) ;
228: BOOL NEAR ProcessCOMMNotification( HWND, WPARAM, LPARAM ) ;
229: VOID NEAR GoModalDialogBoxParam( HINSTANCE, LPCSTR, HWND, DLGPROC, LPARAM ) ;
230: VOID NEAR FillComboBox( HINSTANCE, HWND, int, DWORD NEAR *, WORD, DWORD ) ;
231: BOOL NEAR SelectTTYFont( HWND ) ;
232: BOOL NEAR SettingsDlgInit( HWND ) ;
233: BOOL NEAR SettingsDlgTerm( HWND ) ;
234:
235: // function prototypes (public)
236:
237: LRESULT FAR PASCAL TTYWndProc( HWND, UINT, WPARAM, LPARAM ) ;
238: BOOL FAR PASCAL AboutDlgProc( HWND, UINT, WPARAM, LPARAM ) ;
239: BOOL FAR PASCAL SettingsDlgProc( HWND, UINT, WPARAM, LPARAM ) ;
240:
241: #ifdef WIN32
242: DWORD FAR PASCAL CommWatchProc( LPSTR ) ;
243: #endif
244:
245: //---------------------------------------------------------------------------
246: // End of File: tty.h
247: //---------------------------------------------------------------------------
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.