#+build windows
package sys_windows

// https://docs.microsoft.com/en-us/windows/win32/inputdev/about-keyboard-input
KF_EXTENDED :: 0x0100
KF_DLGMODE  :: 0x0800
KF_MENUMODE :: 0x1000
KF_ALTDOWN  :: 0x2000
KF_REPEAT   :: 0x4000
KF_UP       :: 0x8000

// https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
// Virtual Keys, Standard Set
VK_LBUTTON  :: 0x01
VK_RBUTTON  :: 0x02
VK_CANCEL   :: 0x03
VK_MBUTTON  :: 0x04 // NOT contiguous with L & RBUTTON
VK_XBUTTON1 :: 0x05 // NOT contiguous with L & RBUTTON
VK_XBUTTON2 :: 0x06 // NOT contiguous with L & RBUTTON

// 0x07 : reserved

VK_BACK :: 0x08
VK_TAB  :: 0x09

// 0x0A - 0x0B : reserved

VK_CLEAR  :: 0x0C
VK_RETURN :: 0x0D

// 0x0E - 0x0F : unassigned

VK_SHIFT      :: 0x10
VK_CONTROL    :: 0x11
VK_MENU       :: 0x12
VK_PAUSE      :: 0x13
VK_CAPITAL    :: 0x14
VK_KANA       :: 0x15
VK_HANGEUL    :: 0x15 // old name - should be here for compatibility
VK_HANGUL     :: 0x15
VK_IME_ON     :: 0x16
VK_JUNJA      :: 0x17
VK_FINAL      :: 0x18
VK_HANJA      :: 0x19
VK_KANJI      :: 0x19
VK_IME_OFF    :: 0x1A
VK_ESCAPE     :: 0x1B
VK_CONVERT    :: 0x1C
VK_NONCONVERT :: 0x1D
VK_ACCEPT     :: 0x1E
VK_MODECHANGE :: 0x1F
VK_SPACE      :: 0x20
VK_PRIOR      :: 0x21
VK_NEXT       :: 0x22
VK_END        :: 0x23
VK_HOME       :: 0x24
VK_LEFT       :: 0x25
VK_UP         :: 0x26
VK_RIGHT      :: 0x27
VK_DOWN       :: 0x28
VK_SELECT     :: 0x29
VK_PRINT      :: 0x2A
VK_EXECUTE    :: 0x2B
VK_SNAPSHOT   :: 0x2C
VK_INSERT     :: 0x2D
VK_DELETE     :: 0x2E
VK_HELP       :: 0x2F

VK_0 :: '0'
VK_1 :: '1'
VK_2 :: '2'
VK_3 :: '3'
VK_4 :: '4'
VK_5 :: '5'
VK_6 :: '6'
VK_7 :: '7'
VK_8 :: '8'
VK_9 :: '9'

// 0x3A - 0x40 : unassigned

VK_A :: 'A'
VK_B :: 'B'
VK_C :: 'C'
VK_D :: 'D'
VK_E :: 'E'
VK_F :: 'F'
VK_G :: 'G'
VK_H :: 'H'
VK_I :: 'I'
VK_J :: 'J'
VK_K :: 'K'
VK_L :: 'L'
VK_M :: 'M'
VK_N :: 'N'
VK_O :: 'O'
VK_P :: 'P'
VK_Q :: 'Q'
VK_R :: 'R'
VK_S :: 'S'
VK_T :: 'T'
VK_U :: 'U'
VK_V :: 'V'
VK_W :: 'W'
VK_X :: 'X'
VK_Y :: 'Y'
VK_Z :: 'Z'

VK_LWIN :: 0x5B
VK_RWIN :: 0x5C
VK_APPS :: 0x5D

// 0x5E : reserved

VK_SLEEP     :: 0x5F
VK_NUMPAD0   :: 0x60
VK_NUMPAD1   :: 0x61
VK_NUMPAD2   :: 0x62
VK_NUMPAD3   :: 0x63
VK_NUMPAD4   :: 0x64
VK_NUMPAD5   :: 0x65
VK_NUMPAD6   :: 0x66
VK_NUMPAD7   :: 0x67
VK_NUMPAD8   :: 0x68
VK_NUMPAD9   :: 0x69
VK_MULTIPLY  :: 0x6A
VK_ADD       :: 0x6B
VK_SEPARATOR :: 0x6C
VK_SUBTRACT  :: 0x6D
VK_DECIMAL   :: 0x6E
VK_DIVIDE    :: 0x6F
VK_F1        :: 0x70
VK_F2        :: 0x71
VK_F3        :: 0x72
VK_F4        :: 0x73
VK_F5        :: 0x74
VK_F6        :: 0x75
VK_F7        :: 0x76
VK_F8        :: 0x77
VK_F9        :: 0x78
VK_F10       :: 0x79
VK_F11       :: 0x7A
VK_F12       :: 0x7B
VK_F13       :: 0x7C
VK_F14       :: 0x7D
VK_F15       :: 0x7E
VK_F16       :: 0x7F
VK_F17       :: 0x80
VK_F18       :: 0x81
VK_F19       :: 0x82
VK_F20       :: 0x83
VK_F21       :: 0x84
VK_F22       :: 0x85
VK_F23       :: 0x86
VK_F24       :: 0x87

