summaryrefslogtreecommitdiff
path: root/sdl2/keyboard.ha
diff options
context:
space:
mode:
Diffstat (limited to 'sdl2/keyboard.ha')
-rw-r--r--sdl2/keyboard.ha654
1 files changed, 654 insertions, 0 deletions
diff --git a/sdl2/keyboard.ha b/sdl2/keyboard.ha
new file mode 100644
index 0000000..8c82184
--- /dev/null
+++ b/sdl2/keyboard.ha
@@ -0,0 +1,654 @@
+use types::c;
+
+export type SDL_Scancode = enum uint {
+ UNKNOWN = 0,
+
+ // Usage page 0x07
+ // These values are from usage page 0x07 (USB keyboard page).
+
+ 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,
+
+ ONE = 30,
+ TWO = 31,
+ THREE = 32,
+ FOUR = 33,
+ FIVE = 34,
+ SIX = 35,
+ SEVEN = 36,
+ EIGHT = 37,
+ NINE = 38,
+ ZERO = 39,
+
+ RETURN = 40,
+ ESCAPE = 41,
+ BACKSPACE = 42,
+ TAB = 43,
+ SPACE = 44,
+
+ MINUS = 45,
+ EQUALS = 46,
+ LEFTBRACKET = 47,
+ RIGHTBRACKET = 48,
+ // Located at the lower left of the return
+ // key on ISO keyboards and at the right end
+ // of the QWERTY row on ANSI keyboards.
+ // Produces REVERSE SOLIDUS (backslash) and
+ // VERTICAL LINE in a US layout, REVERSE
+ // SOLIDUS and VERTICAL LINE in a UK Mac
+ // layout, NUMBER SIGN and TILDE in a UK
+ // Windows layout, DOLLAR SIGN and POUND SIGN
+ // in a Swiss German layout, NUMBER SIGN and
+ // APOSTROPHE in a German layout, GRAVE
+ // ACCENT and POUND SIGN in a French Mac
+ // layout, and ASTERISK and MICRO SIGN in a
+ // French Windows layout.
+ BACKSLASH = 49,
+ NONUSHASH = 50,
+ // ISO USB keyboards actually use this code
+ // instead of 49 for the same key, but all
+ // OSes I've seen treat the two codes
+ // identically. So, as an implementor, unless
+ // your keyboard generates both of those
+ // codes and your OS treats them differently,
+ // you should generate BACKSLASH
+ // instead of this code. As a user, you
+ // should not rely on this code because SDL
+ // will never generate it with most (all?)
+ // keyboards.
+ SEMICOLON = 51,
+ APOSTROPHE = 52,
+ // Located in the top left corner (on both ANSI
+ // and ISO keyboards). Produces GRAVE ACCENT and
+ // TILDE in a US Windows layout and in US and UK
+ // Mac layouts on ANSI keyboards, GRAVE ACCENT
+ // and NOT SIGN in a UK Windows layout, SECTION
+ // SIGN and PLUS-MINUS SIGN in US and UK Mac
+ // layouts on ISO keyboards, SECTION SIGN and
+ // DEGREE SIGN in a Swiss German layout (Mac:
+ // only on ISO keyboards), CIRCUMFLEX ACCENT and
+ // DEGREE SIGN in a German layout (Mac: only on
+ // ISO keyboards), SUPERSCRIPT TWO and TILDE in a
+ // French Windows layout, COMMERCIAL AT and
+ // NUMBER SIGN in a French Mac layout on ISO
+ // keyboards, and LESS-THAN SIGN and GREATER-THAN
+ // SIGN in a Swiss German, German, or French Mac
+ // layout on ANSI keyboards.
+ 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 on PC, help on some Mac keyboards (but does send code 73,
+ // not 117)
+ INSERT = 73,
+ HOME = 74,
+ PAGEUP = 75,
+ DELETE = 76,
+ END = 77,
+ PAGEDOWN = 78,
+ RIGHT = 79,
+ LEFT = 80,
+ DOWN = 81,
+ UP = 82,
+
+ NUMLOCKCLEAR = 83, // num lock on PC, clear on Mac keyboards
+ 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,
+
+ // This is the additional key that ISO
+ // keyboards have over ANSI ones,
+ // located between left shift and Y.
+ // Produces GRAVE ACCENT and TILDE in a
+ // US or UK Mac layout, REVERSE SOLIDUS
+ // (backslash) and VERTICAL LINE in a
+ // US or UK Windows layout, and
+ // LESS-THAN SIGN and GREATER-THAN SIGN
+ // in a Swiss German, German, or French
+ // layout. */
+ NONUSBACKSLASH = 100,
+ APPLICATION = 101, // windows contextual menu, compose
+ // The USB document says this is a status flag, not a physical key - but
+ // some Mac keyboards do have a power key.
+ 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, // redo
+ 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,
+
+ // used on Asian keyboards, see footnotes in USB doc
+ INTERNATIONAL1 = 135,
+ INTERNATIONAL2 = 136,
+ INTERNATIONAL3 = 137, // Yen
+ INTERNATIONAL4 = 138,
+ INTERNATIONAL5 = 139,
+ INTERNATIONAL6 = 140,
+ INTERNATIONAL7 = 141,
+ INTERNATIONAL8 = 142,
+ INTERNATIONAL9 = 143,
+ LANG1 = 144, // Hangul/English toggle
+ LANG2 = 145, // Hanja conversion
+ LANG3 = 146, // Katakana
+ LANG4 = 147, // Hiragana
+ LANG5 = 148, // Zenkaku/Hankaku
+ LANG6 = 149, // reserved
+ LANG7 = 150, // reserved
+ LANG8 = 151, // reserved
+ LANG9 = 152, // reserved
+
+ ALTERASE = 153, // Erase-Eaze
+ 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, // alt, option
+ LGUI = 227, // windows, command (apple), meta
+ RCTRL = 228,
+ RSHIFT = 229,
+ RALT = 230, // alt gr, option
+ RGUI = 231, // windows, command (apple), meta
+
+ // I'm not sure if this is really not covered by any of the above, but
+ // since there's a special KMOD_MODE for it I'm adding it here
+ MODE = 257,
+
+ // Usage page 0x0C
+ // These values are mapped from usage page 0x0C (USB consumer page).
+
+ 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,
+
+ // Walther keys
+ // These are values that Christian Walther added (for mac keyboard?).
+
+ BRIGHTNESSDOWN = 275,
+ BRIGHTNESSUP = 276,
+ // display mirroring/dual display switch, video mode switch
+ DISPLAYSWITCH = 277,
+ KBDILLUMTOGGLE = 278,
+ KBDILLUMDOWN = 279,
+ KBDILLUMUP = 280,
+ EJECT = 281,
+ SLEEP = 282,
+
+ APP1 = 283,
+ APP2 = 284,
+
+ // Usage page 0x0C (additional media keys)
+ // These values are mapped from usage page 0x0C (USB consumer page).
+
+ AUDIOREWIND = 285,
+ AUDIOFASTFORWARD = 286,
+
+ // Add any other keys here.
+
+ // not a key, just marks the number of scancodes for array bounds
+ NUM_SCANCODES = 512,
+};
+
+export type SDL_Keycode = enum uint {
+ UNKNOWN = 0,
+
+ RETURN = '\r',
+ ESCAPE = '\x1B',
+ BACKSPACE = '\b',
+ TAB = '\t',
+ SPACE = ' ',
+ EXCLAIM = '!',
+ QUOTEDBL = '"',
+ HASH = '#',
+ PERCENT = '%',
+ DOLLAR = '$',
+ AMPERSAND = '&',
+ QUOTE = '\'',
+ LEFTPAREN = '(',
+ RIGHTPAREN = ')',
+ ASTERISK = '*',
+ PLUS = '+',
+ COMMA = ',',
+ MINUS = '-',
+ PERIOD = '.',
+ SLASH = '/',
+ ZERO = '0',
+ ONE = '1',
+ TWO = '2',
+ THREE = '3',
+ FOUR = '4',
+ FIVE = '5',
+ SIX = '6',
+ SEVEN = '7',
+ EIGHT = '8',
+ NINE = '9',
+ COLON = ':',
+ SEMICOLON = ';',
+ LESS = '<',
+ EQUALS = '=',
+ GREATER = '>',
+ QUESTION = '?',
+ AT = '@',
+
+ // Skip uppercase letters
+
+ LEFTBRACKET = '[',
+ BACKSLASH = '\\',
+ RIGHTBRACKET = ']',
+ CARET = '^',
+ UNDERSCORE = '_',
+ BACKQUOTE = '`',
+ a = 'a',
+ b = 'b',
+ c = 'c',
+ d = 'd',
+ e = 'e',
+ f = 'f',
+ g = 'g',
+ h = 'h',
+ i = 'i',
+ j = 'j',
+ k = 'k',
+ l = 'l',
+ m = 'm',
+ n = 'n',
+ o = 'o',
+ p = 'p',
+ q = 'q',
+ r = 'r',
+ s = 's',
+ t = 't',
+ u = 'u',
+ v = 'v',
+ w = 'w',
+ x = 'x',
+ y = 'y',
+ z = 'z',
+
+ CAPSLOCK = SDL_Scancode::CAPSLOCK | 1: SDL_Scancode << 30: SDL_Scancode,
+
+ F1 = SDL_Scancode::F1 | 1: SDL_Scancode << 30,
+ F2 = SDL_Scancode::F2 | 1: SDL_Scancode << 30,
+ F3 = SDL_Scancode::F3 | 1: SDL_Scancode << 30,
+ F4 = SDL_Scancode::F4 | 1: SDL_Scancode << 30,
+ F5 = SDL_Scancode::F5 | 1: SDL_Scancode << 30,
+ F6 = SDL_Scancode::F6 | 1: SDL_Scancode << 30,
+ F7 = SDL_Scancode::F7 | 1: SDL_Scancode << 30,
+ F8 = SDL_Scancode::F8 | 1: SDL_Scancode << 30,
+ F9 = SDL_Scancode::F9 | 1: SDL_Scancode << 30,
+ F10 = SDL_Scancode::F10 | 1: SDL_Scancode << 30,
+ F11 = SDL_Scancode::F11 | 1: SDL_Scancode << 30,
+ F12 = SDL_Scancode::F12 | 1: SDL_Scancode << 30,
+
+ PRINTSCREEN = SDL_Scancode::PRINTSCREEN | 1: SDL_Scancode << 30,
+ SCROLLLOCK = SDL_Scancode::SCROLLLOCK | 1: SDL_Scancode << 30,
+ PAUSE = SDL_Scancode::PAUSE | 1: SDL_Scancode << 30,
+ INSERT = SDL_Scancode::INSERT | 1: SDL_Scancode << 30,
+ HOME = SDL_Scancode::HOME | 1: SDL_Scancode << 30,
+ PAGEUP = SDL_Scancode::PAGEUP | 1: SDL_Scancode << 30,
+ DELETE = '\x7F',
+ END = SDL_Scancode::END | 1: SDL_Scancode << 30,
+ PAGEDOWN = SDL_Scancode::PAGEDOWN | 1: SDL_Scancode << 30,
+ RIGHT = SDL_Scancode::RIGHT | 1: SDL_Scancode << 30,
+ LEFT = SDL_Scancode::LEFT | 1: SDL_Scancode << 30,
+ DOWN = SDL_Scancode::DOWN | 1: SDL_Scancode << 30,
+ UP = SDL_Scancode::UP | 1: SDL_Scancode << 30,
+
+ NUMLOCKCLEAR = SDL_Scancode::NUMLOCKCLEAR | 1: SDL_Scancode << 30,
+ KP_DIVIDE = SDL_Scancode::KP_DIVIDE | 1: SDL_Scancode << 30,
+ KP_MULTIPLY = SDL_Scancode::KP_MULTIPLY | 1: SDL_Scancode << 30,
+ KP_MINUS = SDL_Scancode::KP_MINUS | 1: SDL_Scancode << 30,
+ KP_PLUS = SDL_Scancode::KP_PLUS | 1: SDL_Scancode << 30,
+ KP_ENTER = SDL_Scancode::KP_ENTER | 1: SDL_Scancode << 30,
+ KP_1 = SDL_Scancode::KP_1 | 1: SDL_Scancode << 30,
+ KP_2 = SDL_Scancode::KP_2 | 1: SDL_Scancode << 30,
+ KP_3 = SDL_Scancode::KP_3 | 1: SDL_Scancode << 30,
+ KP_4 = SDL_Scancode::KP_4 | 1: SDL_Scancode << 30,
+ KP_5 = SDL_Scancode::KP_5 | 1: SDL_Scancode << 30,
+ KP_6 = SDL_Scancode::KP_6 | 1: SDL_Scancode << 30,
+ KP_7 = SDL_Scancode::KP_7 | 1: SDL_Scancode << 30,
+ KP_8 = SDL_Scancode::KP_8 | 1: SDL_Scancode << 30,
+ KP_9 = SDL_Scancode::KP_9 | 1: SDL_Scancode << 30,
+ KP_0 = SDL_Scancode::KP_0 | 1: SDL_Scancode << 30,
+ KP_PERIOD = SDL_Scancode::KP_PERIOD | 1: SDL_Scancode << 30,
+
+ APPLICATION = SDL_Scancode::APPLICATION | 1: SDL_Scancode << 30,
+ POWER = SDL_Scancode::POWER | 1: SDL_Scancode << 30,
+ KP_EQUALS = SDL_Scancode::KP_EQUALS | 1: SDL_Scancode << 30,
+ F13 = SDL_Scancode::F13 | 1: SDL_Scancode << 30,
+ F14 = SDL_Scancode::F14 | 1: SDL_Scancode << 30,
+ F15 = SDL_Scancode::F15 | 1: SDL_Scancode << 30,
+ F16 = SDL_Scancode::F16 | 1: SDL_Scancode << 30,
+ F17 = SDL_Scancode::F17 | 1: SDL_Scancode << 30,
+ F18 = SDL_Scancode::F18 | 1: SDL_Scancode << 30,
+ F19 = SDL_Scancode::F19 | 1: SDL_Scancode << 30,
+ F20 = SDL_Scancode::F20 | 1: SDL_Scancode << 30,
+ F21 = SDL_Scancode::F21 | 1: SDL_Scancode << 30,
+ F22 = SDL_Scancode::F22 | 1: SDL_Scancode << 30,
+ F23 = SDL_Scancode::F23 | 1: SDL_Scancode << 30,
+ F24 = SDL_Scancode::F24 | 1: SDL_Scancode << 30,
+ EXECUTE = SDL_Scancode::EXECUTE | 1: SDL_Scancode << 30,
+ HELP = SDL_Scancode::HELP | 1: SDL_Scancode << 30,
+ MENU = SDL_Scancode::MENU | 1: SDL_Scancode << 30,
+ SELECT = SDL_Scancode::SELECT | 1: SDL_Scancode << 30,
+ STOP = SDL_Scancode::STOP | 1: SDL_Scancode << 30,
+ AGAIN = SDL_Scancode::AGAIN | 1: SDL_Scancode << 30,
+ UNDO = SDL_Scancode::UNDO | 1: SDL_Scancode << 30,
+ CUT = SDL_Scancode::CUT | 1: SDL_Scancode << 30,
+ COPY = SDL_Scancode::COPY | 1: SDL_Scancode << 30,
+ PASTE = SDL_Scancode::PASTE | 1: SDL_Scancode << 30,
+ FIND = SDL_Scancode::FIND | 1: SDL_Scancode << 30,
+ MUTE = SDL_Scancode::MUTE | 1: SDL_Scancode << 30,
+ VOLUMEUP = SDL_Scancode::VOLUMEUP | 1: SDL_Scancode << 30,
+ VOLUMEDOWN = SDL_Scancode::VOLUMEDOWN | 1: SDL_Scancode << 30,
+ KP_COMMA = SDL_Scancode::KP_COMMA | 1: SDL_Scancode << 30,
+ KP_EQUALSAS400 = SDL_Scancode::KP_EQUALSAS400 | 1: SDL_Scancode << 30,
+
+ ALTERASE = SDL_Scancode::ALTERASE | 1: SDL_Scancode << 30,
+ SYSREQ = SDL_Scancode::SYSREQ | 1: SDL_Scancode << 30,
+ CANCEL = SDL_Scancode::CANCEL | 1: SDL_Scancode << 30,
+ CLEAR = SDL_Scancode::CLEAR | 1: SDL_Scancode << 30,
+ PRIOR = SDL_Scancode::PRIOR | 1: SDL_Scancode << 30,
+ RETURN2 = SDL_Scancode::RETURN2 | 1: SDL_Scancode << 30,
+ SEPARATOR = SDL_Scancode::SEPARATOR | 1: SDL_Scancode << 30,
+ OUT = SDL_Scancode::OUT | 1: SDL_Scancode << 30,
+ OPER = SDL_Scancode::OPER | 1: SDL_Scancode << 30,
+ CLEARAGAIN = SDL_Scancode::CLEARAGAIN | 1: SDL_Scancode << 30,
+ CRSEL = SDL_Scancode::CRSEL | 1: SDL_Scancode << 30,
+ EXSEL = SDL_Scancode::EXSEL | 1: SDL_Scancode << 30,
+
+ KP_00 = SDL_Scancode::KP_00 | 1: SDL_Scancode << 30,
+ KP_000 = SDL_Scancode::KP_000 | 1: SDL_Scancode << 30,
+ THOUSANDSSEPARATOR = SDL_Scancode::THOUSANDSSEPARATOR | 1: SDL_Scancode << 30,
+ DECIMALSEPARATOR = SDL_Scancode::DECIMALSEPARATOR | 1: SDL_Scancode << 30,
+ CURRENCYUNIT = SDL_Scancode::CURRENCYUNIT | 1: SDL_Scancode << 30,
+ CURRENCYSUBUNIT = SDL_Scancode::CURRENCYSUBUNIT | 1: SDL_Scancode << 30,
+ KP_LEFTPAREN = SDL_Scancode::KP_LEFTPAREN | 1: SDL_Scancode << 30,
+ KP_RIGHTPAREN = SDL_Scancode::KP_RIGHTPAREN | 1: SDL_Scancode << 30,
+ KP_LEFTBRACE = SDL_Scancode::KP_LEFTBRACE | 1: SDL_Scancode << 30,
+ KP_RIGHTBRACE = SDL_Scancode::KP_RIGHTBRACE | 1: SDL_Scancode << 30,
+ KP_TAB = SDL_Scancode::KP_TAB | 1: SDL_Scancode << 30,
+ KP_BACKSPACE = SDL_Scancode::KP_BACKSPACE | 1: SDL_Scancode << 30,
+ KP_A = SDL_Scancode::KP_A | 1: SDL_Scancode << 30,
+ KP_B = SDL_Scancode::KP_B | 1: SDL_Scancode << 30,
+ KP_C = SDL_Scancode::KP_C | 1: SDL_Scancode << 30,
+ KP_D = SDL_Scancode::KP_D | 1: SDL_Scancode << 30,
+ KP_E = SDL_Scancode::KP_E | 1: SDL_Scancode << 30,
+ KP_F = SDL_Scancode::KP_F | 1: SDL_Scancode << 30,
+ KP_XOR = SDL_Scancode::KP_XOR | 1: SDL_Scancode << 30,
+ KP_POWER = SDL_Scancode::KP_POWER | 1: SDL_Scancode << 30,
+ KP_PERCENT = SDL_Scancode::KP_PERCENT | 1: SDL_Scancode << 30,
+ KP_LESS = SDL_Scancode::KP_LESS | 1: SDL_Scancode << 30,
+ KP_GREATER = SDL_Scancode::KP_GREATER | 1: SDL_Scancode << 30,
+ KP_AMPERSAND = SDL_Scancode::KP_AMPERSAND | 1: SDL_Scancode << 30,
+ KP_DBLAMPERSAND = SDL_Scancode::KP_DBLAMPERSAND | 1: SDL_Scancode << 30,
+ KP_VERTICALBAR = SDL_Scancode::KP_VERTICALBAR | 1: SDL_Scancode << 30,
+ KP_DBLVERTICALBAR = SDL_Scancode::KP_DBLVERTICALBAR | 1: SDL_Scancode << 30,
+ KP_COLON = SDL_Scancode::KP_COLON | 1: SDL_Scancode << 30,
+ KP_HASH = SDL_Scancode::KP_HASH | 1: SDL_Scancode << 30,
+ KP_SPACE = SDL_Scancode::KP_SPACE | 1: SDL_Scancode << 30,
+ KP_AT = SDL_Scancode::KP_AT | 1: SDL_Scancode << 30,
+ KP_EXCLAM = SDL_Scancode::KP_EXCLAM | 1: SDL_Scancode << 30,
+ KP_MEMSTORE = SDL_Scancode::KP_MEMSTORE | 1: SDL_Scancode << 30,
+ KP_MEMRECALL = SDL_Scancode::KP_MEMRECALL | 1: SDL_Scancode << 30,
+ KP_MEMCLEAR = SDL_Scancode::KP_MEMCLEAR | 1: SDL_Scancode << 30,
+ KP_MEMADD = SDL_Scancode::KP_MEMADD | 1: SDL_Scancode << 30,
+ KP_MEMSUBTRACT = SDL_Scancode::KP_MEMSUBTRACT | 1: SDL_Scancode << 30,
+ KP_MEMMULTIPLY = SDL_Scancode::KP_MEMMULTIPLY | 1: SDL_Scancode << 30,
+ KP_MEMDIVIDE = SDL_Scancode::KP_MEMDIVIDE | 1: SDL_Scancode << 30,
+ KP_PLUSMINUS = SDL_Scancode::KP_PLUSMINUS | 1: SDL_Scancode << 30,
+ KP_CLEAR = SDL_Scancode::KP_CLEAR | 1: SDL_Scancode << 30,
+ KP_CLEARENTRY = SDL_Scancode::KP_CLEARENTRY | 1: SDL_Scancode << 30,
+ KP_BINARY = SDL_Scancode::KP_BINARY | 1: SDL_Scancode << 30,
+ KP_OCTAL = SDL_Scancode::KP_OCTAL | 1: SDL_Scancode << 30,
+ KP_DECIMAL = SDL_Scancode::KP_DECIMAL | 1: SDL_Scancode << 30,
+ KP_HEXADECIMAL = SDL_Scancode::KP_HEXADECIMAL | 1: SDL_Scancode << 30,
+
+ LCTRL = SDL_Scancode::LCTRL | 1: SDL_Scancode << 30,
+ LSHIFT = SDL_Scancode::LSHIFT | 1: SDL_Scancode << 30,
+ LALT = SDL_Scancode::LALT | 1: SDL_Scancode << 30,
+ LGUI = SDL_Scancode::LGUI | 1: SDL_Scancode << 30,
+ RCTRL = SDL_Scancode::RCTRL | 1: SDL_Scancode << 30,
+ RSHIFT = SDL_Scancode::RSHIFT | 1: SDL_Scancode << 30,
+ RALT = SDL_Scancode::RALT | 1: SDL_Scancode << 30,
+ RGUI = SDL_Scancode::RGUI | 1: SDL_Scancode << 30,
+
+ MODE = SDL_Scancode::MODE | 1: SDL_Scancode << 30,
+
+ AUDIONEXT = SDL_Scancode::AUDIONEXT | 1: SDL_Scancode << 30,
+ AUDIOPREV = SDL_Scancode::AUDIOPREV | 1: SDL_Scancode << 30,
+ AUDIOSTOP = SDL_Scancode::AUDIOSTOP | 1: SDL_Scancode << 30,
+ AUDIOPLAY = SDL_Scancode::AUDIOPLAY | 1: SDL_Scancode << 30,
+ AUDIOMUTE = SDL_Scancode::AUDIOMUTE | 1: SDL_Scancode << 30,
+ MEDIASELECT = SDL_Scancode::MEDIASELECT | 1: SDL_Scancode << 30,
+ WWW = SDL_Scancode::WWW | 1: SDL_Scancode << 30,
+ MAIL = SDL_Scancode::MAIL | 1: SDL_Scancode << 30,
+ CALCULATOR = SDL_Scancode::CALCULATOR | 1: SDL_Scancode << 30,
+ COMPUTER = SDL_Scancode::COMPUTER | 1: SDL_Scancode << 30,
+ AC_SEARCH = SDL_Scancode::AC_SEARCH | 1: SDL_Scancode << 30,
+ AC_HOME = SDL_Scancode::AC_HOME | 1: SDL_Scancode << 30,
+ AC_BACK = SDL_Scancode::AC_BACK | 1: SDL_Scancode << 30,
+ AC_FORWARD = SDL_Scancode::AC_FORWARD | 1: SDL_Scancode << 30,
+ AC_STOP = SDL_Scancode::AC_STOP | 1: SDL_Scancode << 30,
+ AC_REFRESH = SDL_Scancode::AC_REFRESH | 1: SDL_Scancode << 30,
+ AC_BOOKMARKS = SDL_Scancode::AC_BOOKMARKS | 1: SDL_Scancode << 30,
+
+ BRIGHTNESSDOWN = SDL_Scancode::BRIGHTNESSDOWN | 1: SDL_Scancode << 30,
+ BRIGHTNESSUP = SDL_Scancode::BRIGHTNESSUP | 1: SDL_Scancode << 30,
+ DISPLAYSWITCH = SDL_Scancode::DISPLAYSWITCH | 1: SDL_Scancode << 30,
+ KBDILLUMTOGGLE = SDL_Scancode::KBDILLUMTOGGLE | 1: SDL_Scancode << 30,
+ KBDILLUMDOWN = SDL_Scancode::KBDILLUMDOWN | 1: SDL_Scancode << 30,
+ KBDILLUMUP = SDL_Scancode::KBDILLUMUP | 1: SDL_Scancode << 30,
+ EJECT = SDL_Scancode::EJECT | 1: SDL_Scancode << 30,
+ SLEEP = SDL_Scancode::SLEEP | 1: SDL_Scancode << 30,
+ APP1 = SDL_Scancode::APP1 | 1: SDL_Scancode << 30,
+ APP2 = SDL_Scancode::APP2 | 1: SDL_Scancode << 30,
+
+ AUDIOREWIND = SDL_Scancode::AUDIOREWIND | 1: SDL_Scancode << 30,
+ AUDIOFASTFORWARD = SDL_Scancode::AUDIOFASTFORWARD | 1: SDL_Scancode << 30
+};
+
+export type SDL_Keymod = enum u16 {
+ NONE = 0x0000,
+ LSHIFT = 0x0001,
+ RSHIFT = 0x0002,
+ LCTRL = 0x0040,
+ RCTRL = 0x0080,
+ LALT = 0x0100,
+ RALT = 0x0200,
+ LGUI = 0x0400,
+ RGUI = 0x0800,
+ NUM = 0x1000,
+ CAPS = 0x2000,
+ MODE = 0x4000,
+ SCROLL = 0x8000,
+
+ CTRL = LCTRL | RCTRL,
+ SHIFT = LSHIFT | RSHIFT,
+ ALT = LALT | RALT,
+ GUI = LGUI | RGUI,
+
+ RESERVED = SCROLL,
+};
+
+export type SDL_Keysym = struct {
+ scancode: SDL_Scancode,
+ sym: SDL_Keycode,
+ mod: SDL_Keymod,
+ unused: u32,
+};
+
+@symbol("SDL_GetKeyFromName") fn _SDL_GetKeyFromName(name: *const c::char) SDL_Keycode;
+
+export fn SDL_GetKeyFromName(name: str) (SDL_Keycode | error) = {
+ const name = c::fromstr(name);
+ defer free(name);
+ const sym = _SDL_GetKeyFromName(name);
+ if (sym == SDL_Keycode::UNKNOWN) {
+ return c::tostr(SDL_GetError()): error;
+ };
+ return sym;
+};
+
+@symbol("SDL_GetKeyboardState") fn _SDL_GetKeyboardState(numkeys: *int) *[*]bool;
+
+export fn SDL_GetKeyboardState() []bool = {
+ let numkeys: int = 0;
+ let arr = _SDL_GetKeyboardState(&numkeys);
+ let arr = arr[..numkeys];
+ return arr;
+};