Hex Artifact Content

Not logged in

Artifact a1d2dfcf9ddedacec34c30169b0bf045ca156e28:


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 0a 2a 20 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 77 69 6e 63 6f             winco
0070: 6e 2e 64 20 20 20 20 20 20 20 20 20 20 20 20 20  n.d             
0080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0090: 20 20 2a 0a 2a 20 20 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 2a 0a 2a 20              *.* 
00e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00f0: 20 20 20 20 20 20 57 69 6e 64 6f 77 73 20 41 50        Windows AP
0100: 49 20 68 65 61 64 65 72 20 6d 6f 64 75 6c 65 20  I header module 
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0120: 20 20 20 20 20 20 2a 0a 2a 20 20 20 20 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: 2a 0a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  *.*             
0180: 20 20 20 20 54 72 61 6e 73 6c 61 74 65 64 20 66      Translated f
0190: 72 6f 6d 20 4d 69 6e 47 57 20 57 69 6e 64 6f 77  rom MinGW Window
01a0: 73 20 68 65 61 64 65 72 73 20 20 20 20 20 20 20  s headers       
01b0: 20 20 20 20 20 20 20 20 20 20 2a 0a 2a 20 20 20            *.*   
01c0: 20 20 20 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 2a 0a 2a 20 20 20 20 20 20 20 20 20      *.*         
0210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 6c                Pl
0220: 61 63 65 64 20 69 6e 74 6f 20 70 75 62 6c 69 63  aced into public
0230: 20 64 6f 6d 61 69 6e 20 20 20 20 20 20 20 20 20   domain         
0240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 0a                *.
0250: 5c 2a 2a 2a 2a 2a 2a 2a 2a 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 2f 0a 6d 6f 64 75 6c 65  ********/.module
02a0: 20 77 69 6e 33 32 2e 77 69 6e 63 6f 6e 3b 0a 70   win32.wincon;.p
02b0: 72 61 67 6d 61 28 6c 69 62 2c 20 22 6b 65 72 6e  ragma(lib, "kern
02c0: 65 6c 33 32 2e 6c 69 62 22 29 3b 0a 0a 70 72 69  el32.lib");..pri
02d0: 76 61 74 65 20 69 6d 70 6f 72 74 20 77 69 6e 33  vate import win3
02e0: 32 2e 77 33 32 61 70 69 2c 20 77 69 6e 33 32 2e  2.w32api, win32.
02f0: 77 69 6e 64 65 66 3b 0a 0a 2f 2f 20 46 49 58 4d  windef;..// FIXM
0300: 45 3a 20 63 6c 65 61 6e 20 75 70 20 57 69 6e 64  E: clean up Wind
0310: 6f 77 73 20 76 65 72 73 69 6f 6e 20 73 75 70 70  ows version supp
0320: 6f 72 74 0a 0a 65 6e 75 6d 20 7b 0a 09 46 4f 52  ort..enum {..FOR
0330: 45 47 52 4f 55 4e 44 5f 42 4c 55 45 20 20 20 20  EGROUND_BLUE    
0340: 20 20 3d 20 31 2c 0a 09 46 4f 52 45 47 52 4f 55    = 1,..FOREGROU
0350: 4e 44 5f 47 52 45 45 4e 20 20 20 20 20 3d 20 32  ND_GREEN     = 2
0360: 2c 0a 09 46 4f 52 45 47 52 4f 55 4e 44 5f 52 45  ,..FOREGROUND_RE
0370: 44 20 20 20 20 20 20 20 3d 20 34 2c 0a 09 46 4f  D       = 4,..FO
0380: 52 45 47 52 4f 55 4e 44 5f 49 4e 54 45 4e 53 49  REGROUND_INTENSI
0390: 54 59 20 3d 20 38 2c 0a 09 42 41 43 4b 47 52 4f  TY = 8,..BACKGRO
03a0: 55 4e 44 5f 42 4c 55 45 20 20 20 20 20 20 3d 20  UND_BLUE      = 
03b0: 31 36 2c 0a 09 42 41 43 4b 47 52 4f 55 4e 44 5f  16,..BACKGROUND_
03c0: 47 52 45 45 4e 20 20 20 20 20 3d 20 33 32 2c 0a  GREEN     = 32,.
03d0: 09 42 41 43 4b 47 52 4f 55 4e 44 5f 52 45 44 20  .BACKGROUND_RED 
03e0: 20 20 20 20 20 20 3d 20 36 34 2c 0a 09 42 41 43        = 64,..BAC
03f0: 4b 47 52 4f 55 4e 44 5f 49 4e 54 45 4e 53 49 54  KGROUND_INTENSIT
0400: 59 20 3d 20 31 32 38 0a 7d 0a 0a 73 74 61 74 69  Y = 128.}..stati
0410: 63 20 69 66 20 28 5f 57 49 4e 33 32 5f 57 49 4e  c if (_WIN32_WIN
0420: 4e 54 20 3e 3d 20 30 78 30 35 30 31 29 20 7b 0a  NT >= 0x0501) {.
0430: 09 65 6e 75 6d 20 7b 0a 09 09 43 4f 4e 53 4f 4c  .enum {...CONSOL
0440: 45 5f 46 55 4c 4c 53 43 52 45 45 4e 5f 4d 4f 44  E_FULLSCREEN_MOD
0450: 45 20 3d 20 31 2c 0a 09 09 43 4f 4e 53 4f 4c 45  E = 1,...CONSOLE
0460: 5f 57 49 4e 44 4f 57 45 44 5f 4d 4f 44 45 20 20  _WINDOWED_MODE  
0470: 20 3d 20 30 0a 09 7d 0a 7d 0a 0a 65 6e 75 6d 20   = 0..}.}..enum 
0480: 7b 0a 09 43 54 52 4c 5f 43 5f 45 56 45 4e 54 20  {..CTRL_C_EVENT 
0490: 20 20 20 20 20 20 20 3d 20 30 2c 0a 09 43 54 52         = 0,..CTR
04a0: 4c 5f 42 52 45 41 4b 5f 45 56 45 4e 54 20 20 20  L_BREAK_EVENT   
04b0: 20 3d 20 31 2c 0a 09 43 54 52 4c 5f 43 4c 4f 53   = 1,..CTRL_CLOS
04c0: 45 5f 45 56 45 4e 54 20 20 20 20 3d 20 32 2c 0a  E_EVENT    = 2,.
04d0: 09 43 54 52 4c 5f 4c 4f 47 4f 46 46 5f 45 56 45  .CTRL_LOGOFF_EVE
04e0: 4e 54 20 20 20 3d 20 35 2c 0a 09 43 54 52 4c 5f  NT   = 5,..CTRL_
04f0: 53 48 55 54 44 4f 57 4e 5f 45 56 45 4e 54 20 3d  SHUTDOWN_EVENT =
0500: 20 36 0a 7d 0a 0a 65 6e 75 6d 20 7b 0a 09 45 4e   6.}..enum {..EN
0510: 41 42 4c 45 5f 50 52 4f 43 45 53 53 45 44 5f 49  ABLE_PROCESSED_I
0520: 4e 50 55 54 20 20 3d 20 31 2c 0a 09 45 4e 41 42  NPUT  = 1,..ENAB
0530: 4c 45 5f 4c 49 4e 45 5f 49 4e 50 55 54 20 20 20  LE_LINE_INPUT   
0540: 20 20 20 20 3d 20 32 2c 0a 09 45 4e 41 42 4c 45      = 2,..ENABLE
0550: 5f 45 43 48 4f 5f 49 4e 50 55 54 20 20 20 20 20  _ECHO_INPUT     
0560: 20 20 3d 20 34 2c 0a 09 45 4e 41 42 4c 45 5f 57    = 4,..ENABLE_W
0570: 49 4e 44 4f 57 5f 49 4e 50 55 54 20 20 20 20 20  INDOW_INPUT     
0580: 3d 20 38 2c 0a 09 45 4e 41 42 4c 45 5f 4d 4f 55  = 8,..ENABLE_MOU
0590: 53 45 5f 49 4e 50 55 54 20 20 20 20 20 20 3d 20  SE_INPUT      = 
05a0: 31 36 0a 7d 0a 0a 65 6e 75 6d 20 7b 0a 09 45 4e  16.}..enum {..EN
05b0: 41 42 4c 45 5f 50 52 4f 43 45 53 53 45 44 5f 4f  ABLE_PROCESSED_O
05c0: 55 54 50 55 54 20 20 20 20 3d 20 31 2c 0a 09 45  UTPUT    = 1,..E
05d0: 4e 41 42 4c 45 5f 57 52 41 50 5f 41 54 5f 45 4f  NABLE_WRAP_AT_EO
05e0: 4c 5f 4f 55 54 50 55 54 20 20 3d 20 32 0a 7d 0a  L_OUTPUT  = 2.}.
05f0: 0a 65 6e 75 6d 20 7b 0a 09 4b 45 59 5f 45 56 45  .enum {..KEY_EVE
0600: 4e 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20  NT              
0610: 20 20 20 3d 20 31 2c 0a 09 4d 4f 55 53 45 5f 45     = 1,..MOUSE_E
0620: 56 45 4e 54 20 20 20 20 20 20 20 20 20 20 20 20  VENT            
0630: 20 20 20 3d 20 32 2c 0a 09 57 49 4e 44 4f 57 5f     = 2,..WINDOW_
0640: 42 55 46 46 45 52 5f 53 49 5a 45 5f 45 56 45 4e  BUFFER_SIZE_EVEN
0650: 54 20 20 3d 20 34 2c 0a 09 4d 45 4e 55 5f 45 56  T  = 4,..MENU_EV
0660: 45 4e 54 20 20 20 20 20 20 20 20 20 20 20 20 20  ENT             
0670: 20 20 20 3d 20 38 2c 0a 09 46 4f 43 55 53 5f 45     = 8,..FOCUS_E
0680: 56 45 4e 54 20 20 20 20 20 20 20 20 20 20 20 20  VENT            
0690: 20 20 20 3d 20 31 36 0a 7d 0a 65 6e 75 6d 20 7b     = 16.}.enum {
06a0: 0a 09 52 49 47 48 54 5f 41 4c 54 5f 50 52 45 53  ..RIGHT_ALT_PRES
06b0: 53 45 44 20 20 3d 20 31 2c 0a 09 4c 45 46 54 5f  SED  = 1,..LEFT_
06c0: 41 4c 54 5f 50 52 45 53 53 45 44 20 20 20 3d 20  ALT_PRESSED   = 
06d0: 32 2c 0a 09 52 49 47 48 54 5f 43 54 52 4c 5f 50  2,..RIGHT_CTRL_P
06e0: 52 45 53 53 45 44 20 3d 20 34 2c 0a 09 4c 45 46  RESSED = 4,..LEF
06f0: 54 5f 43 54 52 4c 5f 50 52 45 53 53 45 44 20 20  T_CTRL_PRESSED  
0700: 3d 20 38 2c 0a 09 53 48 49 46 54 5f 50 52 45 53  = 8,..SHIFT_PRES
0710: 53 45 44 20 20 20 20 20 20 3d 20 31 36 2c 0a 09  SED      = 16,..
0720: 4e 55 4d 4c 4f 43 4b 5f 4f 4e 20 20 20 20 20 20  NUMLOCK_ON      
0730: 20 20 20 3d 20 33 32 2c 0a 09 53 43 52 4f 4c 4c     = 32,..SCROLL
0740: 4c 4f 43 4b 5f 4f 4e 20 20 20 20 20 20 3d 20 36  LOCK_ON      = 6
0750: 34 2c 0a 09 43 41 50 53 4c 4f 43 4b 5f 4f 4e 20  4,..CAPSLOCK_ON 
0760: 20 20 20 20 20 20 20 3d 20 31 32 38 2c 0a 09 45         = 128,..E
0770: 4e 48 41 4e 43 45 44 5f 4b 45 59 20 20 20 20 20  NHANCED_KEY     
0780: 20 20 3d 20 32 35 36 0a 7d 0a 65 6e 75 6d 20 7b    = 256.}.enum {
0790: 0a 09 46 52 4f 4d 5f 4c 45 46 54 5f 31 53 54 5f  ..FROM_LEFT_1ST_
07a0: 42 55 54 54 4f 4e 5f 50 52 45 53 53 45 44 20 20  BUTTON_PRESSED  
07b0: 3d 20 31 2c 0a 09 52 49 47 48 54 4d 4f 53 54 5f  = 1,..RIGHTMOST_
07c0: 42 55 54 54 4f 4e 5f 50 52 45 53 53 45 44 20 20  BUTTON_PRESSED  
07d0: 20 20 20 20 3d 20 32 2c 0a 09 46 52 4f 4d 5f 4c      = 2,..FROM_L
07e0: 45 46 54 5f 32 4e 44 5f 42 55 54 54 4f 4e 5f 50  EFT_2ND_BUTTON_P
07f0: 52 45 53 53 45 44 20 20 3d 20 34 2c 0a 09 46 52  RESSED  = 4,..FR
0800: 4f 4d 5f 4c 45 46 54 5f 33 52 44 5f 42 55 54 54  OM_LEFT_3RD_BUTT
0810: 4f 4e 5f 50 52 45 53 53 45 44 20 20 3d 20 38 2c  ON_PRESSED  = 8,
0820: 0a 09 46 52 4f 4d 5f 4c 45 46 54 5f 34 54 48 5f  ..FROM_LEFT_4TH_
0830: 42 55 54 54 4f 4e 5f 50 52 45 53 53 45 44 20 20  BUTTON_PRESSED  
0840: 3d 20 31 36 0a 7d 0a 0a 65 6e 75 6d 20 7b 0a 09  = 16.}..enum {..
0850: 4d 4f 55 53 45 5f 4d 4f 56 45 44 20 20 20 3d 20  MOUSE_MOVED   = 
0860: 31 2c 0a 09 44 4f 55 42 4c 45 5f 43 4c 49 43 4b  1,..DOUBLE_CLICK
0870: 20 20 3d 20 32 2c 0a 09 4d 4f 55 53 45 5f 57 48    = 2,..MOUSE_WH
0880: 45 45 4c 45 44 20 3d 20 34 0a 7d 0a 0a 73 74 72  EELED = 4.}..str
0890: 75 63 74 20 43 48 41 52 5f 49 4e 46 4f 20 7b 0a  uct CHAR_INFO {.
08a0: 09 75 6e 69 6f 6e 20 5f 43 68 61 72 20 7b 0a 09  .union _Char {..
08b0: 09 57 43 48 41 52 20 55 6e 69 63 6f 64 65 43 68  .WCHAR UnicodeCh
08c0: 61 72 3b 0a 09 09 43 48 41 52 20 41 73 63 69 69  ar;...CHAR Ascii
08d0: 43 68 61 72 3b 0a 09 7d 0a 09 5f 43 68 61 72 20  Char;..}.._Char 
08e0: 43 68 61 72 3b 09 0a 09 57 4f 52 44 20 41 74 74  Char;...WORD Att
08f0: 72 69 62 75 74 65 73 3b 0a 7d 0a 61 6c 69 61 73  ributes;.}.alias
0900: 20 43 48 41 52 5f 49 4e 46 4f 2a 20 50 43 48 41   CHAR_INFO* PCHA
0910: 52 5f 49 4e 46 4f 3b 0a 0a 73 74 72 75 63 74 20  R_INFO;..struct 
0920: 53 4d 41 4c 4c 5f 52 45 43 54 20 7b 0a 09 53 48  SMALL_RECT {..SH
0930: 4f 52 54 20 4c 65 66 74 3b 0a 09 53 48 4f 52 54  ORT Left;..SHORT
0940: 20 54 6f 70 3b 0a 09 53 48 4f 52 54 20 52 69 67   Top;..SHORT Rig
0950: 68 74 3b 0a 09 53 48 4f 52 54 20 42 6f 74 74 6f  ht;..SHORT Botto
0960: 6d 3b 0a 7d 0a 61 6c 69 61 73 20 53 4d 41 4c 4c  m;.}.alias SMALL
0970: 5f 52 45 43 54 2a 20 50 53 4d 41 4c 4c 5f 52 45  _RECT* PSMALL_RE
0980: 43 54 3b 0a 0a 73 74 72 75 63 74 20 43 4f 4e 53  CT;..struct CONS
0990: 4f 4c 45 5f 43 55 52 53 4f 52 5f 49 4e 46 4f 20  OLE_CURSOR_INFO 
09a0: 7b 0a 09 44 57 4f 52 44 20 64 77 53 69 7a 65 3b  {..DWORD dwSize;
09b0: 0a 09 42 4f 4f 4c 20 20 62 56 69 73 69 62 6c 65  ..BOOL  bVisible
09c0: 3b 0a 7d 0a 61 6c 69 61 73 20 43 4f 4e 53 4f 4c  ;.}.alias CONSOL
09d0: 45 5f 43 55 52 53 4f 52 5f 49 4e 46 4f 2a 20 50  E_CURSOR_INFO* P
09e0: 43 4f 4e 53 4f 4c 45 5f 43 55 52 53 4f 52 5f 49  CONSOLE_CURSOR_I
09f0: 4e 46 4f 3b 0a 0a 73 74 72 75 63 74 20 43 4f 4f  NFO;..struct COO
0a00: 52 44 20 7b 0a 09 53 48 4f 52 54 20 58 3b 0a 09  RD {..SHORT X;..
0a10: 53 48 4f 52 54 20 59 3b 0a 7d 0a 61 6c 69 61 73  SHORT Y;.}.alias
0a20: 20 43 4f 4f 52 44 2a 20 50 43 4f 4f 52 44 3b 0a   COORD* PCOORD;.
0a30: 0a 73 74 72 75 63 74 20 43 4f 4e 53 4f 4c 45 5f  .struct CONSOLE_
0a40: 46 4f 4e 54 5f 49 4e 46 4f 20 7b 0a 09 44 57 4f  FONT_INFO {..DWO
0a50: 52 44 20 6e 46 6f 6e 74 3b 0a 09 43 4f 4f 52 44  RD nFont;..COORD
0a60: 20 64 77 46 6f 6e 74 53 69 7a 65 3b 0a 7d 0a 61   dwFontSize;.}.a
0a70: 6c 69 61 73 20 43 4f 4e 53 4f 4c 45 5f 46 4f 4e  lias CONSOLE_FON
0a80: 54 5f 49 4e 46 4f 2a 20 50 43 4f 4e 53 4f 4c 45  T_INFO* PCONSOLE
0a90: 5f 46 4f 4e 54 5f 49 4e 46 4f 3b 0a 0a 73 74 72  _FONT_INFO;..str
0aa0: 75 63 74 20 43 4f 4e 53 4f 4c 45 5f 53 43 52 45  uct CONSOLE_SCRE
0ab0: 45 4e 5f 42 55 46 46 45 52 5f 49 4e 46 4f 20 7b  EN_BUFFER_INFO {
0ac0: 0a 09 43 4f 4f 52 44 20 20 20 20 20 20 64 77 53  ..COORD      dwS
0ad0: 69 7a 65 3b 0a 09 43 4f 4f 52 44 20 20 20 20 20  ize;..COORD     
0ae0: 20 64 77 43 75 72 73 6f 72 50 6f 73 69 74 69 6f   dwCursorPositio
0af0: 6e 3b 0a 09 57 4f 52 44 20 20 20 20 20 20 20 77  n;..WORD       w
0b00: 41 74 74 72 69 62 75 74 65 73 3b 0a 09 53 4d 41  Attributes;..SMA
0b10: 4c 4c 5f 52 45 43 54 20 73 72 57 69 6e 64 6f 77  LL_RECT srWindow
0b20: 3b 0a 09 43 4f 4f 52 44 20 20 20 20 20 20 64 77  ;..COORD      dw
0b30: 4d 61 78 69 6d 75 6d 57 69 6e 64 6f 77 53 69 7a  MaximumWindowSiz
0b40: 65 3b 0a 7d 0a 61 6c 69 61 73 20 43 4f 4e 53 4f  e;.}.alias CONSO
0b50: 4c 45 5f 53 43 52 45 45 4e 5f 42 55 46 46 45 52  LE_SCREEN_BUFFER
0b60: 5f 49 4e 46 4f 2a 20 50 43 4f 4e 53 4f 4c 45 5f  _INFO* PCONSOLE_
0b70: 53 43 52 45 45 4e 5f 42 55 46 46 45 52 5f 49 4e  SCREEN_BUFFER_IN
0b80: 46 4f 3b 0a 0a 61 6c 69 61 73 20 42 4f 4f 4c 20  FO;..alias BOOL 
0b90: 66 75 6e 63 74 69 6f 6e 28 44 57 4f 52 44 29 20  function(DWORD) 
0ba0: 50 48 41 4e 44 4c 45 52 5f 52 4f 55 54 49 4e 45  PHANDLER_ROUTINE
0bb0: 3b 0a 0a 73 74 72 75 63 74 20 4b 45 59 5f 45 56  ;..struct KEY_EV
0bc0: 45 4e 54 5f 52 45 43 4f 52 44 20 7b 0a 09 42 4f  ENT_RECORD {..BO
0bd0: 4f 4c 20 20 62 4b 65 79 44 6f 77 6e 3b 0a 09 57  OL  bKeyDown;..W
0be0: 4f 52 44 20 20 77 52 65 70 65 61 74 43 6f 75 6e  ORD  wRepeatCoun
0bf0: 74 3b 0a 09 57 4f 52 44 20 20 77 56 69 72 74 75  t;..WORD  wVirtu
0c00: 61 6c 4b 65 79 43 6f 64 65 3b 0a 09 57 4f 52 44  alKeyCode;..WORD
0c10: 20 20 77 56 69 72 74 75 61 6c 53 63 61 6e 43 6f    wVirtualScanCo
0c20: 64 65 3b 0a 09 75 6e 69 6f 6e 20 5f 75 43 68 61  de;..union _uCha
0c30: 72 20 7b 0a 09 09 57 43 48 41 52 20 55 6e 69 63  r {...WCHAR Unic
0c40: 6f 64 65 43 68 61 72 3b 0a 09 09 43 48 41 52 20  odeChar;...CHAR 
0c50: 20 41 73 63 69 69 43 68 61 72 3b 0a 09 7d 0a 09   AsciiChar;..}..
0c60: 5f 75 43 68 61 72 20 75 43 68 61 72 3b 09 0a 09  _uChar uChar;...
0c70: 44 57 4f 52 44 20 64 77 43 6f 6e 74 72 6f 6c 4b  DWORD dwControlK
0c80: 65 79 53 74 61 74 65 3b 0a 7d 0a 0a 73 74 72 75  eyState;.}..stru
0c90: 63 74 20 4d 4f 55 53 45 5f 45 56 45 4e 54 5f 52  ct MOUSE_EVENT_R
0ca0: 45 43 4f 52 44 20 7b 0a 09 43 4f 4f 52 44 20 64  ECORD {..COORD d
0cb0: 77 4d 6f 75 73 65 50 6f 73 69 74 69 6f 6e 3b 0a  wMousePosition;.
0cc0: 09 44 57 4f 52 44 20 64 77 42 75 74 74 6f 6e 53  .DWORD dwButtonS
0cd0: 74 61 74 65 3b 0a 09 44 57 4f 52 44 20 64 77 43  tate;..DWORD dwC
0ce0: 6f 6e 74 72 6f 6c 4b 65 79 53 74 61 74 65 3b 0a  ontrolKeyState;.
0cf0: 09 44 57 4f 52 44 20 64 77 45 76 65 6e 74 46 6c  .DWORD dwEventFl
0d00: 61 67 73 3b 0a 7d 0a 0a 73 74 72 75 63 74 20 57  ags;.}..struct W
0d10: 49 4e 44 4f 57 5f 42 55 46 46 45 52 5f 53 49 5a  INDOW_BUFFER_SIZ
0d20: 45 5f 52 45 43 4f 52 44 20 7b 0a 09 43 4f 4f 52  E_RECORD {..COOR
0d30: 44 20 64 77 53 69 7a 65 3b 0a 7d 0a 0a 73 74 72  D dwSize;.}..str
0d40: 75 63 74 20 4d 45 4e 55 5f 45 56 45 4e 54 5f 52  uct MENU_EVENT_R
0d50: 45 43 4f 52 44 20 7b 0a 09 55 49 4e 54 20 64 77  ECORD {..UINT dw
0d60: 43 6f 6d 6d 61 6e 64 49 64 3b 0a 7d 0a 61 6c 69  CommandId;.}.ali
0d70: 61 73 20 4d 45 4e 55 5f 45 56 45 4e 54 5f 52 45  as MENU_EVENT_RE
0d80: 43 4f 52 44 2a 20 50 4d 45 4e 55 5f 45 56 45 4e  CORD* PMENU_EVEN
0d90: 54 5f 52 45 43 4f 52 44 3b 0a 0a 73 74 72 75 63  T_RECORD;..struc
0da0: 74 20 46 4f 43 55 53 5f 45 56 45 4e 54 5f 52 45  t FOCUS_EVENT_RE
0db0: 43 4f 52 44 20 7b 0a 09 42 4f 4f 4c 20 62 53 65  CORD {..BOOL bSe
0dc0: 74 46 6f 63 75 73 3b 0a 7d 0a 0a 73 74 72 75 63  tFocus;.}..struc
0dd0: 74 20 49 4e 50 55 54 5f 52 45 43 4f 52 44 20 7b  t INPUT_RECORD {
0de0: 0a 09 57 4f 52 44 20 45 76 65 6e 74 54 79 70 65  ..WORD EventType
0df0: 3b 0a 09 75 6e 69 6f 6e 20 5f 45 76 65 6e 74 20  ;..union _Event 
0e00: 7b 0a 09 09 4b 45 59 5f 45 56 45 4e 54 5f 52 45  {...KEY_EVENT_RE
0e10: 43 4f 52 44 20 4b 65 79 45 76 65 6e 74 3b 0a 09  CORD KeyEvent;..
0e20: 09 4d 4f 55 53 45 5f 45 56 45 4e 54 5f 52 45 43  .MOUSE_EVENT_REC
0e30: 4f 52 44 20 4d 6f 75 73 65 45 76 65 6e 74 3b 0a  ORD MouseEvent;.
0e40: 09 09 57 49 4e 44 4f 57 5f 42 55 46 46 45 52 5f  ..WINDOW_BUFFER_
0e50: 53 49 5a 45 5f 52 45 43 4f 52 44 20 57 69 6e 64  SIZE_RECORD Wind
0e60: 6f 77 42 75 66 66 65 72 53 69 7a 65 45 76 65 6e  owBufferSizeEven
0e70: 74 3b 0a 09 09 4d 45 4e 55 5f 45 56 45 4e 54 5f  t;...MENU_EVENT_
0e80: 52 45 43 4f 52 44 20 4d 65 6e 75 45 76 65 6e 74  RECORD MenuEvent
0e90: 3b 0a 09 09 46 4f 43 55 53 5f 45 56 45 4e 54 5f  ;...FOCUS_EVENT_
0ea0: 52 45 43 4f 52 44 20 46 6f 63 75 73 45 76 65 6e  RECORD FocusEven
0eb0: 74 3b 0a 09 7d 0a 09 5f 45 76 65 6e 74 20 45 76  t;..}.._Event Ev
0ec0: 65 6e 74 3b 09 0a 7d 0a 61 6c 69 61 73 20 49 4e  ent;..}.alias IN
0ed0: 50 55 54 5f 52 45 43 4f 52 44 2a 20 50 49 4e 50  PUT_RECORD* PINP
0ee0: 55 54 5f 52 45 43 4f 52 44 3b 0a 0a 65 78 74 65  UT_RECORD;..exte
0ef0: 72 6e 20 28 57 69 6e 64 6f 77 73 29 3a 0a 0a 42  rn (Windows):..B
0f00: 4f 4f 4c 20 41 6c 6c 6f 63 43 6f 6e 73 6f 6c 65  OOL AllocConsole
0f10: 28 29 3b 0a 48 41 4e 44 4c 45 20 43 72 65 61 74  ();.HANDLE Creat
0f20: 65 43 6f 6e 73 6f 6c 65 53 63 72 65 65 6e 42 75  eConsoleScreenBu
0f30: 66 66 65 72 28 44 57 4f 52 44 2c 20 44 57 4f 52  ffer(DWORD, DWOR
0f40: 44 2c 20 53 45 43 55 52 49 54 59 5f 41 54 54 52  D, SECURITY_ATTR
0f50: 49 42 55 54 45 53 2a 2c 20 44 57 4f 52 44 2c 20  IBUTES*, DWORD, 
0f60: 4c 50 56 4f 49 44 29 3b 0a 42 4f 4f 4c 20 46 69  LPVOID);.BOOL Fi
0f70: 6c 6c 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 41  llConsoleOutputA
0f80: 74 74 72 69 62 75 74 65 28 48 41 4e 44 4c 45 2c  ttribute(HANDLE,
0f90: 20 57 4f 52 44 2c 20 44 57 4f 52 44 2c 20 43 4f   WORD, DWORD, CO
0fa0: 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b 0a 42 4f  ORD, PDWORD);.BO
0fb0: 4f 4c 20 46 69 6c 6c 43 6f 6e 73 6f 6c 65 4f 75  OL FillConsoleOu
0fc0: 74 70 75 74 43 68 61 72 61 63 74 65 72 41 28 48  tputCharacterA(H
0fd0: 41 4e 44 4c 45 2c 20 43 48 41 52 2c 20 44 57 4f  ANDLE, CHAR, DWO
0fe0: 52 44 2c 20 43 4f 4f 52 44 2c 20 50 44 57 4f 52  RD, COORD, PDWOR
0ff0: 44 29 3b 0a 42 4f 4f 4c 20 46 69 6c 6c 43 6f 6e  D);.BOOL FillCon
1000: 73 6f 6c 65 4f 75 74 70 75 74 43 68 61 72 61 63  soleOutputCharac
1010: 74 65 72 57 28 48 41 4e 44 4c 45 2c 20 57 43 48  terW(HANDLE, WCH
1020: 41 52 2c 20 44 57 4f 52 44 2c 20 43 4f 4f 52 44  AR, DWORD, COORD
1030: 2c 20 50 44 57 4f 52 44 29 3b 0a 42 4f 4f 4c 20  , PDWORD);.BOOL 
1040: 46 6c 75 73 68 43 6f 6e 73 6f 6c 65 49 6e 70 75  FlushConsoleInpu
1050: 74 42 75 66 66 65 72 28 48 41 4e 44 4c 45 29 3b  tBuffer(HANDLE);
1060: 0a 42 4f 4f 4c 20 46 72 65 65 43 6f 6e 73 6f 6c  .BOOL FreeConsol
1070: 65 28 29 3b 0a 42 4f 4f 4c 20 47 65 6e 65 72 61  e();.BOOL Genera
1080: 74 65 43 6f 6e 73 6f 6c 65 43 74 72 6c 45 76 65  teConsoleCtrlEve
1090: 6e 74 28 44 57 4f 52 44 2c 20 44 57 4f 52 44 29  nt(DWORD, DWORD)
10a0: 3b 0a 55 49 4e 54 20 47 65 74 43 6f 6e 73 6f 6c  ;.UINT GetConsol
10b0: 65 43 50 28 29 3b 0a 42 4f 4f 4c 20 47 65 74 43  eCP();.BOOL GetC
10c0: 6f 6e 73 6f 6c 65 43 75 72 73 6f 72 49 6e 66 6f  onsoleCursorInfo
10d0: 28 48 41 4e 44 4c 45 2c 20 50 43 4f 4e 53 4f 4c  (HANDLE, PCONSOL
10e0: 45 5f 43 55 52 53 4f 52 5f 49 4e 46 4f 29 3b 0a  E_CURSOR_INFO);.
10f0: 42 4f 4f 4c 20 47 65 74 43 6f 6e 73 6f 6c 65 4d  BOOL GetConsoleM
1100: 6f 64 65 28 48 41 4e 44 4c 45 2c 50 44 57 4f 52  ode(HANDLE,PDWOR
1110: 44 29 3b 0a 55 49 4e 54 20 47 65 74 43 6f 6e 73  D);.UINT GetCons
1120: 6f 6c 65 4f 75 74 70 75 74 43 50 28 29 3b 0a 42  oleOutputCP();.B
1130: 4f 4f 4c 20 47 65 74 43 6f 6e 73 6f 6c 65 53 63  OOL GetConsoleSc
1140: 72 65 65 6e 42 75 66 66 65 72 49 6e 66 6f 28 48  reenBufferInfo(H
1150: 41 4e 44 4c 45 2c 20 50 43 4f 4e 53 4f 4c 45 5f  ANDLE, PCONSOLE_
1160: 53 43 52 45 45 4e 5f 42 55 46 46 45 52 5f 49 4e  SCREEN_BUFFER_IN
1170: 46 4f 29 3b 0a 44 57 4f 52 44 20 47 65 74 43 6f  FO);.DWORD GetCo
1180: 6e 73 6f 6c 65 54 69 74 6c 65 41 28 4c 50 53 54  nsoleTitleA(LPST
1190: 52 2c 20 44 57 4f 52 44 29 3b 0a 44 57 4f 52 44  R, DWORD);.DWORD
11a0: 20 47 65 74 43 6f 6e 73 6f 6c 65 54 69 74 6c 65   GetConsoleTitle
11b0: 57 28 4c 50 57 53 54 52 2c 20 44 57 4f 52 44 29  W(LPWSTR, DWORD)
11c0: 3b 0a 43 4f 4f 52 44 20 47 65 74 4c 61 72 67 65  ;.COORD GetLarge
11d0: 73 74 43 6f 6e 73 6f 6c 65 57 69 6e 64 6f 77 53  stConsoleWindowS
11e0: 69 7a 65 28 48 41 4e 44 4c 45 29 3b 0a 42 4f 4f  ize(HANDLE);.BOO
11f0: 4c 20 47 65 74 4e 75 6d 62 65 72 4f 66 43 6f 6e  L GetNumberOfCon
1200: 73 6f 6c 65 49 6e 70 75 74 45 76 65 6e 74 73 28  soleInputEvents(
1210: 48 41 4e 44 4c 45 2c 20 50 44 57 4f 52 44 29 3b  HANDLE, PDWORD);
1220: 0a 42 4f 4f 4c 20 47 65 74 4e 75 6d 62 65 72 4f  .BOOL GetNumberO
1230: 66 43 6f 6e 73 6f 6c 65 4d 6f 75 73 65 42 75 74  fConsoleMouseBut
1240: 74 6f 6e 73 28 50 44 57 4f 52 44 29 3b 0a 42 4f  tons(PDWORD);.BO
1250: 4f 4c 20 50 65 65 6b 43 6f 6e 73 6f 6c 65 49 6e  OL PeekConsoleIn
1260: 70 75 74 41 28 48 41 4e 44 4c 45 2c 20 50 49 4e  putA(HANDLE, PIN
1270: 50 55 54 5f 52 45 43 4f 52 44 2c 20 44 57 4f 52  PUT_RECORD, DWOR
1280: 44 2c 20 50 44 57 4f 52 44 29 3b 0a 42 4f 4f 4c  D, PDWORD);.BOOL
1290: 20 50 65 65 6b 43 6f 6e 73 6f 6c 65 49 6e 70 75   PeekConsoleInpu
12a0: 74 57 28 48 41 4e 44 4c 45 2c 20 50 49 4e 50 55  tW(HANDLE, PINPU
12b0: 54 5f 52 45 43 4f 52 44 2c 20 44 57 4f 52 44 2c  T_RECORD, DWORD,
12c0: 20 50 44 57 4f 52 44 29 3b 0a 42 4f 4f 4c 20 52   PDWORD);.BOOL R
12d0: 65 61 64 43 6f 6e 73 6f 6c 65 41 28 48 41 4e 44  eadConsoleA(HAND
12e0: 4c 45 2c 20 50 56 4f 49 44 2c 20 44 57 4f 52 44  LE, PVOID, DWORD
12f0: 2c 20 50 44 57 4f 52 44 2c 20 50 56 4f 49 44 29  , PDWORD, PVOID)
1300: 3b 0a 42 4f 4f 4c 20 52 65 61 64 43 6f 6e 73 6f  ;.BOOL ReadConso
1310: 6c 65 57 28 48 41 4e 44 4c 45 2c 20 50 56 4f 49  leW(HANDLE, PVOI
1320: 44 2c 20 44 57 4f 52 44 2c 20 50 44 57 4f 52 44  D, DWORD, PDWORD
1330: 2c 20 50 56 4f 49 44 29 3b 0a 42 4f 4f 4c 20 52  , PVOID);.BOOL R
1340: 65 61 64 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 41  eadConsoleInputA
1350: 28 48 41 4e 44 4c 45 2c 20 50 49 4e 50 55 54 5f  (HANDLE, PINPUT_
1360: 52 45 43 4f 52 44 2c 20 44 57 4f 52 44 2c 20 50  RECORD, DWORD, P
1370: 44 57 4f 52 44 29 3b 0a 42 4f 4f 4c 20 52 65 61  DWORD);.BOOL Rea
1380: 64 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 57 28 48  dConsoleInputW(H
1390: 41 4e 44 4c 45 2c 20 50 49 4e 50 55 54 5f 52 45  ANDLE, PINPUT_RE
13a0: 43 4f 52 44 2c 20 44 57 4f 52 44 2c 20 50 44 57  CORD, DWORD, PDW
13b0: 4f 52 44 29 3b 0a 42 4f 4f 4c 20 52 65 61 64 43  ORD);.BOOL ReadC
13c0: 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 41 74 74 72  onsoleOutputAttr
13d0: 69 62 75 74 65 28 48 41 4e 44 4c 45 2c 20 4c 50  ibute(HANDLE, LP
13e0: 57 4f 52 44 2c 20 44 57 4f 52 44 2c 20 43 4f 4f  WORD, DWORD, COO
13f0: 52 44 2c 20 4c 50 44 57 4f 52 44 29 3b 0a 42 4f  RD, LPDWORD);.BO
1400: 4f 4c 20 52 65 61 64 43 6f 6e 73 6f 6c 65 4f 75  OL ReadConsoleOu
1410: 74 70 75 74 43 68 61 72 61 63 74 65 72 41 28 48  tputCharacterA(H
1420: 41 4e 44 4c 45 2c 20 4c 50 53 54 52 2c 20 44 57  ANDLE, LPSTR, DW
1430: 4f 52 44 2c 20 43 4f 4f 52 44 2c 20 50 44 57 4f  ORD, COORD, PDWO
1440: 52 44 29 3b 0a 42 4f 4f 4c 20 52 65 61 64 43 6f  RD);.BOOL ReadCo
1450: 6e 73 6f 6c 65 4f 75 74 70 75 74 43 68 61 72 61  nsoleOutputChara
1460: 63 74 65 72 57 28 48 41 4e 44 4c 45 2c 20 4c 50  cterW(HANDLE, LP
1470: 57 53 54 52 2c 20 44 57 4f 52 44 2c 20 43 4f 4f  WSTR, DWORD, COO
1480: 52 44 2c 20 50 44 57 4f 52 44 29 3b 0a 42 4f 4f  RD, PDWORD);.BOO
1490: 4c 20 52 65 61 64 43 6f 6e 73 6f 6c 65 4f 75 74  L ReadConsoleOut
14a0: 70 75 74 41 28 48 41 4e 44 4c 45 2c 20 50 43 48  putA(HANDLE, PCH
14b0: 41 52 5f 49 4e 46 4f 2c 20 43 4f 4f 52 44 2c 20  AR_INFO, COORD, 
14c0: 43 4f 4f 52 44 2c 20 50 53 4d 41 4c 4c 5f 52 45  COORD, PSMALL_RE
14d0: 43 54 29 3b 0a 42 4f 4f 4c 20 52 65 61 64 43 6f  CT);.BOOL ReadCo
14e0: 6e 73 6f 6c 65 4f 75 74 70 75 74 57 28 48 41 4e  nsoleOutputW(HAN
14f0: 44 4c 45 2c 20 50 43 48 41 52 5f 49 4e 46 4f 2c  DLE, PCHAR_INFO,
1500: 20 43 4f 4f 52 44 2c 20 43 4f 4f 52 44 2c 20 50   COORD, COORD, P
1510: 53 4d 41 4c 4c 5f 52 45 43 54 29 3b 0a 42 4f 4f  SMALL_RECT);.BOO
1520: 4c 20 53 63 72 6f 6c 6c 43 6f 6e 73 6f 6c 65 53  L ScrollConsoleS
1530: 63 72 65 65 6e 42 75 66 66 65 72 41 28 48 41 4e  creenBufferA(HAN
1540: 44 4c 45 2c 20 43 50 74 72 21 28 53 4d 41 4c 4c  DLE, CPtr!(SMALL
1550: 5f 52 45 43 54 29 2c 20 43 50 74 72 21 28 53 4d  _RECT), CPtr!(SM
1560: 41 4c 4c 5f 52 45 43 54 29 2c 20 43 4f 4f 52 44  ALL_RECT), COORD
1570: 2c 20 43 50 74 72 21 28 43 48 41 52 5f 49 4e 46  , CPtr!(CHAR_INF
1580: 4f 29 29 3b 0a 42 4f 4f 4c 20 53 63 72 6f 6c 6c  O));.BOOL Scroll
1590: 43 6f 6e 73 6f 6c 65 53 63 72 65 65 6e 42 75 66  ConsoleScreenBuf
15a0: 66 65 72 57 28 48 41 4e 44 4c 45 2c 20 43 50 74  ferW(HANDLE, CPt
15b0: 72 21 28 53 4d 41 4c 4c 5f 52 45 43 54 29 2c 20  r!(SMALL_RECT), 
15c0: 43 50 74 72 21 28 53 4d 41 4c 4c 5f 52 45 43 54  CPtr!(SMALL_RECT
15d0: 29 2c 20 43 4f 4f 52 44 2c 20 43 50 74 72 21 28  ), COORD, CPtr!(
15e0: 43 48 41 52 5f 49 4e 46 4f 29 29 3b 0a 42 4f 4f  CHAR_INFO));.BOO
15f0: 4c 20 53 65 74 43 6f 6e 73 6f 6c 65 41 63 74 69  L SetConsoleActi
1600: 76 65 53 63 72 65 65 6e 42 75 66 66 65 72 28 48  veScreenBuffer(H
1610: 41 4e 44 4c 45 29 3b 0a 42 4f 4f 4c 20 53 65 74  ANDLE);.BOOL Set
1620: 43 6f 6e 73 6f 6c 65 43 50 28 55 49 4e 54 29 3b  ConsoleCP(UINT);
1630: 0a 42 4f 4f 4c 20 53 65 74 43 6f 6e 73 6f 6c 65  .BOOL SetConsole
1640: 43 74 72 6c 48 61 6e 64 6c 65 72 28 50 48 41 4e  CtrlHandler(PHAN
1650: 44 4c 45 52 5f 52 4f 55 54 49 4e 45 2c 20 42 4f  DLER_ROUTINE, BO
1660: 4f 4c 29 3b 0a 42 4f 4f 4c 20 53 65 74 43 6f 6e  OL);.BOOL SetCon
1670: 73 6f 6c 65 43 75 72 73 6f 72 49 6e 66 6f 28 48  soleCursorInfo(H
1680: 41 4e 44 4c 45 2c 20 43 50 74 72 21 28 43 4f 4e  ANDLE, CPtr!(CON
1690: 53 4f 4c 45 5f 43 55 52 53 4f 52 5f 49 4e 46 4f  SOLE_CURSOR_INFO
16a0: 29 29 3b 0a 42 4f 4f 4c 20 53 65 74 43 6f 6e 73  ));.BOOL SetCons
16b0: 6f 6c 65 43 75 72 73 6f 72 50 6f 73 69 74 69 6f  oleCursorPositio
16c0: 6e 28 48 41 4e 44 4c 45 2c 20 43 4f 4f 52 44 29  n(HANDLE, COORD)
16d0: 3b 0a 0a 0a 73 74 61 74 69 63 20 69 66 20 28 5f  ;...static if (_
16e0: 57 49 4e 33 32 5f 57 49 4e 4e 54 20 3e 3d 20 30  WIN32_WINNT >= 0
16f0: 78 30 35 30 30 29 20 7b 0a 42 4f 4f 4c 20 47 65  x0500) {.BOOL Ge
1700: 74 43 6f 6e 73 6f 6c 65 44 69 73 70 6c 61 79 4d  tConsoleDisplayM
1710: 6f 64 65 28 4c 50 44 57 4f 52 44 29 3b 0a 48 57  ode(LPDWORD);.HW
1720: 4e 44 20 47 65 74 43 6f 6e 73 6f 6c 65 57 69 6e  ND GetConsoleWin
1730: 64 6f 77 28 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  dow();.}..static
1740: 20 69 66 20 28 5f 57 49 4e 33 32 5f 57 49 4e 4e   if (_WIN32_WINN
1750: 54 20 3e 3d 20 30 78 30 35 30 31 29 20 7b 0a 42  T >= 0x0501) {.B
1760: 4f 4f 4c 20 41 74 74 61 63 68 43 6f 6e 73 6f 6c  OOL AttachConsol
1770: 65 28 44 57 4f 52 44 29 3b 0a 42 4f 4f 4c 20 53  e(DWORD);.BOOL S
1780: 65 74 43 6f 6e 73 6f 6c 65 44 69 73 70 6c 61 79  etConsoleDisplay
1790: 4d 6f 64 65 28 48 41 4e 44 4c 45 2c 20 44 57 4f  Mode(HANDLE, DWO
17a0: 52 44 2c 20 50 43 4f 4f 52 44 29 3b 0a 63 6f 6e  RD, PCOORD);.con
17b0: 73 74 20 44 57 4f 52 44 20 41 54 54 41 43 48 5f  st DWORD ATTACH_
17c0: 50 41 52 45 4e 54 5f 50 52 4f 43 45 53 53 20 3d  PARENT_PROCESS =
17d0: 20 63 61 73 74 28 44 57 4f 52 44 29 2d 31 3b 0a   cast(DWORD)-1;.
17e0: 7d 0a 0a 42 4f 4f 4c 20 53 65 74 43 6f 6e 73 6f  }..BOOL SetConso
17f0: 6c 65 4d 6f 64 65 28 48 41 4e 44 4c 45 2c 20 44  leMode(HANDLE, D
1800: 57 4f 52 44 29 3b 0a 42 4f 4f 4c 20 53 65 74 43  WORD);.BOOL SetC
1810: 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 43 50 28 55  onsoleOutputCP(U
1820: 49 4e 54 29 3b 0a 42 4f 4f 4c 20 53 65 74 43 6f  INT);.BOOL SetCo
1830: 6e 73 6f 6c 65 53 63 72 65 65 6e 42 75 66 66 65  nsoleScreenBuffe
1840: 72 53 69 7a 65 28 48 41 4e 44 4c 45 2c 20 43 4f  rSize(HANDLE, CO
1850: 4f 52 44 29 3b 0a 42 4f 4f 4c 20 53 65 74 43 6f  ORD);.BOOL SetCo
1860: 6e 73 6f 6c 65 54 65 78 74 41 74 74 72 69 62 75  nsoleTextAttribu
1870: 74 65 28 48 41 4e 44 4c 45 2c 20 57 4f 52 44 29  te(HANDLE, WORD)
1880: 3b 0a 42 4f 4f 4c 20 53 65 74 43 6f 6e 73 6f 6c  ;.BOOL SetConsol
1890: 65 54 69 74 6c 65 41 28 4c 50 43 53 54 52 29 3b  eTitleA(LPCSTR);
18a0: 0a 42 4f 4f 4c 20 53 65 74 43 6f 6e 73 6f 6c 65  .BOOL SetConsole
18b0: 54 69 74 6c 65 57 28 4c 50 43 57 53 54 52 29 3b  TitleW(LPCWSTR);
18c0: 0a 42 4f 4f 4c 20 53 65 74 43 6f 6e 73 6f 6c 65  .BOOL SetConsole
18d0: 57 69 6e 64 6f 77 49 6e 66 6f 28 48 41 4e 44 4c  WindowInfo(HANDL
18e0: 45 2c 20 42 4f 4f 4c 2c 20 43 50 74 72 21 28 53  E, BOOL, CPtr!(S
18f0: 4d 41 4c 4c 5f 52 45 43 54 29 29 3b 0a 42 4f 4f  MALL_RECT));.BOO
1900: 4c 20 57 72 69 74 65 43 6f 6e 73 6f 6c 65 41 28  L WriteConsoleA(
1910: 48 41 4e 44 4c 45 2c 20 50 43 56 4f 49 44 2c 20  HANDLE, PCVOID, 
1920: 44 57 4f 52 44 2c 20 50 44 57 4f 52 44 2c 20 50  DWORD, PDWORD, P
1930: 56 4f 49 44 29 3b 0a 42 4f 4f 4c 20 57 72 69 74  VOID);.BOOL Writ
1940: 65 43 6f 6e 73 6f 6c 65 57 28 48 41 4e 44 4c 45  eConsoleW(HANDLE
1950: 2c 20 50 43 56 4f 49 44 2c 20 44 57 4f 52 44 2c  , PCVOID, DWORD,
1960: 20 50 44 57 4f 52 44 2c 20 50 56 4f 49 44 29 3b   PDWORD, PVOID);
1970: 0a 42 4f 4f 4c 20 57 72 69 74 65 43 6f 6e 73 6f  .BOOL WriteConso
1980: 6c 65 49 6e 70 75 74 41 28 48 41 4e 44 4c 45 2c  leInputA(HANDLE,
1990: 20 43 50 74 72 21 28 49 4e 50 55 54 5f 52 45 43   CPtr!(INPUT_REC
19a0: 4f 52 44 29 2c 20 44 57 4f 52 44 2c 20 50 44 57  ORD), DWORD, PDW
19b0: 4f 52 44 29 3b 0a 42 4f 4f 4c 20 57 72 69 74 65  ORD);.BOOL Write
19c0: 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 57 28 48 41  ConsoleInputW(HA
19d0: 4e 44 4c 45 2c 20 43 50 74 72 21 28 49 4e 50 55  NDLE, CPtr!(INPU
19e0: 54 5f 52 45 43 4f 52 44 29 2c 20 44 57 4f 52 44  T_RECORD), DWORD
19f0: 2c 20 50 44 57 4f 52 44 29 3b 0a 42 4f 4f 4c 20  , PDWORD);.BOOL 
1a00: 57 72 69 74 65 43 6f 6e 73 6f 6c 65 4f 75 74 70  WriteConsoleOutp
1a10: 75 74 41 28 48 41 4e 44 4c 45 2c 20 43 50 74 72  utA(HANDLE, CPtr
1a20: 21 28 43 48 41 52 5f 49 4e 46 4f 29 2c 20 43 4f  !(CHAR_INFO), CO
1a30: 4f 52 44 2c 20 43 4f 4f 52 44 2c 20 50 53 4d 41  ORD, COORD, PSMA
1a40: 4c 4c 5f 52 45 43 54 29 3b 0a 42 4f 4f 4c 20 57  LL_RECT);.BOOL W
1a50: 72 69 74 65 43 6f 6e 73 6f 6c 65 4f 75 74 70 75  riteConsoleOutpu
1a60: 74 57 28 48 41 4e 44 4c 45 2c 20 43 50 74 72 21  tW(HANDLE, CPtr!
1a70: 28 43 48 41 52 5f 49 4e 46 4f 29 2c 20 43 4f 4f  (CHAR_INFO), COO
1a80: 52 44 2c 20 43 4f 4f 52 44 2c 20 50 53 4d 41 4c  RD, COORD, PSMAL
1a90: 4c 5f 52 45 43 54 29 3b 0a 42 4f 4f 4c 20 57 72  L_RECT);.BOOL Wr
1aa0: 69 74 65 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74  iteConsoleOutput
1ab0: 41 74 74 72 69 62 75 74 65 28 48 41 4e 44 4c 45  Attribute(HANDLE
1ac0: 2c 20 43 50 74 72 21 28 57 4f 52 44 29 2c 20 44  , CPtr!(WORD), D
1ad0: 57 4f 52 44 2c 20 43 4f 4f 52 44 2c 20 50 44 57  WORD, COORD, PDW
1ae0: 4f 52 44 29 3b 0a 42 4f 4f 4c 20 57 72 69 74 65  ORD);.BOOL Write
1af0: 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 43 68 61  ConsoleOutputCha
1b00: 72 61 63 74 65 72 41 28 48 41 4e 44 4c 45 2c 20  racterA(HANDLE, 
1b10: 4c 50 43 53 54 52 2c 20 44 57 4f 52 44 2c 20 43  LPCSTR, DWORD, C
1b20: 4f 4f 52 44 2c 20 50 44 57 4f 52 44 29 3b 0a 42  OORD, PDWORD);.B
1b30: 4f 4f 4c 20 57 72 69 74 65 43 6f 6e 73 6f 6c 65  OOL WriteConsole
1b40: 4f 75 74 70 75 74 43 68 61 72 61 63 74 65 72 57  OutputCharacterW
1b50: 28 48 41 4e 44 4c 45 2c 20 4c 50 43 57 53 54 52  (HANDLE, LPCWSTR
1b60: 2c 20 44 57 4f 52 44 2c 20 43 4f 4f 52 44 2c 20  , DWORD, COORD, 
1b70: 50 44 57 4f 52 44 29 3b 0a 0a 76 65 72 73 69 6f  PDWORD);..versio
1b80: 6e 20 28 55 6e 69 63 6f 64 65 29 20 7b 0a 09 61  n (Unicode) {..a
1b90: 6c 69 61 73 20 46 69 6c 6c 43 6f 6e 73 6f 6c 65  lias FillConsole
1ba0: 4f 75 74 70 75 74 43 68 61 72 61 63 74 65 72 57  OutputCharacterW
1bb0: 20 46 69 6c 6c 43 6f 6e 73 6f 6c 65 4f 75 74 70   FillConsoleOutp
1bc0: 75 74 43 68 61 72 61 63 74 65 72 3b 0a 09 61 6c  utCharacter;..al
1bd0: 69 61 73 20 47 65 74 43 6f 6e 73 6f 6c 65 54 69  ias GetConsoleTi
1be0: 74 6c 65 57 20 47 65 74 43 6f 6e 73 6f 6c 65 54  tleW GetConsoleT
1bf0: 69 74 6c 65 3b 0a 09 61 6c 69 61 73 20 50 65 65  itle;..alias Pee
1c00: 6b 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 57 20 50  kConsoleInputW P
1c10: 65 65 6b 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 3b  eekConsoleInput;
1c20: 0a 09 61 6c 69 61 73 20 52 65 61 64 43 6f 6e 73  ..alias ReadCons
1c30: 6f 6c 65 57 20 52 65 61 64 43 6f 6e 73 6f 6c 65  oleW ReadConsole
1c40: 3b 0a 09 61 6c 69 61 73 20 52 65 61 64 43 6f 6e  ;..alias ReadCon
1c50: 73 6f 6c 65 49 6e 70 75 74 57 20 52 65 61 64 43  soleInputW ReadC
1c60: 6f 6e 73 6f 6c 65 49 6e 70 75 74 3b 0a 09 61 6c  onsoleInput;..al
1c70: 69 61 73 20 52 65 61 64 43 6f 6e 73 6f 6c 65 4f  ias ReadConsoleO
1c80: 75 74 70 75 74 57 20 52 65 61 64 43 6f 6e 73 6f  utputW ReadConso
1c90: 6c 65 4f 75 74 70 75 74 3b 0a 09 61 6c 69 61 73  leOutput;..alias
1ca0: 20 52 65 61 64 43 6f 6e 73 6f 6c 65 4f 75 74 70   ReadConsoleOutp
1cb0: 75 74 43 68 61 72 61 63 74 65 72 57 20 52 65 61  utCharacterW Rea
1cc0: 64 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 43 68  dConsoleOutputCh
1cd0: 61 72 61 63 74 65 72 3b 0a 09 61 6c 69 61 73 20  aracter;..alias 
1ce0: 53 63 72 6f 6c 6c 43 6f 6e 73 6f 6c 65 53 63 72  ScrollConsoleScr
1cf0: 65 65 6e 42 75 66 66 65 72 57 20 53 63 72 6f 6c  eenBufferW Scrol
1d00: 6c 43 6f 6e 73 6f 6c 65 53 63 72 65 65 6e 42 75  lConsoleScreenBu
1d10: 66 66 65 72 3b 0a 09 61 6c 69 61 73 20 53 65 74  ffer;..alias Set
1d20: 43 6f 6e 73 6f 6c 65 54 69 74 6c 65 57 20 53 65  ConsoleTitleW Se
1d30: 74 43 6f 6e 73 6f 6c 65 54 69 74 6c 65 3b 0a 09  tConsoleTitle;..
1d40: 61 6c 69 61 73 20 57 72 69 74 65 43 6f 6e 73 6f  alias WriteConso
1d50: 6c 65 57 20 57 72 69 74 65 43 6f 6e 73 6f 6c 65  leW WriteConsole
1d60: 3b 0a 09 61 6c 69 61 73 20 57 72 69 74 65 43 6f  ;..alias WriteCo
1d70: 6e 73 6f 6c 65 49 6e 70 75 74 57 20 57 72 69 74  nsoleInputW Writ
1d80: 65 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 3b 0a 09  eConsoleInput;..
1d90: 61 6c 69 61 73 20 57 72 69 74 65 43 6f 6e 73 6f  alias WriteConso
1da0: 6c 65 4f 75 74 70 75 74 57 20 57 72 69 74 65 43  leOutputW WriteC
1db0: 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 3b 0a 09 61  onsoleOutput;..a
1dc0: 6c 69 61 73 20 57 72 69 74 65 43 6f 6e 73 6f 6c  lias WriteConsol
1dd0: 65 4f 75 74 70 75 74 43 68 61 72 61 63 74 65 72  eOutputCharacter
1de0: 57 20 57 72 69 74 65 43 6f 6e 73 6f 6c 65 4f 75  W WriteConsoleOu
1df0: 74 70 75 74 43 68 61 72 61 63 74 65 72 3b 0a 7d  tputCharacter;.}
1e00: 20 65 6c 73 65 20 7b 0a 09 61 6c 69 61 73 20 46   else {..alias F
1e10: 69 6c 6c 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74  illConsoleOutput
1e20: 43 68 61 72 61 63 74 65 72 41 20 46 69 6c 6c 43  CharacterA FillC
1e30: 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 43 68 61 72  onsoleOutputChar
1e40: 61 63 74 65 72 3b 0a 09 61 6c 69 61 73 20 47 65  acter;..alias Ge
1e50: 74 43 6f 6e 73 6f 6c 65 54 69 74 6c 65 41 20 47  tConsoleTitleA G
1e60: 65 74 43 6f 6e 73 6f 6c 65 54 69 74 6c 65 3b 0a  etConsoleTitle;.
1e70: 09 61 6c 69 61 73 20 50 65 65 6b 43 6f 6e 73 6f  .alias PeekConso
1e80: 6c 65 49 6e 70 75 74 41 20 50 65 65 6b 43 6f 6e  leInputA PeekCon
1e90: 73 6f 6c 65 49 6e 70 75 74 3b 0a 09 61 6c 69 61  soleInput;..alia
1ea0: 73 20 52 65 61 64 43 6f 6e 73 6f 6c 65 41 20 52  s ReadConsoleA R
1eb0: 65 61 64 43 6f 6e 73 6f 6c 65 3b 0a 09 61 6c 69  eadConsole;..ali
1ec0: 61 73 20 52 65 61 64 43 6f 6e 73 6f 6c 65 49 6e  as ReadConsoleIn
1ed0: 70 75 74 41 20 52 65 61 64 43 6f 6e 73 6f 6c 65  putA ReadConsole
1ee0: 49 6e 70 75 74 3b 0a 09 61 6c 69 61 73 20 52 65  Input;..alias Re
1ef0: 61 64 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 41  adConsoleOutputA
1f00: 20 52 65 61 64 43 6f 6e 73 6f 6c 65 4f 75 74 70   ReadConsoleOutp
1f10: 75 74 3b 0a 09 61 6c 69 61 73 20 52 65 61 64 43  ut;..alias ReadC
1f20: 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 43 68 61 72  onsoleOutputChar
1f30: 61 63 74 65 72 41 20 52 65 61 64 43 6f 6e 73 6f  acterA ReadConso
1f40: 6c 65 4f 75 74 70 75 74 43 68 61 72 61 63 74 65  leOutputCharacte
1f50: 72 3b 0a 09 61 6c 69 61 73 20 53 63 72 6f 6c 6c  r;..alias Scroll
1f60: 43 6f 6e 73 6f 6c 65 53 63 72 65 65 6e 42 75 66  ConsoleScreenBuf
1f70: 66 65 72 41 20 53 63 72 6f 6c 6c 43 6f 6e 73 6f  ferA ScrollConso
1f80: 6c 65 53 63 72 65 65 6e 42 75 66 66 65 72 3b 0a  leScreenBuffer;.
1f90: 09 61 6c 69 61 73 20 53 65 74 43 6f 6e 73 6f 6c  .alias SetConsol
1fa0: 65 54 69 74 6c 65 41 20 53 65 74 43 6f 6e 73 6f  eTitleA SetConso
1fb0: 6c 65 54 69 74 6c 65 3b 0a 09 61 6c 69 61 73 20  leTitle;..alias 
1fc0: 57 72 69 74 65 43 6f 6e 73 6f 6c 65 41 20 57 72  WriteConsoleA Wr
1fd0: 69 74 65 43 6f 6e 73 6f 6c 65 3b 0a 09 61 6c 69  iteConsole;..ali
1fe0: 61 73 20 57 72 69 74 65 43 6f 6e 73 6f 6c 65 49  as WriteConsoleI
1ff0: 6e 70 75 74 41 20 57 72 69 74 65 43 6f 6e 73 6f  nputA WriteConso
2000: 6c 65 49 6e 70 75 74 3b 0a 09 61 6c 69 61 73 20  leInput;..alias 
2010: 57 72 69 74 65 43 6f 6e 73 6f 6c 65 4f 75 74 70  WriteConsoleOutp
2020: 75 74 41 20 57 72 69 74 65 43 6f 6e 73 6f 6c 65  utA WriteConsole
2030: 4f 75 74 70 75 74 3b 0a 09 61 6c 69 61 73 20 57  Output;..alias W
2040: 72 69 74 65 43 6f 6e 73 6f 6c 65 4f 75 74 70 75  riteConsoleOutpu
2050: 74 43 68 61 72 61 63 74 65 72 41 20 57 72 69 74  tCharacterA Writ
2060: 65 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 43 68  eConsoleOutputCh
2070: 61 72 61 63 74 65 72 3b 0a 7d 0a                 aracter;.}.