package sdl2

import "core:c"

Scancode :: enum c.int {
	UNKNOWN = 0,

	A = 4,
	B = 5,
	C = 6,
	D = 7,
	E = 8,
	F = 9,
	G = 10,
	H = 11,
	I = 12,
	J = 13,
	K = 14,
	L = 15,
	M = 16,
	N = 17,
	O = 18,
	P = 19,
	Q = 20,
	R = 21,
	S = 22,
	T = 23,
	U = 24,
	V = 25,
	W = 26,
	X = 27,
	Y = 28,
	Z = 29,

	NUM1 = 30,
	NUM2 = 31,
	NUM3 = 32,
	NUM4 = 33,
	NUM5 = 34,
	NUM6 = 35,
	NUM7 = 36,
	NUM8 = 37,
	NUM9 = 38,
	NUM0 = 39,

	RETURN = 40,
	ESCAPE = 41,
	BACKSPACE = 42,
	TAB = 43,
	SPACE = 44,

	MINUS = 45,
	EQUALS = 46,
	LEFTBRACKET = 47,
	RIGHTBRACKET = 48,
	BACKSLASH = 49,
	NONUSHASH = 50,
	SEMICOLON = 51,
	APOSTROPHE = 52,
	GRAVE = 53,
	COMMA = 54,
	PERIOD = 55,
	SLASH = 56,

	CAPSLOCK = 57,

	F1 = 58,
	F2 = 59,
	F3 = 60,
	F4 = 61,
	F5 = 62,
	F6 = 63,
	F7 = 64,
	F8 = 65,
	F9 = 66,
	F10 = 67,
	F11 = 68,
	F12 = 69,

	PRINTSCREEN = 70,
	SCROLLLOCK = 71,
	PAUSE = 72,
	INSERT = 73,
	HOME = 74,
	PAGEUP = 75,
	DELETE = 76,
	END = 77,
	PAGEDOWN = 78,
	RIGHT = 79,
	LEFT = 80,
	DOWN = 81,
	UP = 82,

	NUMLOCKCLEAR = 83,
	KP_DIVIDE = 84,
	KP_MULTIPLY = 85,
	KP_MINUS = 86,
	KP_PLUS = 87,
	KP_ENTER = 88,
	KP_1 = 89,
	KP_2 = 90,
	KP_3 = 91,
	KP_4 = 92,
	KP_5 = 93,
	KP_6 = 94,
	KP_7 = 95,
	KP_8 = 96,
	KP_9 = 97,
	KP_0 = 98,
	KP_PERIOD = 99,

	NONUSBACKSLASH = 100,
	APPLICATION = 101,
	POWER = 102,
	KP_EQUALS = 103,
	F13 = 104,
	F14 = 105,
	F15 = 106,
	F16 = 107,
	F17 = 108,
	F18 = 109,
	F19 = 110,
	F20 = 111,
	F21 = 112,
	F22 = 113,
	F23 = 114,
	F24 = 115,
	EXECUTE = 116,
	HELP = 117,
	MENU = 118,
	SELECT = 119,
	STOP = 120,
	AGAIN = 121,
	UNDO = 122,
	CUT = 123,
	COPY = 124,
	PASTE = 125,
	FIND = 126,
	MUTE = 127,
	VOLUMEUP = 128,
	VOLUMEDOWN = 129,
	/* not sure whether there's a reason to enable these */
	/*     LOCKINGCAPSLOCK = 130,  */
	/*     LOCKINGNUMLOCK = 131, */
	/*     LOCKINGSCROLLLOCK = 132, */
	KP_COMMA = 133,
	KP_EQUALSAS400 = 134,

	INTERNATIONAL1 = 135,
	INTERNATIONAL2 = 136,
	INTERNATIONAL3 = 137,
	INTERNATIONAL4 = 138,
	INTERNATIONAL5 = 139,
	INTERNATIONAL6 = 140,
	INTERNATIONAL7 = 141,
	INTERNATIONAL8 = 142,
	INTERNATIONAL9 = 143,
	LANG1 = 144,
	LANG2 = 145,
	LANG3 = 146,
	LANG4 = 147,
	LANG5 = 148,
	LANG6 = 149,
	LANG7 = 150,
	LANG8 = 151,
	LANG9 = 152,

	ALTERASE = 153,
	SYSREQ = 154,
	CANCEL = 155,
	CLEAR = 156,
	PRIOR = 157,
	RETURN2 = 158,
	SEPARATOR = 159,
	OUT = 160,
	OPER = 161,
	CLEARAGAIN = 162,
	CRSEL = 163,
	EXSEL = 164,

	KP_00 = 176,
	KP_000 = 177,
	THOUSANDSSEPARATOR = 178,
	DECIMALSEPARATOR = 179,
	CURRENCYUNIT = 180,
	CURRENCYSUBUNIT = 181,
	KP_LEFTPAREN = 182,
	KP_RIGHTPAREN = 183,
	KP_LEFTBRACE = 184,
	KP_RIGHTBRACE = 185,
	KP_TAB = 186,
	KP_BACKSPACE = 187,
	KP_A = 188,
	KP_B = 189,
	KP_C = 190,
	KP_D = 191,
	KP_E = 192,
	KP_F = 193,
	KP_XOR = 194,
	KP_POWER = 195,
	KP_PERCENT = 196,
	KP_LESS = 197,
	KP_GREATER = 198,
	KP_AMPERSAND = 199,
	KP_DBLAMPERSAND = 200,
	KP_VERTICALBAR = 201,
	KP_DBLVERTICALBAR = 202,
	KP_COLON = 203,
	KP_HASH = 204,
	KP_SPACE = 205,
	KP_AT = 206,
	KP_EXCLAM = 207,
	KP_MEMSTORE = 208,
	KP_MEMRECALL = 209,
	KP_MEMCLEAR = 210,
	KP_MEMADD = 211,
	KP_MEMSUBTRACT = 212,
	KP_MEMMULTIPLY = 213,
	KP_MEMDIVIDE = 214,
	KP_PLUSMINUS = 215,
	KP_CLEAR = 216,
	KP_CLEARENTRY = 217,
	KP_BINARY = 218,
	KP_OCTAL = 219,
	KP_DECIMAL = 220,
	KP_HEXADECIMAL = 221,

	LCTRL = 224,
	LSHIFT = 225,
	LALT = 226,
	LGUI = 227,
	RCTRL = 228,
	RSHIFT = 229,
	RALT = 230,
	RGUI = 231,

	MODE = 257,

	AUDIONEXT = 258,
	AUDIOPREV = 259,
	AUDIOSTOP = 260,
	AUDIOPLAY = 261,
	AUDIOMUTE = 262,
	MEDIASELECT = 263,
	WWW = 264,
	MAIL = 265,
	CALCULATOR = 266,
	COMPUTER = 267,
	AC_SEARCH = 268,
	AC_HOME = 269,
	AC_BACK = 270,
	AC_FORWARD = 271,
	AC_STOP = 272,
	AC_REFRESH = 273,
	AC_BOOKMARKS = 274,


	BRIGHTNESSDOWN = 275,
	BRIGHTNESSUP = 276,
	DISPLAYSWITCH = 277,
	KBDILLUMTOGGLE = 278,
	KBDILLUMDOWN = 279,
	KBDILLUMUP = 280,
	EJECT = 281,
	SLEEP = 282,

	APP1 = 283,
	APP2 = 284,

	AUDIOREWIND = 285,
	AUDIOFASTFORWARD = 286,

	NUM_SCANCODES = 512,
}

