Artifact 418f11163a21e063776cd4898602b1a2232bc074:
- File
src/win32/wincon.d
-
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
The problem was __gshared. Replacing it with TLS fixed the issue. Remaining problem is that "hack.d"'s CloseHandle hack is not working anymore.
(user: kinaba) [annotate]
-
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0040: 2a 2a 2a 2a 2a 2a 2a 2a 5c 0d 0a 2a 20 20 20 20 ********\..*
0050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0060: 20 20 20 20 20 20 20 20 20 20 20 20 77 69 6e 63 winc
0070: 6f 6e 2e 64 20 20 20 20 20 20 20 20 20 20 20 20 on.d
0080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0090: 20 20 20 2a 0d 0a 2a 20 20 20 20 20 20 20 20 20 *..*
00a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 0d *.
00e0: 0a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .*
00f0: 20 20 20 20 20 20 20 20 20 57 69 6e 64 6f 77 73 Windows
0100: 20 41 50 49 20 68 65 61 64 65 72 20 6d 6f 64 75 API header modu
0110: 6c 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 le
0120: 20 20 20 20 20 20 20 20 20 2a 0d 0a 2a 20 20 20 *..*
0130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0170: 20 20 20 20 2a 0d 0a 2a 20 20 20 20 20 20 20 20 *..*
0180: 20 20 20 20 20 20 20 20 20 54 72 61 6e 73 6c 61 Transla
0190: 74 65 64 20 66 72 6f 6d 20 4d 69 6e 47 57 20 57 ted from MinGW W
01a0: 69 6e 64 6f 77 73 20 68 65 61 64 65 72 73 20 20 indows headers
01b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a *
01c0: 0d 0a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 ..*
01d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
01e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0200: 20 20 20 20 20 20 20 20 20 20 2a 0d 0a 2a 20 20 *..*
0210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0220: 20 20 20 20 20 50 6c 61 63 65 64 20 69 6e 74 6f Placed into
0230: 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 20 20 public domain
0240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0250: 20 20 20 20 20 2a 0d 0a 5c 2a 2a 2a 2a 2a 2a 2a *..\*******
0260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
02a0: 2f 0d 0a 6d 6f 64 75 6c 65 20 77 69 6e 33 32 2e /..module win32.
02b0: 77 69 6e 63 6f 6e 3b 0d 0a 70 72 61 67 6d 61 28 wincon;..pragma(
02c0: 6c 69 62 2c 20 22 6b 65 72 6e 65 6c 33 32 22 29 lib, "kernel32")
02d0: 3b 0d 0a 0d 0a 70 72 69 76 61 74 65 20 69 6d 70 ;....private imp
02e0: 6f 72 74 20 77 69 6e 33 32 2e 77 33 32 61 70 69 ort win32.w32api
02f0: 2c 20 77 69 6e 33 32 2e 77 69 6e 64 65 66 3b 0d , win32.windef;.
0300: 0a 0d 0a 2f 2f 20 46 49 58 4d 45 3a 20 63 6c 65 ...// FIXME: cle
0310: 61 6e 20 75 70 20 57 69 6e 64 6f 77 73 20 76 65 an up Windows ve
0320: 72 73 69 6f 6e 20 73 75 70 70 6f 72 74 0d 0a 0d rsion support...
0330: 0a 65 6e 75 6d 20 7b 0d 0a 09 46 4f 52 45 47 52 .enum {...FOREGR
0340: 4f 55 4e 44 5f 42 4c 55 45 20 20 20 20 20 20 3d OUND_BLUE =
0350: 20 31 2c 0d 0a 09 46 4f 52 45 47 52 4f 55 4e 44 1,...FOREGROUND
0360: 5f 47 52 45 45 4e 20 20 20 20 20 3d 20 32 2c 0d _GREEN = 2,.
0370: 0a 09 46 4f 52 45 47 52 4f 55 4e 44 5f 52 45 44 ..FOREGROUND_RED
0380: 20 20 20 20 20 20 20 3d 20 34 2c 0d 0a 09 46 4f = 4,...FO
0390: 52 45 47 52 4f 55 4e 44 5f 49 4e 54 45 4e 53 49 REGROUND_INTENSI
03a0: 54 59 20 3d 20 38 2c 0d 0a 09 42 41 43 4b 47 52 TY = 8,...BACKGR
03b0: 4f 55 4e 44 5f 42 4c 55 45 20 20 20 20 20 20 3d OUND_BLUE =
03c0: 20 31 36 2c 0d 0a 09 42 41 43 4b 47 52 4f 55 4e 16,...BACKGROUN
03d0: 44 5f 47 52 45 45 4e 20 20 20 20 20 3d 20 33 32 D_GREEN = 32
03e0: 2c 0d 0a 09 42 41 43 4b 47 52 4f 55 4e 44 5f 52 ,...BACKGROUND_R
03f0: 45 44 20 20 20 20 20 20 20 3d 20 36 34 2c 0d 0a ED = 64,..
0400: 09 42 41 43 4b 47 52 4f 55 4e 44 5f 49 4e 54 45 .BACKGROUND_INTE
0410: 4e 53 49 54 59 20 3d 20 31 32 38 0d 0a 7d 0d 0a NSITY = 128..}..
0420: 0d 0a 73 74 61 74 69 63 20 69 66 20 28 5f 57 49 ..static if (_WI
0430: 4e 33 32 5f 57 49 4e 4e 54 20 3e 3d 20 30 78 35 N32_WINNT >= 0x5
0440: 30 31 29 20 7b 0d 0a 09 65 6e 75 6d 20 7b 0d 0a 01) {...enum {..
0450: 09 09 43 4f 4e 53 4f 4c 45 5f 46 55 4c 4c 53 43 ..CONSOLE_FULLSC
0460: 52 45 45 4e 5f 4d 4f 44 45 20 3d 20 31 2c 0d 0a REEN_MODE = 1,..
0470: 09 09 43 4f 4e 53 4f 4c 45 5f 57 49 4e 44 4f 57 ..CONSOLE_WINDOW
0480: 45 44 5f 4d 4f 44 45 20 20 20 3d 20 30 0d 0a 09 ED_MODE = 0...
0490: 7d 0d 0a 7d 0d 0a 0d 0a 65 6e 75 6d 20 7b 0d 0a }..}....enum {..
04a0: 09 43 54 52 4c 5f 43 5f 45 56 45 4e 54 20 20 20 .CTRL_C_EVENT
04b0: 20 20 20 20 20 3d 20 30 2c 0d 0a 09 43 54 52 4c = 0,...CTRL
04c0: 5f 42 52 45 41 4b 5f 45 56 45 4e 54 20 20 20 20 _BREAK_EVENT
04d0: 3d 20 31 2c 0d 0a 09 43 54 52 4c 5f 43 4c 4f 53 = 1,...CTRL_CLOS
04e0: 45 5f 45 56 45 4e 54 20 20 20 20 3d 20 32 2c 0d E_EVENT = 2,.
04f0: 0a 09 43 54 52 4c 5f 4c 4f 47 4f 46 46 5f 45 56 ..CTRL_LOGOFF_EV
0500: 45 4e 54 20 20 20 3d 20 35 2c 0d 0a 09 43 54 52 ENT = 5,...CTR
0510: 4c 5f 53 48 55 54 44 4f 57 4e 5f 45 56 45 4e 54 L_SHUTDOWN_EVENT
0520: 20 3d 20 36 0d 0a 7d 0d 0a 0d 0a 65 6e 75 6d 20 = 6..}....enum
0530: 7b 0d 0a 09 45 4e 41 42 4c 45 5f 50 52 4f 43 45 {...ENABLE_PROCE
0540: 53 53 45 44 5f 49 4e 50 55 54 20 20 3d 20 31 2c SSED_INPUT = 1,
0550: 0d 0a 09 45 4e 41 42 4c 45 5f 4c 49 4e 45 5f 49 ...ENABLE_LINE_I
0560: 4e 50 55 54 20 20 20 20 20 20 20 3d 20 32 2c 0d NPUT = 2,.
0570: 0a 09 45 4e 41 42 4c 45 5f 45 43 48 4f 5f 49 4e ..ENABLE_ECHO_IN
0580: 50 55 54 20 20 20 20 20 20 20 3d 20 34 2c 0d 0a PUT = 4,..
0590: 09 45 4e 41 42 4c 45 5f 57 49 4e 44 4f 57 5f 49 .ENABLE_WINDOW_I
05a0: 4e 50 55 54 20 20 20 20 20 3d 20 38 2c 0d 0a 09 NPUT = 8,...
05b0: 45 4e 41 42 4c 45 5f 4d 4f 55 53 45 5f 49 4e 50 ENABLE_MOUSE_INP
05c0: 55 54 20 20 20 20 20 20 3d 20 31 36 0d 0a 7d 0d UT = 16..}.
05d0: 0a 0d 0a 65 6e 75 6d 20 7b 0d 0a 09 45 4e 41 42 ...enum {...ENAB
05e0: 4c 45 5f 50 52 4f 43 45 53 53 45 44 5f 4f 55 54 LE_PROCESSED_OUT
05f0: 50 55 54 20 20 20 20 3d 20 31 2c 0d 0a 09 45 4e PUT = 1,...EN
0600: 41 42 4c 45 5f 57 52 41 50 5f 41 54 5f 45 4f 4c ABLE_WRAP_AT_EOL
0610: 5f 4f 55 54 50 55 54 20 20 3d 20 32 0d 0a 7d 0d _OUTPUT = 2..}.
0620: 0a 0d 0a 65 6e 75 6d 20 7b 0d 0a 09 4b 45 59 5f ...enum {...KEY_
0630: 45 56 45 4e 54 20 20 20 20 20 20 20 20 20 20 20 EVENT
0640: 20 20 20 20 20 20 3d 20 31 2c 0d 0a 09 4d 4f 55 = 1,...MOU
0650: 53 45 5f 45 56 45 4e 54 20 20 20 20 20 20 20 20 SE_EVENT
0660: 20 20 20 20 20 20 20 3d 20 32 2c 0d 0a 09 57 49 = 2,...WI
0670: 4e 44 4f 57 5f 42 55 46 46 45 52 5f 53 49 5a 45 NDOW_BUFFER_SIZE
0680: 5f 45 56 45 4e 54 20 20 3d 20 34 2c 0d 0a 09 4d _EVENT = 4,...M
0690: 45 4e 55 5f 45 56 45 4e 54 20 20 20 20 20 20 20 ENU_EVENT
06a0: 20 20 20 20 20 20 20 20 20 3d 20 38 2c 0d 0a 09 = 8,...
06b0: 46 4f 43 55 53 5f 45 56 45 4e 54 20 20 20 20 20 FOCUS_EVENT
06c0: 20 20 20 20 20 20 20 20 20 20 3d 20 31 36 0d 0a = 16..
06d0: 7d 0d 0a 65 6e 75 6d 20 7b 0d 0a 09 52 49 47 48 }..enum {...RIGH
06e0: 54 5f 41 4c 54 5f 50 52 45 53 53 45 44 20 20 3d T_ALT_PRESSED =
06f0: 20 31 2c 0d 0a 09 4c 45 46 54 5f 41 4c 54 5f 50 1,...LEFT_ALT_P
0700: 52 45 53 53 45 44 20 20 20 3d 20 32 2c 0d 0a 09 RESSED = 2,...
0710: 52 49 47 48 54 5f 43 54 52 4c 5f 50 52 45 53 53 RIGHT_CTRL_PRESS
0720: 45 44 20 3d 20 34 2c 0d 0a 09 4c 45 46 54 5f 43 ED = 4,...LEFT_C
0730: 54 52 4c 5f 50 52 45 53 53 45 44 20 20 3d 20 38 TRL_PRESSED = 8
0740: 2c 0d 0a 09 53 48 49 46 54 5f 50 52 45 53 53 45 ,...SHIFT_PRESSE
0750: 44 20 20 20 20 20 20 3d 20 31 36 2c 0d 0a 09 4e D = 16,...N
0760: 55 4d 4c 4f 43 4b 5f 4f 4e 20 20 20 20 20 20 20 UMLOCK_ON
0770: 20 20 3d 20 33 32 2c 0d 0a 09 53 43 52 4f 4c 4c = 32,...SCROLL
0780: 4c 4f 43 4b 5f 4f 4e 20 20 20 20 20 20 3d 20 36 LOCK_ON = 6
0790: 34 2c 0d 0a 09 43 41 50 53 4c 4f 43 4b 5f 4f 4e 4,...CAPSLOCK_ON
07a0: 20 20 20 20 20 20 20 20 3d 20 31 32 38 2c 0d 0a = 128,..
07b0: 09 45 4e 48 41 4e 43 45 44 5f 4b 45 59 20 20 20 .ENHANCED_KEY
07c0: 20 20 20 20 3d 20 32 35 36 0d 0a 7d 0d 0a 65 6e = 256..}..en
07d0: 75 6d 20 7b 0d 0a 09 46 52 4f 4d 5f 4c 45 46 54 um {...FROM_LEFT
07e0: 5f 31 53 54 5f 42 55 54 54 4f 4e 5f 50 52 45 53 _1ST_BUTTON_PRES
07f0: 53 45 44 20 20 3d 20 31 2c 0d 0a 09 52 49 47 48 SED = 1,...RIGH
0800: 54 4d 4f 53 54 5f 42 55 54 54 4f 4e 5f 50 52 45 TMOST_BUTTON_PRE
0810: 53 53 45 44 20 20 20 20 20 20 3d 20 32 2c 0d 0a SSED = 2,..
0820: 09 46 52 4f 4d 5f 4c 45 46 54 5f 32 4e 44 5f 42 .FROM_LEFT_2ND_B
0830: 55 54 54 4f 4e 5f 50 52 45 53 53 45 44 20 20 3d UTTON_PRESSED =
0840: 20 34 2c 0d 0a 09 46 52 4f 4d 5f 4c 45 46 54 5f 4,...FROM_LEFT_
0850: 33 52 44 5f 42 55 54 54 4f 4e 5f 50 52 45 53 53 3RD_BUTTON_PRESS
0860: 45 44 20 20 3d 20 38 2c 0d 0a 09 46 52 4f 4d 5f ED = 8,...FROM_
0870: 4c 45 46 54 5f 34 54 48 5f 42 55 54 54 4f 4e 5f LEFT_4TH_BUTTON_
0880: 50 52 45 53 53 45 44 20 20 3d 20 31 36 0d 0a 7d PRESSED = 16..}
0890: 0d 0a 0d 0a 65 6e 75 6d 20 7b 0d 0a 09 4d 4f 55 ....enum {...MOU
08a0: 53 45 5f 4d 4f 56 45 44 20 20 20 3d 20 31 2c 0d SE_MOVED = 1,.
08b0: 0a 09 44 4f 55 42 4c 45 5f 43 4c 49 43 4b 20 20 ..DOUBLE_CLICK
08c0: 3d 20 32 2c 0d 0a 09 4d 4f 55 53 45 5f 57 48 45 = 2,...MOUSE_WHE
08d0: 45 4c 45 44 20 3d 20 34 0d 0a 7d 0d 0a 0d 0a 73 ELED = 4..}....s
08e0: 74 72 75 63 74 20 43 48 41 52 5f 49 4e 46 4f 20 truct CHAR_INFO
08f0: 7b 0d 0a 09 75 6e 69 6f 6e 20 5f 43 68 61 72 20 {...union _Char
0900: 7b 0d 0a 09 09 57 43 48 41 52 20 55 6e 69 63 6f {....WCHAR Unico
0910: 64 65 43 68 61 72 3b 0d 0a 09 09 43 48 41 52 20 deChar;....CHAR
0920: 41 73 63 69 69 43 68 61 72 3b 0d 0a 09 7d 0d 0a AsciiChar;...}..
0930: 09 5f 43 68 61 72 20 43 68 61 72 3b 09 0d 0a 09 ._Char Char;....
0940: 57 4f 52 44 20 41 74 74 72 69 62 75 74 65 73 3b WORD Attributes;
0950: 0d 0a 7d 0d 0a 61 6c 69 61 73 20 43 48 41 52 5f ..}..alias CHAR_
0960: 49 4e 46 4f 2a 20 50 43 48 41 52 5f 49 4e 46 4f INFO* PCHAR_INFO
0970: 3b 0d 0a 0d 0a 73 74 72 75 63 74 20 53 4d 41 4c ;....struct SMAL
0980: 4c 5f 52 45 43 54 20 7b 0d 0a 09 53 48 4f 52 54 L_RECT {...SHORT
0990: 20 4c 65 66 74 3b 0d 0a 09 53 48 4f 52 54 20 54 Left;...SHORT T
09a0: 6f 70 3b 0d 0a 09 53 48 4f 52 54 20 52 69 67 68 op;...SHORT Righ
09b0: 74 3b 0d 0a 09 53 48 4f 52 54 20 42 6f 74 74 6f t;...SHORT Botto
09c0: 6d 3b 0d 0a 7d 0d 0a 61 6c 69 61 73 20 53 4d 41 m;..}..alias SMA
09d0: 4c 4c 5f 52 45 43 54 2a 20 50 53 4d 41 4c 4c 5f LL_RECT* PSMALL_
09e0: 52 45 43 54 3b 0d 0a 0d 0a 73 74 72 75 63 74 20 RECT;....struct
09f0: 43 4f 4e 53 4f 4c 45 5f 43 55 52 53 4f 52 5f 49 CONSOLE_CURSOR_I
0a00: 4e 46 4f 20 7b 0d 0a 09 44 57 4f 52 44 20 64 77 NFO {...DWORD dw
0a10: 53 69 7a 65 3b 0d 0a 09 42 4f 4f 4c 20 20 62 56 Size;...BOOL bV
0a20: 69 73 69 62 6c 65 3b 0d 0a 7d 0d 0a 61 6c 69 61 isible;..}..alia
0a30: 73 20 43 4f 4e 53 4f 4c 45 5f 43 55 52 53 4f 52 s CONSOLE_CURSOR
0a40: 5f 49 4e 46 4f 2a 20 50 43 4f 4e 53 4f 4c 45 5f _INFO* PCONSOLE_
0a50: 43 55 52 53 4f 52 5f 49 4e 46 4f 3b 0d 0a 0d 0a CURSOR_INFO;....
0a60: 73 74 72 75 63 74 20 43 4f 4f 52 44 20 7b 0d 0a struct COORD {..
0a70: 09 53 48 4f 52 54 20 58 3b 0d 0a 09 53 48 4f 52 .SHORT X;...SHOR
0a80: 54 20 59 3b 0d 0a 7d 0d 0a 61 6c 69 61 73 20 43 T Y;..}..alias C
0a90: 4f 4f 52 44 2a 20 50 43 4f 4f 52 44 3b 0d 0a 0d OORD* PCOORD;...
0aa0: 0a 73 74 72 75 63 74 20 43 4f 4e 53 4f 4c 45 5f .struct CONSOLE_
0ab0: 46 4f 4e 54 5f 49 4e 46 4f 20 7b 0d 0a 09 44 57 FONT_INFO {...DW
0ac0: 4f 52 44 20 6e 46 6f 6e 74 3b 0d 0a 09 43 4f 4f ORD nFont;...COO
0ad0: 52 44 20 64 77 46 6f 6e 74 53 69 7a 65 3b 0d 0a RD dwFontSize;..
0ae0: 7d 0d 0a 61 6c 69 61 73 20 43 4f 4e 53 4f 4c 45 }..alias CONSOLE
0af0: 5f 46 4f 4e 54 5f 49 4e 46 4f 2a 20 50 43 4f 4e _FONT_INFO* PCON
0b00: 53 4f 4c 45 5f 46 4f 4e 54 5f 49 4e 46 4f 3b 0d SOLE_FONT_INFO;.
0b10: 0a 0d 0a 73 74 72 75 63 74 20 43 4f 4e 53 4f 4c ...struct CONSOL
0b20: 45 5f 53 43 52 45 45 4e 5f 42 55 46 46 45 52 5f E_SCREEN_BUFFER_
0b30: 49 4e 46 4f 20 7b 0d 0a 09 43 4f 4f 52 44 20 20 INFO {...COORD
0b40: 20 20 20 20 64 77 53 69 7a 65 3b 0d 0a 09 43 4f dwSize;...CO
0b50: 4f 52 44 20 20 20 20 20 20 64 77 43 75 72 73 6f ORD dwCurso
0b60: 72 50 6f 73 69 74 69 6f 6e 3b 0d 0a 09 57 4f 52 rPosition;...WOR
0b70: 44 20 20 20 20 20 20 20 77 41 74 74 72 69 62 75 D wAttribu
0b80: 74 65 73 3b 0d 0a 09 53 4d 41 4c 4c 5f 52 45 43 tes;...SMALL_REC
0b90: 54 20 73 72 57 69 6e 64 6f 77 3b 0d 0a 09 43 4f T srWindow;...CO
0ba0: 4f 52 44 20 20 20 20 20 20 64 77 4d 61 78 69 6d ORD dwMaxim
0bb0: 75 6d 57 69 6e 64 6f 77 53 69 7a 65 3b 0d 0a 7d umWindowSize;..}
0bc0: 0d 0a 61 6c 69 61 73 20 43 4f 4e 53 4f 4c 45 5f ..alias CONSOLE_
0bd0: 53 43 52 45 45 4e 5f 42 55 46 46 45 52 5f 49 4e SCREEN_BUFFER_IN
0be0: 46 4f 2a 20 50 43 4f 4e 53 4f 4c 45 5f 53 43 52 FO* PCONSOLE_SCR
0bf0: 45 45 4e 5f 42 55 46 46 45 52 5f 49 4e 46 4f 3b EEN_BUFFER_INFO;
0c00: 0d 0a 0d 0a 61 6c 69 61 73 20 42 4f 4f 4c 20 66 ....alias BOOL f
0c10: 75 6e 63 74 69 6f 6e 28 44 57 4f 52 44 29 20 50 unction(DWORD) P
0c20: 48 41 4e 44 4c 45 52 5f 52 4f 55 54 49 4e 45 3b HANDLER_ROUTINE;
0c30: 0d 0a 0d 0a 73 74 72 75 63 74 20 4b 45 59 5f 45 ....struct KEY_E
0c40: 56 45 4e 54 5f 52 45 43 4f 52 44 20 7b 0d 0a 09 VENT_RECORD {...
0c50: 42 4f 4f 4c 20 20 62 4b 65 79 44 6f 77 6e 3b 0d BOOL bKeyDown;.
0c60: 0a 09 57 4f 52 44 20 20 77 52 65 70 65 61 74 43 ..WORD wRepeatC
0c70: 6f 75 6e 74 3b 0d 0a 09 57 4f 52 44 20 20 77 56 ount;...WORD wV
0c80: 69 72 74 75 61 6c 4b 65 79 43 6f 64 65 3b 0d 0a irtualKeyCode;..
0c90: 09 57 4f 52 44 20 20 77 56 69 72 74 75 61 6c 53 .WORD wVirtualS
0ca0: 63 61 6e 43 6f 64 65 3b 0d 0a 09 75 6e 69 6f 6e canCode;...union
0cb0: 20 5f 75 43 68 61 72 20 7b 0d 0a 09 09 57 43 48 _uChar {....WCH
0cc0: 41 52 20 55 6e 69 63 6f 64 65 43 68 61 72 3b 0d AR UnicodeChar;.
0cd0: 0a 09 09 43 48 41 52 20 20 41 73 63 69 69 43 68 ...CHAR AsciiCh
0ce0: 61 72 3b 0d 0a 09 7d 0d 0a 09 5f 75 43 68 61 72 ar;...}..._uChar
0cf0: 20 75 43 68 61 72 3b 09 0d 0a 09 44 57 4f 52 44 uChar;....DWORD
0d00: 20 64 77 43 6f 6e 74 72 6f 6c 4b 65 79 53 74 61 dwControlKeySta
0d10: 74 65 3b 0d 0a 7d 0d 0a 0d 0a 73 74 72 75 63 74 te;..}....struct
0d20: 20 4d 4f 55 53 45 5f 45 56 45 4e 54 5f 52 45 43 MOUSE_EVENT_REC
0d30: 4f 52 44 20 7b 0d 0a 09 43 4f 4f 52 44 20 64 77 ORD {...COORD dw
0d40: 4d 6f 75 73 65 50 6f 73 69 74 69 6f 6e 3b 0d 0a MousePosition;..
0d50: 09 44 57 4f 52 44 20 64 77 42 75 74 74 6f 6e 53 .DWORD dwButtonS
0d60: 74 61 74 65 3b 0d 0a 09 44 57 4f 52 44 20 64 77 tate;...DWORD dw
0d70: 43 6f 6e 74 72 6f 6c 4b 65 79 53 74 61 74 65 3b ControlKeyState;
0d80: 0d 0a 09 44 57 4f 52 44 20 64 77 45 76 65 6e 74 ...DWORD dwEvent
0d90: 46 6c 61 67 73 3b 0d 0a 7d 0d 0a 0d 0a 73 74 72 Flags;..}....str
0da0: 75 63 74 20 57 49 4e 44 4f 57 5f 42 55 46 46 45 uct WINDOW_BUFFE
0db0: 52 5f 53 49 5a 45 5f 52 45 43 4f 52 44 20 7b 0d R_SIZE_RECORD {.
0dc0: 0a 09 43 4f 4f 52 44 20 64 77 53 69 7a 65 3b 0d ..COORD dwSize;.
0dd0: 0a 7d 0d 0a 0d 0a 73 74 72 75 63 74 20 4d 45 4e .}....struct MEN
0de0: 55 5f 45 56 45 4e 54 5f 52 45 43 4f 52 44 20 7b U_EVENT_RECORD {
0df0: 0d 0a 09 55 49 4e 54 20 64 77 43 6f 6d 6d 61 6e ...UINT dwComman
0e00: 64 49 64 3b 0d 0a 7d 0d 0a 61 6c 69 61 73 20 4d dId;..}..alias M
0e10: 45 4e 55 5f 45 56 45 4e 54 5f 52 45 43 4f 52 44 ENU_EVENT_RECORD
0e20: 2a 20 50 4d 45 4e 55 5f 45 56 45 4e 54 5f 52 45 * PMENU_EVENT_RE
0e30: 43 4f 52 44 3b 0d 0a 0d 0a 73 74 72 75 63 74 20 CORD;....struct
0e40: 46 4f 43 55 53 5f 45 56 45 4e 54 5f 52 45 43 4f FOCUS_EVENT_RECO
0e50: 52 44 20 7b 0d 0a 09 42 4f 4f 4c 20 62 53 65 74 RD {...BOOL bSet
0e60: 46 6f 63 75 73 3b 0d 0a 7d 0d 0a 0d 0a 73 74 72 Focus;..}....str
0e70: 75 63 74 20 49 4e 50 55 54 5f 52 45 43 4f 52 44 uct INPUT_RECORD
0e80: 20 7b 0d 0a 09 57 4f 52 44 20 45 76 65 6e 74 54 {...WORD EventT
0e90: 79 70 65 3b 0d 0a 09 75 6e 69 6f 6e 20 5f 45 76 ype;...union _Ev
0ea0: 65 6e 74 20 7b 0d 0a 09 09 4b 45 59 5f 45 56 45 ent {....KEY_EVE
0eb0: 4e 54 5f 52 45 43 4f 52 44 20 4b 65 79 45 76 65 NT_RECORD KeyEve
0ec0: 6e 74 3b 0d 0a 09 09 4d 4f 55 53 45 5f 45 56 45 nt;....MOUSE_EVE
0ed0: 4e 54 5f 52 45 43 4f 52 44 20 4d 6f 75 73 65 45 NT_RECORD MouseE
0ee0: 76 65 6e 74 3b 0d 0a 09 09 57 49 4e 44 4f 57 5f vent;....WINDOW_
0ef0: 42 55 46 46 45 52 5f 53 49 5a 45 5f 52 45 43 4f BUFFER_SIZE_RECO
0f00: 52 44 20 57 69 6e 64 6f 77 42 75 66 66 65 72 53 RD WindowBufferS
0f10: 69 7a 65 45 76 65 6e 74 3b 0d 0a 09 09 4d 45 4e izeEvent;....MEN
0f20: 55 5f 45 56 45 4e 54 5f 52 45 43 4f 52 44 20 4d U_EVENT_RECORD M
0f30: 65 6e 75 45 76 65 6e 74 3b 0d 0a 09 09 46 4f 43 enuEvent;....FOC
0f40: 55 53 5f 45 56 45 4e 54 5f 52 45 43 4f 52 44 20 US_EVENT_RECORD
0f50: 46 6f 63 75 73 45 76 65 6e 74 3b 0d 0a 09 7d 0d FocusEvent;...}.
0f60: 0a 09 5f 45 76 65 6e 74 20 45 76 65 6e 74 3b 09 .._Event Event;.
0f70: 0d 0a 7d 0d 0a 61 6c 69 61 73 20 49 4e 50 55 54 ..}..alias INPUT
0f80: 5f 52 45 43 4f 52 44 2a 20 50 49 4e 50 55 54 5f _RECORD* PINPUT_
0f90: 52 45 43 4f 52 44 3b 0d 0a 0d 0a 65 78 74 65 72 RECORD;....exter
0fa0: 6e 20 28 57 69 6e 64 6f 77 73 29 3a 0d 0a 0d 0a n (Windows):....
0fb0: 42 4f 4f 4c 20 41 6c 6c 6f 63 43 6f 6e 73 6f 6c BOOL AllocConsol
0fc0: 65 28 29 3b 0d 0a 48 41 4e 44 4c 45 20 43 72 65 e();..HANDLE Cre
0fd0: 61 74 65 43 6f 6e 73 6f 6c 65 53 63 72 65 65 6e ateConsoleScreen
0fe0: 42 75 66 66 65 72 28 44 57 4f 52 44 2c 20 44 57 Buffer(DWORD, DW
0ff0: 4f 52 44 2c 20 53 45 43 55 52 49 54 59 5f 41 54 ORD, SECURITY_AT
1000: 54 52 49 42 55 54 45 53 2a 2c 20 44 57 4f 52 44 TRIBUTES*, DWORD
1010: 2c 20 4c 50 56 4f 49 44 29 3b 0d 0a 42 4f 4f 4c , LPVOID);..BOOL
1020: 20 46 69 6c 6c 43 6f 6e 73 6f 6c 65 4f 75 74 70 FillConsoleOutp
1030: 75 74 41 74 74 72 69 62 75 74 65 28 48 41 4e 44 utAttribute(HAND
1040: 4c 45 2c 20 57 4f 52 44 2c 20 44 57 4f 52 44 2c LE, WORD, DWORD,
1050: 20 43 4f 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b COORD, PDWORD);
1060: 0d 0a 42 4f 4f 4c 20 46 69 6c 6c 43 6f 6e 73 6f ..BOOL FillConso
1070: 6c 65 4f 75 74 70 75 74 43 68 61 72 61 63 74 65 leOutputCharacte
1080: 72 41 28 48 41 4e 44 4c 45 2c 20 43 48 41 52 2c rA(HANDLE, CHAR,
1090: 20 44 57 4f 52 44 2c 20 43 4f 4f 52 44 2c 20 50 DWORD, COORD, P
10a0: 44 57 4f 52 44 29 3b 0d 0a 42 4f 4f 4c 20 46 69 DWORD);..BOOL Fi
10b0: 6c 6c 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 43 llConsoleOutputC
10c0: 68 61 72 61 63 74 65 72 57 28 48 41 4e 44 4c 45 haracterW(HANDLE
10d0: 2c 20 57 43 48 41 52 2c 20 44 57 4f 52 44 2c 20 , WCHAR, DWORD,
10e0: 43 4f 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b 0d COORD, PDWORD);.
10f0: 0a 42 4f 4f 4c 20 46 6c 75 73 68 43 6f 6e 73 6f .BOOL FlushConso
1100: 6c 65 49 6e 70 75 74 42 75 66 66 65 72 28 48 41 leInputBuffer(HA
1110: 4e 44 4c 45 29 3b 0d 0a 42 4f 4f 4c 20 46 72 65 NDLE);..BOOL Fre
1120: 65 43 6f 6e 73 6f 6c 65 28 29 3b 0d 0a 42 4f 4f eConsole();..BOO
1130: 4c 20 47 65 6e 65 72 61 74 65 43 6f 6e 73 6f 6c L GenerateConsol
1140: 65 43 74 72 6c 45 76 65 6e 74 28 44 57 4f 52 44 eCtrlEvent(DWORD
1150: 2c 20 44 57 4f 52 44 29 3b 0d 0a 55 49 4e 54 20 , DWORD);..UINT
1160: 47 65 74 43 6f 6e 73 6f 6c 65 43 50 28 29 3b 0d GetConsoleCP();.
1170: 0a 42 4f 4f 4c 20 47 65 74 43 6f 6e 73 6f 6c 65 .BOOL GetConsole
1180: 43 75 72 73 6f 72 49 6e 66 6f 28 48 41 4e 44 4c CursorInfo(HANDL
1190: 45 2c 20 50 43 4f 4e 53 4f 4c 45 5f 43 55 52 53 E, PCONSOLE_CURS
11a0: 4f 52 5f 49 4e 46 4f 29 3b 0d 0a 42 4f 4f 4c 20 OR_INFO);..BOOL
11b0: 47 65 74 43 6f 6e 73 6f 6c 65 4d 6f 64 65 28 48 GetConsoleMode(H
11c0: 41 4e 44 4c 45 2c 50 44 57 4f 52 44 29 3b 0d 0a ANDLE,PDWORD);..
11d0: 55 49 4e 54 20 47 65 74 43 6f 6e 73 6f 6c 65 4f UINT GetConsoleO
11e0: 75 74 70 75 74 43 50 28 29 3b 0d 0a 42 4f 4f 4c utputCP();..BOOL
11f0: 20 47 65 74 43 6f 6e 73 6f 6c 65 53 63 72 65 65 GetConsoleScree
1200: 6e 42 75 66 66 65 72 49 6e 66 6f 28 48 41 4e 44 nBufferInfo(HAND
1210: 4c 45 2c 20 50 43 4f 4e 53 4f 4c 45 5f 53 43 52 LE, PCONSOLE_SCR
1220: 45 45 4e 5f 42 55 46 46 45 52 5f 49 4e 46 4f 29 EEN_BUFFER_INFO)
1230: 3b 0d 0a 44 57 4f 52 44 20 47 65 74 43 6f 6e 73 ;..DWORD GetCons
1240: 6f 6c 65 54 69 74 6c 65 41 28 4c 50 53 54 52 2c oleTitleA(LPSTR,
1250: 20 44 57 4f 52 44 29 3b 0d 0a 44 57 4f 52 44 20 DWORD);..DWORD
1260: 47 65 74 43 6f 6e 73 6f 6c 65 54 69 74 6c 65 57 GetConsoleTitleW
1270: 28 4c 50 57 53 54 52 2c 20 44 57 4f 52 44 29 3b (LPWSTR, DWORD);
1280: 0d 0a 43 4f 4f 52 44 20 47 65 74 4c 61 72 67 65 ..COORD GetLarge
1290: 73 74 43 6f 6e 73 6f 6c 65 57 69 6e 64 6f 77 53 stConsoleWindowS
12a0: 69 7a 65 28 48 41 4e 44 4c 45 29 3b 0d 0a 42 4f ize(HANDLE);..BO
12b0: 4f 4c 20 47 65 74 4e 75 6d 62 65 72 4f 66 43 6f OL GetNumberOfCo
12c0: 6e 73 6f 6c 65 49 6e 70 75 74 45 76 65 6e 74 73 nsoleInputEvents
12d0: 28 48 41 4e 44 4c 45 2c 20 50 44 57 4f 52 44 29 (HANDLE, PDWORD)
12e0: 3b 0d 0a 42 4f 4f 4c 20 47 65 74 4e 75 6d 62 65 ;..BOOL GetNumbe
12f0: 72 4f 66 43 6f 6e 73 6f 6c 65 4d 6f 75 73 65 42 rOfConsoleMouseB
1300: 75 74 74 6f 6e 73 28 50 44 57 4f 52 44 29 3b 0d uttons(PDWORD);.
1310: 0a 42 4f 4f 4c 20 50 65 65 6b 43 6f 6e 73 6f 6c .BOOL PeekConsol
1320: 65 49 6e 70 75 74 41 28 48 41 4e 44 4c 45 2c 20 eInputA(HANDLE,
1330: 50 49 4e 50 55 54 5f 52 45 43 4f 52 44 2c 20 44 PINPUT_RECORD, D
1340: 57 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b 0d 0a WORD, PDWORD);..
1350: 42 4f 4f 4c 20 50 65 65 6b 43 6f 6e 73 6f 6c 65 BOOL PeekConsole
1360: 49 6e 70 75 74 57 28 48 41 4e 44 4c 45 2c 20 50 InputW(HANDLE, P
1370: 49 4e 50 55 54 5f 52 45 43 4f 52 44 2c 20 44 57 INPUT_RECORD, DW
1380: 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b 0d 0a 42 ORD, PDWORD);..B
1390: 4f 4f 4c 20 52 65 61 64 43 6f 6e 73 6f 6c 65 41 OOL ReadConsoleA
13a0: 28 48 41 4e 44 4c 45 2c 20 50 56 4f 49 44 2c 20 (HANDLE, PVOID,
13b0: 44 57 4f 52 44 2c 20 50 44 57 4f 52 44 2c 20 50 DWORD, PDWORD, P
13c0: 56 4f 49 44 29 3b 0d 0a 42 4f 4f 4c 20 52 65 61 VOID);..BOOL Rea
13d0: 64 43 6f 6e 73 6f 6c 65 57 28 48 41 4e 44 4c 45 dConsoleW(HANDLE
13e0: 2c 20 50 56 4f 49 44 2c 20 44 57 4f 52 44 2c 20 , PVOID, DWORD,
13f0: 50 44 57 4f 52 44 2c 20 50 56 4f 49 44 29 3b 0d PDWORD, PVOID);.
1400: 0a 42 4f 4f 4c 20 52 65 61 64 43 6f 6e 73 6f 6c .BOOL ReadConsol
1410: 65 49 6e 70 75 74 41 28 48 41 4e 44 4c 45 2c 20 eInputA(HANDLE,
1420: 50 49 4e 50 55 54 5f 52 45 43 4f 52 44 2c 20 44 PINPUT_RECORD, D
1430: 57 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b 0d 0a WORD, PDWORD);..
1440: 42 4f 4f 4c 20 52 65 61 64 43 6f 6e 73 6f 6c 65 BOOL ReadConsole
1450: 49 6e 70 75 74 57 28 48 41 4e 44 4c 45 2c 20 50 InputW(HANDLE, P
1460: 49 4e 50 55 54 5f 52 45 43 4f 52 44 2c 20 44 57 INPUT_RECORD, DW
1470: 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b 0d 0a 42 ORD, PDWORD);..B
1480: 4f 4f 4c 20 52 65 61 64 43 6f 6e 73 6f 6c 65 4f OOL ReadConsoleO
1490: 75 74 70 75 74 41 74 74 72 69 62 75 74 65 28 48 utputAttribute(H
14a0: 41 4e 44 4c 45 2c 20 4c 50 57 4f 52 44 2c 20 44 ANDLE, LPWORD, D
14b0: 57 4f 52 44 2c 20 43 4f 4f 52 44 2c 20 4c 50 44 WORD, COORD, LPD
14c0: 57 4f 52 44 29 3b 0d 0a 42 4f 4f 4c 20 52 65 61 WORD);..BOOL Rea
14d0: 64 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 43 68 dConsoleOutputCh
14e0: 61 72 61 63 74 65 72 41 28 48 41 4e 44 4c 45 2c aracterA(HANDLE,
14f0: 20 4c 50 53 54 52 2c 20 44 57 4f 52 44 2c 20 43 LPSTR, DWORD, C
1500: 4f 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b 0d 0a OORD, PDWORD);..
1510: 42 4f 4f 4c 20 52 65 61 64 43 6f 6e 73 6f 6c 65 BOOL ReadConsole
1520: 4f 75 74 70 75 74 43 68 61 72 61 63 74 65 72 57 OutputCharacterW
1530: 28 48 41 4e 44 4c 45 2c 20 4c 50 57 53 54 52 2c (HANDLE, LPWSTR,
1540: 20 44 57 4f 52 44 2c 20 43 4f 4f 52 44 2c 20 50 DWORD, COORD, P
1550: 44 57 4f 52 44 29 3b 0d 0a 42 4f 4f 4c 20 52 65 DWORD);..BOOL Re
1560: 61 64 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 41 adConsoleOutputA
1570: 28 48 41 4e 44 4c 45 2c 20 50 43 48 41 52 5f 49 (HANDLE, PCHAR_I
1580: 4e 46 4f 2c 20 43 4f 4f 52 44 2c 20 43 4f 4f 52 NFO, COORD, COOR
1590: 44 2c 20 50 53 4d 41 4c 4c 5f 52 45 43 54 29 3b D, PSMALL_RECT);
15a0: 0d 0a 42 4f 4f 4c 20 52 65 61 64 43 6f 6e 73 6f ..BOOL ReadConso
15b0: 6c 65 4f 75 74 70 75 74 57 28 48 41 4e 44 4c 45 leOutputW(HANDLE
15c0: 2c 20 50 43 48 41 52 5f 49 4e 46 4f 2c 20 43 4f , PCHAR_INFO, CO
15d0: 4f 52 44 2c 20 43 4f 4f 52 44 2c 20 50 53 4d 41 ORD, COORD, PSMA
15e0: 4c 4c 5f 52 45 43 54 29 3b 0d 0a 42 4f 4f 4c 20 LL_RECT);..BOOL
15f0: 53 63 72 6f 6c 6c 43 6f 6e 73 6f 6c 65 53 63 72 ScrollConsoleScr
1600: 65 65 6e 42 75 66 66 65 72 41 28 48 41 4e 44 4c eenBufferA(HANDL
1610: 45 2c 20 63 6f 6e 73 74 28 53 4d 41 4c 4c 5f 52 E, const(SMALL_R
1620: 45 43 54 29 2a 2c 20 63 6f 6e 73 74 28 53 4d 41 ECT)*, const(SMA
1630: 4c 4c 5f 52 45 43 54 29 2a 2c 20 43 4f 4f 52 44 LL_RECT)*, COORD
1640: 2c 20 63 6f 6e 73 74 28 43 48 41 52 5f 49 4e 46 , const(CHAR_INF
1650: 4f 29 2a 29 3b 0d 0a 42 4f 4f 4c 20 53 63 72 6f O)*);..BOOL Scro
1660: 6c 6c 43 6f 6e 73 6f 6c 65 53 63 72 65 65 6e 42 llConsoleScreenB
1670: 75 66 66 65 72 57 28 48 41 4e 44 4c 45 2c 20 63 ufferW(HANDLE, c
1680: 6f 6e 73 74 28 53 4d 41 4c 4c 5f 52 45 43 54 29 onst(SMALL_RECT)
1690: 2a 2c 20 63 6f 6e 73 74 28 53 4d 41 4c 4c 5f 52 *, const(SMALL_R
16a0: 45 43 54 29 2a 2c 20 43 4f 4f 52 44 2c 20 63 6f ECT)*, COORD, co
16b0: 6e 73 74 28 43 48 41 52 5f 49 4e 46 4f 29 2a 29 nst(CHAR_INFO)*)
16c0: 3b 0d 0a 42 4f 4f 4c 20 53 65 74 43 6f 6e 73 6f ;..BOOL SetConso
16d0: 6c 65 41 63 74 69 76 65 53 63 72 65 65 6e 42 75 leActiveScreenBu
16e0: 66 66 65 72 28 48 41 4e 44 4c 45 29 3b 0d 0a 42 ffer(HANDLE);..B
16f0: 4f 4f 4c 20 53 65 74 43 6f 6e 73 6f 6c 65 43 50 OOL SetConsoleCP
1700: 28 55 49 4e 54 29 3b 0d 0a 42 4f 4f 4c 20 53 65 (UINT);..BOOL Se
1710: 74 43 6f 6e 73 6f 6c 65 43 74 72 6c 48 61 6e 64 tConsoleCtrlHand
1720: 6c 65 72 28 50 48 41 4e 44 4c 45 52 5f 52 4f 55 ler(PHANDLER_ROU
1730: 54 49 4e 45 2c 20 42 4f 4f 4c 29 3b 0d 0a 42 4f TINE, BOOL);..BO
1740: 4f 4c 20 53 65 74 43 6f 6e 73 6f 6c 65 43 75 72 OL SetConsoleCur
1750: 73 6f 72 49 6e 66 6f 28 48 41 4e 44 4c 45 2c 20 sorInfo(HANDLE,
1760: 63 6f 6e 73 74 28 43 4f 4e 53 4f 4c 45 5f 43 55 const(CONSOLE_CU
1770: 52 53 4f 52 5f 49 4e 46 4f 29 2a 29 3b 0d 0a 42 RSOR_INFO)*);..B
1780: 4f 4f 4c 20 53 65 74 43 6f 6e 73 6f 6c 65 43 75 OOL SetConsoleCu
1790: 72 73 6f 72 50 6f 73 69 74 69 6f 6e 28 48 41 4e rsorPosition(HAN
17a0: 44 4c 45 2c 20 43 4f 4f 52 44 29 3b 0d 0a 0d 0a DLE, COORD);....
17b0: 0d 0a 73 74 61 74 69 63 20 69 66 20 28 5f 57 49 ..static if (_WI
17c0: 4e 33 32 5f 57 49 4e 4e 54 20 3e 3d 20 30 78 35 N32_WINNT >= 0x5
17d0: 30 30 29 20 7b 0d 0a 42 4f 4f 4c 20 47 65 74 43 00) {..BOOL GetC
17e0: 6f 6e 73 6f 6c 65 44 69 73 70 6c 61 79 4d 6f 64 onsoleDisplayMod
17f0: 65 28 4c 50 44 57 4f 52 44 29 3b 0d 0a 48 57 4e e(LPDWORD);..HWN
1800: 44 20 47 65 74 43 6f 6e 73 6f 6c 65 57 69 6e 64 D GetConsoleWind
1810: 6f 77 28 29 3b 0d 0a 7d 0d 0a 0d 0a 73 74 61 74 ow();..}....stat
1820: 69 63 20 69 66 20 28 5f 57 49 4e 33 32 5f 57 49 ic if (_WIN32_WI
1830: 4e 4e 54 20 3e 3d 20 30 78 35 30 31 29 20 7b 0d NNT >= 0x501) {.
1840: 0a 42 4f 4f 4c 20 41 74 74 61 63 68 43 6f 6e 73 .BOOL AttachCons
1850: 6f 6c 65 28 44 57 4f 52 44 29 3b 0d 0a 42 4f 4f ole(DWORD);..BOO
1860: 4c 20 53 65 74 43 6f 6e 73 6f 6c 65 44 69 73 70 L SetConsoleDisp
1870: 6c 61 79 4d 6f 64 65 28 48 41 4e 44 4c 45 2c 20 layMode(HANDLE,
1880: 44 57 4f 52 44 2c 20 50 43 4f 4f 52 44 29 3b 0d DWORD, PCOORD);.
1890: 0a 63 6f 6e 73 74 20 44 57 4f 52 44 20 41 54 54 .const DWORD ATT
18a0: 41 43 48 5f 50 41 52 45 4e 54 5f 50 52 4f 43 45 ACH_PARENT_PROCE
18b0: 53 53 20 3d 20 63 61 73 74 28 44 57 4f 52 44 29 SS = cast(DWORD)
18c0: 2d 31 3b 0d 0a 7d 0d 0a 0d 0a 42 4f 4f 4c 20 53 -1;..}....BOOL S
18d0: 65 74 43 6f 6e 73 6f 6c 65 4d 6f 64 65 28 48 41 etConsoleMode(HA
18e0: 4e 44 4c 45 2c 20 44 57 4f 52 44 29 3b 0d 0a 42 NDLE, DWORD);..B
18f0: 4f 4f 4c 20 53 65 74 43 6f 6e 73 6f 6c 65 4f 75 OOL SetConsoleOu
1900: 74 70 75 74 43 50 28 55 49 4e 54 29 3b 0d 0a 42 tputCP(UINT);..B
1910: 4f 4f 4c 20 53 65 74 43 6f 6e 73 6f 6c 65 53 63 OOL SetConsoleSc
1920: 72 65 65 6e 42 75 66 66 65 72 53 69 7a 65 28 48 reenBufferSize(H
1930: 41 4e 44 4c 45 2c 20 43 4f 4f 52 44 29 3b 0d 0a ANDLE, COORD);..
1940: 42 4f 4f 4c 20 53 65 74 43 6f 6e 73 6f 6c 65 54 BOOL SetConsoleT
1950: 65 78 74 41 74 74 72 69 62 75 74 65 28 48 41 4e extAttribute(HAN
1960: 44 4c 45 2c 20 57 4f 52 44 29 3b 0d 0a 42 4f 4f DLE, WORD);..BOO
1970: 4c 20 53 65 74 43 6f 6e 73 6f 6c 65 54 69 74 6c L SetConsoleTitl
1980: 65 41 28 4c 50 43 53 54 52 29 3b 0d 0a 42 4f 4f eA(LPCSTR);..BOO
1990: 4c 20 53 65 74 43 6f 6e 73 6f 6c 65 54 69 74 6c L SetConsoleTitl
19a0: 65 57 28 4c 50 43 57 53 54 52 29 3b 0d 0a 42 4f eW(LPCWSTR);..BO
19b0: 4f 4c 20 53 65 74 43 6f 6e 73 6f 6c 65 57 69 6e OL SetConsoleWin
19c0: 64 6f 77 49 6e 66 6f 28 48 41 4e 44 4c 45 2c 20 dowInfo(HANDLE,
19d0: 42 4f 4f 4c 2c 20 63 6f 6e 73 74 28 53 4d 41 4c BOOL, const(SMAL
19e0: 4c 5f 52 45 43 54 29 2a 29 3b 0d 0a 42 4f 4f 4c L_RECT)*);..BOOL
19f0: 20 57 72 69 74 65 43 6f 6e 73 6f 6c 65 41 28 48 WriteConsoleA(H
1a00: 41 4e 44 4c 45 2c 20 50 43 56 4f 49 44 2c 20 44 ANDLE, PCVOID, D
1a10: 57 4f 52 44 2c 20 50 44 57 4f 52 44 2c 20 50 56 WORD, PDWORD, PV
1a20: 4f 49 44 29 3b 0d 0a 42 4f 4f 4c 20 57 72 69 74 OID);..BOOL Writ
1a30: 65 43 6f 6e 73 6f 6c 65 57 28 48 41 4e 44 4c 45 eConsoleW(HANDLE
1a40: 2c 20 50 43 56 4f 49 44 2c 20 44 57 4f 52 44 2c , PCVOID, DWORD,
1a50: 20 50 44 57 4f 52 44 2c 20 50 56 4f 49 44 29 3b PDWORD, PVOID);
1a60: 0d 0a 42 4f 4f 4c 20 57 72 69 74 65 43 6f 6e 73 ..BOOL WriteCons
1a70: 6f 6c 65 49 6e 70 75 74 41 28 48 41 4e 44 4c 45 oleInputA(HANDLE
1a80: 2c 20 63 6f 6e 73 74 28 49 4e 50 55 54 5f 52 45 , const(INPUT_RE
1a90: 43 4f 52 44 29 2a 2c 20 44 57 4f 52 44 2c 20 50 CORD)*, DWORD, P
1aa0: 44 57 4f 52 44 29 3b 0d 0a 42 4f 4f 4c 20 57 72 DWORD);..BOOL Wr
1ab0: 69 74 65 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 57 iteConsoleInputW
1ac0: 28 48 41 4e 44 4c 45 2c 20 63 6f 6e 73 74 28 49 (HANDLE, const(I
1ad0: 4e 50 55 54 5f 52 45 43 4f 52 44 29 2a 2c 20 44 NPUT_RECORD)*, D
1ae0: 57 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b 0d 0a WORD, PDWORD);..
1af0: 42 4f 4f 4c 20 57 72 69 74 65 43 6f 6e 73 6f 6c BOOL WriteConsol
1b00: 65 4f 75 74 70 75 74 41 28 48 41 4e 44 4c 45 2c eOutputA(HANDLE,
1b10: 20 63 6f 6e 73 74 28 43 48 41 52 5f 49 4e 46 4f const(CHAR_INFO
1b20: 29 2a 2c 20 43 4f 4f 52 44 2c 20 43 4f 4f 52 44 )*, COORD, COORD
1b30: 2c 20 50 53 4d 41 4c 4c 5f 52 45 43 54 29 3b 0d , PSMALL_RECT);.
1b40: 0a 42 4f 4f 4c 20 57 72 69 74 65 43 6f 6e 73 6f .BOOL WriteConso
1b50: 6c 65 4f 75 74 70 75 74 57 28 48 41 4e 44 4c 45 leOutputW(HANDLE
1b60: 2c 20 63 6f 6e 73 74 28 43 48 41 52 5f 49 4e 46 , const(CHAR_INF
1b70: 4f 29 2a 2c 20 43 4f 4f 52 44 2c 20 43 4f 4f 52 O)*, COORD, COOR
1b80: 44 2c 20 50 53 4d 41 4c 4c 5f 52 45 43 54 29 3b D, PSMALL_RECT);
1b90: 0d 0a 42 4f 4f 4c 20 57 72 69 74 65 43 6f 6e 73 ..BOOL WriteCons
1ba0: 6f 6c 65 4f 75 74 70 75 74 41 74 74 72 69 62 75 oleOutputAttribu
1bb0: 74 65 28 48 41 4e 44 4c 45 2c 20 63 6f 6e 73 74 te(HANDLE, const
1bc0: 28 57 4f 52 44 29 2a 2c 20 44 57 4f 52 44 2c 20 (WORD)*, DWORD,
1bd0: 43 4f 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b 0d COORD, PDWORD);.
1be0: 0a 42 4f 4f 4c 20 57 72 69 74 65 43 6f 6e 73 6f .BOOL WriteConso
1bf0: 6c 65 4f 75 74 70 75 74 43 68 61 72 61 63 74 65 leOutputCharacte
1c00: 72 41 28 48 41 4e 44 4c 45 2c 20 4c 50 43 53 54 rA(HANDLE, LPCST
1c10: 52 2c 20 44 57 4f 52 44 2c 20 43 4f 4f 52 44 2c R, DWORD, COORD,
1c20: 20 50 44 57 4f 52 44 29 3b 0d 0a 42 4f 4f 4c 20 PDWORD);..BOOL
1c30: 57 72 69 74 65 43 6f 6e 73 6f 6c 65 4f 75 74 70 WriteConsoleOutp
1c40: 75 74 43 68 61 72 61 63 74 65 72 57 28 48 41 4e utCharacterW(HAN
1c50: 44 4c 45 2c 20 4c 50 43 57 53 54 52 2c 20 44 57 DLE, LPCWSTR, DW
1c60: 4f 52 44 2c 20 43 4f 4f 52 44 2c 20 50 44 57 4f ORD, COORD, PDWO
1c70: 52 44 29 3b 0d 0a 0d 0a 76 65 72 73 69 6f 6e 20 RD);....version
1c80: 28 55 6e 69 63 6f 64 65 29 20 7b 0d 0a 09 61 6c (Unicode) {...al
1c90: 69 61 73 20 46 69 6c 6c 43 6f 6e 73 6f 6c 65 4f ias FillConsoleO
1ca0: 75 74 70 75 74 43 68 61 72 61 63 74 65 72 57 20 utputCharacterW
1cb0: 46 69 6c 6c 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 FillConsoleOutpu
1cc0: 74 43 68 61 72 61 63 74 65 72 3b 0d 0a 09 61 6c tCharacter;...al
1cd0: 69 61 73 20 47 65 74 43 6f 6e 73 6f 6c 65 54 69 ias GetConsoleTi
1ce0: 74 6c 65 57 20 47 65 74 43 6f 6e 73 6f 6c 65 54 tleW GetConsoleT
1cf0: 69 74 6c 65 3b 0d 0a 09 61 6c 69 61 73 20 50 65 itle;...alias Pe
1d00: 65 6b 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 57 20 ekConsoleInputW
1d10: 50 65 65 6b 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 PeekConsoleInput
1d20: 3b 0d 0a 09 61 6c 69 61 73 20 52 65 61 64 43 6f ;...alias ReadCo
1d30: 6e 73 6f 6c 65 57 20 52 65 61 64 43 6f 6e 73 6f nsoleW ReadConso
1d40: 6c 65 3b 0d 0a 09 61 6c 69 61 73 20 52 65 61 64 le;...alias Read
1d50: 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 57 20 52 65 ConsoleInputW Re
1d60: 61 64 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 3b 0d adConsoleInput;.
1d70: 0a 09 61 6c 69 61 73 20 52 65 61 64 43 6f 6e 73 ..alias ReadCons
1d80: 6f 6c 65 4f 75 74 70 75 74 57 20 52 65 61 64 43 oleOutputW ReadC
1d90: 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 3b 0d 0a 09 onsoleOutput;...
1da0: 61 6c 69 61 73 20 52 65 61 64 43 6f 6e 73 6f 6c alias ReadConsol
1db0: 65 4f 75 74 70 75 74 43 68 61 72 61 63 74 65 72 eOutputCharacter
1dc0: 57 20 52 65 61 64 43 6f 6e 73 6f 6c 65 4f 75 74 W ReadConsoleOut
1dd0: 70 75 74 43 68 61 72 61 63 74 65 72 3b 0d 0a 09 putCharacter;...
1de0: 61 6c 69 61 73 20 53 63 72 6f 6c 6c 43 6f 6e 73 alias ScrollCons
1df0: 6f 6c 65 53 63 72 65 65 6e 42 75 66 66 65 72 57 oleScreenBufferW
1e00: 20 53 63 72 6f 6c 6c 43 6f 6e 73 6f 6c 65 53 63 ScrollConsoleSc
1e10: 72 65 65 6e 42 75 66 66 65 72 3b 0d 0a 09 61 6c reenBuffer;...al
1e20: 69 61 73 20 53 65 74 43 6f 6e 73 6f 6c 65 54 69 ias SetConsoleTi
1e30: 74 6c 65 57 20 53 65 74 43 6f 6e 73 6f 6c 65 54 tleW SetConsoleT
1e40: 69 74 6c 65 3b 0d 0a 09 61 6c 69 61 73 20 57 72 itle;...alias Wr
1e50: 69 74 65 43 6f 6e 73 6f 6c 65 57 20 57 72 69 74 iteConsoleW Writ
1e60: 65 43 6f 6e 73 6f 6c 65 3b 0d 0a 09 61 6c 69 61 eConsole;...alia
1e70: 73 20 57 72 69 74 65 43 6f 6e 73 6f 6c 65 49 6e s WriteConsoleIn
1e80: 70 75 74 57 20 57 72 69 74 65 43 6f 6e 73 6f 6c putW WriteConsol
1e90: 65 49 6e 70 75 74 3b 0d 0a 09 61 6c 69 61 73 20 eInput;...alias
1ea0: 57 72 69 74 65 43 6f 6e 73 6f 6c 65 4f 75 74 70 WriteConsoleOutp
1eb0: 75 74 57 20 57 72 69 74 65 43 6f 6e 73 6f 6c 65 utW WriteConsole
1ec0: 4f 75 74 70 75 74 3b 0d 0a 09 61 6c 69 61 73 20 Output;...alias
1ed0: 57 72 69 74 65 43 6f 6e 73 6f 6c 65 4f 75 74 70 WriteConsoleOutp
1ee0: 75 74 43 68 61 72 61 63 74 65 72 57 20 57 72 69 utCharacterW Wri
1ef0: 74 65 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 43 teConsoleOutputC
1f00: 68 61 72 61 63 74 65 72 3b 0d 0a 7d 20 65 6c 73 haracter;..} els
1f10: 65 20 7b 0d 0a 09 61 6c 69 61 73 20 46 69 6c 6c e {...alias Fill
1f20: 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 43 68 61 ConsoleOutputCha
1f30: 72 61 63 74 65 72 41 20 46 69 6c 6c 43 6f 6e 73 racterA FillCons
1f40: 6f 6c 65 4f 75 74 70 75 74 43 68 61 72 61 63 74 oleOutputCharact
1f50: 65 72 3b 0d 0a 09 61 6c 69 61 73 20 47 65 74 43 er;...alias GetC
1f60: 6f 6e 73 6f 6c 65 54 69 74 6c 65 41 20 47 65 74 onsoleTitleA Get
1f70: 43 6f 6e 73 6f 6c 65 54 69 74 6c 65 3b 0d 0a 09 ConsoleTitle;...
1f80: 61 6c 69 61 73 20 50 65 65 6b 43 6f 6e 73 6f 6c alias PeekConsol
1f90: 65 49 6e 70 75 74 41 20 50 65 65 6b 43 6f 6e 73 eInputA PeekCons
1fa0: 6f 6c 65 49 6e 70 75 74 3b 0d 0a 09 61 6c 69 61 oleInput;...alia
1fb0: 73 20 52 65 61 64 43 6f 6e 73 6f 6c 65 41 20 52 s ReadConsoleA R
1fc0: 65 61 64 43 6f 6e 73 6f 6c 65 3b 0d 0a 09 61 6c eadConsole;...al
1fd0: 69 61 73 20 52 65 61 64 43 6f 6e 73 6f 6c 65 49 ias ReadConsoleI
1fe0: 6e 70 75 74 41 20 52 65 61 64 43 6f 6e 73 6f 6c nputA ReadConsol
1ff0: 65 49 6e 70 75 74 3b 0d 0a 09 61 6c 69 61 73 20 eInput;...alias
2000: 52 65 61 64 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 ReadConsoleOutpu
2010: 74 41 20 52 65 61 64 43 6f 6e 73 6f 6c 65 4f 75 tA ReadConsoleOu
2020: 74 70 75 74 3b 0d 0a 09 61 6c 69 61 73 20 52 65 tput;...alias Re
2030: 61 64 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 43 adConsoleOutputC
2040: 68 61 72 61 63 74 65 72 41 20 52 65 61 64 43 6f haracterA ReadCo
2050: 6e 73 6f 6c 65 4f 75 74 70 75 74 43 68 61 72 61 nsoleOutputChara
2060: 63 74 65 72 3b 0d 0a 09 61 6c 69 61 73 20 53 63 cter;...alias Sc
2070: 72 6f 6c 6c 43 6f 6e 73 6f 6c 65 53 63 72 65 65 rollConsoleScree
2080: 6e 42 75 66 66 65 72 41 20 53 63 72 6f 6c 6c 43 nBufferA ScrollC
2090: 6f 6e 73 6f 6c 65 53 63 72 65 65 6e 42 75 66 66 onsoleScreenBuff
20a0: 65 72 3b 0d 0a 09 61 6c 69 61 73 20 53 65 74 43 er;...alias SetC
20b0: 6f 6e 73 6f 6c 65 54 69 74 6c 65 41 20 53 65 74 onsoleTitleA Set
20c0: 43 6f 6e 73 6f 6c 65 54 69 74 6c 65 3b 0d 0a 09 ConsoleTitle;...
20d0: 61 6c 69 61 73 20 57 72 69 74 65 43 6f 6e 73 6f alias WriteConso
20e0: 6c 65 41 20 57 72 69 74 65 43 6f 6e 73 6f 6c 65 leA WriteConsole
20f0: 3b 0d 0a 09 61 6c 69 61 73 20 57 72 69 74 65 43 ;...alias WriteC
2100: 6f 6e 73 6f 6c 65 49 6e 70 75 74 41 20 57 72 69 onsoleInputA Wri
2110: 74 65 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 3b 0d teConsoleInput;.
2120: 0a 09 61 6c 69 61 73 20 57 72 69 74 65 43 6f 6e ..alias WriteCon
2130: 73 6f 6c 65 4f 75 74 70 75 74 41 20 57 72 69 74 soleOutputA Writ
2140: 65 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 3b 0d eConsoleOutput;.
2150: 0a 09 61 6c 69 61 73 20 57 72 69 74 65 43 6f 6e ..alias WriteCon
2160: 73 6f 6c 65 4f 75 74 70 75 74 43 68 61 72 61 63 soleOutputCharac
2170: 74 65 72 41 20 57 72 69 74 65 43 6f 6e 73 6f 6c terA WriteConsol
2180: 65 4f 75 74 70 75 74 43 68 61 72 61 63 74 65 72 eOutputCharacter
2190: 3b 0d 0a 7d 0d 0a ;..}..