Hex Artifact Content

Not logged in

Artifact 418f11163a21e063776cd4898602b1a2232bc074:


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                                ;..}..