NUM_SCANCODES :: 512




SCANCODE_UNKNOWN :: Scancode.UNKNOWN

SCANCODE_A :: Scancode.A
SCANCODE_B :: Scancode.B
SCANCODE_C :: Scancode.C
SCANCODE_D :: Scancode.D
SCANCODE_E :: Scancode.E
SCANCODE_F :: Scancode.F
SCANCODE_G :: Scancode.G
SCANCODE_H :: Scancode.H
SCANCODE_I :: Scancode.I
SCANCODE_J :: Scancode.J
SCANCODE_K :: Scancode.K
SCANCODE_L :: Scancode.L
SCANCODE_M :: Scancode.M
SCANCODE_N :: Scancode.N
SCANCODE_O :: Scancode.O
SCANCODE_P :: Scancode.P
SCANCODE_Q :: Scancode.Q
SCANCODE_R :: Scancode.R
SCANCODE_S :: Scancode.S
SCANCODE_T :: Scancode.T
SCANCODE_U :: Scancode.U
SCANCODE_V :: Scancode.V
SCANCODE_W :: Scancode.W
SCANCODE_X :: Scancode.X
SCANCODE_Y :: Scancode.Y
SCANCODE_Z :: Scancode.Z

SCANCODE_1 :: Scancode.NUM1
SCANCODE_2 :: Scancode.NUM2
SCANCODE_3 :: Scancode.NUM3
SCANCODE_4 :: Scancode.NUM4
SCANCODE_5 :: Scancode.NUM5
SCANCODE_6 :: Scancode.NUM6
SCANCODE_7 :: Scancode.NUM7
SCANCODE_8 :: Scancode.NUM8
SCANCODE_9 :: Scancode.NUM9
SCANCODE_0 :: Scancode.NUM0