// 0x88 - 0x8F : reserved

VK_NUMLOCK :: 0x90
VK_SCROLL  :: 0x91

// NEC PC-9800 kbd definitions
VK_OEM_NEC_EQUAL :: 0x92 // '=' key on numpad

// Fujitsu/OASYS kbd definitions
VK_OEM_FJ_JISHO   :: 0x92 // 'Dictionary' key
VK_OEM_FJ_MASSHOU :: 0x93 // 'Unregister word' key
VK_OEM_FJ_TOUROKU :: 0x94 // 'Register word' key
VK_OEM_FJ_LOYA    :: 0x95 // 'Left OYAYUBI' key
VK_OEM_FJ_ROYA    :: 0x96 // 'Right OYAYUBI' key

// 0x97 - 0x9F : unassigned

// VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys.
// Used only as parameters to GetAsyncKeyState() and GetKeyState().
// No other API or message will distinguish left and right keys in this way.
VK_LSHIFT   :: 0xA0
VK_RSHIFT   :: 0xA1
VK_LCONTROL :: 0xA2
VK_RCONTROL :: 0xA3
VK_LMENU    :: 0xA4
VK_RMENU    :: 0xA5

VK_BROWSER_BACK        :: 0xA6
VK_BROWSER_FORWARD     :: 0xA7
VK_BROWSER_REFRESH     :: 0xA8
VK_BROWSER_STOP        :: 0xA9
VK_BROWSER_SEARCH      :: 0xAA
VK_BROWSER_FAVORITES   :: 0xAB
VK_BROWSER_HOME        :: 0xAC
VK_VOLUME_MUTE         :: 0xAD
VK_VOLUME_DOWN         :: 0xAE
VK_VOLUME_UP           :: 0xAF
VK_MEDIA_NEXT_TRACK    :: 0xB0
VK_MEDIA_PREV_TRACK    :: 0xB1
VK_MEDIA_STOP          :: 0xB2
VK_MEDIA_PLAY_PAUSE    :: 0xB3
VK_LAUNCH_MAIL         :: 0xB4
VK_LAUNCH_MEDIA_SELECT :: 0xB5
VK_LAUNCH_APP1         :: 0xB6
VK_LAUNCH_APP2         :: 0xB7

// 0xB8 - 0xB9 : reserved

VK_OEM_1      :: 0xBA // ';:' for US
VK_OEM_PLUS   :: 0xBB // '+'  any country
VK_OEM_COMMA  :: 0xBC // ','  any country
VK_OEM_MINUS  :: 0xBD // '-'  any country
VK_OEM_PERIOD :: 0xBE // '.'  any country
VK_OEM_2      :: 0xBF // '/?' for US
VK_OEM_3      :: 0xC0 // '`~' for US

// 0xC1 - 0xDA : reserved

VK_OEM_4 :: 0xDB // '[{' for US
VK_OEM_5 :: 0xDC // '\|' for US
VK_OEM_6 :: 0xDD // ']}' for US
VK_OEM_7 :: 0xDE // ''"' for US
VK_OEM_8 :: 0xDF

// 0xE0 : reserved

// Various extended or enhanced keyboards
VK_OEM_AX   :: 0xE1  //  'AX' key on Japanese AX kbd
VK_OEM_102  :: 0xE2  //  "<>" or "\|" on RT 102-key kbd.
VK_ICO_HELP :: 0xE3  //  Help key on ICO
VK_ICO_00   :: 0xE4  //  00 key on ICO

VK_PROCESSKEY :: 0xE5
VK_ICO_CLEAR  :: 0xE6
VK_PACKET     :: 0xE7

// 0xE8 : unassigned

// Nokia/Ericsson definitions
VK_OEM_RESET   :: 0xE9
VK_OEM_JUMP    :: 0xEA
VK_OEM_PA1     :: 0xEB
VK_OEM_PA2     :: 0xEC
VK_OEM_PA3     :: 0xED
VK_OEM_WSCTRL  :: 0xEE
VK_OEM_CUSEL   :: 0xEF
VK_OEM_ATTN    :: 0xF0
VK_OEM_FINISH  :: 0xF1
VK_OEM_COPY    :: 0xF2
VK_OEM_AUTO    :: 0xF3
VK_OEM_ENLW    :: 0xF4
VK_OEM_BACKTAB :: 0xF5

VK_ATTN      :: 0xF6
VK_CRSEL     :: 0xF7
VK_EXSEL     :: 0xF8
VK_EREOF     :: 0xF9
VK_PLAY      :: 0xFA
VK_ZOOM      :: 0xFB
VK_NONAME    :: 0xFC
VK_PA1       :: 0xFD
VK_OEM_CLEAR :: 0xFE

// 0xFF : reserved
