|
|
1.1 root 1: /*++ BUILD Version: 0002 // Increment this if a change has global effects
2:
3: Copyright (c) 1989 Microsoft Corporation
4:
5: Module Name:
6:
1.1.1.2 root 7: wincon.x
1.1 root 8:
9: Abstract:
10:
11: This module contains the public data structures, data types,
12: and procedures exported by the NT console subsystem.
13:
14: Created:
15:
16: 26-Oct-1990
17:
18: Revision History:
19:
20: --*/
21:
22: #ifndef _WINCON_
23: #define _WINCON_
24:
25: typedef struct _COORD {
26: SHORT X;
27: SHORT Y;
28: } COORD, *PCOORD;
29:
30: typedef struct _SMALL_RECT {
31: SHORT Left;
32: SHORT Top;
33: SHORT Right;
34: SHORT Bottom;
35: } SMALL_RECT, *PSMALL_RECT;
36:
37: typedef struct _KEY_EVENT_RECORD {
38: BOOL bKeyDown;
39: WORD wRepeatCount;
40: WORD wVirtualKeyCode;
41: WORD wVirtualScanCode;
42: union {
43: WCHAR UnicodeChar;
44: CHAR AsciiChar;
45: } uChar;
46: DWORD dwControlKeyState;
47: } KEY_EVENT_RECORD, *PKEY_EVENT_RECORD;
48:
49: //
50: // ControlKeyState flags
51: //
52:
53: #define RIGHT_ALT_PRESSED 0x0001 // the right alt key is pressed.
54: #define LEFT_ALT_PRESSED 0x0002 // the left alt key is pressed.
55: #define RIGHT_CTRL_PRESSED 0x0004 // the right ctrl key is pressed.
56: #define LEFT_CTRL_PRESSED 0x0008 // the left ctrl key is pressed.
57: #define SHIFT_PRESSED 0x0010 // the shift key is pressed.
58: #define NUMLOCK_ON 0x0020 // the numlock light is on.
59: #define SCROLLLOCK_ON 0x0040 // the scrolllock light is on.
60: #define CAPSLOCK_ON 0x0080 // the capslock light is on.
61: #define ENHANCED_KEY 0x0100 // the key is enhanced.
62:
63: typedef struct _MOUSE_EVENT_RECORD {
64: COORD dwMousePosition;
65: DWORD dwButtonState;
66: DWORD dwControlKeyState;
67: DWORD dwEventFlags;
68: } MOUSE_EVENT_RECORD, *PMOUSE_EVENT_RECORD;
69:
70: //
71: // ButtonState flags
72: //
73:
74: #define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001
75: #define RIGHTMOST_BUTTON_PRESSED 0x0002
76: #define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004
77: #define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008
78: #define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010
79:
80: //
81: // EventFlags
82: //
83:
84: #define MOUSE_MOVED 0x0001
85: #define DOUBLE_CLICK 0x0002
86:
87: typedef struct _WINDOW_BUFFER_SIZE_RECORD {
88: COORD dwSize;
89: } WINDOW_BUFFER_SIZE_RECORD, *PWINDOW_BUFFER_SIZE_RECORD;
90:
1.1.1.2 root 91: typedef struct _MENU_EVENT_RECORD {
92: UINT dwCommandId;
93: } MENU_EVENT_RECORD, *PMENU_EVENT_RECORD;
94:
95: typedef struct _FOCUS_EVENT_RECORD {
96: BOOL bSetFocus;
97: } FOCUS_EVENT_RECORD, *PFOCUS_EVENT_RECORD;
98:
1.1 root 99: typedef struct _INPUT_RECORD {
100: WORD EventType;
101: union {
102: KEY_EVENT_RECORD KeyEvent;
103: MOUSE_EVENT_RECORD MouseEvent;
104: WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
1.1.1.2 root 105: MENU_EVENT_RECORD MenuEvent;
106: FOCUS_EVENT_RECORD FocusEvent;
1.1 root 107: } Event;
108: } INPUT_RECORD, *PINPUT_RECORD;
109:
110: //
111: // EventType flags:
112: //
113:
114: #define KEY_EVENT 0x0001 // Event contains key event record
115: #define MOUSE_EVENT 0x0002 // Event contains mouse event record
116: #define WINDOW_BUFFER_SIZE_EVENT 0x0004 // Event contains window change event record
1.1.1.2 root 117: #define MENU_EVENT 0x0008 // Event contains menu event record
118: #define FOCUS_EVENT 0x0010 // event contains focus change
1.1 root 119:
120: typedef struct _CHAR_INFO {
121: union {
122: WCHAR UnicodeChar;
123: CHAR AsciiChar;
124: } Char;
125: WORD Attributes;
126: } CHAR_INFO, *PCHAR_INFO;
127:
128: //
129: // Attributes flags:
130: //
131:
132: #define FOREGROUND_BLUE 0x0001 // text color contains blue.
133: #define FOREGROUND_GREEN 0x0002 // text color contains green.
134: #define FOREGROUND_RED 0x0004 // text color contains red.
135: #define FOREGROUND_INTENSITY 0x0008 // text color is intensified.
136: #define BACKGROUND_BLUE 0x0010 // background color contains blue.
137: #define BACKGROUND_GREEN 0x0020 // background color contains green.
138: #define BACKGROUND_RED 0x0040 // background color contains red.
139: #define BACKGROUND_INTENSITY 0x0080 // background color is intensified.
140:
141:
142: typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
143: COORD dwSize;
144: COORD dwCursorPosition;
145: WORD wAttributes;
146: SMALL_RECT srWindow;
147: COORD dwMaximumWindowSize;
148: } CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO;
149:
150: typedef struct _CONSOLE_CURSOR_INFO {
151: DWORD dwSize;
152: BOOL bVisible;
153: } CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
154:
155: //
156: // typedef for ctrl-c handler routines
157: //
158:
159: typedef
160: BOOL
1.1.1.3 ! root 161: (WINAPI *PHANDLER_ROUTINE)(
1.1.1.2 root 162: DWORD CtrlType
1.1 root 163: );
164:
1.1.1.3 ! root 165: #define CTRL_C_EVENT 0
! 166: #define CTRL_BREAK_EVENT 1
! 167: #define CTRL_CLOSE_EVENT 2
! 168: // 3 is reserved!
! 169: // 4 is reserved!
! 170: #define CTRL_LOGOFF_EVENT 5
! 171: #define CTRL_SHUTDOWN_EVENT 6
1.1 root 172:
173: //
174: // Input Mode flags:
175: //
176:
177: #define ENABLE_PROCESSED_INPUT 0x0001
178: #define ENABLE_LINE_INPUT 0x0002
179: #define ENABLE_ECHO_INPUT 0x0004
180: #define ENABLE_WINDOW_INPUT 0x0008
181: #define ENABLE_MOUSE_INPUT 0x0010
182:
183: //
184: // Output Mode flags:
185: //
186:
187: #define ENABLE_PROCESSED_OUTPUT 0x0001
188: #define ENABLE_WRAP_AT_EOL_OUTPUT 0x0002
189:
190: //
191: // direct API definitions.
192: //
193:
194: BOOL
1.1.1.3 ! root 195: WINAPI
1.1.1.2 root 196: PeekConsoleInputA(
197: HANDLE hConsoleInput,
198: PINPUT_RECORD lpBuffer,
199: DWORD nLength,
200: LPDWORD lpNumberOfEventsRead
201: );
202: BOOL
1.1.1.3 ! root 203: WINAPI
1.1.1.2 root 204: PeekConsoleInputW(
1.1 root 205: HANDLE hConsoleInput,
206: PINPUT_RECORD lpBuffer,
207: DWORD nLength,
208: LPDWORD lpNumberOfEventsRead
209: );
1.1.1.2 root 210: #ifdef UNICODE
211: #define PeekConsoleInput PeekConsoleInputW
212: #else
213: #define PeekConsoleInput PeekConsoleInputA
214: #endif // !UNICODE
1.1 root 215:
216: BOOL
1.1.1.3 ! root 217: WINAPI
1.1.1.2 root 218: ReadConsoleInputA(
1.1 root 219: HANDLE hConsoleInput,
220: PINPUT_RECORD lpBuffer,
221: DWORD nLength,
222: LPDWORD lpNumberOfEventsRead
223: );
1.1.1.2 root 224: BOOL
1.1.1.3 ! root 225: WINAPI
1.1.1.2 root 226: ReadConsoleInputW(
227: HANDLE hConsoleInput,
228: PINPUT_RECORD lpBuffer,
229: DWORD nLength,
230: LPDWORD lpNumberOfEventsRead
231: );
232: #ifdef UNICODE
233: #define ReadConsoleInput ReadConsoleInputW
234: #else
235: #define ReadConsoleInput ReadConsoleInputA
236: #endif // !UNICODE
1.1 root 237:
238: BOOL
1.1.1.3 ! root 239: WINAPI
1.1.1.2 root 240: WriteConsoleInputA(
1.1 root 241: HANDLE hConsoleInput,
242: PINPUT_RECORD lpBuffer,
243: DWORD nLength,
244: LPDWORD lpNumberOfEventsWritten
245: );
1.1.1.2 root 246: BOOL
1.1.1.3 ! root 247: WINAPI
1.1.1.2 root 248: WriteConsoleInputW(
249: HANDLE hConsoleInput,
250: PINPUT_RECORD lpBuffer,
251: DWORD nLength,
252: LPDWORD lpNumberOfEventsWritten
253: );
254: #ifdef UNICODE
255: #define WriteConsoleInput WriteConsoleInputW
256: #else
257: #define WriteConsoleInput WriteConsoleInputA
258: #endif // !UNICODE
1.1 root 259:
260: BOOL
1.1.1.3 ! root 261: WINAPI
1.1.1.2 root 262: ReadConsoleOutputA(
1.1 root 263: HANDLE hConsoleOutput,
264: PCHAR_INFO lpBuffer,
265: COORD dwBufferSize,
266: COORD dwBufferCoord,
267: PSMALL_RECT lpReadRegion
268: );
1.1.1.2 root 269: BOOL
1.1.1.3 ! root 270: WINAPI
1.1.1.2 root 271: ReadConsoleOutputW(
272: HANDLE hConsoleOutput,
273: PCHAR_INFO lpBuffer,
274: COORD dwBufferSize,
275: COORD dwBufferCoord,
276: PSMALL_RECT lpReadRegion
277: );
278: #ifdef UNICODE
279: #define ReadConsoleOutput ReadConsoleOutputW
280: #else
281: #define ReadConsoleOutput ReadConsoleOutputA
282: #endif // !UNICODE
1.1 root 283:
284: BOOL
1.1.1.3 ! root 285: WINAPI
1.1.1.2 root 286: WriteConsoleOutputA(
287: HANDLE hConsoleOutput,
288: PCHAR_INFO lpBuffer,
289: COORD dwBufferSize,
290: COORD dwBufferCoord,
291: PSMALL_RECT lpWriteRegion
292: );
293: BOOL
1.1.1.3 ! root 294: WINAPI
1.1.1.2 root 295: WriteConsoleOutputW(
1.1 root 296: HANDLE hConsoleOutput,
297: PCHAR_INFO lpBuffer,
298: COORD dwBufferSize,
299: COORD dwBufferCoord,
300: PSMALL_RECT lpWriteRegion
301: );
1.1.1.2 root 302: #ifdef UNICODE
303: #define WriteConsoleOutput WriteConsoleOutputW
304: #else
305: #define WriteConsoleOutput WriteConsoleOutputA
306: #endif // !UNICODE
1.1 root 307:
308: BOOL
1.1.1.3 ! root 309: WINAPI
1.1.1.2 root 310: ReadConsoleOutputCharacterA(
1.1 root 311: HANDLE hConsoleOutput,
312: LPSTR lpCharacter,
313: DWORD nLength,
314: COORD dwReadCoord,
315: LPDWORD lpNumberOfCharsRead
316: );
1.1.1.2 root 317: BOOL
1.1.1.3 ! root 318: WINAPI
1.1.1.2 root 319: ReadConsoleOutputCharacterW(
320: HANDLE hConsoleOutput,
321: LPWSTR lpCharacter,
322: DWORD nLength,
323: COORD dwReadCoord,
324: LPDWORD lpNumberOfCharsRead
325: );
326: #ifdef UNICODE
327: #define ReadConsoleOutputCharacter ReadConsoleOutputCharacterW
328: #else
329: #define ReadConsoleOutputCharacter ReadConsoleOutputCharacterA
330: #endif // !UNICODE
1.1 root 331:
332: BOOL
1.1.1.3 ! root 333: WINAPI
1.1 root 334: ReadConsoleOutputAttribute(
335: HANDLE hConsoleOutput,
336: LPWORD lpAttribute,
337: DWORD nLength,
338: COORD dwReadCoord,
339: LPDWORD lpNumberOfAttrsRead
340: );
341:
342: BOOL
1.1.1.3 ! root 343: WINAPI
1.1.1.2 root 344: WriteConsoleOutputCharacterA(
1.1 root 345: HANDLE hConsoleOutput,
346: LPSTR lpCharacter,
347: DWORD nLength,
348: COORD dwWriteCoord,
349: LPDWORD lpNumberOfCharsWritten
350: );
1.1.1.2 root 351: BOOL
1.1.1.3 ! root 352: WINAPI
1.1.1.2 root 353: WriteConsoleOutputCharacterW(
354: HANDLE hConsoleOutput,
355: LPWSTR lpCharacter,
356: DWORD nLength,
357: COORD dwWriteCoord,
358: LPDWORD lpNumberOfCharsWritten
359: );
360: #ifdef UNICODE
361: #define WriteConsoleOutputCharacter WriteConsoleOutputCharacterW
362: #else
363: #define WriteConsoleOutputCharacter WriteConsoleOutputCharacterA
364: #endif // !UNICODE
1.1 root 365:
366: BOOL
1.1.1.3 ! root 367: WINAPI
1.1 root 368: WriteConsoleOutputAttribute(
369: HANDLE hConsoleOutput,
370: LPWORD lpAttribute,
371: DWORD nLength,
372: COORD dwWriteCoord,
373: LPDWORD lpNumberOfAttrsWritten
374: );
375:
376: BOOL
1.1.1.3 ! root 377: WINAPI
1.1.1.2 root 378: FillConsoleOutputCharacterA(
379: HANDLE hConsoleOutput,
380: CHAR cCharacter,
381: DWORD nLength,
382: COORD dwWriteCoord,
383: LPDWORD lpNumberOfCharsWritten
384: );
385: BOOL
1.1.1.3 ! root 386: WINAPI
1.1.1.2 root 387: FillConsoleOutputCharacterW(
1.1 root 388: HANDLE hConsoleOutput,
1.1.1.2 root 389: WCHAR cCharacter,
1.1 root 390: DWORD nLength,
391: COORD dwWriteCoord,
392: LPDWORD lpNumberOfCharsWritten
393: );
1.1.1.2 root 394: #ifdef UNICODE
395: #define FillConsoleOutputCharacter FillConsoleOutputCharacterW
396: #else
397: #define FillConsoleOutputCharacter FillConsoleOutputCharacterA
398: #endif // !UNICODE
1.1 root 399:
400: BOOL
1.1.1.3 ! root 401: WINAPI
1.1 root 402: FillConsoleOutputAttribute(
403: HANDLE hConsoleOutput,
404: WORD wAttribute,
405: DWORD nLength,
406: COORD dwWriteCoord,
407: LPDWORD lpNumberOfAttrsWritten
408: );
409:
410: BOOL
1.1.1.3 ! root 411: WINAPI
1.1 root 412: GetConsoleMode(
413: HANDLE hConsoleHandle,
414: LPDWORD lpMode
415: );
416:
417: BOOL
1.1.1.3 ! root 418: WINAPI
1.1 root 419: GetNumberOfConsoleInputEvents(
420: HANDLE hConsoleInput,
421: LPDWORD lpNumberOfEvents
422: );
423:
424: BOOL
1.1.1.3 ! root 425: WINAPI
1.1 root 426: GetConsoleScreenBufferInfo(
427: HANDLE hConsoleOutput,
428: PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
429: );
430:
431: COORD
1.1.1.3 ! root 432: WINAPI
1.1 root 433: GetLargestConsoleWindowSize(
434: HANDLE hConsoleOutput
435: );
436:
437: BOOL
1.1.1.3 ! root 438: WINAPI
1.1 root 439: GetConsoleCursorInfo(
440: HANDLE hConsoleOutput,
441: PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
442: );
443:
444: BOOL
1.1.1.3 ! root 445: WINAPI
1.1 root 446: GetNumberOfConsoleMouseButtons(
447: LPDWORD lpNumberOfMouseButtons
448: );
449:
450: BOOL
1.1.1.3 ! root 451: WINAPI
1.1 root 452: SetConsoleMode(
453: HANDLE hConsoleHandle,
454: DWORD dwMode
455: );
456:
457: BOOL
1.1.1.3 ! root 458: WINAPI
1.1 root 459: SetConsoleActiveScreenBuffer(
460: HANDLE hConsoleOutput
461: );
462:
463: BOOL
1.1.1.3 ! root 464: WINAPI
1.1 root 465: FlushConsoleInputBuffer(
466: HANDLE hConsoleInput
467: );
468:
469: BOOL
1.1.1.3 ! root 470: WINAPI
1.1 root 471: SetConsoleScreenBufferSize(
472: HANDLE hConsoleOutput,
473: COORD dwSize
474: );
475:
476: BOOL
1.1.1.3 ! root 477: WINAPI
1.1 root 478: SetConsoleCursorPosition(
479: HANDLE hConsoleOutput,
480: COORD dwCursorPosition
481: );
482:
483: BOOL
1.1.1.3 ! root 484: WINAPI
1.1 root 485: SetConsoleCursorInfo(
486: HANDLE hConsoleOutput,
487: PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
488: );
489:
490: BOOL
1.1.1.3 ! root 491: WINAPI
1.1.1.2 root 492: ScrollConsoleScreenBufferA(
493: HANDLE hConsoleOutput,
494: PSMALL_RECT lpScrollRectangle,
495: PSMALL_RECT lpClipRectangle,
496: COORD dwDestinationOrigin,
497: PCHAR_INFO lpFill
498: );
499: BOOL
1.1.1.3 ! root 500: WINAPI
1.1.1.2 root 501: ScrollConsoleScreenBufferW(
1.1 root 502: HANDLE hConsoleOutput,
503: PSMALL_RECT lpScrollRectangle,
504: PSMALL_RECT lpClipRectangle,
505: COORD dwDestinationOrigin,
506: PCHAR_INFO lpFill
507: );
1.1.1.2 root 508: #ifdef UNICODE
509: #define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferW
510: #else
511: #define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferA
512: #endif // !UNICODE
1.1 root 513:
514: BOOL
1.1.1.3 ! root 515: WINAPI
1.1 root 516: SetConsoleWindowInfo(
517: HANDLE hConsoleOutput,
518: BOOL bAbsolute,
519: PSMALL_RECT lpConsoleWindow
520: );
521:
522: BOOL
1.1.1.3 ! root 523: WINAPI
1.1 root 524: SetConsoleTextAttribute(
525: HANDLE hConsoleOutput,
526: WORD wAttributes
527: );
528:
529: BOOL
1.1.1.3 ! root 530: WINAPI
1.1 root 531: SetConsoleCtrlHandler(
1.1.1.2 root 532: PHANDLER_ROUTINE HandlerRoutine,
533: BOOL Add
1.1 root 534: );
1.1.1.2 root 535:
1.1 root 536: BOOL
1.1.1.3 ! root 537: WINAPI
! 538: GenerateConsoleCtrlEvent(
! 539: DWORD dwCtrlEvent,
! 540: DWORD dwProcessGroupId
! 541: );
! 542:
! 543: BOOL
! 544: WINAPI
1.1 root 545: AllocConsole( VOID );
546:
547: BOOL
1.1.1.3 ! root 548: WINAPI
1.1 root 549: FreeConsole( VOID );
550:
551:
552: DWORD
1.1.1.3 ! root 553: WINAPI
1.1.1.2 root 554: GetConsoleTitleA(
1.1 root 555: LPSTR lpConsoleTitle,
556: DWORD nSize
557: );
1.1.1.2 root 558: DWORD
1.1.1.3 ! root 559: WINAPI
1.1.1.2 root 560: GetConsoleTitleW(
561: LPWSTR lpConsoleTitle,
562: DWORD nSize
563: );
564: #ifdef UNICODE
565: #define GetConsoleTitle GetConsoleTitleW
566: #else
567: #define GetConsoleTitle GetConsoleTitleA
568: #endif // !UNICODE
1.1 root 569:
570: BOOL
1.1.1.3 ! root 571: WINAPI
1.1.1.2 root 572: SetConsoleTitleA(
1.1 root 573: LPSTR lpConsoleTitle
574: );
1.1.1.2 root 575: BOOL
1.1.1.3 ! root 576: WINAPI
1.1.1.2 root 577: SetConsoleTitleW(
578: LPWSTR lpConsoleTitle
579: );
580: #ifdef UNICODE
581: #define SetConsoleTitle SetConsoleTitleW
582: #else
583: #define SetConsoleTitle SetConsoleTitleA
584: #endif // !UNICODE
585:
586: BOOL
1.1.1.3 ! root 587: WINAPI
1.1.1.2 root 588: ReadConsoleA(
589: HANDLE hConsoleInput,
590: LPVOID lpBuffer,
591: DWORD nNumberOfCharsToRead,
592: LPDWORD lpNumberOfCharsRead,
593: LPVOID lpReserved
594: );
595: BOOL
1.1.1.3 ! root 596: WINAPI
1.1.1.2 root 597: ReadConsoleW(
598: HANDLE hConsoleInput,
599: LPVOID lpBuffer,
600: DWORD nNumberOfCharsToRead,
601: LPDWORD lpNumberOfCharsRead,
602: LPVOID lpReserved
603: );
604: #ifdef UNICODE
605: #define ReadConsole ReadConsoleW
606: #else
607: #define ReadConsole ReadConsoleA
608: #endif // !UNICODE
609:
610: BOOL
1.1.1.3 ! root 611: WINAPI
1.1.1.2 root 612: WriteConsoleA(
613: HANDLE hConsoleOutput,
614: CONST VOID *lpBuffer,
615: DWORD nNumberOfCharsToWrite,
616: LPDWORD lpNumberOfCharsWritten,
617: LPVOID lpReserved
618: );
619: BOOL
1.1.1.3 ! root 620: WINAPI
1.1.1.2 root 621: WriteConsoleW(
622: HANDLE hConsoleOutput,
623: CONST VOID *lpBuffer,
624: DWORD nNumberOfCharsToWrite,
625: LPDWORD lpNumberOfCharsWritten,
626: LPVOID lpReserved
627: );
628: #ifdef UNICODE
629: #define WriteConsole WriteConsoleW
630: #else
631: #define WriteConsole WriteConsoleA
632: #endif // !UNICODE
1.1 root 633:
634: #define CONSOLE_TEXTMODE_BUFFER 1
635:
636: HANDLE
1.1.1.3 ! root 637: WINAPI
1.1 root 638: CreateConsoleScreenBuffer(
639: DWORD dwDesiredAccess,
640: DWORD dwShareMode,
641: LPSECURITY_ATTRIBUTES lpSecurityAttributes,
1.1.1.2 root 642: DWORD dwFlags,
643: PVOID lpScreenBufferData
644: );
645:
646: UINT
1.1.1.3 ! root 647: WINAPI
1.1.1.2 root 648: GetConsoleCP( VOID );
649:
650: BOOL
1.1.1.3 ! root 651: WINAPI
1.1.1.2 root 652: SetConsoleCP(
653: UINT wCodePageID
654: );
655:
656: UINT
1.1.1.3 ! root 657: WINAPI
1.1.1.2 root 658: GetConsoleOutputCP( VOID );
659:
660: BOOL
1.1.1.3 ! root 661: WINAPI
1.1.1.2 root 662: SetConsoleOutputCP(
663: UINT wCodePageID
1.1 root 664: );
665:
666: #endif // _WINCON_
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.