SCANCODE_RETURN    :: Scancode.RETURN
SCANCODE_ESCAPE    :: Scancode.ESCAPE
SCANCODE_BACKSPACE :: Scancode.BACKSPACE
SCANCODE_TAB       :: Scancode.TAB
SCANCODE_SPACE     :: Scancode.SPACE

SCANCODE_MINUS        :: Scancode.MINUS
SCANCODE_EQUALS       :: Scancode.EQUALS
SCANCODE_LEFTBRACKET  :: Scancode.LEFTBRACKET
SCANCODE_RIGHTBRACKET :: Scancode.RIGHTBRACKET
SCANCODE_BACKSLASH    :: Scancode.BACKSLASH
SCANCODE_NONUSHASH    :: Scancode.NONUSHASH
SCANCODE_SEMICOLON    :: Scancode.SEMICOLON
SCANCODE_APOSTROPHE   :: Scancode.APOSTROPHE
SCANCODE_GRAVE        :: Scancode.GRAVE
SCANCODE_COMMA        :: Scancode.COMMA
SCANCODE_PERIOD       :: Scancode.PERIOD
SCANCODE_SLASH        :: Scancode.SLASH

SCANCODE_CAPSLOCK :: Scancode.CAPSLOCK

SCANCODE_F1  :: Scancode.F1
SCANCODE_F2  :: Scancode.F2
SCANCODE_F3  :: Scancode.F3
SCANCODE_F4  :: Scancode.F4
SCANCODE_F5  :: Scancode.F5
SCANCODE_F6  :: Scancode.F6
SCANCODE_F7  :: Scancode.F7
SCANCODE_F8  :: Scancode.F8
SCANCODE_F9  :: Scancode.F9
SCANCODE_F10 :: Scancode.F10
SCANCODE_F11 :: Scancode.F11
SCANCODE_F12 :: Scancode.F12

SCANCODE_PRINTSCREEN :: Scancode.PRINTSCREEN
SCANCODE_SCROLLLOCK  :: Scancode.SCROLLLOCK
SCANCODE_PAUSE       :: Scancode.PAUSE
SCANCODE_INSERT      :: Scancode.INSERT
SCANCODE_HOME        :: Scancode.HOME
SCANCODE_PAGEUP      :: Scancode.PAGEUP
SCANCODE_DELETE      :: Scancode.DELETE
SCANCODE_END         :: Scancode.END
SCANCODE_PAGEDOWN    :: Scancode.PAGEDOWN
SCANCODE_RIGHT       :: Scancode.RIGHT
SCANCODE_LEFT        :: Scancode.LEFT
SCANCODE_DOWN        :: Scancode.DOWN
SCANCODE_UP          :: Scancode.UP

SCANCODE_NUMLOCKCLEAR :: Scancode.NUMLOCKCLEAR
SCANCODE_KP_DIVIDE    :: Scancode.KP_DIVIDE
SCANCODE_KP_MULTIPLY  :: Scancode.KP_MULTIPLY
SCANCODE_KP_MINUS     :: Scancode.KP_MINUS
SCANCODE_KP_PLUS      :: Scancode.KP_PLUS
SCANCODE_KP_ENTER     :: Scancode.KP_ENTER
SCANCODE_KP_1         :: Scancode.KP_1
SCANCODE_KP_2         :: Scancode.KP_2
SCANCODE_KP_3         :: Scancode.KP_3
SCANCODE_KP_4         :: Scancode.KP_4
SCANCODE_KP_5         :: Scancode.KP_5
SCANCODE_KP_6         :: Scancode.KP_6
SCANCODE_KP_7         :: Scancode.KP_7
SCANCODE_KP_8         :: Scancode.KP_8
SCANCODE_KP_9         :: Scancode.KP_9
SCANCODE_KP_0         :: Scancode.KP_0
SCANCODE_KP_PERIOD    :: Scancode.KP_PERIOD

SCANCODE_NONUSBACKSLASH :: Scancode.NONUSBACKSLASH
SCANCODE_APPLICATION    :: Scancode.APPLICATION
SCANCODE_POWER          :: Scancode.POWER
SCANCODE_KP_EQUALS      :: Scancode.KP_EQUALS
SCANCODE_F13            :: Scancode.F13
SCANCODE_F14            :: Scancode.F14
SCANCODE_F15            :: Scancode.F15
SCANCODE_F16            :: Scancode.F16
SCANCODE_F17            :: Scancode.F17
SCANCODE_F18            :: Scancode.F18
SCANCODE_F19            :: Scancode.F19
SCANCODE_F20            :: Scancode.F20
SCANCODE_F21            :: Scancode.F21
SCANCODE_F22            :: Scancode.F22
SCANCODE_F23            :: Scancode.F23
SCANCODE_F24            :: Scancode.F24
SCANCODE_EXECUTE        :: Scancode.EXECUTE
SCANCODE_HELP           :: Scancode.HELP
SCANCODE_MENU           :: Scancode.MENU
SCANCODE_SELECT         :: Scancode.SELECT
SCANCODE_STOP           :: Scancode.STOP
SCANCODE_AGAIN          :: Scancode.AGAIN
SCANCODE_UNDO           :: Scancode.UNDO
SCANCODE_CUT            :: Scancode.CUT
SCANCODE_COPY           :: Scancode.COPY
SCANCODE_PASTE          :: Scancode.PASTE
SCANCODE_FIND           :: Scancode.FIND
SCANCODE_MUTE           :: Scancode.MUTE
SCANCODE_VOLUMEUP       :: Scancode.VOLUMEUP
SCANCODE_VOLUMEDOWN     :: Scancode.VOLUMEDOWN
SCANCODE_KP_COMMA       :: Scancode.KP_COMMA
SCANCODE_KP_EQUALSAS400 :: Scancode.KP_EQUALSAS400

SCANCODE_INTERNATIONAL1 :: Scancode.INTERNATIONAL1
SCANCODE_INTERNATIONAL2 :: Scancode.INTERNATIONAL2
SCANCODE_INTERNATIONAL3 :: Scancode.INTERNATIONAL3
SCANCODE_INTERNATIONAL4 :: Scancode.INTERNATIONAL4
SCANCODE_INTERNATIONAL5 :: Scancode.INTERNATIONAL5
SCANCODE_INTERNATIONAL6 :: Scancode.INTERNATIONAL6
SCANCODE_INTERNATIONAL7 :: Scancode.INTERNATIONAL7
SCANCODE_INTERNATIONAL8 :: Scancode.INTERNATIONAL8
SCANCODE_INTERNATIONAL9 :: Scancode.INTERNATIONAL9
SCANCODE_LANG1 :: Scancode.LANG1
SCANCODE_LANG2 :: Scancode.LANG2
SCANCODE_LANG3 :: Scancode.LANG3
SCANCODE_LANG4 :: Scancode.LANG4
SCANCODE_LANG5 :: Scancode.LANG5
SCANCODE_LANG6 :: Scancode.LANG6
SCANCODE_LANG7 :: Scancode.LANG7
SCANCODE_LANG8 :: Scancode.LANG8
SCANCODE_LANG9 :: Scancode.LANG9

SCANCODE_ALTERASE   :: Scancode.ALTERASE
SCANCODE_SYSREQ     :: Scancode.SYSREQ
SCANCODE_CANCEL     :: Scancode.CANCEL
SCANCODE_CLEAR      :: Scancode.CLEAR
SCANCODE_PRIOR      :: Scancode.PRIOR
SCANCODE_RETURN2    :: Scancode.RETURN2
SCANCODE_SEPARATOR  :: Scancode.SEPARATOR
SCANCODE_OUT        :: Scancode.OUT
SCANCODE_OPER       :: Scancode.OPER
SCANCODE_CLEARAGAIN :: Scancode.CLEARAGAIN
SCANCODE_CRSEL      :: Scancode.CRSEL
SCANCODE_EXSEL      :: Scancode.EXSEL

SCANCODE_KP_00              :: Scancode.KP_00
SCANCODE_KP_000             :: Scancode.KP_000
SCANCODE_THOUSANDSSEPARATOR :: Scancode.THOUSANDSSEPARATOR
SCANCODE_DECIMALSEPARATOR   :: Scancode.DECIMALSEPARATOR
SCANCODE_CURRENCYUNIT       :: Scancode.CURRENCYUNIT
SCANCODE_CURRENCYSUBUNIT    :: Scancode.CURRENCYSUBUNIT
SCANCODE_KP_LEFTPAREN       :: Scancode.KP_LEFTPAREN
SCANCODE_KP_RIGHTPAREN      :: Scancode.KP_RIGHTPAREN
SCANCODE_KP_LEFTBRACE       :: Scancode.KP_LEFTBRACE
SCANCODE_KP_RIGHTBRACE      :: Scancode.KP_RIGHTBRACE
SCANCODE_KP_TAB             :: Scancode.KP_TAB
SCANCODE_KP_BACKSPACE       :: Scancode.KP_BACKSPACE
SCANCODE_KP_A               :: Scancode.KP_A
SCANCODE_KP_B               :: Scancode.KP_B
SCANCODE_KP_C               :: Scancode.KP_C
SCANCODE_KP_D               :: Scancode.KP_D
SCANCODE_KP_E               :: Scancode.KP_E
SCANCODE_KP_F               :: Scancode.KP_F
SCANCODE_KP_XOR             :: Scancode.KP_XOR
SCANCODE_KP_POWER           :: Scancode.KP_POWER
SCANCODE_KP_PERCENT         :: Scancode.KP_PERCENT
SCANCODE_KP_LESS            :: Scancode.KP_LESS
SCANCODE_KP_GREATER         :: Scancode.KP_GREATER
SCANCODE_KP_AMPERSAND       :: Scancode.KP_AMPERSAND
SCANCODE_KP_DBLAMPERSAND    :: Scancode.KP_DBLAMPERSAND
SCANCODE_KP_VERTICALBAR     :: Scancode.KP_VERTICALBAR
SCANCODE_KP_DBLVERTICALBAR  :: Scancode.KP_DBLVERTICALBAR
SCANCODE_KP_COLON           :: Scancode.KP_COLON
SCANCODE_KP_HASH            :: Scancode.KP_HASH
SCANCODE_KP_SPACE           :: Scancode.KP_SPACE
SCANCODE_KP_AT              :: Scancode.KP_AT
SCANCODE_KP_EXCLAM          :: Scancode.KP_EXCLAM
SCANCODE_KP_MEMSTORE        :: Scancode.KP_MEMSTORE
SCANCODE_KP_MEMRECALL       :: Scancode.KP_MEMRECALL
SCANCODE_KP_MEMCLEAR        :: Scancode.KP_MEMCLEAR
SCANCODE_KP_MEMADD          :: Scancode.KP_MEMADD
SCANCODE_KP_MEMSUBTRACT     :: Scancode.KP_MEMSUBTRACT
SCANCODE_KP_MEMMULTIPLY     :: Scancode.KP_MEMMULTIPLY
SCANCODE_KP_MEMDIVIDE       :: Scancode.KP_MEMDIVIDE
SCANCODE_KP_PLUSMINUS       :: Scancode.KP_PLUSMINUS
SCANCODE_KP_CLEAR           :: Scancode.KP_CLEAR
SCANCODE_KP_CLEARENTRY      :: Scancode.KP_CLEARENTRY
SCANCODE_KP_BINARY          :: Scancode.KP_BINARY
SCANCODE_KP_OCTAL           :: Scancode.KP_OCTAL
SCANCODE_KP_DECIMAL         :: Scancode.KP_DECIMAL
SCANCODE_KP_HEXADECIMAL     :: Scancode.KP_HEXADECIMAL

SCANCODE_LCTRL  :: Scancode.LCTRL
SCANCODE_LSHIFT :: Scancode.LSHIFT
SCANCODE_LALT   :: Scancode.LALT
SCANCODE_LGUI   :: Scancode.LGUI
SCANCODE_RCTRL  :: Scancode.RCTRL
SCANCODE_RSHIFT :: Scancode.RSHIFT
SCANCODE_RALT   :: Scancode.RALT
SCANCODE_RGUI   :: Scancode.RGUI

SCANCODE_MODE :: Scancode.MODE

SCANCODE_AUDIONEXT    :: Scancode.AUDIONEXT
SCANCODE_AUDIOPREV    :: Scancode.AUDIOPREV
SCANCODE_AUDIOSTOP    :: Scancode.AUDIOSTOP
SCANCODE_AUDIOPLAY    :: Scancode.AUDIOPLAY
SCANCODE_AUDIOMUTE    :: Scancode.AUDIOMUTE
SCANCODE_MEDIASELECT  :: Scancode.MEDIASELECT
SCANCODE_WWW          :: Scancode.WWW
SCANCODE_MAIL         :: Scancode.MAIL
SCANCODE_CALCULATOR   :: Scancode.CALCULATOR
SCANCODE_COMPUTER     :: Scancode.COMPUTER
SCANCODE_AC_SEARCH    :: Scancode.AC_SEARCH
SCANCODE_AC_HOME      :: Scancode.AC_HOME
SCANCODE_AC_BACK      :: Scancode.AC_BACK
SCANCODE_AC_FORWARD   :: Scancode.AC_FORWARD
SCANCODE_AC_STOP      :: Scancode.AC_STOP
SCANCODE_AC_REFRESH   :: Scancode.AC_REFRESH
SCANCODE_AC_BOOKMARKS :: Scancode.AC_BOOKMARKS


SCANCODE_BRIGHTNESSDOWN :: Scancode.BRIGHTNESSDOWN
SCANCODE_BRIGHTNESSUP   :: Scancode.BRIGHTNESSUP
SCANCODE_DISPLAYSWITCH  :: Scancode.DISPLAYSWITCH
SCANCODE_KBDILLUMTOGGLE :: Scancode.KBDILLUMTOGGLE
SCANCODE_KBDILLUMDOWN   :: Scancode.KBDILLUMDOWN
SCANCODE_KBDILLUMUP     :: Scancode.KBDILLUMUP
SCANCODE_EJECT          :: Scancode.EJECT
SCANCODE_SLEEP          :: Scancode.SLEEP

SCANCODE_APP1 :: Scancode.APP1
SCANCODE_APP2 :: Scancode.APP2

SCANCODE_AUDIOREWIND      :: Scancode.AUDIOREWIND
SCANCODE_AUDIOFASTFORWARD :: Scancode.AUDIOFASTFORWARD;