diff --git a/include/SDL_scancode.h b/include/SDL_scancode.h
index aaa782f8d..6f40884ee 100644
--- a/include/SDL_scancode.h
+++ b/include/SDL_scancode.h
@@ -345,6 +345,11 @@ typedef enum
* \name Usage page 0x0C
*
* These values are mapped from usage page 0x0C (USB consumer page).
+ * See https://usb.org/sites/default/files/hut1_2.pdf
+ *
+ * There are way more keys in the spec than we can represent in the
+ * current scancode range, so pick the ones that commonly come up in
+ * real world usage.
*/
/* @{ */
diff --git a/src/core/linux/SDL_evdev.c b/src/core/linux/SDL_evdev.c
index 6355e1392..f5ab06253 100644
--- a/src/core/linux/SDL_evdev.c
+++ b/src/core/linux/SDL_evdev.c
@@ -42,7 +42,7 @@
#include "SDL_endian.h"
#include "SDL_scancode.h"
#include "../../events/SDL_events_c.h"
-#include "../../events/scancodes_linux.h" /* adds linux_scancode_table */
+#include "../../events/SDL_scancode_tables_c.h"
#include "../../core/linux/SDL_evdev_capabilities.h"
#include "../../core/linux/SDL_udev.h"
@@ -509,23 +509,21 @@ SDL_EVDEV_Poll(void)
static SDL_Scancode
SDL_EVDEV_translate_keycode(int keycode)
{
- SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
+ SDL_Scancode scancode = SDL_GetScancodeFromTable(SDL_SCANCODE_TABLE_LINUX, keycode);
- if (keycode < SDL_arraysize(linux_scancode_table)) {
- scancode = linux_scancode_table[keycode];
-
- if (scancode == SDL_SCANCODE_UNKNOWN) {
- /* BTN_TOUCH is handled elsewhere, but we might still end up here if
- you get an unexpected BTN_TOUCH from something SDL believes is not
- a touch device. In this case, we'd rather not get a misleading
- SDL_Log message about an unknown key. */
- if (keycode != BTN_TOUCH) {
- SDL_Log("The key you just pressed is not recognized by SDL. To help "
- "get this fixed, please report this to the SDL forums/mailing list "
- " EVDEV KeyCode %d", keycode);
- }
+#ifdef DEBUG_SCANCODES
+ if (scancode == SDL_SCANCODE_UNKNOWN) {
+ /* BTN_TOUCH is handled elsewhere, but we might still end up here if
+ you get an unexpected BTN_TOUCH from something SDL believes is not
+ a touch device. In this case, we'd rather not get a misleading
+ SDL_Log message about an unknown key. */
+ if (keycode != BTN_TOUCH) {
+ SDL_Log("The key you just pressed is not recognized by SDL. To help "
+ "get this fixed, please report this to the SDL forums/mailing list "
+ " EVDEV KeyCode %d", keycode);
}
}
+#endif /* DEBUG_SCANCODES */
return scancode;
}
diff --git a/src/events/SDL_keyboard.c b/src/events/SDL_keyboard.c
index f83191251..b1e27e1ae 100644
--- a/src/events/SDL_keyboard.c
+++ b/src/events/SDL_keyboard.c
@@ -53,480 +53,591 @@ struct SDL_Keyboard
static SDL_Keyboard SDL_keyboard;
static const SDL_Keycode SDL_default_keymap[SDL_NUM_SCANCODES] = {
- 0, 0, 0, 0,
- 'a',
- 'b',
- 'c',
- 'd',
- 'e',
- 'f',
- 'g',
- 'h',
- 'i',
- 'j',
- 'k',
- 'l',
- 'm',
- 'n',
- 'o',
- 'p',
- 'q',
- 'r',
- 's',
- 't',
- 'u',
- 'v',
- 'w',
- 'x',
- 'y',
- 'z',
- '1',
- '2',
- '3',
- '4',
- '5',
- '6',
- '7',
- '8',
- '9',
- '0',
- SDLK_RETURN,
- SDLK_ESCAPE,
- SDLK_BACKSPACE,
- SDLK_TAB,
- SDLK_SPACE,
- '-',
- '=',
- '[',
- ']',
- '\\',
- '#',
- ';',
- '\'',
- '`',
- ',',
- '.',
- '/',
- SDLK_CAPSLOCK,
- SDLK_F1,
- SDLK_F2,
- SDLK_F3,
- SDLK_F4,
- SDLK_F5,
- SDLK_F6,
- SDLK_F7,
- SDLK_F8,
- SDLK_F9,
- SDLK_F10,
- SDLK_F11,
- SDLK_F12,
- SDLK_PRINTSCREEN,
- SDLK_SCROLLLOCK,
- SDLK_PAUSE,
- SDLK_INSERT,
- SDLK_HOME,
- SDLK_PAGEUP,
- SDLK_DELETE,
- SDLK_END,
- SDLK_PAGEDOWN,
- SDLK_RIGHT,
- SDLK_LEFT,
- SDLK_DOWN,
- SDLK_UP,
- SDLK_NUMLOCKCLEAR,
- SDLK_KP_DIVIDE,
- SDLK_KP_MULTIPLY,
- SDLK_KP_MINUS,
- SDLK_KP_PLUS,
- SDLK_KP_ENTER,
- SDLK_KP_1,
- SDLK_KP_2,
- SDLK_KP_3,
- SDLK_KP_4,
- SDLK_KP_5,
- SDLK_KP_6,
- SDLK_KP_7,
- SDLK_KP_8,
- SDLK_KP_9,
- SDLK_KP_0,
- SDLK_KP_PERIOD,
- 0,
- SDLK_APPLICATION,
- SDLK_POWER,
- SDLK_KP_EQUALS,
- SDLK_F13,
- SDLK_F14,
- SDLK_F15,
- SDLK_F16,
- SDLK_F17,
- SDLK_F18,
- SDLK_F19,
- SDLK_F20,
- SDLK_F21,
- SDLK_F22,
- SDLK_F23,
- SDLK_F24,
- SDLK_EXECUTE,
- SDLK_HELP,
- SDLK_MENU,
- SDLK_SELECT,
- SDLK_STOP,
- SDLK_AGAIN,
- SDLK_UNDO,
- SDLK_CUT,
- SDLK_COPY,
- SDLK_PASTE,
- SDLK_FIND,
- SDLK_MUTE,
- SDLK_VOLUMEUP,
- SDLK_VOLUMEDOWN,
- 0, 0, 0,
- SDLK_KP_COMMA,
- SDLK_KP_EQUALSAS400,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- SDLK_ALTERASE,
- SDLK_SYSREQ,
- SDLK_CANCEL,
- SDLK_CLEAR,
- SDLK_PRIOR,
- SDLK_RETURN2,
- SDLK_SEPARATOR,
- SDLK_OUT,
- SDLK_OPER,
- SDLK_CLEARAGAIN,
- SDLK_CRSEL,
- SDLK_EXSEL,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- SDLK_KP_00,
- SDLK_KP_000,
- SDLK_THOUSANDSSEPARATOR,
- SDLK_DECIMALSEPARATOR,
- SDLK_CURRENCYUNIT,
- SDLK_CURRENCYSUBUNIT,
- SDLK_KP_LEFTPAREN,
- SDLK_KP_RIGHTPAREN,
- SDLK_KP_LEFTBRACE,
- SDLK_KP_RIGHTBRACE,
- SDLK_KP_TAB,
- SDLK_KP_BACKSPACE,
- SDLK_KP_A,
- SDLK_KP_B,
- SDLK_KP_C,
- SDLK_KP_D,
- SDLK_KP_E,
- SDLK_KP_F,
- SDLK_KP_XOR,
- SDLK_KP_POWER,
- SDLK_KP_PERCENT,
- SDLK_KP_LESS,
- SDLK_KP_GREATER,
- SDLK_KP_AMPERSAND,
- SDLK_KP_DBLAMPERSAND,
- SDLK_KP_VERTICALBAR,
- SDLK_KP_DBLVERTICALBAR,
- SDLK_KP_COLON,
- SDLK_KP_HASH,
- SDLK_KP_SPACE,
- SDLK_KP_AT,
- SDLK_KP_EXCLAM,
- SDLK_KP_MEMSTORE,
- SDLK_KP_MEMRECALL,
- SDLK_KP_MEMCLEAR,
- SDLK_KP_MEMADD,
- SDLK_KP_MEMSUBTRACT,
- SDLK_KP_MEMMULTIPLY,
- SDLK_KP_MEMDIVIDE,
- SDLK_KP_PLUSMINUS,
- SDLK_KP_CLEAR,
- SDLK_KP_CLEARENTRY,
- SDLK_KP_BINARY,
- SDLK_KP_OCTAL,
- SDLK_KP_DECIMAL,
- SDLK_KP_HEXADECIMAL,
- 0, 0,
- SDLK_LCTRL,
- SDLK_LSHIFT,
- SDLK_LALT,
- SDLK_LGUI,
- SDLK_RCTRL,
- SDLK_RSHIFT,
- SDLK_RALT,
- SDLK_RGUI,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- SDLK_MODE,
- SDLK_AUDIONEXT,
- SDLK_AUDIOPREV,
- SDLK_AUDIOSTOP,
- SDLK_AUDIOPLAY,
- SDLK_AUDIOMUTE,
- SDLK_MEDIASELECT,
- SDLK_WWW,
- SDLK_MAIL,
- SDLK_CALCULATOR,
- SDLK_COMPUTER,
- SDLK_AC_SEARCH,
- SDLK_AC_HOME,
- SDLK_AC_BACK,
- SDLK_AC_FORWARD,
- SDLK_AC_STOP,
- SDLK_AC_REFRESH,
- SDLK_AC_BOOKMARKS,
- SDLK_BRIGHTNESSDOWN,
- SDLK_BRIGHTNESSUP,
- SDLK_DISPLAYSWITCH,
- SDLK_KBDILLUMTOGGLE,
- SDLK_KBDILLUMDOWN,
- SDLK_KBDILLUMUP,
- SDLK_EJECT,
- SDLK_SLEEP,
- SDLK_APP1,
- SDLK_APP2,
- SDLK_AUDIOREWIND,
- SDLK_AUDIOFASTFORWARD,
- SDLK_SOFTLEFT,
- SDLK_SOFTRIGHT,
- SDLK_CALL,
- SDLK_ENDCALL,
+ /* 0 */ 0,
+ /* 1 */ 0,
+ /* 2 */ 0,
+ /* 3 */ 0,
+ /* 4 */ 'a',
+ /* 5 */ 'b',
+ /* 6 */ 'c',
+ /* 7 */ 'd',
+ /* 8 */ 'e',
+ /* 9 */ 'f',
+ /* 10 */ 'g',
+ /* 11 */ 'h',
+ /* 12 */ 'i',
+ /* 13 */ 'j',
+ /* 14 */ 'k',
+ /* 15 */ 'l',
+ /* 16 */ 'm',
+ /* 17 */ 'n',
+ /* 18 */ 'o',
+ /* 19 */ 'p',
+ /* 20 */ 'q',
+ /* 21 */ 'r',
+ /* 22 */ 's',
+ /* 23 */ 't',
+ /* 24 */ 'u',
+ /* 25 */ 'v',
+ /* 26 */ 'w',
+ /* 27 */ 'x',
+ /* 28 */ 'y',
+ /* 29 */ 'z',
+ /* 30 */ '1',
+ /* 31 */ '2',
+ /* 32 */ '3',
+ /* 33 */ '4',
+ /* 34 */ '5',
+ /* 35 */ '6',
+ /* 36 */ '7',
+ /* 37 */ '8',
+ /* 38 */ '9',
+ /* 39 */ '0',
+ /* 40 */ SDLK_RETURN,
+ /* 41 */ SDLK_ESCAPE,
+ /* 42 */ SDLK_BACKSPACE,
+ /* 43 */ SDLK_TAB,
+ /* 44 */ SDLK_SPACE,
+ /* 45 */ '-',
+ /* 46 */ '=',
+ /* 47 */ '[',
+ /* 48 */ ']',
+ /* 49 */ '\\',
+ /* 50 */ '#',
+ /* 51 */ ';',
+ /* 52 */ '\'',
+ /* 53 */ '`',
+ /* 54 */ ',',
+ /* 55 */ '.',
+ /* 56 */ '/',
+ /* 57 */ SDLK_CAPSLOCK,
+ /* 58 */ SDLK_F1,
+ /* 59 */ SDLK_F2,
+ /* 60 */ SDLK_F3,
+ /* 61 */ SDLK_F4,
+ /* 62 */ SDLK_F5,
+ /* 63 */ SDLK_F6,
+ /* 64 */ SDLK_F7,
+ /* 65 */ SDLK_F8,
+ /* 66 */ SDLK_F9,
+ /* 67 */ SDLK_F10,
+ /* 68 */ SDLK_F11,
+ /* 69 */ SDLK_F12,
+ /* 70 */ SDLK_PRINTSCREEN,
+ /* 71 */ SDLK_SCROLLLOCK,
+ /* 72 */ SDLK_PAUSE,
+ /* 73 */ SDLK_INSERT,
+ /* 74 */ SDLK_HOME,
+ /* 75 */ SDLK_PAGEUP,
+ /* 76 */ SDLK_DELETE,
+ /* 77 */ SDLK_END,
+ /* 78 */ SDLK_PAGEDOWN,
+ /* 79 */ SDLK_RIGHT,
+ /* 80 */ SDLK_LEFT,
+ /* 81 */ SDLK_DOWN,
+ /* 82 */ SDLK_UP,
+ /* 83 */ SDLK_NUMLOCKCLEAR,
+ /* 84 */ SDLK_KP_DIVIDE,
+ /* 85 */ SDLK_KP_MULTIPLY,
+ /* 86 */ SDLK_KP_MINUS,
+ /* 87 */ SDLK_KP_PLUS,
+ /* 88 */ SDLK_KP_ENTER,
+ /* 89 */ SDLK_KP_1,
+ /* 90 */ SDLK_KP_2,
+ /* 91 */ SDLK_KP_3,
+ /* 92 */ SDLK_KP_4,
+ /* 93 */ SDLK_KP_5,
+ /* 94 */ SDLK_KP_6,
+ /* 95 */ SDLK_KP_7,
+ /* 96 */ SDLK_KP_8,
+ /* 97 */ SDLK_KP_9,
+ /* 98 */ SDLK_KP_0,
+ /* 99 */ SDLK_KP_PERIOD,
+ /* 100 */ 0,
+ /* 101 */ SDLK_APPLICATION,
+ /* 102 */ SDLK_POWER,
+ /* 103 */ SDLK_KP_EQUALS,
+ /* 104 */ SDLK_F13,
+ /* 105 */ SDLK_F14,
+ /* 106 */ SDLK_F15,
+ /* 107 */ SDLK_F16,
+ /* 108 */ SDLK_F17,
+ /* 109 */ SDLK_F18,
+ /* 110 */ SDLK_F19,
+ /* 111 */ SDLK_F20,
+ /* 112 */ SDLK_F21,
+ /* 113 */ SDLK_F22,
+ /* 114 */ SDLK_F23,
+ /* 115 */ SDLK_F24,
+ /* 116 */ SDLK_EXECUTE,
+ /* 117 */ SDLK_HELP,
+ /* 118 */ SDLK_MENU,
+ /* 119 */ SDLK_SELECT,
+ /* 120 */ SDLK_STOP,
+ /* 121 */ SDLK_AGAIN,
+ /* 122 */ SDLK_UNDO,
+ /* 123 */ SDLK_CUT,
+ /* 124 */ SDLK_COPY,
+ /* 125 */ SDLK_PASTE,
+ /* 126 */ SDLK_FIND,
+ /* 127 */ SDLK_MUTE,
+ /* 128 */ SDLK_VOLUMEUP,
+ /* 129 */ SDLK_VOLUMEDOWN,
+ /* 130 */ 0,
+ /* 131 */ 0,
+ /* 132 */ 0,
+ /* 133 */ SDLK_KP_COMMA,
+ /* 134 */ SDLK_KP_EQUALSAS400,
+ /* 135 */ 0,
+ /* 136 */ 0,
+ /* 137 */ 0,
+ /* 138 */ 0,
+ /* 139 */ 0,
+ /* 140 */ 0,
+ /* 141 */ 0,
+ /* 142 */ 0,
+ /* 143 */ 0,
+ /* 144 */ 0,
+ /* 145 */ 0,
+ /* 146 */ 0,
+ /* 147 */ 0,
+ /* 148 */ 0,
+ /* 149 */ 0,
+ /* 150 */ 0,
+ /* 151 */ 0,
+ /* 152 */ 0,
+ /* 153 */ SDLK_ALTERASE,
+ /* 154 */ SDLK_SYSREQ,
+ /* 155 */ SDLK_CANCEL,
+ /* 156 */ SDLK_CLEAR,
+ /* 157 */ SDLK_PRIOR,
+ /* 158 */ SDLK_RETURN2,
+ /* 159 */ SDLK_SEPARATOR,
+ /* 160 */ SDLK_OUT,
+ /* 161 */ SDLK_OPER,
+ /* 162 */ SDLK_CLEARAGAIN,
+ /* 163 */ SDLK_CRSEL,
+ /* 164 */ SDLK_EXSEL,
+ /* 165 */ 0,
+ /* 166 */ 0,
+ /* 167 */ 0,
+ /* 168 */ 0,
+ /* 169 */ 0,
+ /* 170 */ 0,
+ /* 171 */ 0,
+ /* 172 */ 0,
+ /* 173 */ 0,
+ /* 174 */ 0,
+ /* 175 */ 0,
+ /* 176 */ SDLK_KP_00,
+ /* 177 */ SDLK_KP_000,
+ /* 178 */ SDLK_THOUSANDSSEPARATOR,
+ /* 179 */ SDLK_DECIMALSEPARATOR,
+ /* 180 */ SDLK_CURRENCYUNIT,
+ /* 181 */ SDLK_CURRENCYSUBUNIT,
+ /* 182 */ SDLK_KP_LEFTPAREN,
+ /* 183 */ SDLK_KP_RIGHTPAREN,
+ /* 184 */ SDLK_KP_LEFTBRACE,
+ /* 185 */ SDLK_KP_RIGHTBRACE,
+ /* 186 */ SDLK_KP_TAB,
+ /* 187 */ SDLK_KP_BACKSPACE,
+ /* 188 */ SDLK_KP_A,
+ /* 189 */ SDLK_KP_B,
+ /* 190 */ SDLK_KP_C,
+ /* 191 */ SDLK_KP_D,
+ /* 192 */ SDLK_KP_E,
+ /* 193 */ SDLK_KP_F,
+ /* 194 */ SDLK_KP_XOR,
+ /* 195 */ SDLK_KP_POWER,
+ /* 196 */ SDLK_KP_PERCENT,
+ /* 197 */ SDLK_KP_LESS,
+ /* 198 */ SDLK_KP_GREATER,
+ /* 199 */ SDLK_KP_AMPERSAND,
+ /* 200 */ SDLK_KP_DBLAMPERSAND,
+ /* 201 */ SDLK_KP_VERTICALBAR,
+ /* 202 */ SDLK_KP_DBLVERTICALBAR,
+ /* 203 */ SDLK_KP_COLON,
+ /* 204 */ SDLK_KP_HASH,
+ /* 205 */ SDLK_KP_SPACE,
+ /* 206 */ SDLK_KP_AT,
+ /* 207 */ SDLK_KP_EXCLAM,
+ /* 208 */ SDLK_KP_MEMSTORE,
+ /* 209 */ SDLK_KP_MEMRECALL,
+ /* 210 */ SDLK_KP_MEMCLEAR,
+ /* 211 */ SDLK_KP_MEMADD,
+ /* 212 */ SDLK_KP_MEMSUBTRACT,
+ /* 213 */ SDLK_KP_MEMMULTIPLY,
+ /* 214 */ SDLK_KP_MEMDIVIDE,
+ /* 215 */ SDLK_KP_PLUSMINUS,
+ /* 216 */ SDLK_KP_CLEAR,
+ /* 217 */ SDLK_KP_CLEARENTRY,
+ /* 218 */ SDLK_KP_BINARY,
+ /* 219 */ SDLK_KP_OCTAL,
+ /* 220 */ SDLK_KP_DECIMAL,
+ /* 221 */ SDLK_KP_HEXADECIMAL,
+ /* 222 */ 0,
+ /* 223 */ 0,
+ /* 224 */ SDLK_LCTRL,
+ /* 225 */ SDLK_LSHIFT,
+ /* 226 */ SDLK_LALT,
+ /* 227 */ SDLK_LGUI,
+ /* 228 */ SDLK_RCTRL,
+ /* 229 */ SDLK_RSHIFT,
+ /* 230 */ SDLK_RALT,
+ /* 231 */ SDLK_RGUI,
+ /* 232 */ 0,
+ /* 233 */ 0,
+ /* 234 */ 0,
+ /* 235 */ 0,
+ /* 236 */ 0,
+ /* 237 */ 0,
+ /* 238 */ 0,
+ /* 239 */ 0,
+ /* 240 */ 0,
+ /* 241 */ 0,
+ /* 242 */ 0,
+ /* 243 */ 0,
+ /* 244 */ 0,
+ /* 245 */ 0,
+ /* 246 */ 0,
+ /* 247 */ 0,
+ /* 248 */ 0,
+ /* 249 */ 0,
+ /* 250 */ 0,
+ /* 251 */ 0,
+ /* 252 */ 0,
+ /* 253 */ 0,
+ /* 254 */ 0,
+ /* 255 */ 0,
+ /* 256 */ 0,
+ /* 257 */ SDLK_MODE,
+ /* 258 */ SDLK_AUDIONEXT,
+ /* 259 */ SDLK_AUDIOPREV,
+ /* 260 */ SDLK_AUDIOSTOP,
+ /* 261 */ SDLK_AUDIOPLAY,
+ /* 262 */ SDLK_AUDIOMUTE,
+ /* 263 */ SDLK_MEDIASELECT,
+ /* 264 */ SDLK_WWW,
+ /* 265 */ SDLK_MAIL,
+ /* 266 */ SDLK_CALCULATOR,
+ /* 267 */ SDLK_COMPUTER,
+ /* 268 */ SDLK_AC_SEARCH,
+ /* 269 */ SDLK_AC_HOME,
+ /* 270 */ SDLK_AC_BACK,
+ /* 271 */ SDLK_AC_FORWARD,
+ /* 272 */ SDLK_AC_STOP,
+ /* 273 */ SDLK_AC_REFRESH,
+ /* 274 */ SDLK_AC_BOOKMARKS,
+ /* 275 */ SDLK_BRIGHTNESSDOWN,
+ /* 276 */ SDLK_BRIGHTNESSUP,
+ /* 277 */ SDLK_DISPLAYSWITCH,
+ /* 278 */ SDLK_KBDILLUMTOGGLE,
+ /* 279 */ SDLK_KBDILLUMDOWN,
+ /* 280 */ SDLK_KBDILLUMUP,
+ /* 281 */ SDLK_EJECT,
+ /* 282 */ SDLK_SLEEP,
+ /* 283 */ SDLK_APP1,
+ /* 284 */ SDLK_APP2,
+ /* 285 */ SDLK_AUDIOREWIND,
+ /* 286 */ SDLK_AUDIOFASTFORWARD,
+ /* 287 */ SDLK_SOFTLEFT,
+ /* 288 */ SDLK_SOFTRIGHT,
+ /* 289 */ SDLK_CALL,
+ /* 290 */ SDLK_ENDCALL,
};
static const char *SDL_scancode_names[SDL_NUM_SCANCODES] = {
- NULL, NULL, NULL, NULL,
- "A",
- "B",
- "C",
- "D",
- "E",
- "F",
- "G",
- "H",
- "I",
- "J",
- "K",
- "L",
- "M",
- "N",
- "O",
- "P",
- "Q",
- "R",
- "S",
- "T",
- "U",
- "V",
- "W",
- "X",
- "Y",
- "Z",
- "1",
- "2",
- "3",
- "4",
- "5",
- "6",
- "7",
- "8",
- "9",
- "0",
- "Return",
- "Escape",
- "Backspace",
- "Tab",
- "Space",
- "-",
- "=",
- "[",
- "]",
- "\\",
- "#",
- ";",
- "'",
- "`",
- ",",
- ".",
- "/",
- "CapsLock",
- "F1",
- "F2",
- "F3",
- "F4",
- "F5",
- "F6",
- "F7",
- "F8",
- "F9",
- "F10",
- "F11",
- "F12",
- "PrintScreen",
- "ScrollLock",
- "Pause",
- "Insert",
- "Home",
- "PageUp",
- "Delete",
- "End",
- "PageDown",
- "Right",
- "Left",
- "Down",
- "Up",
- "Numlock",
- "Keypad /",
- "Keypad *",
- "Keypad -",
- "Keypad +",
- "Keypad Enter",
- "Keypad 1",
- "Keypad 2",
- "Keypad 3",
- "Keypad 4",
- "Keypad 5",
- "Keypad 6",
- "Keypad 7",
- "Keypad 8",
- "Keypad 9",
- "Keypad 0",
- "Keypad .",
- NULL,
- "Application",
- "Power",
- "Keypad =",
- "F13",
- "F14",
- "F15",
- "F16",
- "F17",
- "F18",
- "F19",
- "F20",
- "F21",
- "F22",
- "F23",
- "F24",
- "Execute",
- "Help",
- "Menu",
- "Select",
- "Stop",
- "Again",
- "Undo",
- "Cut",
- "Copy",
- "Paste",
- "Find",
- "Mute",
- "VolumeUp",
- "VolumeDown",
- NULL, NULL, NULL,
- "Keypad ,",
- "Keypad = (AS400)",
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- "AltErase",
- "SysReq",
- "Cancel",
- "Clear",
- "Prior",
- "Return",
- "Separator",
- "Out",
- "Oper",
- "Clear / Again",
- "CrSel",
- "ExSel",
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- "Keypad 00",
- "Keypad 000",
- "ThousandsSeparator",
- "DecimalSeparator",
- "CurrencyUnit",
- "CurrencySubUnit",
- "Keypad (",
- "Keypad )",
- "Keypad {",
- "Keypad }",
- "Keypad Tab",
- "Keypad Backspace",
- "Keypad A",
- "Keypad B",
- "Keypad C",
- "Keypad D",
- "Keypad E",
- "Keypad F",
- "Keypad XOR",
- "Keypad ^",
- "Keypad %",
- "Keypad <",
- "Keypad >",
- "Keypad &",
- "Keypad &&",
- "Keypad |",
- "Keypad ||",
- "Keypad :",
- "Keypad #",
- "Keypad Space",
- "Keypad @",
- "Keypad !",
- "Keypad MemStore",
- "Keypad MemRecall",
- "Keypad MemClear",
- "Keypad MemAdd",
- "Keypad MemSubtract",
- "Keypad MemMultiply",
- "Keypad MemDivide",
- "Keypad +/-",
- "Keypad Clear",
- "Keypad ClearEntry",
- "Keypad Binary",
- "Keypad Octal",
- "Keypad Decimal",
- "Keypad Hexadecimal",
- NULL, NULL,
- "Left Ctrl",
- "Left Shift",
- "Left Alt",
- "Left GUI",
- "Right Ctrl",
- "Right Shift",
- "Right Alt",
- "Right GUI",
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL,
- "ModeSwitch",
- "AudioNext",
- "AudioPrev",
- "AudioStop",
- "AudioPlay",
- "AudioMute",
- "MediaSelect",
- "WWW",
- "Mail",
- "Calculator",
- "Computer",
- "AC Search",
- "AC Home",
- "AC Back",
- "AC Forward",
- "AC Stop",
- "AC Refresh",
- "AC Bookmarks",
- "BrightnessDown",
- "BrightnessUp",
- "DisplaySwitch",
- "KBDIllumToggle",
- "KBDIllumDown",
- "KBDIllumUp",
- "Eject",
- "Sleep",
- "App1",
- "App2",
- "AudioRewind",
- "AudioFastForward",
- "SoftLeft",
- "SoftRight",
- "Call",
- "EndCall",
+ /* 0 */ NULL,
+ /* 1 */ NULL,
+ /* 2 */ NULL,
+ /* 3 */ NULL,
+ /* 4 */ "A",
+ /* 5 */ "B",
+ /* 6 */ "C",
+ /* 7 */ "D",
+ /* 8 */ "E",
+ /* 9 */ "F",
+ /* 10 */ "G",
+ /* 11 */ "H",
+ /* 12 */ "I",
+ /* 13 */ "J",
+ /* 14 */ "K",
+ /* 15 */ "L",
+ /* 16 */ "M",
+ /* 17 */ "N",
+ /* 18 */ "O",
+ /* 19 */ "P",
+ /* 20 */ "Q",
+ /* 21 */ "R",
+ /* 22 */ "S",
+ /* 23 */ "T",
+ /* 24 */ "U",
+ /* 25 */ "V",
+ /* 26 */ "W",
+ /* 27 */ "X",
+ /* 28 */ "Y",
+ /* 29 */ "Z",
+ /* 30 */ "1",
+ /* 31 */ "2",
+ /* 32 */ "3",
+ /* 33 */ "4",
+ /* 34 */ "5",
+ /* 35 */ "6",
+ /* 36 */ "7",
+ /* 37 */ "8",
+ /* 38 */ "9",
+ /* 39 */ "0",
+ /* 40 */ "Return",
+ /* 41 */ "Escape",
+ /* 42 */ "Backspace",
+ /* 43 */ "Tab",
+ /* 44 */ "Space",
+ /* 45 */ "-",
+ /* 46 */ "=",
+ /* 47 */ "[",
+ /* 48 */ "]",
+ /* 49 */ "\\",
+ /* 50 */ "#",
+ /* 51 */ ";",
+ /* 52 */ "'",
+ /* 53 */ "`",
+ /* 54 */ ",",
+ /* 55 */ ".",
+ /* 56 */ "/",
+ /* 57 */ "CapsLock",
+ /* 58 */ "F1",
+ /* 59 */ "F2",
+ /* 60 */ "F3",
+ /* 61 */ "F4",
+ /* 62 */ "F5",
+ /* 63 */ "F6",
+ /* 64 */ "F7",
+ /* 65 */ "F8",
+ /* 66 */ "F9",
+ /* 67 */ "F10",
+ /* 68 */ "F11",
+ /* 69 */ "F12",
+ /* 70 */ "PrintScreen",
+ /* 71 */ "ScrollLock",
+ /* 72 */ "Pause",
+ /* 73 */ "Insert",
+ /* 74 */ "Home",
+ /* 75 */ "PageUp",
+ /* 76 */ "Delete",
+ /* 77 */ "End",
+ /* 78 */ "PageDown",
+ /* 79 */ "Right",
+ /* 80 */ "Left",
+ /* 81 */ "Down",
+ /* 82 */ "Up",
+ /* 83 */ "Numlock",
+ /* 84 */ "Keypad /",
+ /* 85 */ "Keypad *",
+ /* 86 */ "Keypad -",
+ /* 87 */ "Keypad +",
+ /* 88 */ "Keypad Enter",
+ /* 89 */ "Keypad 1",
+ /* 90 */ "Keypad 2",
+ /* 91 */ "Keypad 3",
+ /* 92 */ "Keypad 4",
+ /* 93 */ "Keypad 5",
+ /* 94 */ "Keypad 6",
+ /* 95 */ "Keypad 7",
+ /* 96 */ "Keypad 8",
+ /* 97 */ "Keypad 9",
+ /* 98 */ "Keypad 0",
+ /* 99 */ "Keypad .",
+ /* 100 */ NULL,
+ /* 101 */ "Application",
+ /* 102 */ "Power",
+ /* 103 */ "Keypad =",
+ /* 104 */ "F13",
+ /* 105 */ "F14",
+ /* 106 */ "F15",
+ /* 107 */ "F16",
+ /* 108 */ "F17",
+ /* 109 */ "F18",
+ /* 110 */ "F19",
+ /* 111 */ "F20",
+ /* 112 */ "F21",
+ /* 113 */ "F22",
+ /* 114 */ "F23",
+ /* 115 */ "F24",
+ /* 116 */ "Execute",
+ /* 117 */ "Help",
+ /* 118 */ "Menu",
+ /* 119 */ "Select",
+ /* 120 */ "Stop",
+ /* 121 */ "Again",
+ /* 122 */ "Undo",
+ /* 123 */ "Cut",
+ /* 124 */ "Copy",
+ /* 125 */ "Paste",
+ /* 126 */ "Find",
+ /* 127 */ "Mute",
+ /* 128 */ "VolumeUp",
+ /* 129 */ "VolumeDown",
+ /* 130 */ NULL,
+ /* 131 */ NULL,
+ /* 132 */ NULL,
+ /* 133 */ "Keypad ,",
+ /* 134 */ "Keypad = (AS400)",
+ /* 135 */ NULL,
+ /* 136 */ NULL,
+ /* 137 */ NULL,
+ /* 138 */ NULL,
+ /* 139 */ NULL,
+ /* 140 */ NULL,
+ /* 141 */ NULL,
+ /* 142 */ NULL,
+ /* 143 */ NULL,
+ /* 144 */ NULL,
+ /* 145 */ NULL,
+ /* 146 */ NULL,
+ /* 147 */ NULL,
+ /* 148 */ NULL,
+ /* 149 */ NULL,
+ /* 150 */ NULL,
+ /* 151 */ NULL,
+ /* 152 */ NULL,
+ /* 153 */ "AltErase",
+ /* 154 */ "SysReq",
+ /* 155 */ "Cancel",
+ /* 156 */ "Clear",
+ /* 157 */ "Prior",
+ /* 158 */ "Return",
+ /* 159 */ "Separator",
+ /* 160 */ "Out",
+ /* 161 */ "Oper",
+ /* 162 */ "Clear / Again",
+ /* 163 */ "CrSel",
+ /* 164 */ "ExSel",
+ /* 165 */ NULL,
+ /* 166 */ NULL,
+ /* 167 */ NULL,
+ /* 168 */ NULL,
+ /* 169 */ NULL,
+ /* 170 */ NULL,
+ /* 171 */ NULL,
+ /* 172 */ NULL,
+ /* 173 */ NULL,
+ /* 174 */ NULL,
+ /* 175 */ NULL,
+ /* 176 */ "Keypad 00",
+ /* 177 */ "Keypad 000",
+ /* 178 */ "ThousandsSeparator",
+ /* 179 */ "DecimalSeparator",
+ /* 180 */ "CurrencyUnit",
+ /* 181 */ "CurrencySubUnit",
+ /* 182 */ "Keypad (",
+ /* 183 */ "Keypad )",
+ /* 184 */ "Keypad {",
+ /* 185 */ "Keypad }",
+ /* 186 */ "Keypad Tab",
+ /* 187 */ "Keypad Backspace",
+ /* 188 */ "Keypad A",
+ /* 189 */ "Keypad B",
+ /* 190 */ "Keypad C",
+ /* 191 */ "Keypad D",
+ /* 192 */ "Keypad E",
+ /* 193 */ "Keypad F",
+ /* 194 */ "Keypad XOR",
+ /* 195 */ "Keypad ^",
+ /* 196 */ "Keypad %",
+ /* 197 */ "Keypad <",
+ /* 198 */ "Keypad >",
+ /* 199 */ "Keypad &",
+ /* 200 */ "Keypad &&",
+ /* 201 */ "Keypad |",
+ /* 202 */ "Keypad ||",
+ /* 203 */ "Keypad :",
+ /* 204 */ "Keypad #",
+ /* 205 */ "Keypad Space",
+ /* 206 */ "Keypad @",
+ /* 207 */ "Keypad !",
+ /* 208 */ "Keypad MemStore",
+ /* 209 */ "Keypad MemRecall",
+ /* 210 */ "Keypad MemClear",
+ /* 211 */ "Keypad MemAdd",
+ /* 212 */ "Keypad MemSubtract",
+ /* 213 */ "Keypad MemMultiply",
+ /* 214 */ "Keypad MemDivide",
+ /* 215 */ "Keypad +/-",
+ /* 216 */ "Keypad Clear",
+ /* 217 */ "Keypad ClearEntry",
+ /* 218 */ "Keypad Binary",
+ /* 219 */ "Keypad Octal",
+ /* 220 */ "Keypad Decimal",
+ /* 221 */ "Keypad Hexadecimal",
+ /* 222 */ NULL,
+ /* 223 */ NULL,
+ /* 224 */ "Left Ctrl",
+ /* 225 */ "Left Shift",
+ /* 226 */ "Left Alt",
+ /* 227 */ "Left GUI",
+ /* 228 */ "Right Ctrl",
+ /* 229 */ "Right Shift",
+ /* 230 */ "Right Alt",
+ /* 231 */ "Right GUI",
+ /* 232 */ NULL,
+ /* 233 */ NULL,
+ /* 234 */ NULL,
+ /* 235 */ NULL,
+ /* 236 */ NULL,
+ /* 237 */ NULL,
+ /* 238 */ NULL,
+ /* 239 */ NULL,
+ /* 240 */ NULL,
+ /* 241 */ NULL,
+ /* 242 */ NULL,
+ /* 243 */ NULL,
+ /* 244 */ NULL,
+ /* 245 */ NULL,
+ /* 246 */ NULL,
+ /* 247 */ NULL,
+ /* 248 */ NULL,
+ /* 249 */ NULL,
+ /* 250 */ NULL,
+ /* 251 */ NULL,
+ /* 252 */ NULL,
+ /* 253 */ NULL,
+ /* 254 */ NULL,
+ /* 255 */ NULL,
+ /* 256 */ NULL,
+ /* 257 */ "ModeSwitch",
+ /* 258 */ "AudioNext",
+ /* 259 */ "AudioPrev",
+ /* 260 */ "AudioStop",
+ /* 261 */ "AudioPlay",
+ /* 262 */ "AudioMute",
+ /* 263 */ "MediaSelect",
+ /* 264 */ "WWW",
+ /* 265 */ "Mail",
+ /* 266 */ "Calculator",
+ /* 267 */ "Computer",
+ /* 268 */ "AC Search",
+ /* 269 */ "AC Home",
+ /* 270 */ "AC Back",
+ /* 271 */ "AC Forward",
+ /* 272 */ "AC Stop",
+ /* 273 */ "AC Refresh",
+ /* 274 */ "AC Bookmarks",
+ /* 275 */ "BrightnessDown",
+ /* 276 */ "BrightnessUp",
+ /* 277 */ "DisplaySwitch",
+ /* 278 */ "KBDIllumToggle",
+ /* 279 */ "KBDIllumDown",
+ /* 280 */ "KBDIllumUp",
+ /* 281 */ "Eject",
+ /* 282 */ "Sleep",
+ /* 283 */ "App1",
+ /* 284 */ "App2",
+ /* 285 */ "AudioRewind",
+ /* 286 */ "AudioFastForward",
+ /* 287 */ "SoftLeft",
+ /* 288 */ "SoftRight",
+ /* 289 */ "Call",
+ /* 290 */ "EndCall",
};
/* Taken from SDL_iconv() */
diff --git a/src/events/SDL_scancode_tables.c b/src/events/SDL_scancode_tables.c
new file mode 100644
index 000000000..9c9a55fe8
--- /dev/null
+++ b/src/events/SDL_scancode_tables.c
@@ -0,0 +1,73 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2022 Sam Lantinga
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+#include "../SDL_internal.h"
+
+#if SDL_INPUT_LINUXEV || SDL_VIDEO_DRIVER_DIRECTFB || SDL_VIDEO_DRIVER_WAYLAND || SDL_VIDEO_DRIVER_X11
+
+#include "SDL_scancode_tables_c.h"
+
+#include "scancodes_darwin.h"
+#include "scancodes_linux.h"
+#include "scancodes_xfree86.h"
+
+static const struct
+{
+ SDL_ScancodeTable table;
+ SDL_Scancode const *scancodes;
+ int num_entries;
+} SDL_scancode_tables[] = {
+ { SDL_SCANCODE_TABLE_DARWIN, darwin_scancode_table, SDL_arraysize(darwin_scancode_table) },
+ { SDL_SCANCODE_TABLE_LINUX, linux_scancode_table, SDL_arraysize(linux_scancode_table) },
+ { SDL_SCANCODE_TABLE_XFREE86_1, xfree86_scancode_table, SDL_arraysize(xfree86_scancode_table) },
+ { SDL_SCANCODE_TABLE_XFREE86_2, xfree86_scancode_table2, SDL_arraysize(xfree86_scancode_table2) },
+ { SDL_SCANCODE_TABLE_XVNC, xvnc_scancode_table, SDL_arraysize(xvnc_scancode_table) },
+};
+
+const SDL_Scancode *SDL_GetScancodeTable(SDL_ScancodeTable table, int *num_entries)
+{
+ int i;
+
+ for (i = 0; i < SDL_arraysize(SDL_scancode_tables); ++i) {
+ if (table == SDL_scancode_tables[i].table) {
+ *num_entries = SDL_scancode_tables[i].num_entries;
+ return SDL_scancode_tables[i].scancodes;
+ }
+ }
+
+ *num_entries = 0;
+ return NULL;
+}
+
+SDL_Scancode SDL_GetScancodeFromTable(SDL_ScancodeTable table, int keycode)
+{
+ SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
+ int num_entries;
+ const SDL_Scancode *scancodes = SDL_GetScancodeTable(table, &num_entries);
+
+ if (keycode >= 0 && keycode < num_entries) {
+ scancode = scancodes[keycode];
+ }
+ return scancode;
+}
+
+#endif /* SDL_INPUT_LINUXEV || SDL_VIDEO_DRIVER_DIRECTFB || SDL_VIDEO_DRIVER_WAYLAND || SDL_VIDEO_DRIVER_X11 */
+
+/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/events/SDL_scancode_tables_c.h b/src/events/SDL_scancode_tables_c.h
new file mode 100644
index 000000000..c85b8ddca
--- /dev/null
+++ b/src/events/SDL_scancode_tables_c.h
@@ -0,0 +1,37 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2022 Sam Lantinga
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+#include "../SDL_internal.h"
+
+#include "../../include/SDL_scancode.h"
+
+typedef enum
+{
+ SDL_SCANCODE_TABLE_DARWIN,
+ SDL_SCANCODE_TABLE_LINUX,
+ SDL_SCANCODE_TABLE_XFREE86_1,
+ SDL_SCANCODE_TABLE_XFREE86_2,
+ SDL_SCANCODE_TABLE_XVNC,
+} SDL_ScancodeTable;
+
+extern const SDL_Scancode *SDL_GetScancodeTable(SDL_ScancodeTable table, int *num_entries);
+extern SDL_Scancode SDL_GetScancodeFromTable(SDL_ScancodeTable table, int keycode);
+
+/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/events/scancodes_darwin.h b/src/events/scancodes_darwin.h
index 75564112a..1d0b5c165 100644
--- a/src/events/scancodes_darwin.h
+++ b/src/events/scancodes_darwin.h
@@ -157,3 +157,5 @@ static const SDL_Scancode darwin_scancode_table[] = {
/* 127 */ SDL_SCANCODE_POWER
};
/* *INDENT-ON* */ /* clang-format on */
+
+/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/events/scancodes_linux.h b/src/events/scancodes_linux.h
index f274e993a..020f76ba9 100644
--- a/src/events/scancodes_linux.h
+++ b/src/events/scancodes_linux.h
@@ -26,238 +26,805 @@
*/
/* *INDENT-OFF* */ /* clang-format off */
static SDL_Scancode const linux_scancode_table[] = {
- /* 0 */ SDL_SCANCODE_UNKNOWN,
- /* 1 */ SDL_SCANCODE_ESCAPE,
- /* 2 */ SDL_SCANCODE_1,
- /* 3 */ SDL_SCANCODE_2,
- /* 4 */ SDL_SCANCODE_3,
- /* 5 */ SDL_SCANCODE_4,
- /* 6 */ SDL_SCANCODE_5,
- /* 7 */ SDL_SCANCODE_6,
- /* 8 */ SDL_SCANCODE_7,
- /* 9 */ SDL_SCANCODE_8,
- /* 10 */ SDL_SCANCODE_9,
- /* 11 */ SDL_SCANCODE_0,
- /* 12 */ SDL_SCANCODE_MINUS,
- /* 13 */ SDL_SCANCODE_EQUALS,
- /* 14 */ SDL_SCANCODE_BACKSPACE,
- /* 15 */ SDL_SCANCODE_TAB,
- /* 16 */ SDL_SCANCODE_Q,
- /* 17 */ SDL_SCANCODE_W,
- /* 18 */ SDL_SCANCODE_E,
- /* 19 */ SDL_SCANCODE_R,
- /* 20 */ SDL_SCANCODE_T,
- /* 21 */ SDL_SCANCODE_Y,
- /* 22 */ SDL_SCANCODE_U,
- /* 23 */ SDL_SCANCODE_I,
- /* 24 */ SDL_SCANCODE_O,
- /* 25 */ SDL_SCANCODE_P,
- /* 26 */ SDL_SCANCODE_LEFTBRACKET,
- /* 27 */ SDL_SCANCODE_RIGHTBRACKET,
- /* 28 */ SDL_SCANCODE_RETURN,
- /* 29 */ SDL_SCANCODE_LCTRL,
- /* 30 */ SDL_SCANCODE_A,
- /* 31 */ SDL_SCANCODE_S,
- /* 32 */ SDL_SCANCODE_D,
- /* 33 */ SDL_SCANCODE_F,
- /* 34 */ SDL_SCANCODE_G,
- /* 35 */ SDL_SCANCODE_H,
- /* 36 */ SDL_SCANCODE_J,
- /* 37 */ SDL_SCANCODE_K,
- /* 38 */ SDL_SCANCODE_L,
- /* 39 */ SDL_SCANCODE_SEMICOLON,
- /* 40 */ SDL_SCANCODE_APOSTROPHE,
- /* 41 */ SDL_SCANCODE_GRAVE,
- /* 42 */ SDL_SCANCODE_LSHIFT,
- /* 43 */ SDL_SCANCODE_BACKSLASH,
- /* 44 */ SDL_SCANCODE_Z,
- /* 45 */ SDL_SCANCODE_X,
- /* 46 */ SDL_SCANCODE_C,
- /* 47 */ SDL_SCANCODE_V,
- /* 48 */ SDL_SCANCODE_B,
- /* 49 */ SDL_SCANCODE_N,
- /* 50 */ SDL_SCANCODE_M,
- /* 51 */ SDL_SCANCODE_COMMA,
- /* 52 */ SDL_SCANCODE_PERIOD,
- /* 53 */ SDL_SCANCODE_SLASH,
- /* 54 */ SDL_SCANCODE_RSHIFT,
- /* 55 */ SDL_SCANCODE_KP_MULTIPLY,
- /* 56 */ SDL_SCANCODE_LALT,
- /* 57 */ SDL_SCANCODE_SPACE,
- /* 58 */ SDL_SCANCODE_CAPSLOCK,
- /* 59 */ SDL_SCANCODE_F1,
- /* 60 */ SDL_SCANCODE_F2,
- /* 61 */ SDL_SCANCODE_F3,
- /* 62 */ SDL_SCANCODE_F4,
- /* 63 */ SDL_SCANCODE_F5,
- /* 64 */ SDL_SCANCODE_F6,
- /* 65 */ SDL_SCANCODE_F7,
- /* 66 */ SDL_SCANCODE_F8,
- /* 67 */ SDL_SCANCODE_F9,
- /* 68 */ SDL_SCANCODE_F10,
- /* 69 */ SDL_SCANCODE_NUMLOCKCLEAR,
- /* 70 */ SDL_SCANCODE_SCROLLLOCK,
- /* 71 */ SDL_SCANCODE_KP_7,
- /* 72 */ SDL_SCANCODE_KP_8,
- /* 73 */ SDL_SCANCODE_KP_9,
- /* 74 */ SDL_SCANCODE_KP_MINUS,
- /* 75 */ SDL_SCANCODE_KP_4,
- /* 76 */ SDL_SCANCODE_KP_5,
- /* 77 */ SDL_SCANCODE_KP_6,
- /* 78 */ SDL_SCANCODE_KP_PLUS,
- /* 79 */ SDL_SCANCODE_KP_1,
- /* 80 */ SDL_SCANCODE_KP_2,
- /* 81 */ SDL_SCANCODE_KP_3,
- /* 82 */ SDL_SCANCODE_KP_0,
- /* 83 */ SDL_SCANCODE_KP_PERIOD,
- 0,
- /* 85 */ SDL_SCANCODE_LANG5, /* KEY_ZENKAKUHANKAKU */
- /* 86 */ SDL_SCANCODE_NONUSBACKSLASH, /* KEY_102ND */
- /* 87 */ SDL_SCANCODE_F11,
- /* 88 */ SDL_SCANCODE_F12,
- /* 89 */ SDL_SCANCODE_INTERNATIONAL1, /* KEY_RO */
- /* 90 */ SDL_SCANCODE_LANG3, /* KEY_KATAKANA */
- /* 91 */ SDL_SCANCODE_LANG4, /* KEY_HIRAGANA */
- /* 92 */ SDL_SCANCODE_INTERNATIONAL4, /* KEY_HENKAN */
- /* 93 */ SDL_SCANCODE_INTERNATIONAL2, /* KEY_KATAKANAHIRAGANA */
- /* 94 */ SDL_SCANCODE_INTERNATIONAL5, /* KEY_MUHENKAN */
- /* 95 */ SDL_SCANCODE_INTERNATIONAL5, /* KEY_KPJPCOMMA */
- /* 96 */ SDL_SCANCODE_KP_ENTER,
- /* 97 */ SDL_SCANCODE_RCTRL,
- /* 98 */ SDL_SCANCODE_KP_DIVIDE,
- /* 99 */ SDL_SCANCODE_SYSREQ,
- /* 100 */ SDL_SCANCODE_RALT,
- /* 101 */ SDL_SCANCODE_UNKNOWN, /* KEY_LINEFEED */
- /* 102 */ SDL_SCANCODE_HOME,
- /* 103 */ SDL_SCANCODE_UP,
- /* 104 */ SDL_SCANCODE_PAGEUP,
- /* 105 */ SDL_SCANCODE_LEFT,
- /* 106 */ SDL_SCANCODE_RIGHT,
- /* 107 */ SDL_SCANCODE_END,
- /* 108 */ SDL_SCANCODE_DOWN,
- /* 109 */ SDL_SCANCODE_PAGEDOWN,
- /* 110 */ SDL_SCANCODE_INSERT,
- /* 111 */ SDL_SCANCODE_DELETE,
- /* 112 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO */
- /* 113 */ SDL_SCANCODE_MUTE,
- /* 114 */ SDL_SCANCODE_VOLUMEDOWN,
- /* 115 */ SDL_SCANCODE_VOLUMEUP,
- /* 116 */ SDL_SCANCODE_POWER,
- /* 117 */ SDL_SCANCODE_KP_EQUALS,
- /* 118 */ SDL_SCANCODE_KP_PLUSMINUS,
- /* 119 */ SDL_SCANCODE_PAUSE,
- 0,
- /* 121 */ SDL_SCANCODE_KP_COMMA,
- /* 122 */ SDL_SCANCODE_LANG1, /* KEY_HANGUEL */
- /* 123 */ SDL_SCANCODE_LANG2, /* KEY_HANJA */
- /* 124 */ SDL_SCANCODE_INTERNATIONAL3, /* KEY_YEN */
- /* 125 */ SDL_SCANCODE_LGUI,
- /* 126 */ SDL_SCANCODE_RGUI,
- /* 127 */ SDL_SCANCODE_APPLICATION, /* KEY_COMPOSE */
- /* 128 */ SDL_SCANCODE_STOP,
- /* 129 */ SDL_SCANCODE_AGAIN,
- /* 130 */ SDL_SCANCODE_UNKNOWN, /* KEY_PROPS */
- /* 131 */ SDL_SCANCODE_UNDO,
- /* 132 */ SDL_SCANCODE_UNKNOWN, /* KEY_FRONT */
- /* 133 */ SDL_SCANCODE_COPY,
- /* 134 */ SDL_SCANCODE_UNKNOWN, /* KEY_OPEN */
- /* 135 */ SDL_SCANCODE_PASTE,
- /* 136 */ SDL_SCANCODE_FIND,
- /* 137 */ SDL_SCANCODE_CUT,
- /* 138 */ SDL_SCANCODE_HELP,
- /* 139 */ SDL_SCANCODE_MENU,
- /* 140 */ SDL_SCANCODE_CALCULATOR,
- /* 141 */ SDL_SCANCODE_UNKNOWN, /* KEY_SETUP */
- /* 142 */ SDL_SCANCODE_SLEEP,
- /* 143 */ SDL_SCANCODE_UNKNOWN, /* KEY_WAKEUP */
- /* 144 */ SDL_SCANCODE_UNKNOWN, /* KEY_FILE */
- /* 145 */ SDL_SCANCODE_UNKNOWN, /* KEY_SENDFILE */
- /* 146 */ SDL_SCANCODE_UNKNOWN, /* KEY_DELETEFILE */
- /* 147 */ SDL_SCANCODE_UNKNOWN, /* KEY_XFER */
- /* 148 */ SDL_SCANCODE_APP1, /* KEY_PROG1 */
- /* 149 */ SDL_SCANCODE_APP2, /* KEY_PROG2 */
- /* 150 */ SDL_SCANCODE_WWW, /* KEY_WWW */
- /* 151 */ SDL_SCANCODE_UNKNOWN, /* KEY_MSDOS */
- /* 152 */ SDL_SCANCODE_UNKNOWN, /* KEY_COFFEE */
- /* 153 */ SDL_SCANCODE_UNKNOWN, /* KEY_DIRECTION */
- /* 154 */ SDL_SCANCODE_UNKNOWN, /* KEY_CYCLEWINDOWS */
- /* 155 */ SDL_SCANCODE_MAIL,
- /* 156 */ SDL_SCANCODE_AC_BOOKMARKS,
- /* 157 */ SDL_SCANCODE_COMPUTER,
- /* 158 */ SDL_SCANCODE_AC_BACK,
- /* 159 */ SDL_SCANCODE_AC_FORWARD,
- /* 160 */ SDL_SCANCODE_UNKNOWN, /* KEY_CLOSECD */
- /* 161 */ SDL_SCANCODE_EJECT, /* KEY_EJECTCD */
- /* 162 */ SDL_SCANCODE_UNKNOWN, /* KEY_EJECTCLOSECD */
- /* 163 */ SDL_SCANCODE_AUDIONEXT, /* KEY_NEXTSONG */
- /* 164 */ SDL_SCANCODE_AUDIOPLAY, /* KEY_PLAYPAUSE */
- /* 165 */ SDL_SCANCODE_AUDIOPREV, /* KEY_PREVIOUSSONG */
- /* 166 */ SDL_SCANCODE_AUDIOSTOP, /* KEY_STOPCD */
- /* 167 */ SDL_SCANCODE_UNKNOWN, /* KEY_RECORD */
- /* 168 */ SDL_SCANCODE_AUDIOREWIND, /* KEY_REWIND */
- /* 169 */ SDL_SCANCODE_UNKNOWN, /* KEY_PHONE */
- /* 170 */ SDL_SCANCODE_UNKNOWN, /* KEY_ISO */
- /* 171 */ SDL_SCANCODE_UNKNOWN, /* KEY_CONFIG */
- /* 172 */ SDL_SCANCODE_AC_HOME,
- /* 173 */ SDL_SCANCODE_AC_REFRESH,
- /* 174 */ SDL_SCANCODE_UNKNOWN, /* KEY_EXIT */
- /* 175 */ SDL_SCANCODE_UNKNOWN, /* KEY_MOVE */
- /* 176 */ SDL_SCANCODE_UNKNOWN, /* KEY_EDIT */
- /* 177 */ SDL_SCANCODE_UNKNOWN, /* KEY_SCROLLUP */
- /* 178 */ SDL_SCANCODE_UNKNOWN, /* KEY_SCROLLDOWN */
- /* 179 */ SDL_SCANCODE_KP_LEFTPAREN,
- /* 180 */ SDL_SCANCODE_KP_RIGHTPAREN,
- /* 181 */ SDL_SCANCODE_UNKNOWN, /* KEY_NEW */
- /* 182 */ SDL_SCANCODE_UNKNOWN, /* KEY_REDO */
- /* 183 */ SDL_SCANCODE_F13,
- /* 184 */ SDL_SCANCODE_F14,
- /* 185 */ SDL_SCANCODE_F15,
- /* 186 */ SDL_SCANCODE_F16,
- /* 187 */ SDL_SCANCODE_F17,
- /* 188 */ SDL_SCANCODE_F18,
- /* 189 */ SDL_SCANCODE_F19,
- /* 190 */ SDL_SCANCODE_F20,
- /* 191 */ SDL_SCANCODE_F21,
- /* 192 */ SDL_SCANCODE_F22,
- /* 193 */ SDL_SCANCODE_F23,
- /* 194 */ SDL_SCANCODE_F24,
- 0, 0, 0, 0, 0,
- /* 200 */ SDL_SCANCODE_UNKNOWN, /* KEY_PLAYCD */
- /* 201 */ SDL_SCANCODE_UNKNOWN, /* KEY_PAUSECD */
- /* 202 */ SDL_SCANCODE_UNKNOWN, /* KEY_PROG3 */
- /* 203 */ SDL_SCANCODE_UNKNOWN, /* KEY_PROG4 */
- 0,
- /* 205 */ SDL_SCANCODE_UNKNOWN, /* KEY_SUSPEND */
- /* 206 */ SDL_SCANCODE_UNKNOWN, /* KEY_CLOSE */
- /* 207 */ SDL_SCANCODE_UNKNOWN, /* KEY_PLAY */
- /* 208 */ SDL_SCANCODE_AUDIOFASTFORWARD, /* KEY_FASTFORWARD */
- /* 209 */ SDL_SCANCODE_UNKNOWN, /* KEY_BASSBOOST */
- /* 210 */ SDL_SCANCODE_UNKNOWN, /* KEY_PRINT */
- /* 211 */ SDL_SCANCODE_UNKNOWN, /* KEY_HP */
- /* 212 */ SDL_SCANCODE_UNKNOWN, /* KEY_CAMERA */
- /* 213 */ SDL_SCANCODE_UNKNOWN, /* KEY_SOUND */
- /* 214 */ SDL_SCANCODE_UNKNOWN, /* KEY_QUESTION */
- /* 215 */ SDL_SCANCODE_UNKNOWN, /* KEY_EMAIL */
- /* 216 */ SDL_SCANCODE_UNKNOWN, /* KEY_CHAT */
- /* 217 */ SDL_SCANCODE_AC_SEARCH,
- /* 218 */ SDL_SCANCODE_UNKNOWN, /* KEY_CONNECT */
- /* 219 */ SDL_SCANCODE_UNKNOWN, /* KEY_FINANCE */
- /* 220 */ SDL_SCANCODE_UNKNOWN, /* KEY_SPORT */
- /* 221 */ SDL_SCANCODE_UNKNOWN, /* KEY_SHOP */
- /* 222 */ SDL_SCANCODE_ALTERASE,
- /* 223 */ SDL_SCANCODE_CANCEL,
- /* 224 */ SDL_SCANCODE_BRIGHTNESSDOWN,
- /* 225 */ SDL_SCANCODE_BRIGHTNESSUP,
- /* 226 */ SDL_SCANCODE_UNKNOWN, /* KEY_MEDIA */
- /* 227 */ SDL_SCANCODE_DISPLAYSWITCH, /* KEY_SWITCHVIDEOMODE */
- /* 228 */ SDL_SCANCODE_KBDILLUMTOGGLE,
- /* 229 */ SDL_SCANCODE_KBDILLUMDOWN,
- /* 230 */ SDL_SCANCODE_KBDILLUMUP,
- /* 231 */ SDL_SCANCODE_UNKNOWN, /* KEY_SEND */
- /* 232 */ SDL_SCANCODE_UNKNOWN, /* KEY_REPLY */
- /* 233 */ SDL_SCANCODE_UNKNOWN, /* KEY_FORWARDMAIL */
- /* 234 */ SDL_SCANCODE_UNKNOWN, /* KEY_SAVE */
- /* 235 */ SDL_SCANCODE_UNKNOWN, /* KEY_DOCUMENTS */
- /* 236 */ SDL_SCANCODE_UNKNOWN, /* KEY_BATTERY */
+ /* 0, 0x000 */ SDL_SCANCODE_UNKNOWN, /* KEY_RESERVED */
+ /* 1, 0x001 */ SDL_SCANCODE_ESCAPE, /* KEY_ESC */
+ /* 2, 0x002 */ SDL_SCANCODE_1, /* KEY_1 */
+ /* 3, 0x003 */ SDL_SCANCODE_2, /* KEY_2 */
+ /* 4, 0x004 */ SDL_SCANCODE_3, /* KEY_3 */
+ /* 5, 0x005 */ SDL_SCANCODE_4, /* KEY_4 */
+ /* 6, 0x006 */ SDL_SCANCODE_5, /* KEY_5 */
+ /* 7, 0x007 */ SDL_SCANCODE_6, /* KEY_6 */
+ /* 8, 0x008 */ SDL_SCANCODE_7, /* KEY_7 */
+ /* 9, 0x009 */ SDL_SCANCODE_8, /* KEY_8 */
+ /* 10, 0x00a */ SDL_SCANCODE_9, /* KEY_9 */
+ /* 11, 0x00b */ SDL_SCANCODE_0, /* KEY_0 */
+ /* 12, 0x00c */ SDL_SCANCODE_MINUS, /* KEY_MINUS */
+ /* 13, 0x00d */ SDL_SCANCODE_EQUALS, /* KEY_EQUAL */
+ /* 14, 0x00e */ SDL_SCANCODE_BACKSPACE, /* KEY_BACKSPACE */
+ /* 15, 0x00f */ SDL_SCANCODE_TAB, /* KEY_TAB */
+ /* 16, 0x010 */ SDL_SCANCODE_Q, /* KEY_Q */
+ /* 17, 0x011 */ SDL_SCANCODE_W, /* KEY_W */
+ /* 18, 0x012 */ SDL_SCANCODE_E, /* KEY_E */
+ /* 19, 0x013 */ SDL_SCANCODE_R, /* KEY_R */
+ /* 20, 0x014 */ SDL_SCANCODE_T, /* KEY_T */
+ /* 21, 0x015 */ SDL_SCANCODE_Y, /* KEY_Y */
+ /* 22, 0x016 */ SDL_SCANCODE_U, /* KEY_U */
+ /* 23, 0x017 */ SDL_SCANCODE_I, /* KEY_I */
+ /* 24, 0x018 */ SDL_SCANCODE_O, /* KEY_O */
+ /* 25, 0x019 */ SDL_SCANCODE_P, /* KEY_P */
+ /* 26, 0x01a */ SDL_SCANCODE_LEFTBRACKET, /* KEY_LEFTBRACE */
+ /* 27, 0x01b */ SDL_SCANCODE_RIGHTBRACKET, /* KEY_RIGHTBRACE */
+ /* 28, 0x01c */ SDL_SCANCODE_RETURN, /* KEY_ENTER */
+ /* 29, 0x01d */ SDL_SCANCODE_LCTRL, /* KEY_LEFTCTRL */
+ /* 30, 0x01e */ SDL_SCANCODE_A, /* KEY_A */
+ /* 31, 0x01f */ SDL_SCANCODE_S, /* KEY_S */
+ /* 32, 0x020 */ SDL_SCANCODE_D, /* KEY_D */
+ /* 33, 0x021 */ SDL_SCANCODE_F, /* KEY_F */
+ /* 34, 0x022 */ SDL_SCANCODE_G, /* KEY_G */
+ /* 35, 0x023 */ SDL_SCANCODE_H, /* KEY_H */
+ /* 36, 0x024 */ SDL_SCANCODE_J, /* KEY_J */
+ /* 37, 0x025 */ SDL_SCANCODE_K, /* KEY_K */
+ /* 38, 0x026 */ SDL_SCANCODE_L, /* KEY_L */
+ /* 39, 0x027 */ SDL_SCANCODE_SEMICOLON, /* KEY_SEMICOLON */
+ /* 40, 0x028 */ SDL_SCANCODE_APOSTROPHE, /* KEY_APOSTROPHE */
+ /* 41, 0x029 */ SDL_SCANCODE_GRAVE, /* KEY_GRAVE */
+ /* 42, 0x02a */ SDL_SCANCODE_LSHIFT, /* KEY_LEFTSHIFT */
+ /* 43, 0x02b */ SDL_SCANCODE_BACKSLASH, /* KEY_BACKSLASH */
+ /* 44, 0x02c */ SDL_SCANCODE_Z, /* KEY_Z */
+ /* 45, 0x02d */ SDL_SCANCODE_X, /* KEY_X */
+ /* 46, 0x02e */ SDL_SCANCODE_C, /* KEY_C */
+ /* 47, 0x02f */ SDL_SCANCODE_V, /* KEY_V */
+ /* 48, 0x030 */ SDL_SCANCODE_B, /* KEY_B */
+ /* 49, 0x031 */ SDL_SCANCODE_N, /* KEY_N */
+ /* 50, 0x032 */ SDL_SCANCODE_M, /* KEY_M */
+ /* 51, 0x033 */ SDL_SCANCODE_COMMA, /* KEY_COMMA */
+ /* 52, 0x034 */ SDL_SCANCODE_PERIOD, /* KEY_DOT */
+ /* 53, 0x035 */ SDL_SCANCODE_SLASH, /* KEY_SLASH */
+ /* 54, 0x036 */ SDL_SCANCODE_RSHIFT, /* KEY_RIGHTSHIFT */
+ /* 55, 0x037 */ SDL_SCANCODE_KP_MULTIPLY, /* KEY_KPASTERISK */
+ /* 56, 0x038 */ SDL_SCANCODE_LALT, /* KEY_LEFTALT */
+ /* 57, 0x039 */ SDL_SCANCODE_SPACE, /* KEY_SPACE */
+ /* 58, 0x03a */ SDL_SCANCODE_CAPSLOCK, /* KEY_CAPSLOCK */
+ /* 59, 0x03b */ SDL_SCANCODE_F1, /* KEY_F1 */
+ /* 60, 0x03c */ SDL_SCANCODE_F2, /* KEY_F2 */
+ /* 61, 0x03d */ SDL_SCANCODE_F3, /* KEY_F3 */
+ /* 62, 0x03e */ SDL_SCANCODE_F4, /* KEY_F4 */
+ /* 63, 0x03f */ SDL_SCANCODE_F5, /* KEY_F5 */
+ /* 64, 0x040 */ SDL_SCANCODE_F6, /* KEY_F6 */
+ /* 65, 0x041 */ SDL_SCANCODE_F7, /* KEY_F7 */
+ /* 66, 0x042 */ SDL_SCANCODE_F8, /* KEY_F8 */
+ /* 67, 0x043 */ SDL_SCANCODE_F9, /* KEY_F9 */
+ /* 68, 0x044 */ SDL_SCANCODE_F10, /* KEY_F10 */
+ /* 69, 0x045 */ SDL_SCANCODE_NUMLOCKCLEAR, /* KEY_NUMLOCK */
+ /* 70, 0x046 */ SDL_SCANCODE_SCROLLLOCK, /* KEY_SCROLLLOCK */
+ /* 71, 0x047 */ SDL_SCANCODE_KP_7, /* KEY_KP7 */
+ /* 72, 0x048 */ SDL_SCANCODE_KP_8, /* KEY_KP8 */
+ /* 73, 0x049 */ SDL_SCANCODE_KP_9, /* KEY_KP9 */
+ /* 74, 0x04a */ SDL_SCANCODE_KP_MINUS, /* KEY_KPMINUS */
+ /* 75, 0x04b */ SDL_SCANCODE_KP_4, /* KEY_KP4 */
+ /* 76, 0x04c */ SDL_SCANCODE_KP_5, /* KEY_KP5 */
+ /* 77, 0x04d */ SDL_SCANCODE_KP_6, /* KEY_KP6 */
+ /* 78, 0x04e */ SDL_SCANCODE_KP_PLUS, /* KEY_KPPLUS */
+ /* 79, 0x04f */ SDL_SCANCODE_KP_1, /* KEY_KP1 */
+ /* 80, 0x050 */ SDL_SCANCODE_KP_2, /* KEY_KP2 */
+ /* 81, 0x051 */ SDL_SCANCODE_KP_3, /* KEY_KP3 */
+ /* 82, 0x052 */ SDL_SCANCODE_KP_0, /* KEY_KP0 */
+ /* 83, 0x053 */ SDL_SCANCODE_KP_PERIOD, /* KEY_KPDOT */
+ /* 84, 0x054 */ SDL_SCANCODE_UNKNOWN,
+ /* 85, 0x055 */ SDL_SCANCODE_LANG5, /* KEY_ZENKAKUHANKAKU */
+ /* 86, 0x056 */ SDL_SCANCODE_NONUSBACKSLASH, /* KEY_102ND */
+ /* 87, 0x057 */ SDL_SCANCODE_F11, /* KEY_F11 */
+ /* 88, 0x058 */ SDL_SCANCODE_F12, /* KEY_F12 */
+ /* 89, 0x059 */ SDL_SCANCODE_INTERNATIONAL1, /* KEY_RO */
+ /* 90, 0x05a */ SDL_SCANCODE_LANG3, /* KEY_KATAKANA */
+ /* 91, 0x05b */ SDL_SCANCODE_LANG4, /* KEY_HIRAGANA */
+ /* 92, 0x05c */ SDL_SCANCODE_INTERNATIONAL4, /* KEY_HENKAN */
+ /* 93, 0x05d */ SDL_SCANCODE_INTERNATIONAL2, /* KEY_KATAKANAHIRAGANA */
+ /* 94, 0x05e */ SDL_SCANCODE_INTERNATIONAL5, /* KEY_MUHENKAN */
+ /* 95, 0x05f */ SDL_SCANCODE_INTERNATIONAL5, /* KEY_KPJPCOMMA */
+ /* 96, 0x060 */ SDL_SCANCODE_KP_ENTER, /* KEY_KPENTER */
+ /* 97, 0x061 */ SDL_SCANCODE_RCTRL, /* KEY_RIGHTCTRL */
+ /* 98, 0x062 */ SDL_SCANCODE_KP_DIVIDE, /* KEY_KPSLASH */
+ /* 99, 0x063 */ SDL_SCANCODE_SYSREQ, /* KEY_SYSRQ */
+ /* 100, 0x064 */ SDL_SCANCODE_RALT, /* KEY_RIGHTALT */
+ /* 101, 0x065 */ SDL_SCANCODE_UNKNOWN, /* KEY_LINEFEED */
+ /* 102, 0x066 */ SDL_SCANCODE_HOME, /* KEY_HOME */
+ /* 103, 0x067 */ SDL_SCANCODE_UP, /* KEY_UP */
+ /* 104, 0x068 */ SDL_SCANCODE_PAGEUP, /* KEY_PAGEUP */
+ /* 105, 0x069 */ SDL_SCANCODE_LEFT, /* KEY_LEFT */
+ /* 106, 0x06a */ SDL_SCANCODE_RIGHT, /* KEY_RIGHT */
+ /* 107, 0x06b */ SDL_SCANCODE_END, /* KEY_END */
+ /* 108, 0x06c */ SDL_SCANCODE_DOWN, /* KEY_DOWN */
+ /* 109, 0x06d */ SDL_SCANCODE_PAGEDOWN, /* KEY_PAGEDOWN */
+ /* 110, 0x06e */ SDL_SCANCODE_INSERT, /* KEY_INSERT */
+ /* 111, 0x06f */ SDL_SCANCODE_DELETE, /* KEY_DELETE */
+ /* 112, 0x070 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO */
+ /* 113, 0x071 */ SDL_SCANCODE_MUTE, /* KEY_MUTE */
+ /* 114, 0x072 */ SDL_SCANCODE_VOLUMEDOWN, /* KEY_VOLUMEDOWN */
+ /* 115, 0x073 */ SDL_SCANCODE_VOLUMEUP, /* KEY_VOLUMEUP */
+ /* 116, 0x074 */ SDL_SCANCODE_POWER, /* KEY_POWER */
+ /* 117, 0x075 */ SDL_SCANCODE_KP_EQUALS, /* KEY_KPEQUAL */
+ /* 118, 0x076 */ SDL_SCANCODE_KP_PLUSMINUS, /* KEY_KPPLUSMINUS */
+ /* 119, 0x077 */ SDL_SCANCODE_PAUSE, /* KEY_PAUSE */
+ /* 120, 0x078 */ SDL_SCANCODE_UNKNOWN, /* KEY_SCALE */
+ /* 121, 0x079 */ SDL_SCANCODE_KP_COMMA, /* KEY_KPCOMMA */
+ /* 122, 0x07a */ SDL_SCANCODE_LANG1, /* KEY_HANGEUL */
+ /* 123, 0x07b */ SDL_SCANCODE_LANG2, /* KEY_HANJA */
+ /* 124, 0x07c */ SDL_SCANCODE_INTERNATIONAL3, /* KEY_YEN */
+ /* 125, 0x07d */ SDL_SCANCODE_LGUI, /* KEY_LEFTMETA */
+ /* 126, 0x07e */ SDL_SCANCODE_RGUI, /* KEY_RIGHTMETA */
+ /* 127, 0x07f */ SDL_SCANCODE_APPLICATION, /* KEY_COMPOSE */
+ /* 128, 0x080 */ SDL_SCANCODE_STOP, /* KEY_STOP */
+ /* 129, 0x081 */ SDL_SCANCODE_AGAIN, /* KEY_AGAIN */
+ /* 130, 0x082 */ SDL_SCANCODE_UNKNOWN, /* KEY_PROPS */
+ /* 131, 0x083 */ SDL_SCANCODE_UNDO, /* KEY_UNDO */
+ /* 132, 0x084 */ SDL_SCANCODE_UNKNOWN, /* KEY_FRONT */
+ /* 133, 0x085 */ SDL_SCANCODE_COPY, /* KEY_COPY */
+ /* 134, 0x086 */ SDL_SCANCODE_UNKNOWN, /* KEY_OPEN */
+ /* 135, 0x087 */ SDL_SCANCODE_PASTE, /* KEY_PASTE */
+ /* 136, 0x088 */ SDL_SCANCODE_FIND, /* KEY_FIND */
+ /* 137, 0x089 */ SDL_SCANCODE_CUT, /* KEY_CUT */
+ /* 138, 0x08a */ SDL_SCANCODE_HELP, /* KEY_HELP */
+ /* 139, 0x08b */ SDL_SCANCODE_MENU, /* KEY_MENU */
+ /* 140, 0x08c */ SDL_SCANCODE_CALCULATOR, /* KEY_CALC */
+ /* 141, 0x08d */ SDL_SCANCODE_UNKNOWN, /* KEY_SETUP */
+ /* 142, 0x08e */ SDL_SCANCODE_SLEEP, /* KEY_SLEEP */
+ /* 143, 0x08f */ SDL_SCANCODE_UNKNOWN, /* KEY_WAKEUP */
+ /* 144, 0x090 */ SDL_SCANCODE_UNKNOWN, /* KEY_FILE */
+ /* 145, 0x091 */ SDL_SCANCODE_UNKNOWN, /* KEY_SENDFILE */
+ /* 146, 0x092 */ SDL_SCANCODE_UNKNOWN, /* KEY_DELETEFILE */
+ /* 147, 0x093 */ SDL_SCANCODE_UNKNOWN, /* KEY_XFER */
+ /* 148, 0x094 */ SDL_SCANCODE_APP1, /* KEY_PROG1 */
+ /* 149, 0x095 */ SDL_SCANCODE_APP2, /* KEY_PROG2 */
+ /* 150, 0x096 */ SDL_SCANCODE_WWW, /* KEY_WWW */
+ /* 151, 0x097 */ SDL_SCANCODE_UNKNOWN, /* KEY_MSDOS */
+ /* 152, 0x098 */ SDL_SCANCODE_UNKNOWN, /* KEY_COFFEE */
+ /* 153, 0x099 */ SDL_SCANCODE_UNKNOWN, /* KEY_ROTATE_DISPLAY */
+ /* 154, 0x09a */ SDL_SCANCODE_UNKNOWN, /* KEY_CYCLEWINDOWS */
+ /* 155, 0x09b */ SDL_SCANCODE_MAIL, /* KEY_MAIL */
+ /* 156, 0x09c */ SDL_SCANCODE_AC_BOOKMARKS, /* KEY_BOOKMARKS */
+ /* 157, 0x09d */ SDL_SCANCODE_COMPUTER, /* KEY_COMPUTER */
+ /* 158, 0x09e */ SDL_SCANCODE_AC_BACK, /* KEY_BACK */
+ /* 159, 0x09f */ SDL_SCANCODE_AC_FORWARD, /* KEY_FORWARD */
+ /* 160, 0x0a0 */ SDL_SCANCODE_UNKNOWN, /* KEY_CLOSECD */
+ /* 161, 0x0a1 */ SDL_SCANCODE_EJECT, /* KEY_EJECTCD */
+ /* 162, 0x0a2 */ SDL_SCANCODE_EJECT, /* KEY_EJECTCLOSECD */
+ /* 163, 0x0a3 */ SDL_SCANCODE_AUDIONEXT, /* KEY_NEXTSONG */
+ /* 164, 0x0a4 */ SDL_SCANCODE_AUDIOPLAY, /* KEY_PLAYPAUSE */
+ /* 165, 0x0a5 */ SDL_SCANCODE_AUDIOPREV, /* KEY_PREVIOUSSONG */
+ /* 166, 0x0a6 */ SDL_SCANCODE_AUDIOSTOP, /* KEY_STOPCD */
+ /* 167, 0x0a7 */ SDL_SCANCODE_UNKNOWN, /* KEY_RECORD */
+ /* 168, 0x0a8 */ SDL_SCANCODE_AUDIOREWIND, /* KEY_REWIND */
+ /* 169, 0x0a9 */ SDL_SCANCODE_UNKNOWN, /* KEY_PHONE */
+ /* 170, 0x0aa */ SDL_SCANCODE_UNKNOWN, /* KEY_ISO */
+ /* 171, 0x0ab */ SDL_SCANCODE_UNKNOWN, /* KEY_CONFIG */
+ /* 172, 0x0ac */ SDL_SCANCODE_AC_HOME, /* KEY_HOMEPAGE */
+ /* 173, 0x0ad */ SDL_SCANCODE_AC_REFRESH, /* KEY_REFRESH */
+ /* 174, 0x0ae */ SDL_SCANCODE_UNKNOWN, /* KEY_EXIT */
+ /* 175, 0x0af */ SDL_SCANCODE_UNKNOWN, /* KEY_MOVE */
+ /* 176, 0x0b0 */ SDL_SCANCODE_UNKNOWN, /* KEY_EDIT */
+ /* 177, 0x0b1 */ SDL_SCANCODE_UNKNOWN, /* KEY_SCROLLUP */
+ /* 178, 0x0b2 */ SDL_SCANCODE_UNKNOWN, /* KEY_SCROLLDOWN */
+ /* 179, 0x0b3 */ SDL_SCANCODE_KP_LEFTPAREN, /* KEY_KPLEFTPAREN */
+ /* 180, 0x0b4 */ SDL_SCANCODE_KP_RIGHTPAREN, /* KEY_KPRIGHTPAREN */
+ /* 181, 0x0b5 */ SDL_SCANCODE_UNKNOWN, /* KEY_NEW */
+ /* 182, 0x0b6 */ SDL_SCANCODE_AGAIN, /* KEY_REDO */
+ /* 183, 0x0b7 */ SDL_SCANCODE_F13, /* KEY_F13 */
+ /* 184, 0x0b8 */ SDL_SCANCODE_F14, /* KEY_F14 */
+ /* 185, 0x0b9 */ SDL_SCANCODE_F15, /* KEY_F15 */
+ /* 186, 0x0ba */ SDL_SCANCODE_F16, /* KEY_F16 */
+ /* 187, 0x0bb */ SDL_SCANCODE_F17, /* KEY_F17 */
+ /* 188, 0x0bc */ SDL_SCANCODE_F18, /* KEY_F18 */
+ /* 189, 0x0bd */ SDL_SCANCODE_F19, /* KEY_F19 */
+ /* 190, 0x0be */ SDL_SCANCODE_F20, /* KEY_F20 */
+ /* 191, 0x0bf */ SDL_SCANCODE_F21, /* KEY_F21 */
+ /* 192, 0x0c0 */ SDL_SCANCODE_F22, /* KEY_F22 */
+ /* 193, 0x0c1 */ SDL_SCANCODE_F23, /* KEY_F23 */
+ /* 194, 0x0c2 */ SDL_SCANCODE_F24, /* KEY_F24 */
+ /* 195, 0x0c3 */ SDL_SCANCODE_UNKNOWN,
+ /* 196, 0x0c4 */ SDL_SCANCODE_UNKNOWN,
+ /* 197, 0x0c5 */ SDL_SCANCODE_UNKNOWN,
+ /* 198, 0x0c6 */ SDL_SCANCODE_UNKNOWN,
+ /* 199, 0x0c7 */ SDL_SCANCODE_UNKNOWN,
+ /* 200, 0x0c8 */ SDL_SCANCODE_AUDIOPLAY, /* KEY_PLAYCD */
+ /* 201, 0x0c9 */ SDL_SCANCODE_UNKNOWN, /* KEY_PAUSECD */
+ /* 202, 0x0ca */ SDL_SCANCODE_UNKNOWN, /* KEY_PROG3 */
+ /* 203, 0x0cb */ SDL_SCANCODE_UNKNOWN, /* KEY_PROG4 */
+ /* 204, 0x0cc */ SDL_SCANCODE_UNKNOWN, /* KEY_ALL_APPLICATIONS */
+ /* 205, 0x0cd */ SDL_SCANCODE_UNKNOWN, /* KEY_SUSPEND */
+ /* 206, 0x0ce */ SDL_SCANCODE_UNKNOWN, /* KEY_CLOSE */
+ /* 207, 0x0cf */ SDL_SCANCODE_AUDIOPLAY, /* KEY_PLAY */
+ /* 208, 0x0d0 */ SDL_SCANCODE_AUDIOFASTFORWARD, /* KEY_FASTFORWARD */
+ /* 209, 0x0d1 */ SDL_SCANCODE_UNKNOWN, /* KEY_BASSBOOST */
+ /* 210, 0x0d2 */ SDL_SCANCODE_PRINTSCREEN, /* KEY_PRINT */
+ /* 211, 0x0d3 */ SDL_SCANCODE_UNKNOWN, /* KEY_HP */
+ /* 212, 0x0d4 */ SDL_SCANCODE_UNKNOWN, /* KEY_CAMERA */
+ /* 213, 0x0d5 */ SDL_SCANCODE_UNKNOWN, /* KEY_SOUND */
+ /* 214, 0x0d6 */ SDL_SCANCODE_UNKNOWN, /* KEY_QUESTION */
+ /* 215, 0x0d7 */ SDL_SCANCODE_MAIL, /* KEY_EMAIL */
+ /* 216, 0x0d8 */ SDL_SCANCODE_UNKNOWN, /* KEY_CHAT */
+ /* 217, 0x0d9 */ SDL_SCANCODE_AC_SEARCH, /* KEY_SEARCH */
+ /* 218, 0x0da */ SDL_SCANCODE_UNKNOWN, /* KEY_CONNECT */
+ /* 219, 0x0db */ SDL_SCANCODE_UNKNOWN, /* KEY_FINANCE */
+ /* 220, 0x0dc */ SDL_SCANCODE_UNKNOWN, /* KEY_SPORT */
+ /* 221, 0x0dd */ SDL_SCANCODE_UNKNOWN, /* KEY_SHOP */
+ /* 222, 0x0de */ SDL_SCANCODE_ALTERASE, /* KEY_ALTERASE */
+ /* 223, 0x0df */ SDL_SCANCODE_CANCEL, /* KEY_CANCEL */
+ /* 224, 0x0e0 */ SDL_SCANCODE_BRIGHTNESSDOWN, /* KEY_BRIGHTNESSDOWN */
+ /* 225, 0x0e1 */ SDL_SCANCODE_BRIGHTNESSUP, /* KEY_BRIGHTNESSUP */
+ /* 226, 0x0e2 */ SDL_SCANCODE_MEDIASELECT, /* KEY_MEDIA */
+ /* 227, 0x0e3 */ SDL_SCANCODE_DISPLAYSWITCH, /* KEY_SWITCHVIDEOMODE */
+ /* 228, 0x0e4 */ SDL_SCANCODE_KBDILLUMTOGGLE, /* KEY_KBDILLUMTOGGLE */
+ /* 229, 0x0e5 */ SDL_SCANCODE_KBDILLUMDOWN, /* KEY_KBDILLUMDOWN */
+ /* 230, 0x0e6 */ SDL_SCANCODE_KBDILLUMUP, /* KEY_KBDILLUMUP */
+ /* 231, 0x0e7 */ SDL_SCANCODE_UNKNOWN, /* KEY_SEND */
+ /* 232, 0x0e8 */ SDL_SCANCODE_UNKNOWN, /* KEY_REPLY */
+ /* 233, 0x0e9 */ SDL_SCANCODE_UNKNOWN, /* KEY_FORWARDMAIL */
+ /* 234, 0x0ea */ SDL_SCANCODE_UNKNOWN, /* KEY_SAVE */
+ /* 235, 0x0eb */ SDL_SCANCODE_UNKNOWN, /* KEY_DOCUMENTS */
+ /* 236, 0x0ec */ SDL_SCANCODE_UNKNOWN, /* KEY_BATTERY */
+ /* 237, 0x0ed */ SDL_SCANCODE_UNKNOWN, /* KEY_BLUETOOTH */
+ /* 238, 0x0ee */ SDL_SCANCODE_UNKNOWN, /* KEY_WLAN */
+ /* 239, 0x0ef */ SDL_SCANCODE_UNKNOWN, /* KEY_UWB */
+ /* 240, 0x0f0 */ SDL_SCANCODE_UNKNOWN, /* KEY_UNKNOWN */
+ /* 241, 0x0f1 */ SDL_SCANCODE_UNKNOWN, /* KEY_VIDEO_NEXT */
+ /* 242, 0x0f2 */ SDL_SCANCODE_UNKNOWN, /* KEY_VIDEO_PREV */
+ /* 243, 0x0f3 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRIGHTNESS_CYCLE */
+ /* 244, 0x0f4 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRIGHTNESS_AUTO */
+ /* 245, 0x0f5 */ SDL_SCANCODE_UNKNOWN, /* KEY_DISPLAY_OFF */
+ /* 246, 0x0f6 */ SDL_SCANCODE_UNKNOWN, /* KEY_WWAN */
+ /* 247, 0x0f7 */ SDL_SCANCODE_UNKNOWN, /* KEY_RFKILL */
+ /* 248, 0x0f8 */ SDL_SCANCODE_UNKNOWN, /* KEY_MICMUTE */
+ /* 249, 0x0f9 */ SDL_SCANCODE_UNKNOWN,
+ /* 250, 0x0fa */ SDL_SCANCODE_UNKNOWN,
+ /* 251, 0x0fb */ SDL_SCANCODE_UNKNOWN,
+ /* 252, 0x0fc */ SDL_SCANCODE_UNKNOWN,
+ /* 253, 0x0fd */ SDL_SCANCODE_UNKNOWN,
+ /* 254, 0x0fe */ SDL_SCANCODE_UNKNOWN,
+ /* 255, 0x0ff */ SDL_SCANCODE_UNKNOWN,
+#if 0 /* We don't have any mapped scancodes after this point (yet) */
+ /* 256, 0x100 */ SDL_SCANCODE_UNKNOWN,
+ /* 257, 0x101 */ SDL_SCANCODE_UNKNOWN,
+ /* 258, 0x102 */ SDL_SCANCODE_UNKNOWN,
+ /* 259, 0x103 */ SDL_SCANCODE_UNKNOWN,
+ /* 260, 0x104 */ SDL_SCANCODE_UNKNOWN,
+ /* 261, 0x105 */ SDL_SCANCODE_UNKNOWN,
+ /* 262, 0x106 */ SDL_SCANCODE_UNKNOWN,
+ /* 263, 0x107 */ SDL_SCANCODE_UNKNOWN,
+ /* 264, 0x108 */ SDL_SCANCODE_UNKNOWN,
+ /* 265, 0x109 */ SDL_SCANCODE_UNKNOWN,
+ /* 266, 0x10a */ SDL_SCANCODE_UNKNOWN,
+ /* 267, 0x10b */ SDL_SCANCODE_UNKNOWN,
+ /* 268, 0x10c */ SDL_SCANCODE_UNKNOWN,
+ /* 269, 0x10d */ SDL_SCANCODE_UNKNOWN,
+ /* 270, 0x10e */ SDL_SCANCODE_UNKNOWN,
+ /* 271, 0x10f */ SDL_SCANCODE_UNKNOWN,
+ /* 272, 0x110 */ SDL_SCANCODE_UNKNOWN,
+ /* 273, 0x111 */ SDL_SCANCODE_UNKNOWN,
+ /* 274, 0x112 */ SDL_SCANCODE_UNKNOWN,
+ /* 275, 0x113 */ SDL_SCANCODE_UNKNOWN,
+ /* 276, 0x114 */ SDL_SCANCODE_UNKNOWN,
+ /* 277, 0x115 */ SDL_SCANCODE_UNKNOWN,
+ /* 278, 0x116 */ SDL_SCANCODE_UNKNOWN,
+ /* 279, 0x117 */ SDL_SCANCODE_UNKNOWN,
+ /* 280, 0x118 */ SDL_SCANCODE_UNKNOWN,
+ /* 281, 0x119 */ SDL_SCANCODE_UNKNOWN,
+ /* 282, 0x11a */ SDL_SCANCODE_UNKNOWN,
+ /* 283, 0x11b */ SDL_SCANCODE_UNKNOWN,
+ /* 284, 0x11c */ SDL_SCANCODE_UNKNOWN,
+ /* 285, 0x11d */ SDL_SCANCODE_UNKNOWN,
+ /* 286, 0x11e */ SDL_SCANCODE_UNKNOWN,
+ /* 287, 0x11f */ SDL_SCANCODE_UNKNOWN,
+ /* 288, 0x120 */ SDL_SCANCODE_UNKNOWN,
+ /* 289, 0x121 */ SDL_SCANCODE_UNKNOWN,
+ /* 290, 0x122 */ SDL_SCANCODE_UNKNOWN,
+ /* 291, 0x123 */ SDL_SCANCODE_UNKNOWN,
+ /* 292, 0x124 */ SDL_SCANCODE_UNKNOWN,
+ /* 293, 0x125 */ SDL_SCANCODE_UNKNOWN,
+ /* 294, 0x126 */ SDL_SCANCODE_UNKNOWN,
+ /* 295, 0x127 */ SDL_SCANCODE_UNKNOWN,
+ /* 296, 0x128 */ SDL_SCANCODE_UNKNOWN,
+ /* 297, 0x129 */ SDL_SCANCODE_UNKNOWN,
+ /* 298, 0x12a */ SDL_SCANCODE_UNKNOWN,
+ /* 299, 0x12b */ SDL_SCANCODE_UNKNOWN,
+ /* 300, 0x12c */ SDL_SCANCODE_UNKNOWN,
+ /* 301, 0x12d */ SDL_SCANCODE_UNKNOWN,
+ /* 302, 0x12e */ SDL_SCANCODE_UNKNOWN,
+ /* 303, 0x12f */ SDL_SCANCODE_UNKNOWN,
+ /* 304, 0x130 */ SDL_SCANCODE_UNKNOWN,
+ /* 305, 0x131 */ SDL_SCANCODE_UNKNOWN,
+ /* 306, 0x132 */ SDL_SCANCODE_UNKNOWN,
+ /* 307, 0x133 */ SDL_SCANCODE_UNKNOWN,
+ /* 308, 0x134 */ SDL_SCANCODE_UNKNOWN,
+ /* 309, 0x135 */ SDL_SCANCODE_UNKNOWN,
+ /* 310, 0x136 */ SDL_SCANCODE_UNKNOWN,
+ /* 311, 0x137 */ SDL_SCANCODE_UNKNOWN,
+ /* 312, 0x138 */ SDL_SCANCODE_UNKNOWN,
+ /* 313, 0x139 */ SDL_SCANCODE_UNKNOWN,
+ /* 314, 0x13a */ SDL_SCANCODE_UNKNOWN,
+ /* 315, 0x13b */ SDL_SCANCODE_UNKNOWN,
+ /* 316, 0x13c */ SDL_SCANCODE_UNKNOWN,
+ /* 317, 0x13d */ SDL_SCANCODE_UNKNOWN,
+ /* 318, 0x13e */ SDL_SCANCODE_UNKNOWN,
+ /* 319, 0x13f */ SDL_SCANCODE_UNKNOWN,
+ /* 320, 0x140 */ SDL_SCANCODE_UNKNOWN,
+ /* 321, 0x141 */ SDL_SCANCODE_UNKNOWN,
+ /* 322, 0x142 */ SDL_SCANCODE_UNKNOWN,
+ /* 323, 0x143 */ SDL_SCANCODE_UNKNOWN,
+ /* 324, 0x144 */ SDL_SCANCODE_UNKNOWN,
+ /* 325, 0x145 */ SDL_SCANCODE_UNKNOWN,
+ /* 326, 0x146 */ SDL_SCANCODE_UNKNOWN,
+ /* 327, 0x147 */ SDL_SCANCODE_UNKNOWN,
+ /* 328, 0x148 */ SDL_SCANCODE_UNKNOWN,
+ /* 329, 0x149 */ SDL_SCANCODE_UNKNOWN,
+ /* 330, 0x14a */ SDL_SCANCODE_UNKNOWN,
+ /* 331, 0x14b */ SDL_SCANCODE_UNKNOWN,
+ /* 332, 0x14c */ SDL_SCANCODE_UNKNOWN,
+ /* 333, 0x14d */ SDL_SCANCODE_UNKNOWN,
+ /* 334, 0x14e */ SDL_SCANCODE_UNKNOWN,
+ /* 335, 0x14f */ SDL_SCANCODE_UNKNOWN,
+ /* 336, 0x150 */ SDL_SCANCODE_UNKNOWN,
+ /* 337, 0x151 */ SDL_SCANCODE_UNKNOWN,
+ /* 338, 0x152 */ SDL_SCANCODE_UNKNOWN,
+ /* 339, 0x153 */ SDL_SCANCODE_UNKNOWN,
+ /* 340, 0x154 */ SDL_SCANCODE_UNKNOWN,
+ /* 341, 0x155 */ SDL_SCANCODE_UNKNOWN,
+ /* 342, 0x156 */ SDL_SCANCODE_UNKNOWN,
+ /* 343, 0x157 */ SDL_SCANCODE_UNKNOWN,
+ /* 344, 0x158 */ SDL_SCANCODE_UNKNOWN,
+ /* 345, 0x159 */ SDL_SCANCODE_UNKNOWN,
+ /* 346, 0x15a */ SDL_SCANCODE_UNKNOWN,
+ /* 347, 0x15b */ SDL_SCANCODE_UNKNOWN,
+ /* 348, 0x15c */ SDL_SCANCODE_UNKNOWN,
+ /* 349, 0x15d */ SDL_SCANCODE_UNKNOWN,
+ /* 350, 0x15e */ SDL_SCANCODE_UNKNOWN,
+ /* 351, 0x15f */ SDL_SCANCODE_UNKNOWN,
+ /* 352, 0x160 */ SDL_SCANCODE_UNKNOWN, /* KEY_OK */
+ /* 353, 0x161 */ SDL_SCANCODE_UNKNOWN, /* KEY_SELECT */
+ /* 354, 0x162 */ SDL_SCANCODE_UNKNOWN, /* KEY_GOTO */
+ /* 355, 0x163 */ SDL_SCANCODE_UNKNOWN, /* KEY_CLEAR */
+ /* 356, 0x164 */ SDL_SCANCODE_UNKNOWN, /* KEY_POWER2 */
+ /* 357, 0x165 */ SDL_SCANCODE_UNKNOWN, /* KEY_OPTION */
+ /* 358, 0x166 */ SDL_SCANCODE_UNKNOWN, /* KEY_INFO */
+ /* 359, 0x167 */ SDL_SCANCODE_UNKNOWN, /* KEY_TIME */
+ /* 360, 0x168 */ SDL_SCANCODE_UNKNOWN, /* KEY_VENDOR */
+ /* 361, 0x169 */ SDL_SCANCODE_UNKNOWN, /* KEY_ARCHIVE */
+ /* 362, 0x16a */ SDL_SCANCODE_UNKNOWN, /* KEY_PROGRAM */
+ /* 363, 0x16b */ SDL_SCANCODE_UNKNOWN, /* KEY_CHANNEL */
+ /* 364, 0x16c */ SDL_SCANCODE_UNKNOWN, /* KEY_FAVORITES */
+ /* 365, 0x16d */ SDL_SCANCODE_UNKNOWN, /* KEY_EPG */
+ /* 366, 0x16e */ SDL_SCANCODE_UNKNOWN, /* KEY_PVR */
+ /* 367, 0x16f */ SDL_SCANCODE_UNKNOWN, /* KEY_MHP */
+ /* 368, 0x170 */ SDL_SCANCODE_UNKNOWN, /* KEY_LANGUAGE */
+ /* 369, 0x171 */ SDL_SCANCODE_UNKNOWN, /* KEY_TITLE */
+ /* 370, 0x172 */ SDL_SCANCODE_UNKNOWN, /* KEY_SUBTITLE */
+ /* 371, 0x173 */ SDL_SCANCODE_UNKNOWN, /* KEY_ANGLE */
+ /* 372, 0x174 */ SDL_SCANCODE_UNKNOWN, /* KEY_FULL_SCREEN */
+ /* 373, 0x175 */ SDL_SCANCODE_UNKNOWN, /* KEY_MODE */
+ /* 374, 0x176 */ SDL_SCANCODE_UNKNOWN, /* KEY_KEYBOARD */
+ /* 375, 0x177 */ SDL_SCANCODE_UNKNOWN, /* KEY_ASPECT_RATIO */
+ /* 376, 0x178 */ SDL_SCANCODE_UNKNOWN, /* KEY_PC */
+ /* 377, 0x179 */ SDL_SCANCODE_UNKNOWN, /* KEY_TV */
+ /* 378, 0x17a */ SDL_SCANCODE_UNKNOWN, /* KEY_TV2 */
+ /* 379, 0x17b */ SDL_SCANCODE_UNKNOWN, /* KEY_VCR */
+ /* 380, 0x17c */ SDL_SCANCODE_UNKNOWN, /* KEY_VCR2 */
+ /* 381, 0x17d */ SDL_SCANCODE_UNKNOWN, /* KEY_SAT */
+ /* 382, 0x17e */ SDL_SCANCODE_UNKNOWN, /* KEY_SAT2 */
+ /* 383, 0x17f */ SDL_SCANCODE_UNKNOWN, /* KEY_CD */
+ /* 384, 0x180 */ SDL_SCANCODE_UNKNOWN, /* KEY_TAPE */
+ /* 385, 0x181 */ SDL_SCANCODE_UNKNOWN, /* KEY_RADIO */
+ /* 386, 0x182 */ SDL_SCANCODE_UNKNOWN, /* KEY_TUNER */
+ /* 387, 0x183 */ SDL_SCANCODE_UNKNOWN, /* KEY_PLAYER */
+ /* 388, 0x184 */ SDL_SCANCODE_UNKNOWN, /* KEY_TEXT */
+ /* 389, 0x185 */ SDL_SCANCODE_UNKNOWN, /* KEY_DVD */
+ /* 390, 0x186 */ SDL_SCANCODE_UNKNOWN, /* KEY_AUX */
+ /* 391, 0x187 */ SDL_SCANCODE_UNKNOWN, /* KEY_MP3 */
+ /* 392, 0x188 */ SDL_SCANCODE_UNKNOWN, /* KEY_AUDIO */
+ /* 393, 0x189 */ SDL_SCANCODE_UNKNOWN, /* KEY_VIDEO */
+ /* 394, 0x18a */ SDL_SCANCODE_UNKNOWN, /* KEY_DIRECTORY */
+ /* 395, 0x18b */ SDL_SCANCODE_UNKNOWN, /* KEY_LIST */
+ /* 396, 0x18c */ SDL_SCANCODE_UNKNOWN, /* KEY_MEMO */
+ /* 397, 0x18d */ SDL_SCANCODE_UNKNOWN, /* KEY_CALENDAR */
+ /* 398, 0x18e */ SDL_SCANCODE_UNKNOWN, /* KEY_RED */
+ /* 399, 0x18f */ SDL_SCANCODE_UNKNOWN, /* KEY_GREEN */
+ /* 400, 0x190 */ SDL_SCANCODE_UNKNOWN, /* KEY_YELLOW */
+ /* 401, 0x191 */ SDL_SCANCODE_UNKNOWN, /* KEY_BLUE */
+ /* 402, 0x192 */ SDL_SCANCODE_UNKNOWN, /* KEY_CHANNELUP */
+ /* 403, 0x193 */ SDL_SCANCODE_UNKNOWN, /* KEY_CHANNELDOWN */
+ /* 404, 0x194 */ SDL_SCANCODE_UNKNOWN, /* KEY_FIRST */
+ /* 405, 0x195 */ SDL_SCANCODE_UNKNOWN, /* KEY_LAST */
+ /* 406, 0x196 */ SDL_SCANCODE_UNKNOWN, /* KEY_AB */
+ /* 407, 0x197 */ SDL_SCANCODE_UNKNOWN, /* KEY_NEXT */
+ /* 408, 0x198 */ SDL_SCANCODE_UNKNOWN, /* KEY_RESTART */
+ /* 409, 0x199 */ SDL_SCANCODE_UNKNOWN, /* KEY_SLOW */
+ /* 410, 0x19a */ SDL_SCANCODE_UNKNOWN, /* KEY_SHUFFLE */
+ /* 411, 0x19b */ SDL_SCANCODE_UNKNOWN, /* KEY_BREAK */
+ /* 412, 0x19c */ SDL_SCANCODE_UNKNOWN, /* KEY_PREVIOUS */
+ /* 413, 0x19d */ SDL_SCANCODE_UNKNOWN, /* KEY_DIGITS */
+ /* 414, 0x19e */ SDL_SCANCODE_UNKNOWN, /* KEY_TEEN */
+ /* 415, 0x19f */ SDL_SCANCODE_UNKNOWN, /* KEY_TWEN */
+ /* 416, 0x1a0 */ SDL_SCANCODE_UNKNOWN, /* KEY_VIDEOPHONE */
+ /* 417, 0x1a1 */ SDL_SCANCODE_UNKNOWN, /* KEY_GAMES */
+ /* 418, 0x1a2 */ SDL_SCANCODE_UNKNOWN, /* KEY_ZOOMIN */
+ /* 419, 0x1a3 */ SDL_SCANCODE_UNKNOWN, /* KEY_ZOOMOUT */
+ /* 420, 0x1a4 */ SDL_SCANCODE_UNKNOWN, /* KEY_ZOOMRESET */
+ /* 421, 0x1a5 */ SDL_SCANCODE_UNKNOWN, /* KEY_WORDPROCESSOR */
+ /* 422, 0x1a6 */ SDL_SCANCODE_UNKNOWN, /* KEY_EDITOR */
+ /* 423, 0x1a7 */ SDL_SCANCODE_UNKNOWN, /* KEY_SPREADSHEET */
+ /* 424, 0x1a8 */ SDL_SCANCODE_UNKNOWN, /* KEY_GRAPHICSEDITOR */
+ /* 425, 0x1a9 */ SDL_SCANCODE_UNKNOWN, /* KEY_PRESENTATION */
+ /* 426, 0x1aa */ SDL_SCANCODE_UNKNOWN, /* KEY_DATABASE */
+ /* 427, 0x1ab */ SDL_SCANCODE_UNKNOWN, /* KEY_NEWS */
+ /* 428, 0x1ac */ SDL_SCANCODE_UNKNOWN, /* KEY_VOICEMAIL */
+ /* 429, 0x1ad */ SDL_SCANCODE_UNKNOWN, /* KEY_ADDRESSBOOK */
+ /* 430, 0x1ae */ SDL_SCANCODE_UNKNOWN, /* KEY_MESSENGER */
+ /* 431, 0x1af */ SDL_SCANCODE_UNKNOWN, /* KEY_DISPLAYTOGGLE */
+ /* 432, 0x1b0 */ SDL_SCANCODE_UNKNOWN, /* KEY_SPELLCHECK */
+ /* 433, 0x1b1 */ SDL_SCANCODE_UNKNOWN, /* KEY_LOGOFF */
+ /* 434, 0x1b2 */ SDL_SCANCODE_UNKNOWN, /* KEY_DOLLAR */
+ /* 435, 0x1b3 */ SDL_SCANCODE_UNKNOWN, /* KEY_EURO */
+ /* 436, 0x1b4 */ SDL_SCANCODE_UNKNOWN, /* KEY_FRAMEBACK */
+ /* 437, 0x1b5 */ SDL_SCANCODE_UNKNOWN, /* KEY_FRAMEFORWARD */
+ /* 438, 0x1b6 */ SDL_SCANCODE_UNKNOWN, /* KEY_CONTEXT_MENU */
+ /* 439, 0x1b7 */ SDL_SCANCODE_UNKNOWN, /* KEY_MEDIA_REPEAT */
+ /* 440, 0x1b8 */ SDL_SCANCODE_UNKNOWN, /* KEY_10CHANNELSUP */
+ /* 441, 0x1b9 */ SDL_SCANCODE_UNKNOWN, /* KEY_10CHANNELSDOWN */
+ /* 442, 0x1ba */ SDL_SCANCODE_UNKNOWN, /* KEY_IMAGES */
+ /* 443, 0x1bb */ SDL_SCANCODE_UNKNOWN,
+ /* 444, 0x1bc */ SDL_SCANCODE_UNKNOWN, /* KEY_NOTIFICATION_CENTER */
+ /* 445, 0x1bd */ SDL_SCANCODE_UNKNOWN, /* KEY_PICKUP_PHONE */
+ /* 446, 0x1be */ SDL_SCANCODE_UNKNOWN, /* KEY_HANGUP_PHONE */
+ /* 447, 0x1bf */ SDL_SCANCODE_UNKNOWN,
+ /* 448, 0x1c0 */ SDL_SCANCODE_UNKNOWN, /* KEY_DEL_EOL */
+ /* 449, 0x1c1 */ SDL_SCANCODE_UNKNOWN, /* KEY_DEL_EOS */
+ /* 450, 0x1c2 */ SDL_SCANCODE_UNKNOWN, /* KEY_INS_LINE */
+ /* 451, 0x1c3 */ SDL_SCANCODE_UNKNOWN, /* KEY_DEL_LINE */
+ /* 452, 0x1c4 */ SDL_SCANCODE_UNKNOWN,
+ /* 453, 0x1c5 */ SDL_SCANCODE_UNKNOWN,
+ /* 454, 0x1c6 */ SDL_SCANCODE_UNKNOWN,
+ /* 455, 0x1c7 */ SDL_SCANCODE_UNKNOWN,
+ /* 456, 0x1c8 */ SDL_SCANCODE_UNKNOWN,
+ /* 457, 0x1c9 */ SDL_SCANCODE_UNKNOWN,
+ /* 458, 0x1ca */ SDL_SCANCODE_UNKNOWN,
+ /* 459, 0x1cb */ SDL_SCANCODE_UNKNOWN,
+ /* 460, 0x1cc */ SDL_SCANCODE_UNKNOWN,
+ /* 461, 0x1cd */ SDL_SCANCODE_UNKNOWN,
+ /* 462, 0x1ce */ SDL_SCANCODE_UNKNOWN,
+ /* 463, 0x1cf */ SDL_SCANCODE_UNKNOWN,
+ /* 464, 0x1d0 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN */
+ /* 465, 0x1d1 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_ESC */
+ /* 466, 0x1d2 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F1 */
+ /* 467, 0x1d3 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F2 */
+ /* 468, 0x1d4 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F3 */
+ /* 469, 0x1d5 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F4 */
+ /* 470, 0x1d6 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F5 */
+ /* 471, 0x1d7 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F6 */
+ /* 472, 0x1d8 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F7 */
+ /* 473, 0x1d9 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F8 */
+ /* 474, 0x1da */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F9 */
+ /* 475, 0x1db */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F10 */
+ /* 476, 0x1dc */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F11 */
+ /* 477, 0x1dd */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F12 */
+ /* 478, 0x1de */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_1 */
+ /* 479, 0x1df */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_2 */
+ /* 480, 0x1e0 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_D */
+ /* 481, 0x1e1 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_E */
+ /* 482, 0x1e2 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_F */
+ /* 483, 0x1e3 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_S */
+ /* 484, 0x1e4 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_B */
+ /* 485, 0x1e5 */ SDL_SCANCODE_UNKNOWN, /* KEY_FN_RIGHT_SHIFT */
+ /* 486, 0x1e6 */ SDL_SCANCODE_UNKNOWN,
+ /* 487, 0x1e7 */ SDL_SCANCODE_UNKNOWN,
+ /* 488, 0x1e8 */ SDL_SCANCODE_UNKNOWN,
+ /* 489, 0x1e9 */ SDL_SCANCODE_UNKNOWN,
+ /* 490, 0x1ea */ SDL_SCANCODE_UNKNOWN,
+ /* 491, 0x1eb */ SDL_SCANCODE_UNKNOWN,
+ /* 492, 0x1ec */ SDL_SCANCODE_UNKNOWN,
+ /* 493, 0x1ed */ SDL_SCANCODE_UNKNOWN,
+ /* 494, 0x1ee */ SDL_SCANCODE_UNKNOWN,
+ /* 495, 0x1ef */ SDL_SCANCODE_UNKNOWN,
+ /* 496, 0x1f0 */ SDL_SCANCODE_UNKNOWN,
+ /* 497, 0x1f1 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRL_DOT1 */
+ /* 498, 0x1f2 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRL_DOT2 */
+ /* 499, 0x1f3 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRL_DOT3 */
+ /* 500, 0x1f4 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRL_DOT4 */
+ /* 501, 0x1f5 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRL_DOT5 */
+ /* 502, 0x1f6 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRL_DOT6 */
+ /* 503, 0x1f7 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRL_DOT7 */
+ /* 504, 0x1f8 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRL_DOT8 */
+ /* 505, 0x1f9 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRL_DOT9 */
+ /* 506, 0x1fa */ SDL_SCANCODE_UNKNOWN, /* KEY_BRL_DOT10 */
+ /* 507, 0x1fb */ SDL_SCANCODE_UNKNOWN,
+ /* 508, 0x1fc */ SDL_SCANCODE_UNKNOWN,
+ /* 509, 0x1fd */ SDL_SCANCODE_UNKNOWN,
+ /* 510, 0x1fe */ SDL_SCANCODE_UNKNOWN,
+ /* 511, 0x1ff */ SDL_SCANCODE_UNKNOWN,
+ /* 512, 0x200 */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_0 */
+ /* 513, 0x201 */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_1 */
+ /* 514, 0x202 */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_2 */
+ /* 515, 0x203 */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_3 */
+ /* 516, 0x204 */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_4 */
+ /* 517, 0x205 */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_5 */
+ /* 518, 0x206 */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_6 */
+ /* 519, 0x207 */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_7 */
+ /* 520, 0x208 */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_8 */
+ /* 521, 0x209 */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_9 */
+ /* 522, 0x20a */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_STAR */
+ /* 523, 0x20b */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_POUND */
+ /* 524, 0x20c */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_A */
+ /* 525, 0x20d */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_B */
+ /* 526, 0x20e */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_C */
+ /* 527, 0x20f */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_D */
+ /* 528, 0x210 */ SDL_SCANCODE_UNKNOWN, /* KEY_CAMERA_FOCUS */
+ /* 529, 0x211 */ SDL_SCANCODE_UNKNOWN, /* KEY_WPS_BUTTON */
+ /* 530, 0x212 */ SDL_SCANCODE_UNKNOWN, /* KEY_TOUCHPAD_TOGGLE */
+ /* 531, 0x213 */ SDL_SCANCODE_UNKNOWN, /* KEY_TOUCHPAD_ON */
+ /* 532, 0x214 */ SDL_SCANCODE_UNKNOWN, /* KEY_TOUCHPAD_OFF */
+ /* 533, 0x215 */ SDL_SCANCODE_UNKNOWN, /* KEY_CAMERA_ZOOMIN */
+ /* 534, 0x216 */ SDL_SCANCODE_UNKNOWN, /* KEY_CAMERA_ZOOMOUT */
+ /* 535, 0x217 */ SDL_SCANCODE_UNKNOWN, /* KEY_CAMERA_UP */
+ /* 536, 0x218 */ SDL_SCANCODE_UNKNOWN, /* KEY_CAMERA_DOWN */
+ /* 537, 0x219 */ SDL_SCANCODE_UNKNOWN, /* KEY_CAMERA_LEFT */
+ /* 538, 0x21a */ SDL_SCANCODE_UNKNOWN, /* KEY_CAMERA_RIGHT */
+ /* 539, 0x21b */ SDL_SCANCODE_UNKNOWN, /* KEY_ATTENDANT_ON */
+ /* 540, 0x21c */ SDL_SCANCODE_UNKNOWN, /* KEY_ATTENDANT_OFF */
+ /* 541, 0x21d */ SDL_SCANCODE_UNKNOWN, /* KEY_ATTENDANT_TOGGLE */
+ /* 542, 0x21e */ SDL_SCANCODE_UNKNOWN, /* KEY_LIGHTS_TOGGLE */
+ /* 543, 0x21f */ SDL_SCANCODE_UNKNOWN,
+ /* 544, 0x220 */ SDL_SCANCODE_UNKNOWN,
+ /* 545, 0x221 */ SDL_SCANCODE_UNKNOWN,
+ /* 546, 0x222 */ SDL_SCANCODE_UNKNOWN,
+ /* 547, 0x223 */ SDL_SCANCODE_UNKNOWN,
+ /* 548, 0x224 */ SDL_SCANCODE_UNKNOWN,
+ /* 549, 0x225 */ SDL_SCANCODE_UNKNOWN,
+ /* 550, 0x226 */ SDL_SCANCODE_UNKNOWN,
+ /* 551, 0x227 */ SDL_SCANCODE_UNKNOWN,
+ /* 552, 0x228 */ SDL_SCANCODE_UNKNOWN,
+ /* 553, 0x229 */ SDL_SCANCODE_UNKNOWN,
+ /* 554, 0x22a */ SDL_SCANCODE_UNKNOWN,
+ /* 555, 0x22b */ SDL_SCANCODE_UNKNOWN,
+ /* 556, 0x22c */ SDL_SCANCODE_UNKNOWN,
+ /* 557, 0x22d */ SDL_SCANCODE_UNKNOWN,
+ /* 558, 0x22e */ SDL_SCANCODE_UNKNOWN,
+ /* 559, 0x22f */ SDL_SCANCODE_UNKNOWN,
+ /* 560, 0x230 */ SDL_SCANCODE_UNKNOWN, /* KEY_ALS_TOGGLE */
+ /* 561, 0x231 */ SDL_SCANCODE_UNKNOWN, /* KEY_ROTATE_LOCK_TOGGLE */
+ /* 562, 0x232 */ SDL_SCANCODE_UNKNOWN,
+ /* 563, 0x233 */ SDL_SCANCODE_UNKNOWN,
+ /* 564, 0x234 */ SDL_SCANCODE_UNKNOWN,
+ /* 565, 0x235 */ SDL_SCANCODE_UNKNOWN,
+ /* 566, 0x236 */ SDL_SCANCODE_UNKNOWN,
+ /* 567, 0x237 */ SDL_SCANCODE_UNKNOWN,
+ /* 568, 0x238 */ SDL_SCANCODE_UNKNOWN,
+ /* 569, 0x239 */ SDL_SCANCODE_UNKNOWN,
+ /* 570, 0x23a */ SDL_SCANCODE_UNKNOWN,
+ /* 571, 0x23b */ SDL_SCANCODE_UNKNOWN,
+ /* 572, 0x23c */ SDL_SCANCODE_UNKNOWN,
+ /* 573, 0x23d */ SDL_SCANCODE_UNKNOWN,
+ /* 574, 0x23e */ SDL_SCANCODE_UNKNOWN,
+ /* 575, 0x23f */ SDL_SCANCODE_UNKNOWN,
+ /* 576, 0x240 */ SDL_SCANCODE_UNKNOWN, /* KEY_BUTTONCONFIG */
+ /* 577, 0x241 */ SDL_SCANCODE_UNKNOWN, /* KEY_TASKMANAGER */
+ /* 578, 0x242 */ SDL_SCANCODE_UNKNOWN, /* KEY_JOURNAL */
+ /* 579, 0x243 */ SDL_SCANCODE_UNKNOWN, /* KEY_CONTROLPANEL */
+ /* 580, 0x244 */ SDL_SCANCODE_UNKNOWN, /* KEY_APPSELECT */
+ /* 581, 0x245 */ SDL_SCANCODE_UNKNOWN, /* KEY_SCREENSAVER */
+ /* 582, 0x246 */ SDL_SCANCODE_UNKNOWN, /* KEY_VOICECOMMAND */
+ /* 583, 0x247 */ SDL_SCANCODE_UNKNOWN, /* KEY_ASSISTANT */
+ /* 584, 0x248 */ SDL_SCANCODE_UNKNOWN, /* KEY_KBD_LAYOUT_NEXT */
+ /* 585, 0x249 */ SDL_SCANCODE_UNKNOWN, /* KEY_EMOJI_PICKER */
+ /* 586, 0x24a */ SDL_SCANCODE_UNKNOWN, /* KEY_DICTATE */
+ /* 587, 0x24b */ SDL_SCANCODE_UNKNOWN,
+ /* 588, 0x24c */ SDL_SCANCODE_UNKNOWN,
+ /* 589, 0x24d */ SDL_SCANCODE_UNKNOWN,
+ /* 590, 0x24e */ SDL_SCANCODE_UNKNOWN,
+ /* 591, 0x24f */ SDL_SCANCODE_UNKNOWN,
+ /* 592, 0x250 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRIGHTNESS_MIN */
+ /* 593, 0x251 */ SDL_SCANCODE_UNKNOWN, /* KEY_BRIGHTNESS_MAX */
+ /* 594, 0x252 */ SDL_SCANCODE_UNKNOWN,
+ /* 595, 0x253 */ SDL_SCANCODE_UNKNOWN,
+ /* 596, 0x254 */ SDL_SCANCODE_UNKNOWN,
+ /* 597, 0x255 */ SDL_SCANCODE_UNKNOWN,
+ /* 598, 0x256 */ SDL_SCANCODE_UNKNOWN,
+ /* 599, 0x257 */ SDL_SCANCODE_UNKNOWN,
+ /* 600, 0x258 */ SDL_SCANCODE_UNKNOWN,
+ /* 601, 0x259 */ SDL_SCANCODE_UNKNOWN,
+ /* 602, 0x25a */ SDL_SCANCODE_UNKNOWN,
+ /* 603, 0x25b */ SDL_SCANCODE_UNKNOWN,
+ /* 604, 0x25c */ SDL_SCANCODE_UNKNOWN,
+ /* 605, 0x25d */ SDL_SCANCODE_UNKNOWN,
+ /* 606, 0x25e */ SDL_SCANCODE_UNKNOWN,
+ /* 607, 0x25f */ SDL_SCANCODE_UNKNOWN,
+ /* 608, 0x260 */ SDL_SCANCODE_UNKNOWN, /* KEY_KBDINPUTASSIST_PREV */
+ /* 609, 0x261 */ SDL_SCANCODE_UNKNOWN, /* KEY_KBDINPUTASSIST_NEXT */
+ /* 610, 0x262 */ SDL_SCANCODE_UNKNOWN, /* KEY_KBDINPUTASSIST_PREVGROUP */
+ /* 611, 0x263 */ SDL_SCANCODE_UNKNOWN, /* KEY_KBDINPUTASSIST_NEXTGROUP */
+ /* 612, 0x264 */ SDL_SCANCODE_UNKNOWN, /* KEY_KBDINPUTASSIST_ACCEPT */
+ /* 613, 0x265 */ SDL_SCANCODE_UNKNOWN, /* KEY_KBDINPUTASSIST_CANCEL */
+ /* 614, 0x266 */ SDL_SCANCODE_UNKNOWN, /* KEY_RIGHT_UP */
+ /* 615, 0x267 */ SDL_SCANCODE_UNKNOWN, /* KEY_RIGHT_DOWN */
+ /* 616, 0x268 */ SDL_SCANCODE_UNKNOWN, /* KEY_LEFT_UP */
+ /* 617, 0x269 */ SDL_SCANCODE_UNKNOWN, /* KEY_LEFT_DOWN */
+ /* 618, 0x26a */ SDL_SCANCODE_UNKNOWN, /* KEY_ROOT_MENU */
+ /* 619, 0x26b */ SDL_SCANCODE_UNKNOWN, /* KEY_MEDIA_TOP_MENU */
+ /* 620, 0x26c */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_11 */
+ /* 621, 0x26d */ SDL_SCANCODE_UNKNOWN, /* KEY_NUMERIC_12 */
+ /* 622, 0x26e */ SDL_SCANCODE_UNKNOWN, /* KEY_AUDIO_DESC */
+ /* 623, 0x26f */ SDL_SCANCODE_UNKNOWN, /* KEY_3D_MODE */
+ /* 624, 0x270 */ SDL_SCANCODE_UNKNOWN, /* KEY_NEXT_FAVORITE */
+ /* 625, 0x271 */ SDL_SCANCODE_UNKNOWN, /* KEY_STOP_RECORD */
+ /* 626, 0x272 */ SDL_SCANCODE_UNKNOWN, /* KEY_PAUSE_RECORD */
+ /* 627, 0x273 */ SDL_SCANCODE_UNKNOWN, /* KEY_VOD */
+ /* 628, 0x274 */ SDL_SCANCODE_UNKNOWN, /* KEY_UNMUTE */
+ /* 629, 0x275 */ SDL_SCANCODE_UNKNOWN, /* KEY_FASTREVERSE */
+ /* 630, 0x276 */ SDL_SCANCODE_UNKNOWN, /* KEY_SLOWREVERSE */
+ /* 631, 0x277 */ SDL_SCANCODE_UNKNOWN, /* KEY_DATA */
+ /* 632, 0x278 */ SDL_SCANCODE_UNKNOWN, /* KEY_ONSCREEN_KEYBOARD */
+ /* 633, 0x279 */ SDL_SCANCODE_UNKNOWN, /* KEY_PRIVACY_SCREEN_TOGGLE */
+ /* 634, 0x27a */ SDL_SCANCODE_UNKNOWN, /* KEY_SELECTIVE_SCREENSHOT */
+ /* 635, 0x27b */ SDL_SCANCODE_UNKNOWN,
+ /* 636, 0x27c */ SDL_SCANCODE_UNKNOWN,
+ /* 637, 0x27d */ SDL_SCANCODE_UNKNOWN,
+ /* 638, 0x27e */ SDL_SCANCODE_UNKNOWN,
+ /* 639, 0x27f */ SDL_SCANCODE_UNKNOWN,
+ /* 640, 0x280 */ SDL_SCANCODE_UNKNOWN,
+ /* 641, 0x281 */ SDL_SCANCODE_UNKNOWN,
+ /* 642, 0x282 */ SDL_SCANCODE_UNKNOWN,
+ /* 643, 0x283 */ SDL_SCANCODE_UNKNOWN,
+ /* 644, 0x284 */ SDL_SCANCODE_UNKNOWN,
+ /* 645, 0x285 */ SDL_SCANCODE_UNKNOWN,
+ /* 646, 0x286 */ SDL_SCANCODE_UNKNOWN,
+ /* 647, 0x287 */ SDL_SCANCODE_UNKNOWN,
+ /* 648, 0x288 */ SDL_SCANCODE_UNKNOWN,
+ /* 649, 0x289 */ SDL_SCANCODE_UNKNOWN,
+ /* 650, 0x28a */ SDL_SCANCODE_UNKNOWN,
+ /* 651, 0x28b */ SDL_SCANCODE_UNKNOWN,
+ /* 652, 0x28c */ SDL_SCANCODE_UNKNOWN,
+ /* 653, 0x28d */ SDL_SCANCODE_UNKNOWN,
+ /* 654, 0x28e */ SDL_SCANCODE_UNKNOWN,
+ /* 655, 0x28f */ SDL_SCANCODE_UNKNOWN,
+ /* 656, 0x290 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO1 */
+ /* 657, 0x291 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO2 */
+ /* 658, 0x292 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO3 */
+ /* 659, 0x293 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO4 */
+ /* 660, 0x294 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO5 */
+ /* 661, 0x295 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO6 */
+ /* 662, 0x296 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO7 */
+ /* 663, 0x297 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO8 */
+ /* 664, 0x298 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO9 */
+ /* 665, 0x299 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO10 */
+ /* 666, 0x29a */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO11 */
+ /* 667, 0x29b */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO12 */
+ /* 668, 0x29c */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO13 */
+ /* 669, 0x29d */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO14 */
+ /* 670, 0x29e */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO15 */
+ /* 671, 0x29f */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO16 */
+ /* 672, 0x2a0 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO17 */
+ /* 673, 0x2a1 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO18 */
+ /* 674, 0x2a2 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO19 */
+ /* 675, 0x2a3 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO20 */
+ /* 676, 0x2a4 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO21 */
+ /* 677, 0x2a5 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO22 */
+ /* 678, 0x2a6 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO23 */
+ /* 679, 0x2a7 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO24 */
+ /* 680, 0x2a8 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO25 */
+ /* 681, 0x2a9 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO26 */
+ /* 682, 0x2aa */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO27 */
+ /* 683, 0x2ab */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO28 */
+ /* 684, 0x2ac */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO29 */
+ /* 685, 0x2ad */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO30 */
+ /* 686, 0x2ae */ SDL_SCANCODE_UNKNOWN,
+ /* 687, 0x2af */ SDL_SCANCODE_UNKNOWN,
+ /* 688, 0x2b0 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO_RECORD_START */
+ /* 689, 0x2b1 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO_RECORD_STOP */
+ /* 690, 0x2b2 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO_PRESET_CYCLE */
+ /* 691, 0x2b3 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO_PRESET1 */
+ /* 692, 0x2b4 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO_PRESET2 */
+ /* 693, 0x2b5 */ SDL_SCANCODE_UNKNOWN, /* KEY_MACRO_PRESET3 */
+ /* 694, 0x2b6 */ SDL_SCANCODE_UNKNOWN,
+ /* 695, 0x2b7 */ SDL_SCANCODE_UNKNOWN,
+ /* 696, 0x2b8 */ SDL_SCANCODE_UNKNOWN, /* KEY_KBD_LCD_MENU1 */
+ /* 697, 0x2b9 */ SDL_SCANCODE_UNKNOWN, /* KEY_KBD_LCD_MENU2 */
+ /* 698, 0x2ba */ SDL_SCANCODE_UNKNOWN, /* KEY_KBD_LCD_MENU3 */
+ /* 699, 0x2bb */ SDL_SCANCODE_UNKNOWN, /* KEY_KBD_LCD_MENU4 */
+ /* 700, 0x2bc */ SDL_SCANCODE_UNKNOWN, /* KEY_KBD_LCD_MENU5 */
+ /* 701, 0x2bd */ SDL_SCANCODE_UNKNOWN,
+ /* 702, 0x2be */ SDL_SCANCODE_UNKNOWN,
+ /* 703, 0x2bf */ SDL_SCANCODE_UNKNOWN,
+ /* 704, 0x2c0 */ SDL_SCANCODE_UNKNOWN,
+ /* 705, 0x2c1 */ SDL_SCANCODE_UNKNOWN,
+ /* 706, 0x2c2 */ SDL_SCANCODE_UNKNOWN,
+ /* 707, 0x2c3 */ SDL_SCANCODE_UNKNOWN,
+ /* 708, 0x2c4 */ SDL_SCANCODE_UNKNOWN,
+ /* 709, 0x2c5 */ SDL_SCANCODE_UNKNOWN,
+ /* 710, 0x2c6 */ SDL_SCANCODE_UNKNOWN,
+ /* 711, 0x2c7 */ SDL_SCANCODE_UNKNOWN,
+ /* 712, 0x2c8 */ SDL_SCANCODE_UNKNOWN,
+ /* 713, 0x2c9 */ SDL_SCANCODE_UNKNOWN,
+ /* 714, 0x2ca */ SDL_SCANCODE_UNKNOWN,
+ /* 715, 0x2cb */ SDL_SCANCODE_UNKNOWN,
+ /* 716, 0x2cc */ SDL_SCANCODE_UNKNOWN,
+ /* 717, 0x2cd */ SDL_SCANCODE_UNKNOWN,
+ /* 718, 0x2ce */ SDL_SCANCODE_UNKNOWN,
+ /* 719, 0x2cf */ SDL_SCANCODE_UNKNOWN,
+ /* 720, 0x2d0 */ SDL_SCANCODE_UNKNOWN,
+ /* 721, 0x2d1 */ SDL_SCANCODE_UNKNOWN,
+ /* 722, 0x2d2 */ SDL_SCANCODE_UNKNOWN,
+ /* 723, 0x2d3 */ SDL_SCANCODE_UNKNOWN,
+ /* 724, 0x2d4 */ SDL_SCANCODE_UNKNOWN,
+ /* 725, 0x2d5 */ SDL_SCANCODE_UNKNOWN,
+ /* 726, 0x2d6 */ SDL_SCANCODE_UNKNOWN,
+ /* 727, 0x2d7 */ SDL_SCANCODE_UNKNOWN,
+ /* 728, 0x2d8 */ SDL_SCANCODE_UNKNOWN,
+ /* 729, 0x2d9 */ SDL_SCANCODE_UNKNOWN,
+ /* 730, 0x2da */ SDL_SCANCODE_UNKNOWN,
+ /* 731, 0x2db */ SDL_SCANCODE_UNKNOWN,
+ /* 732, 0x2dc */ SDL_SCANCODE_UNKNOWN,
+ /* 733, 0x2dd */ SDL_SCANCODE_UNKNOWN,
+ /* 734, 0x2de */ SDL_SCANCODE_UNKNOWN,
+ /* 735, 0x2df */ SDL_SCANCODE_UNKNOWN,
+ /* 736, 0x2e0 */ SDL_SCANCODE_UNKNOWN,
+ /* 737, 0x2e1 */ SDL_SCANCODE_UNKNOWN,
+ /* 738, 0x2e2 */ SDL_SCANCODE_UNKNOWN,
+ /* 739, 0x2e3 */ SDL_SCANCODE_UNKNOWN,
+ /* 740, 0x2e4 */ SDL_SCANCODE_UNKNOWN,
+ /* 741, 0x2e5 */ SDL_SCANCODE_UNKNOWN,
+ /* 742, 0x2e6 */ SDL_SCANCODE_UNKNOWN,
+ /* 743, 0x2e7 */ SDL_SCANCODE_UNKNOWN,
+ /* 744, 0x2e8 */ SDL_SCANCODE_UNKNOWN,
+ /* 745, 0x2e9 */ SDL_SCANCODE_UNKNOWN,
+ /* 746, 0x2ea */ SDL_SCANCODE_UNKNOWN,
+ /* 747, 0x2eb */ SDL_SCANCODE_UNKNOWN,
+ /* 748, 0x2ec */ SDL_SCANCODE_UNKNOWN,
+ /* 749, 0x2ed */ SDL_SCANCODE_UNKNOWN,
+ /* 750, 0x2ee */ SDL_SCANCODE_UNKNOWN,
+ /* 751, 0x2ef */ SDL_SCANCODE_UNKNOWN,
+ /* 752, 0x2f0 */ SDL_SCANCODE_UNKNOWN,
+ /* 753, 0x2f1 */ SDL_SCANCODE_UNKNOWN,
+ /* 754, 0x2f2 */ SDL_SCANCODE_UNKNOWN,
+ /* 755, 0x2f3 */ SDL_SCANCODE_UNKNOWN,
+ /* 756, 0x2f4 */ SDL_SCANCODE_UNKNOWN,
+ /* 757, 0x2f5 */ SDL_SCANCODE_UNKNOWN,
+ /* 758, 0x2f6 */ SDL_SCANCODE_UNKNOWN,
+ /* 759, 0x2f7 */ SDL_SCANCODE_UNKNOWN,
+ /* 760, 0x2f8 */ SDL_SCANCODE_UNKNOWN,
+ /* 761, 0x2f9 */ SDL_SCANCODE_UNKNOWN,
+ /* 762, 0x2fa */ SDL_SCANCODE_UNKNOWN,
+ /* 763, 0x2fb */ SDL_SCANCODE_UNKNOWN,
+ /* 764, 0x2fc */ SDL_SCANCODE_UNKNOWN,
+ /* 765, 0x2fd */ SDL_SCANCODE_UNKNOWN,
+ /* 766, 0x2fe */ SDL_SCANCODE_UNKNOWN,
+ /* 767, 0x2ff */ SDL_SCANCODE_UNKNOWN, /* KEY_MAX */
+#endif /* 0 */
};
+
+#if 0 /* A shell script to update the Linux key names in this file */
+#!/bin/bash
+
+function get_keyname
+{
+ value=$(echo "$1" | awk '{print $3}')
+ fgrep KEY_ /usr/include/linux/input-event-codes.h | while read line; do
+ read -ra fields <<<"$line"
+ if [ "${fields[2]}" = "$value" ]; then
+ echo "${fields[1]}"
+ return
+ fi
+ done
+}
+
+fgrep SDL_SCANCODE scancodes_linux.h | while read line; do
+ if [ $(echo "$line" | awk '{print NF}') -eq 5 ]; then
+ name=$(get_keyname "$line")
+ if [ "$name" != "" ]; then
+ echo " $line /* $name */"
+ continue
+ fi
+ fi
+ echo " $line"
+done
+#endif /* end script */
+
/* *INDENT-ON* */ /* clang-format on */
+
+/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/events/scancodes_windows.h b/src/events/scancodes_windows.h
index 9fc7067a2..fc3e3db66 100644
--- a/src/events/scancodes_windows.h
+++ b/src/events/scancodes_windows.h
@@ -53,3 +53,5 @@ static const SDL_Scancode windows_scancode_table[] =
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_INTERNATIONAL4, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_INTERNATIONAL5, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_INTERNATIONAL3, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN /* 7 */
};
/* *INDENT-ON* */ /* clang-format on */
+
+/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/events/scancodes_xfree86.h b/src/events/scancodes_xfree86.h
index 1ce2a8c57..605a657f1 100644
--- a/src/events/scancodes_xfree86.h
+++ b/src/events/scancodes_xfree86.h
@@ -179,247 +179,256 @@ static const SDL_Scancode xfree86_scancode_table[] = {
/* 146 */ SDL_SCANCODE_CUT,
};
-/* for wireless usb keyboard (manufacturer TRUST) without numpad. */
+/* This is largely identical to the Linux keycode mapping */
static const SDL_Scancode xfree86_scancode_table2[] = {
- /* 0 */ SDL_SCANCODE_UNKNOWN,
- /* 1 */ SDL_SCANCODE_ESCAPE,
- /* 2 */ SDL_SCANCODE_1,
- /* 3 */ SDL_SCANCODE_2,
- /* 4 */ SDL_SCANCODE_3,
- /* 5 */ SDL_SCANCODE_4,
- /* 6 */ SDL_SCANCODE_5,
- /* 7 */ SDL_SCANCODE_6,
- /* 8 */ SDL_SCANCODE_7,
- /* 9 */ SDL_SCANCODE_8,
- /* 10 */ SDL_SCANCODE_9,
- /* 11 */ SDL_SCANCODE_0,
- /* 12 */ SDL_SCANCODE_MINUS,
- /* 13 */ SDL_SCANCODE_EQUALS,
- /* 14 */ SDL_SCANCODE_BACKSPACE,
- /* 15 */ SDL_SCANCODE_TAB,
- /* 16 */ SDL_SCANCODE_Q,
- /* 17 */ SDL_SCANCODE_W,
- /* 18 */ SDL_SCANCODE_E,
- /* 19 */ SDL_SCANCODE_R,
- /* 20 */ SDL_SCANCODE_T,
- /* 21 */ SDL_SCANCODE_Y,
- /* 22 */ SDL_SCANCODE_U,
- /* 23 */ SDL_SCANCODE_I,
- /* 24 */ SDL_SCANCODE_O,
- /* 25 */ SDL_SCANCODE_P,
- /* 26 */ SDL_SCANCODE_LEFTBRACKET,
- /* 27 */ SDL_SCANCODE_RIGHTBRACKET,
- /* 28 */ SDL_SCANCODE_RETURN,
- /* 29 */ SDL_SCANCODE_LCTRL,
- /* 30 */ SDL_SCANCODE_A,
- /* 31 */ SDL_SCANCODE_S,
- /* 32 */ SDL_SCANCODE_D,
- /* 33 */ SDL_SCANCODE_F,
- /* 34 */ SDL_SCANCODE_G,
- /* 35 */ SDL_SCANCODE_H,
- /* 36 */ SDL_SCANCODE_J,
- /* 37 */ SDL_SCANCODE_K,
- /* 38 */ SDL_SCANCODE_L,
- /* 39 */ SDL_SCANCODE_SEMICOLON,
- /* 40 */ SDL_SCANCODE_APOSTROPHE,
- /* 41 */ SDL_SCANCODE_GRAVE,
- /* 42 */ SDL_SCANCODE_LSHIFT,
- /* 43 */ SDL_SCANCODE_BACKSLASH,
- /* 44 */ SDL_SCANCODE_Z,
- /* 45 */ SDL_SCANCODE_X,
- /* 46 */ SDL_SCANCODE_C,
- /* 47 */ SDL_SCANCODE_V,
- /* 48 */ SDL_SCANCODE_B,
- /* 49 */ SDL_SCANCODE_N,
- /* 50 */ SDL_SCANCODE_M,
- /* 51 */ SDL_SCANCODE_COMMA,
- /* 52 */ SDL_SCANCODE_PERIOD,
- /* 53 */ SDL_SCANCODE_SLASH,
- /* 54 */ SDL_SCANCODE_RSHIFT,
- /* 55 */ SDL_SCANCODE_KP_MULTIPLY,
- /* 56 */ SDL_SCANCODE_LALT,
- /* 57 */ SDL_SCANCODE_SPACE,
- /* 58 */ SDL_SCANCODE_CAPSLOCK,
- /* 59 */ SDL_SCANCODE_F1,
- /* 60 */ SDL_SCANCODE_F2,
- /* 61 */ SDL_SCANCODE_F3,
- /* 62 */ SDL_SCANCODE_F4,
- /* 63 */ SDL_SCANCODE_F5,
- /* 64 */ SDL_SCANCODE_F6,
- /* 65 */ SDL_SCANCODE_F7,
- /* 66 */ SDL_SCANCODE_F8,
- /* 67 */ SDL_SCANCODE_F9,
- /* 68 */ SDL_SCANCODE_F10,
- /* 69 */ SDL_SCANCODE_NUMLOCKCLEAR,
- /* 70 */ SDL_SCANCODE_SCROLLLOCK,
- /* 71 */ SDL_SCANCODE_KP_7,
- /* 72 */ SDL_SCANCODE_KP_8,
- /* 73 */ SDL_SCANCODE_KP_9,
- /* 74 */ SDL_SCANCODE_KP_MINUS,
- /* 75 */ SDL_SCANCODE_KP_4,
- /* 76 */ SDL_SCANCODE_KP_5,
- /* 77 */ SDL_SCANCODE_KP_6,
- /* 78 */ SDL_SCANCODE_KP_PLUS,
- /* 79 */ SDL_SCANCODE_KP_1,
- /* 80 */ SDL_SCANCODE_KP_2,
- /* 81 */ SDL_SCANCODE_KP_3,
- /* 82 */ SDL_SCANCODE_KP_0,
- /* 83 */ SDL_SCANCODE_KP_PERIOD,
- /* 84 */ SDL_SCANCODE_SYSREQ, /* ???? */
- /* 85 */ SDL_SCANCODE_MODE, /* ???? */
- /* 86 */ SDL_SCANCODE_NONUSBACKSLASH,
- /* 87 */ SDL_SCANCODE_F11,
- /* 88 */ SDL_SCANCODE_F12,
- /* 89 */ SDL_SCANCODE_INTERNATIONAL1, /* \_ */
- /* 90 */ SDL_SCANCODE_UNKNOWN, /* Katakana */
- /* 91 */ SDL_SCANCODE_UNKNOWN, /* Hiragana */
- /* 92 */ SDL_SCANCODE_INTERNATIONAL4, /* Henkan_Mode */
- /* 93 */ SDL_SCANCODE_INTERNATIONAL2, /* Hiragana_Katakana */
- /* 94 */ SDL_SCANCODE_INTERNATIONAL5, /* Muhenkan */
- /* 95 */ SDL_SCANCODE_UNKNOWN,
- /* 96 */ SDL_SCANCODE_KP_ENTER,
- /* 97 */ SDL_SCANCODE_RCTRL,
- /* 98 */ SDL_SCANCODE_KP_DIVIDE,
- /* 99 */ SDL_SCANCODE_PRINTSCREEN,
- /* 100 */ SDL_SCANCODE_RALT, /* ISO_Level3_Shift, ALTGR, RALT */
- /* 101 */ SDL_SCANCODE_UNKNOWN, /* Linefeed */
- /* 102 */ SDL_SCANCODE_HOME,
- /* 103 */ SDL_SCANCODE_UP,
- /* 104 */ SDL_SCANCODE_PAGEUP,
- /* 105 */ SDL_SCANCODE_LEFT,
- /* 106 */ SDL_SCANCODE_RIGHT,
- /* 107 */ SDL_SCANCODE_END,
- /* 108 */ SDL_SCANCODE_DOWN,
- /* 109 */ SDL_SCANCODE_PAGEDOWN,
- /* 110 */ SDL_SCANCODE_INSERT,
- /* 111 */ SDL_SCANCODE_DELETE,
- /* 112 */ SDL_SCANCODE_UNKNOWN,
- /* 113 */ SDL_SCANCODE_MUTE,
- /* 114 */ SDL_SCANCODE_VOLUMEDOWN,
- /* 115 */ SDL_SCANCODE_VOLUMEUP,
- /* 116 */ SDL_SCANCODE_POWER,
- /* 117 */ SDL_SCANCODE_KP_EQUALS,
- /* 118 */ SDL_SCANCODE_KP_PLUSMINUS, /* plusminus */
- /* 119 */ SDL_SCANCODE_PAUSE,
- /* 120 */ SDL_SCANCODE_UNKNOWN, /* XF86LaunchA */
- /* 121 */ SDL_SCANCODE_KP_COMMA, /* KP_Decimal */
- /* 122 */ SDL_SCANCODE_LANG1, /* Hangul */
- /* 123 */ SDL_SCANCODE_LANG2, /* Hangul_Hanja */
- /* 124 */ SDL_SCANCODE_INTERNATIONAL3, /* Yen */
- /* 125 */ SDL_SCANCODE_LGUI,
- /* 126 */ SDL_SCANCODE_RGUI,
- /* 127 */ SDL_SCANCODE_APPLICATION,
- /* 128 */ SDL_SCANCODE_CANCEL,
- /* 129 */ SDL_SCANCODE_AGAIN,
- /* 130 */ SDL_SCANCODE_UNKNOWN, /* SunProps */
- /* 131 */ SDL_SCANCODE_UNDO,
- /* 132 */ SDL_SCANCODE_UNKNOWN, /* SunFront */
- /* 133 */ SDL_SCANCODE_COPY,
- /* 134 */ SDL_SCANCODE_UNKNOWN, /* SunOpen */
- /* 135 */ SDL_SCANCODE_PASTE,
- /* 136 */ SDL_SCANCODE_FIND,
- /* 137 */ SDL_SCANCODE_CUT,
- /* 138 */ SDL_SCANCODE_HELP,
- /* 139 */ SDL_SCANCODE_MENU, /* XF86MenuKB */
- /* 140 */ SDL_SCANCODE_CALCULATOR,
- /* 141 */ SDL_SCANCODE_UNKNOWN,
- /* 142 */ SDL_SCANCODE_SLEEP,
- /* 143 */ SDL_SCANCODE_UNKNOWN, /* XF86WakeUp */
- /* 144 */ SDL_SCANCODE_UNKNOWN, /* XF86Explorer */
- /* 145 */ SDL_SCANCODE_UNKNOWN, /* XF86Send */
- /* 146 */ SDL_SCANCODE_UNKNOWN,
- /* 147 */ SDL_SCANCODE_UNKNOWN, /* XF86Xfer */
- /* 148 */ SDL_SCANCODE_APP1, /* XF86Launch1 */
- /* 149 */ SDL_SCANCODE_APP2, /* XF86Launch2 */
- /* 150 */ SDL_SCANCODE_WWW,
- /* 151 */ SDL_SCANCODE_UNKNOWN, /* XF86DOS */
- /* 152 */ SDL_SCANCODE_UNKNOWN, /* XF86ScreenSaver */
- /* 153 */ SDL_SCANCODE_UNKNOWN,
- /* 154 */ SDL_SCANCODE_UNKNOWN, /* XF86RotateWindows */
- /* 155 */ SDL_SCANCODE_MAIL,
- /* 156 */ SDL_SCANCODE_AC_BOOKMARKS, /* XF86Favorites */
- /* 157 */ SDL_SCANCODE_COMPUTER,
- /* 158 */ SDL_SCANCODE_AC_BACK,
- /* 159 */ SDL_SCANCODE_AC_FORWARD,
- /* 160 */ SDL_SCANCODE_UNKNOWN,
- /* 161 */ SDL_SCANCODE_EJECT,
- /* 162 */ SDL_SCANCODE_EJECT,
- /* 163 */ SDL_SCANCODE_AUDIONEXT,
- /* 164 */ SDL_SCANCODE_AUDIOPLAY,
- /* 165 */ SDL_SCANCODE_AUDIOPREV,
- /* 166 */ SDL_SCANCODE_AUDIOSTOP,
- /* 167 */ SDL_SCANCODE_UNKNOWN, /* XF86AudioRecord */
- /* 168 */ SDL_SCANCODE_AUDIOREWIND, /* XF86AudioRewind */
- /* 169 */ SDL_SCANCODE_UNKNOWN, /* XF86Phone */
- /* 170 */ SDL_SCANCODE_UNKNOWN,
- /* 171 */ SDL_SCANCODE_F13, /* XF86Tools */
- /* 172 */ SDL_SCANCODE_AC_HOME,
- /* 173 */ SDL_SCANCODE_AC_REFRESH,
- /* 174 */ SDL_SCANCODE_UNKNOWN, /* XF86Close */
- /* 175 */ SDL_SCANCODE_UNKNOWN,
- /* 176 */ SDL_SCANCODE_UNKNOWN,
- /* 177 */ SDL_SCANCODE_UNKNOWN, /* XF86ScrollUp */
- /* 178 */ SDL_SCANCODE_UNKNOWN, /* XF86ScrollDown */
- /* 179 */ SDL_SCANCODE_KP_LEFTPAREN, /* parenleft */
- /* 180 */ SDL_SCANCODE_KP_RIGHTPAREN, /* parenright */
- /* 181 */ SDL_SCANCODE_UNKNOWN, /* XF86New */
- /* 182 */ SDL_SCANCODE_AGAIN,
- /* 183 */ SDL_SCANCODE_F13, /* XF86Tools */
- /* 184 */ SDL_SCANCODE_F14, /* XF86Launch5 */
- /* 185 */ SDL_SCANCODE_F15, /* XF86Launch6 */
- /* 186 */ SDL_SCANCODE_F16, /* XF86Launch7 */
- /* 187 */ SDL_SCANCODE_F17, /* XF86Launch8 */
- /* 188 */ SDL_SCANCODE_F18, /* XF86Launch9 */
- /* 189 */ SDL_SCANCODE_F19, /* null keysym */
- /* 190 */ SDL_SCANCODE_F20,
- /* 191 */ SDL_SCANCODE_UNKNOWN,
- /* 192 */ SDL_SCANCODE_UNKNOWN, /* XF86TouchpadToggle */
- /* 193 */ SDL_SCANCODE_UNKNOWN,
- /* 194 */ SDL_SCANCODE_UNKNOWN,
- /* 195 */ SDL_SCANCODE_MODE,
- /* 196 */ SDL_SCANCODE_UNKNOWN,
- /* 197 */ SDL_SCANCODE_UNKNOWN,
- /* 198 */ SDL_SCANCODE_UNKNOWN,
- /* 199 */ SDL_SCANCODE_UNKNOWN,
- /* 200 */ SDL_SCANCODE_AUDIOPLAY,
- /* 201 */ SDL_SCANCODE_UNKNOWN, /* XF86AudioPause */
- /* 202 */ SDL_SCANCODE_UNKNOWN, /* XF86Launch3 */
- /* 203 */ SDL_SCANCODE_UNKNOWN, /* XF86Launch4 */
- /* 204 */ SDL_SCANCODE_UNKNOWN, /* XF86LaunchB */
- /* 205 */ SDL_SCANCODE_UNKNOWN, /* XF86Suspend */
- /* 206 */ SDL_SCANCODE_UNKNOWN, /* XF86Close */
- /* 207 */ SDL_SCANCODE_AUDIOPLAY,
- /* 208 */ SDL_SCANCODE_AUDIOFASTFORWARD,
- /* 209 */ SDL_SCANCODE_UNKNOWN,
- /* 210 */ SDL_SCANCODE_PRINTSCREEN,
- /* 211 */ SDL_SCANCODE_UNKNOWN,
- /* 212 */ SDL_SCANCODE_UNKNOWN, /* XF86WebCam */
- /* 213 */ SDL_SCANCODE_UNKNOWN,
- /* 214 */ SDL_SCANCODE_UNKNOWN,
- /* 215 */ SDL_SCANCODE_MAIL,
- /* 216 */ SDL_SCANCODE_UNKNOWN,
- /* 217 */ SDL_SCANCODE_AC_SEARCH,
- /* 218 */ SDL_SCANCODE_UNKNOWN,
- /* 219 */ SDL_SCANCODE_UNKNOWN, /* XF86Finance */
- /* 220 */ SDL_SCANCODE_UNKNOWN,
- /* 221 */ SDL_SCANCODE_UNKNOWN, /* XF86Shop */
- /* 222 */ SDL_SCANCODE_UNKNOWN,
- /* 223 */ SDL_SCANCODE_STOP,
- /* 224 */ SDL_SCANCODE_BRIGHTNESSDOWN,
- /* 225 */ SDL_SCANCODE_BRIGHTNESSUP,
- /* 226 */ SDL_SCANCODE_MEDIASELECT,
- /* 227 */ SDL_SCANCODE_DISPLAYSWITCH,
- /* 228 */ SDL_SCANCODE_KBDILLUMTOGGLE,
- /* 229 */ SDL_SCANCODE_KBDILLUMDOWN,
- /* 230 */ SDL_SCANCODE_KBDILLUMUP,
- /* 231 */ SDL_SCANCODE_UNKNOWN, /* XF86Send */
- /* 232 */ SDL_SCANCODE_UNKNOWN, /* XF86Reply */
- /* 233 */ SDL_SCANCODE_UNKNOWN, /* XF86MailForward */
- /* 234 */ SDL_SCANCODE_UNKNOWN, /* XF86Save */
- /* 235 */ SDL_SCANCODE_UNKNOWN, /* XF86Documents */
- /* 236 */ SDL_SCANCODE_UNKNOWN, /* XF86Battery */
- /* 237 */ SDL_SCANCODE_UNKNOWN, /* XF86Bluetooth */
- /* 238 */ SDL_SCANCODE_UNKNOWN, /* XF86WLAN */
+ /* 0, 0x000 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 1, 0x001 */ SDL_SCANCODE_ESCAPE, /* Escape */
+ /* 2, 0x002 */ SDL_SCANCODE_1, /* 1 */
+ /* 3, 0x003 */ SDL_SCANCODE_2, /* 2 */
+ /* 4, 0x004 */ SDL_SCANCODE_3, /* 3 */
+ /* 5, 0x005 */ SDL_SCANCODE_4, /* 4 */
+ /* 6, 0x006 */ SDL_SCANCODE_5, /* 5 */
+ /* 7, 0x007 */ SDL_SCANCODE_6, /* 6 */
+ /* 8, 0x008 */ SDL_SCANCODE_7, /* 7 */
+ /* 9, 0x009 */ SDL_SCANCODE_8, /* 8 */
+ /* 10, 0x00a */ SDL_SCANCODE_9, /* 9 */
+ /* 11, 0x00b */ SDL_SCANCODE_0, /* 0 */
+ /* 12, 0x00c */ SDL_SCANCODE_MINUS, /* minus */
+ /* 13, 0x00d */ SDL_SCANCODE_EQUALS, /* equal */
+ /* 14, 0x00e */ SDL_SCANCODE_BACKSPACE, /* BackSpace */
+ /* 15, 0x00f */ SDL_SCANCODE_TAB, /* Tab */
+ /* 16, 0x010 */ SDL_SCANCODE_Q, /* q */
+ /* 17, 0x011 */ SDL_SCANCODE_W, /* w */
+ /* 18, 0x012 */ SDL_SCANCODE_E, /* e */
+ /* 19, 0x013 */ SDL_SCANCODE_R, /* r */
+ /* 20, 0x014 */ SDL_SCANCODE_T, /* t */
+ /* 21, 0x015 */ SDL_SCANCODE_Y, /* y */
+ /* 22, 0x016 */ SDL_SCANCODE_U, /* u */
+ /* 23, 0x017 */ SDL_SCANCODE_I, /* i */
+ /* 24, 0x018 */ SDL_SCANCODE_O, /* o */
+ /* 25, 0x019 */ SDL_SCANCODE_P, /* p */
+ /* 26, 0x01a */ SDL_SCANCODE_LEFTBRACKET, /* bracketleft */
+ /* 27, 0x01b */ SDL_SCANCODE_RIGHTBRACKET, /* bracketright */
+ /* 28, 0x01c */ SDL_SCANCODE_RETURN, /* Return */
+ /* 29, 0x01d */ SDL_SCANCODE_LCTRL, /* Control_L */
+ /* 30, 0x01e */ SDL_SCANCODE_A, /* a */
+ /* 31, 0x01f */ SDL_SCANCODE_S, /* s */
+ /* 32, 0x020 */ SDL_SCANCODE_D, /* d */
+ /* 33, 0x021 */ SDL_SCANCODE_F, /* f */
+ /* 34, 0x022 */ SDL_SCANCODE_G, /* g */
+ /* 35, 0x023 */ SDL_SCANCODE_H, /* h */
+ /* 36, 0x024 */ SDL_SCANCODE_J, /* j */
+ /* 37, 0x025 */ SDL_SCANCODE_K, /* k */
+ /* 38, 0x026 */ SDL_SCANCODE_L, /* l */
+ /* 39, 0x027 */ SDL_SCANCODE_SEMICOLON, /* semicolon */
+ /* 40, 0x028 */ SDL_SCANCODE_APOSTROPHE, /* apostrophe */
+ /* 41, 0x029 */ SDL_SCANCODE_GRAVE, /* grave */
+ /* 42, 0x02a */ SDL_SCANCODE_LSHIFT, /* Shift_L */
+ /* 43, 0x02b */ SDL_SCANCODE_BACKSLASH, /* backslash */
+ /* 44, 0x02c */ SDL_SCANCODE_Z, /* z */
+ /* 45, 0x02d */ SDL_SCANCODE_X, /* x */
+ /* 46, 0x02e */ SDL_SCANCODE_C, /* c */
+ /* 47, 0x02f */ SDL_SCANCODE_V, /* v */
+ /* 48, 0x030 */ SDL_SCANCODE_B, /* b */
+ /* 49, 0x031 */ SDL_SCANCODE_N, /* n */
+ /* 50, 0x032 */ SDL_SCANCODE_M, /* m */
+ /* 51, 0x033 */ SDL_SCANCODE_COMMA, /* comma */
+ /* 52, 0x034 */ SDL_SCANCODE_PERIOD, /* period */
+ /* 53, 0x035 */ SDL_SCANCODE_SLASH, /* slash */
+ /* 54, 0x036 */ SDL_SCANCODE_RSHIFT, /* Shift_R */
+ /* 55, 0x037 */ SDL_SCANCODE_KP_MULTIPLY, /* KP_Multiply */
+ /* 56, 0x038 */ SDL_SCANCODE_LALT, /* Alt_L */
+ /* 57, 0x039 */ SDL_SCANCODE_SPACE, /* space */
+ /* 58, 0x03a */ SDL_SCANCODE_CAPSLOCK, /* Caps_Lock */
+ /* 59, 0x03b */ SDL_SCANCODE_F1, /* F1 */
+ /* 60, 0x03c */ SDL_SCANCODE_F2, /* F2 */
+ /* 61, 0x03d */ SDL_SCANCODE_F3, /* F3 */
+ /* 62, 0x03e */ SDL_SCANCODE_F4, /* F4 */
+ /* 63, 0x03f */ SDL_SCANCODE_F5, /* F5 */
+ /* 64, 0x040 */ SDL_SCANCODE_F6, /* F6 */
+ /* 65, 0x041 */ SDL_SCANCODE_F7, /* F7 */
+ /* 66, 0x042 */ SDL_SCANCODE_F8, /* F8 */
+ /* 67, 0x043 */ SDL_SCANCODE_F9, /* F9 */
+ /* 68, 0x044 */ SDL_SCANCODE_F10, /* F10 */
+ /* 69, 0x045 */ SDL_SCANCODE_NUMLOCKCLEAR, /* Num_Lock */
+ /* 70, 0x046 */ SDL_SCANCODE_SCROLLLOCK, /* Scroll_Lock */
+ /* 71, 0x047 */ SDL_SCANCODE_KP_7, /* KP_Home */
+ /* 72, 0x048 */ SDL_SCANCODE_KP_8, /* KP_Up */
+ /* 73, 0x049 */ SDL_SCANCODE_KP_9, /* KP_Prior */
+ /* 74, 0x04a */ SDL_SCANCODE_KP_MINUS, /* KP_Subtract */
+ /* 75, 0x04b */ SDL_SCANCODE_KP_4, /* KP_Left */
+ /* 76, 0x04c */ SDL_SCANCODE_KP_5, /* KP_Begin */
+ /* 77, 0x04d */ SDL_SCANCODE_KP_6, /* KP_Right */
+ /* 78, 0x04e */ SDL_SCANCODE_KP_PLUS, /* KP_Add */
+ /* 79, 0x04f */ SDL_SCANCODE_KP_1, /* KP_End */
+ /* 80, 0x050 */ SDL_SCANCODE_KP_2, /* KP_Down */
+ /* 81, 0x051 */ SDL_SCANCODE_KP_3, /* KP_Next */
+ /* 82, 0x052 */ SDL_SCANCODE_KP_0, /* KP_Insert */
+ /* 83, 0x053 */ SDL_SCANCODE_KP_PERIOD, /* KP_Delete */
+ /* 84, 0x054 */ SDL_SCANCODE_RALT, /* ISO_Level3_Shift */
+ /* 85, 0x055 */ SDL_SCANCODE_MODE, /* ???? */
+ /* 86, 0x056 */ SDL_SCANCODE_NONUSBACKSLASH, /* less */
+ /* 87, 0x057 */ SDL_SCANCODE_F11, /* F11 */
+ /* 88, 0x058 */ SDL_SCANCODE_F12, /* F12 */
+ /* 89, 0x059 */ SDL_SCANCODE_INTERNATIONAL1, /* \_ */
+ /* 90, 0x05a */ SDL_SCANCODE_LANG3, /* Katakana */
+ /* 91, 0x05b */ SDL_SCANCODE_LANG4, /* Hiragana */
+ /* 92, 0x05c */ SDL_SCANCODE_INTERNATIONAL4, /* Henkan_Mode */
+ /* 93, 0x05d */ SDL_SCANCODE_INTERNATIONAL2, /* Hiragana_Katakana */
+ /* 94, 0x05e */ SDL_SCANCODE_INTERNATIONAL5, /* Muhenkan */
+ /* 95, 0x05f */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 96, 0x060 */ SDL_SCANCODE_KP_ENTER, /* KP_Enter */
+ /* 97, 0x061 */ SDL_SCANCODE_RCTRL, /* Control_R */
+ /* 98, 0x062 */ SDL_SCANCODE_KP_DIVIDE, /* KP_Divide */
+ /* 99, 0x063 */ SDL_SCANCODE_PRINTSCREEN, /* Print */
+ /* 100, 0x064 */ SDL_SCANCODE_RALT, /* ISO_Level3_Shift, ALTGR, RALT */
+ /* 101, 0x065 */ SDL_SCANCODE_UNKNOWN, /* Linefeed */
+ /* 102, 0x066 */ SDL_SCANCODE_HOME, /* Home */
+ /* 103, 0x067 */ SDL_SCANCODE_UP, /* Up */
+ /* 104, 0x068 */ SDL_SCANCODE_PAGEUP, /* Prior */
+ /* 105, 0x069 */ SDL_SCANCODE_LEFT, /* Left */
+ /* 106, 0x06a */ SDL_SCANCODE_RIGHT, /* Right */
+ /* 107, 0x06b */ SDL_SCANCODE_END, /* End */
+ /* 108, 0x06c */ SDL_SCANCODE_DOWN, /* Down */
+ /* 109, 0x06d */ SDL_SCANCODE_PAGEDOWN, /* Next */
+ /* 110, 0x06e */ SDL_SCANCODE_INSERT, /* Insert */
+ /* 111, 0x06f */ SDL_SCANCODE_DELETE, /* Delete */
+ /* 112, 0x070 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 113, 0x071 */ SDL_SCANCODE_MUTE, /* XF86AudioMute */
+ /* 114, 0x072 */ SDL_SCANCODE_VOLUMEDOWN, /* XF86AudioLowerVolume */
+ /* 115, 0x073 */ SDL_SCANCODE_VOLUMEUP, /* XF86AudioRaiseVolume */
+ /* 116, 0x074 */ SDL_SCANCODE_POWER, /* XF86PowerOff */
+ /* 117, 0x075 */ SDL_SCANCODE_KP_EQUALS, /* KP_Equal */
+ /* 118, 0x076 */ SDL_SCANCODE_KP_PLUSMINUS, /* plusminus */
+ /* 119, 0x077 */ SDL_SCANCODE_PAUSE, /* Pause */
+ /* 120, 0x078 */ SDL_SCANCODE_UNKNOWN, /* XF86LaunchA */
+ /* 121, 0x079 */ SDL_SCANCODE_KP_PERIOD, /* KP_Decimal */
+ /* 122, 0x07a */ SDL_SCANCODE_LANG1, /* Hangul */
+ /* 123, 0x07b */ SDL_SCANCODE_LANG2, /* Hangul_Hanja */
+ /* 124, 0x07c */ SDL_SCANCODE_INTERNATIONAL3, /* Yen */
+ /* 125, 0x07d */ SDL_SCANCODE_LGUI, /* Super_L */
+ /* 126, 0x07e */ SDL_SCANCODE_RGUI, /* Super_R */
+ /* 127, 0x07f */ SDL_SCANCODE_APPLICATION, /* Menu */
+ /* 128, 0x080 */ SDL_SCANCODE_CANCEL, /* Cancel */
+ /* 129, 0x081 */ SDL_SCANCODE_AGAIN, /* Redo */
+ /* 130, 0x082 */ SDL_SCANCODE_UNKNOWN, /* SunProps */
+ /* 131, 0x083 */ SDL_SCANCODE_UNDO, /* Undo */
+ /* 132, 0x084 */ SDL_SCANCODE_UNKNOWN, /* SunFront */
+ /* 133, 0x085 */ SDL_SCANCODE_COPY, /* XF86Copy */
+ /* 134, 0x086 */ SDL_SCANCODE_UNKNOWN, /* SunOpen, XF86Open */
+ /* 135, 0x087 */ SDL_SCANCODE_PASTE, /* XF86Paste */
+ /* 136, 0x088 */ SDL_SCANCODE_FIND, /* Find */
+ /* 137, 0x089 */ SDL_SCANCODE_CUT, /* XF86Cut */
+ /* 138, 0x08a */ SDL_SCANCODE_HELP, /* Help */
+ /* 139, 0x08b */ SDL_SCANCODE_MENU, /* XF86MenuKB */
+ /* 140, 0x08c */ SDL_SCANCODE_CALCULATOR, /* XF86Calculator */
+ /* 141, 0x08d */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 142, 0x08e */ SDL_SCANCODE_SLEEP, /* XF86Sleep */
+ /* 143, 0x08f */ SDL_SCANCODE_UNKNOWN, /* XF86WakeUp */
+ /* 144, 0x090 */ SDL_SCANCODE_UNKNOWN, /* XF86Explorer */
+ /* 145, 0x091 */ SDL_SCANCODE_UNKNOWN, /* XF86Send */
+ /* 146, 0x092 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 147, 0x093 */ SDL_SCANCODE_UNKNOWN, /* XF86Xfer */
+ /* 148, 0x094 */ SDL_SCANCODE_APP1, /* XF86Launch1 */
+ /* 149, 0x095 */ SDL_SCANCODE_APP2, /* XF86Launch2 */
+ /* 150, 0x096 */ SDL_SCANCODE_WWW, /* XF86WWW */
+ /* 151, 0x097 */ SDL_SCANCODE_UNKNOWN, /* XF86DOS */
+ /* 152, 0x098 */ SDL_SCANCODE_UNKNOWN, /* XF86ScreenSaver */
+ /* 153, 0x099 */ SDL_SCANCODE_UNKNOWN, /* XF86RotateWindows */
+ /* 154, 0x09a */ SDL_SCANCODE_UNKNOWN, /* XF86TaskPane */
+ /* 155, 0x09b */ SDL_SCANCODE_MAIL, /* XF86Mail */
+ /* 156, 0x09c */ SDL_SCANCODE_AC_BOOKMARKS, /* XF86Favorites */
+ /* 157, 0x09d */ SDL_SCANCODE_COMPUTER, /* XF86MyComputer */
+ /* 158, 0x09e */ SDL_SCANCODE_AC_BACK, /* XF86Back */
+ /* 159, 0x09f */ SDL_SCANCODE_AC_FORWARD, /* XF86Forward */
+ /* 160, 0x0a0 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 161, 0x0a1 */ SDL_SCANCODE_EJECT, /* XF86Eject */
+ /* 162, 0x0a2 */ SDL_SCANCODE_EJECT, /* XF86Eject */
+ /* 163, 0x0a3 */ SDL_SCANCODE_AUDIONEXT, /* XF86AudioNext */
+ /* 164, 0x0a4 */ SDL_SCANCODE_AUDIOPLAY, /* XF86AudioPlay */
+ /* 165, 0x0a5 */ SDL_SCANCODE_AUDIOPREV, /* XF86AudioPrev */
+ /* 166, 0x0a6 */ SDL_SCANCODE_AUDIOSTOP, /* XF86AudioStop */
+ /* 167, 0x0a7 */ SDL_SCANCODE_UNKNOWN, /* XF86AudioRecord */
+ /* 168, 0x0a8 */ SDL_SCANCODE_AUDIOREWIND, /* XF86AudioRewind */
+ /* 169, 0x0a9 */ SDL_SCANCODE_UNKNOWN, /* XF86Phone */
+ /* 170, 0x0aa */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 171, 0x0ab */ SDL_SCANCODE_F13, /* XF86Tools */
+ /* 172, 0x0ac */ SDL_SCANCODE_AC_HOME, /* XF86HomePage */
+ /* 173, 0x0ad */ SDL_SCANCODE_AC_REFRESH, /* XF86Reload */
+ /* 174, 0x0ae */ SDL_SCANCODE_UNKNOWN, /* XF86Close */
+ /* 175, 0x0af */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 176, 0x0b0 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 177, 0x0b1 */ SDL_SCANCODE_UNKNOWN, /* XF86ScrollUp */
+ /* 178, 0x0b2 */ SDL_SCANCODE_UNKNOWN, /* XF86ScrollDown */
+ /* 179, 0x0b3 */ SDL_SCANCODE_KP_LEFTPAREN, /* parenleft */
+ /* 180, 0x0b4 */ SDL_SCANCODE_KP_RIGHTPAREN, /* parenright */
+ /* 181, 0x0b5 */ SDL_SCANCODE_UNKNOWN, /* XF86New */
+ /* 182, 0x0b6 */ SDL_SCANCODE_AGAIN, /* Redo */
+ /* 183, 0x0b7 */ SDL_SCANCODE_F13, /* XF86Tools */
+ /* 184, 0x0b8 */ SDL_SCANCODE_F14, /* XF86Launch5 */
+ /* 185, 0x0b9 */ SDL_SCANCODE_F15, /* XF86Launch6 */
+ /* 186, 0x0ba */ SDL_SCANCODE_F16, /* XF86Launch7 */
+ /* 187, 0x0bb */ SDL_SCANCODE_F17, /* XF86Launch8 */
+ /* 188, 0x0bc */ SDL_SCANCODE_F18, /* XF86Launch9 */
+ /* 189, 0x0bd */ SDL_SCANCODE_F19, /* NoSymbol */
+ /* 190, 0x0be */ SDL_SCANCODE_F20, /* XF86AudioMicMute */
+ /* 191, 0x0bf */ SDL_SCANCODE_UNKNOWN, /* XF86TouchpadToggle */
+ /* 192, 0x0c0 */ SDL_SCANCODE_UNKNOWN, /* XF86TouchpadOn */
+ /* 193, 0x0c1 */ SDL_SCANCODE_UNKNOWN, /* XF86TouchpadOff */
+ /* 194, 0x0c2 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 195, 0x0c3 */ SDL_SCANCODE_MODE, /* Mode_switch */
+ /* 196, 0x0c4 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 197, 0x0c5 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 198, 0x0c6 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 199, 0x0c7 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 200, 0x0c8 */ SDL_SCANCODE_AUDIOPLAY, /* XF86AudioPlay */
+ /* 201, 0x0c9 */ SDL_SCANCODE_UNKNOWN, /* XF86AudioPause */
+ /* 202, 0x0ca */ SDL_SCANCODE_UNKNOWN, /* XF86Launch3 */
+ /* 203, 0x0cb */ SDL_SCANCODE_UNKNOWN, /* XF86Launch4 */
+ /* 204, 0x0cc */ SDL_SCANCODE_UNKNOWN, /* XF86LaunchB */
+ /* 205, 0x0cd */ SDL_SCANCODE_UNKNOWN, /* XF86Suspend */
+ /* 206, 0x0ce */ SDL_SCANCODE_UNKNOWN, /* XF86Close */
+ /* 207, 0x0cf */ SDL_SCANCODE_AUDIOPLAY, /* XF86AudioPlay */
+ /* 208, 0x0d0 */ SDL_SCANCODE_AUDIOFASTFORWARD, /* XF86AudioForward */
+ /* 209, 0x0d1 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 210, 0x0d2 */ SDL_SCANCODE_PRINTSCREEN, /* Print */
+ /* 211, 0x0d3 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 212, 0x0d4 */ SDL_SCANCODE_UNKNOWN, /* XF86WebCam */
+ /* 213, 0x0d5 */ SDL_SCANCODE_UNKNOWN, /* XF86AudioPreset */
+ /* 214, 0x0d6 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 215, 0x0d7 */ SDL_SCANCODE_MAIL, /* XF86Mail */
+ /* 216, 0x0d8 */ SDL_SCANCODE_UNKNOWN, /* XF86Messenger */
+ /* 217, 0x0d9 */ SDL_SCANCODE_AC_SEARCH, /* XF86Search */
+ /* 218, 0x0da */ SDL_SCANCODE_UNKNOWN, /* XF86Go */
+ /* 219, 0x0db */ SDL_SCANCODE_UNKNOWN, /* XF86Finance */
+ /* 220, 0x0dc */ SDL_SCANCODE_UNKNOWN, /* XF86Game */
+ /* 221, 0x0dd */ SDL_SCANCODE_UNKNOWN, /* XF86Shop */
+ /* 222, 0x0de */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 223, 0x0df */ SDL_SCANCODE_CANCEL, /* Cancel */
+ /* 224, 0x0e0 */ SDL_SCANCODE_BRIGHTNESSDOWN, /* XF86MonBrightnessDown */
+ /* 225, 0x0e1 */ SDL_SCANCODE_BRIGHTNESSUP, /* XF86MonBrightnessUp */
+ /* 226, 0x0e2 */ SDL_SCANCODE_MEDIASELECT, /* XF86AudioMedia */
+ /* 227, 0x0e3 */ SDL_SCANCODE_DISPLAYSWITCH, /* XF86Display */
+ /* 228, 0x0e4 */ SDL_SCANCODE_KBDILLUMTOGGLE, /* XF86KbdLightOnOff */
+ /* 229, 0x0e5 */ SDL_SCANCODE_KBDILLUMDOWN, /* XF86KbdBrightnessDown */
+ /* 230, 0x0e6 */ SDL_SCANCODE_KBDILLUMUP, /* XF86KbdBrightnessUp */
+ /* 231, 0x0e7 */ SDL_SCANCODE_UNKNOWN, /* XF86Send */
+ /* 232, 0x0e8 */ SDL_SCANCODE_UNKNOWN, /* XF86Reply */
+ /* 233, 0x0e9 */ SDL_SCANCODE_UNKNOWN, /* XF86MailForward */
+ /* 234, 0x0ea */ SDL_SCANCODE_UNKNOWN, /* XF86Save */
+ /* 235, 0x0eb */ SDL_SCANCODE_UNKNOWN, /* XF86Documents */
+ /* 236, 0x0ec */ SDL_SCANCODE_UNKNOWN, /* XF86Battery */
+ /* 237, 0x0ed */ SDL_SCANCODE_UNKNOWN, /* XF86Bluetooth */
+ /* 238, 0x0ee */ SDL_SCANCODE_UNKNOWN, /* XF86WLAN */
+ /* 239, 0x0ef */ SDL_SCANCODE_UNKNOWN, /* XF86UWB */
+ /* 240, 0x0f0 */ SDL_SCANCODE_UNKNOWN, /* NoSymbol */
+ /* 241, 0x0f1 */ SDL_SCANCODE_UNKNOWN, /* XF86Next_VMode */
+ /* 242, 0x0f2 */ SDL_SCANCODE_UNKNOWN, /* XF86Prev_VMode */
+ /* 243, 0x0f3 */ SDL_SCANCODE_UNKNOWN, /* XF86MonBrightnessCycle */
+ /* 244, 0x0f4 */ SDL_SCANCODE_UNKNOWN, /* XF86BrightnessAuto */
+ /* 245, 0x0f5 */ SDL_SCANCODE_UNKNOWN, /* XF86DisplayOff */
+ /* 246, 0x0f6 */ SDL_SCANCODE_UNKNOWN, /* XF86WWAN */
+ /* 247, 0x0f7 */ SDL_SCANCODE_UNKNOWN, /* XF86RFKill */
};
/* Xvnc / Xtightvnc scancodes from xmodmap -pk */
@@ -510,3 +519,5 @@ static const SDL_Scancode xvnc_scancode_table[] = {
#endif /* scancodes_xfree86_h_ */
/* *INDENT-ON* */ /* clang-format on */
+
+/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/video/directfb/SDL_DirectFB_events.c b/src/video/directfb/SDL_DirectFB_events.c
index 9351b5b1c..897a1687d 100644
--- a/src/video/directfb/SDL_DirectFB_events.c
+++ b/src/video/directfb/SDL_DirectFB_events.c
@@ -34,8 +34,7 @@
#include "../../events/SDL_keyboard_c.h"
#include "../../events/SDL_windowevents_c.h"
#include "../../events/SDL_events_c.h"
-#include "../../events/scancodes_linux.h"
-#include "../../events/scancodes_xfree86.h"
+#include "../../events/SDL_scancode_tables_c.h"
#include "SDL_DirectFB_events.h"
@@ -684,12 +683,10 @@ EnumKeyboards(DFBInputDeviceID device_id,
devdata->keyboard[devdata->num_keyboard].is_generic = 0;
if (!SDL_strncmp("X11", desc.name, 3))
{
- devdata->keyboard[devdata->num_keyboard].map = xfree86_scancode_table2;
- devdata->keyboard[devdata->num_keyboard].map_size = SDL_arraysize(xfree86_scancode_table2);
+ devdata->keyboard[devdata->num_keyboard].map = SDL_GetScancodeTable(SDL_SCANCODE_TABLE_XFREE86_2, &devdata->keyboard[devdata->num_keyboard].map_size);
devdata->keyboard[devdata->num_keyboard].map_adjust = 8;
} else {
- devdata->keyboard[devdata->num_keyboard].map = linux_scancode_table;
- devdata->keyboard[devdata->num_keyboard].map_size = SDL_arraysize(linux_scancode_table);
+ devdata->keyboard[devdata->num_keyboard].map = SDL_GetScancodeTable(SDL_SCANCODE_TABLE_EVDEV, &devdata->keyboard[devdata->num_keyboard].map_size);
devdata->keyboard[devdata->num_keyboard].map_adjust = 0;
}
diff --git a/src/video/wayland/SDL_waylandevents.c b/src/video/wayland/SDL_waylandevents.c
index 54ffdaf04..57914877d 100644
--- a/src/video/wayland/SDL_waylandevents.c
+++ b/src/video/wayland/SDL_waylandevents.c
@@ -29,7 +29,7 @@
#include "../../core/unix/SDL_poll.h"
#include "../../events/SDL_events_c.h"
-#include "../../events/scancodes_xfree86.h"
+#include "../../events/SDL_scancode_tables_c.h"
#include "../SDL_sysvideo.h"
#include "SDL_waylandvideo.h"
@@ -1125,9 +1125,8 @@ keyboard_handle_key(void *data, struct wl_keyboard *keyboard,
keyboard_input_get_text(text, input, key, SDL_RELEASED, &handled_by_ime);
}
- if (!handled_by_ime && key < SDL_arraysize(xfree86_scancode_table2)) {
- scancode = xfree86_scancode_table2[key];
-
+ if (!handled_by_ime) {
+ scancode = SDL_GetScancodeFromTable(SDL_SCANCODE_TABLE_XFREE86_2, key);
if (scancode != SDL_SCANCODE_UNKNOWN) {
SDL_SendKeyboardKey(state == WL_KEYBOARD_KEY_STATE_PRESSED ?
SDL_PRESSED : SDL_RELEASED, scancode);
@@ -1159,43 +1158,42 @@ Wayland_keymap_iter(struct xkb_keymap *keymap, xkb_keycode_t key, void *data)
{
const xkb_keysym_t *syms;
Wayland_Keymap *sdlKeymap = (Wayland_Keymap *)data;
+ SDL_Scancode scancode;
- if ((key - 8) < SDL_arraysize(xfree86_scancode_table2)) {
- SDL_Scancode scancode = xfree86_scancode_table2[key - 8];
- if (scancode == SDL_SCANCODE_UNKNOWN) {
- return;
+ scancode = SDL_GetScancodeFromTable(SDL_SCANCODE_TABLE_XFREE86_2, (key - 8));
+ if (scancode == SDL_SCANCODE_UNKNOWN) {
+ return;
+ }
+
+ if (WAYLAND_xkb_keymap_key_get_syms_by_level(keymap, key, sdlKeymap->layout, 0, &syms) > 0) {
+ uint32_t keycode = SDL_KeySymToUcs4(syms[0]);
+
+ if (!keycode) {
+ keycode = Wayland_KeySymToSDLKeyCode(syms[0]);
}
- if (WAYLAND_xkb_keymap_key_get_syms_by_level(keymap, key, sdlKeymap->layout, 0, &syms) > 0) {
- uint32_t keycode = SDL_KeySymToUcs4(syms[0]);
-
- if (!keycode) {
- keycode = Wayland_KeySymToSDLKeyCode(syms[0]);
- }
-
- if (keycode) {
- sdlKeymap->keymap[scancode] = keycode;
- } else {
- switch (scancode) {
- case SDL_SCANCODE_RETURN:
- sdlKeymap->keymap[scancode] = SDLK_RETURN;
- break;
- case SDL_SCANCODE_ESCAPE:
- sdlKeymap->keymap[scancode] = SDLK_ESCAPE;
- break;
- case SDL_SCANCODE_BACKSPACE:
- sdlKeymap->keymap[scancode] = SDLK_BACKSPACE;
- break;
- case SDL_SCANCODE_TAB:
- sdlKeymap->keymap[scancode] = SDLK_TAB;
- break;
- case SDL_SCANCODE_DELETE:
- sdlKeymap->keymap[scancode] = SDLK_DELETE;
- break;
- default:
- sdlKeymap->keymap[scancode] = SDL_SCANCODE_TO_KEYCODE(scancode);
- break;
- }
+ if (keycode) {
+ sdlKeymap->keymap[scancode] = keycode;
+ } else {
+ switch (scancode) {
+ case SDL_SCANCODE_RETURN:
+ sdlKeymap->keymap[scancode] = SDLK_RETURN;
+ break;
+ case SDL_SCANCODE_ESCAPE:
+ sdlKeymap->keymap[scancode] = SDLK_ESCAPE;
+ break;
+ case SDL_SCANCODE_BACKSPACE:
+ sdlKeymap->keymap[scancode] = SDLK_BACKSPACE;
+ break;
+ case SDL_SCANCODE_TAB:
+ sdlKeymap->keymap[scancode] = SDLK_TAB;
+ break;
+ case SDL_SCANCODE_DELETE:
+ sdlKeymap->keymap[scancode] = SDLK_DELETE;
+ break;
+ default:
+ sdlKeymap->keymap[scancode] = SDL_SCANCODE_TO_KEYCODE(scancode);
+ break;
}
}
}
diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c
index 5c99a65d6..6e584f275 100644
--- a/src/video/x11/SDL_x11events.c
+++ b/src/video/x11/SDL_x11events.c
@@ -402,7 +402,7 @@ X11_ReconcileKeyboardState(_THIS)
}
keyboardState = SDL_GetKeyboardState(0);
- for (keycode = 0; keycode < 256; ++keycode) {
+ for (keycode = 0; keycode < SDL_arraysize(viddata->key_layout); ++keycode) {
SDL_Scancode scancode = viddata->key_layout[keycode];
SDL_bool x11KeyPressed = (keys[keycode / 8] & (1 << (keycode % 8))) != 0;
SDL_bool sdlKeyPressed = keyboardState[scancode] == SDL_PRESSED;
@@ -1046,18 +1046,17 @@ X11_DispatchEvent(_THIS, XEvent *xevent)
#ifdef DEBUG_XEVENTS
printf("window %p: %s (X11 keycode = 0x%X)\n", data, (xevent->type == KeyPress ? "KeyPress" : "KeyRelease"), xevent->xkey.keycode);
#endif
-#if 1
+#ifdef DEBUG_SCANCODES
if (videodata->key_layout[keycode] == SDL_SCANCODE_UNKNOWN && keycode) {
int min_keycode, max_keycode;
X11_XDisplayKeycodes(display, &min_keycode, &max_keycode);
keysym = X11_KeyCodeToSym(_this, keycode, xevent->xkey.state >> 13);
- fprintf(stderr,
- "The key you just pressed is not recognized by SDL. To help get this fixed, please report this to the SDL forums/mailing list X11 KeyCode %d (%d), X11 KeySym 0x%lX (%s).\n",
+ SDL_Log("The key you just pressed is not recognized by SDL. To help get this fixed, please report this to the SDL forums/mailing list X11 KeyCode %d (%d), X11 KeySym 0x%lX (%s).\n",
keycode, keycode - min_keycode, keysym,
X11_XKeysymToString(keysym));
}
-#endif
- /* */
+#endif /* DEBUG SCANCODES */
+
SDL_zeroa(text);
#ifdef X_HAVE_UTF8_STRING
if (data->ic && xevent->type == KeyPress) {
diff --git a/src/video/x11/SDL_x11keyboard.c b/src/video/x11/SDL_x11keyboard.c
index c14e13d1c..1e46f5a4f 100644
--- a/src/video/x11/SDL_x11keyboard.c
+++ b/src/video/x11/SDL_x11keyboard.c
@@ -25,8 +25,7 @@
#include "SDL_x11video.h"
#include "../../events/SDL_keyboard_c.h"
-#include "../../events/scancodes_darwin.h"
-#include "../../events/scancodes_xfree86.h"
+#include "../../events/SDL_scancode_tables_c.h"
#include
#include
@@ -42,43 +41,6 @@ static const struct {
KeySym keysym;
SDL_Scancode scancode;
} KeySymToSDLScancode[] = {
- { XK_Return, SDL_SCANCODE_RETURN },
- { XK_Escape, SDL_SCANCODE_ESCAPE },
- { XK_BackSpace, SDL_SCANCODE_BACKSPACE },
- { XK_Tab, SDL_SCANCODE_TAB },
- { XK_Caps_Lock, SDL_SCANCODE_CAPSLOCK },
- { XK_F1, SDL_SCANCODE_F1 },
- { XK_F2, SDL_SCANCODE_F2 },
- { XK_F3, SDL_SCANCODE_F3 },
- { XK_F4, SDL_SCANCODE_F4 },
- { XK_F5, SDL_SCANCODE_F5 },
- { XK_F6, SDL_SCANCODE_F6 },
- { XK_F7, SDL_SCANCODE_F7 },
- { XK_F8, SDL_SCANCODE_F8 },
- { XK_F9, SDL_SCANCODE_F9 },
- { XK_F10, SDL_SCANCODE_F10 },
- { XK_F11, SDL_SCANCODE_F11 },
- { XK_F12, SDL_SCANCODE_F12 },
- { XK_Print, SDL_SCANCODE_PRINTSCREEN },
- { XK_Scroll_Lock, SDL_SCANCODE_SCROLLLOCK },
- { XK_Pause, SDL_SCANCODE_PAUSE },
- { XK_Insert, SDL_SCANCODE_INSERT },
- { XK_Home, SDL_SCANCODE_HOME },
- { XK_Prior, SDL_SCANCODE_PAGEUP },
- { XK_Delete, SDL_SCANCODE_DELETE },
- { XK_End, SDL_SCANCODE_END },
- { XK_Next, SDL_SCANCODE_PAGEDOWN },
- { XK_Right, SDL_SCANCODE_RIGHT },
- { XK_Left, SDL_SCANCODE_LEFT },
- { XK_Down, SDL_SCANCODE_DOWN },
- { XK_Up, SDL_SCANCODE_UP },
- { XK_Num_Lock, SDL_SCANCODE_NUMLOCKCLEAR },
- { XK_KP_Divide, SDL_SCANCODE_KP_DIVIDE },
- { XK_KP_Multiply, SDL_SCANCODE_KP_MULTIPLY },
- { XK_KP_Subtract, SDL_SCANCODE_KP_MINUS },
- { XK_KP_Add, SDL_SCANCODE_KP_PLUS },
- { XK_KP_Enter, SDL_SCANCODE_KP_ENTER },
- { XK_KP_Delete, SDL_SCANCODE_KP_PERIOD },
{ XK_KP_End, SDL_SCANCODE_KP_1 },
{ XK_KP_Down, SDL_SCANCODE_KP_2 },
{ XK_KP_Next, SDL_SCANCODE_KP_3 },
@@ -89,111 +51,409 @@ static const struct {
{ XK_KP_Up, SDL_SCANCODE_KP_8 },
{ XK_KP_Prior, SDL_SCANCODE_KP_9 },
{ XK_KP_Insert, SDL_SCANCODE_KP_0 },
- { XK_KP_Decimal, SDL_SCANCODE_KP_PERIOD },
- { XK_KP_1, SDL_SCANCODE_KP_1 },
- { XK_KP_2, SDL_SCANCODE_KP_2 },
- { XK_KP_3, SDL_SCANCODE_KP_3 },
- { XK_KP_4, SDL_SCANCODE_KP_4 },
- { XK_KP_5, SDL_SCANCODE_KP_5 },
- { XK_KP_6, SDL_SCANCODE_KP_6 },
- { XK_KP_7, SDL_SCANCODE_KP_7 },
- { XK_KP_8, SDL_SCANCODE_KP_8 },
- { XK_KP_9, SDL_SCANCODE_KP_9 },
- { XK_KP_0, SDL_SCANCODE_KP_0 },
- { XK_KP_Decimal, SDL_SCANCODE_KP_PERIOD },
- { XK_Hyper_R, SDL_SCANCODE_APPLICATION },
- { XK_KP_Equal, SDL_SCANCODE_KP_EQUALS },
- { XK_F13, SDL_SCANCODE_F13 },
- { XK_F14, SDL_SCANCODE_F14 },
- { XK_F15, SDL_SCANCODE_F15 },
- { XK_F16, SDL_SCANCODE_F16 },
- { XK_F17, SDL_SCANCODE_F17 },
- { XK_F18, SDL_SCANCODE_F18 },
- { XK_F19, SDL_SCANCODE_F19 },
- { XK_F20, SDL_SCANCODE_F20 },
- { XK_F21, SDL_SCANCODE_F21 },
- { XK_F22, SDL_SCANCODE_F22 },
- { XK_F23, SDL_SCANCODE_F23 },
- { XK_F24, SDL_SCANCODE_F24 },
+ { XK_KP_Delete, SDL_SCANCODE_KP_PERIOD },
{ XK_Execute, SDL_SCANCODE_EXECUTE },
- { XK_Help, SDL_SCANCODE_HELP },
- { XK_Menu, SDL_SCANCODE_MENU },
- { XK_Select, SDL_SCANCODE_SELECT },
- { XK_Cancel, SDL_SCANCODE_STOP },
- { XK_Redo, SDL_SCANCODE_AGAIN },
- { XK_Undo, SDL_SCANCODE_UNDO },
- { XK_Find, SDL_SCANCODE_FIND },
- { XK_KP_Separator, SDL_SCANCODE_KP_COMMA },
- { XK_Sys_Req, SDL_SCANCODE_SYSREQ },
- { XK_Control_L, SDL_SCANCODE_LCTRL },
- { XK_Shift_L, SDL_SCANCODE_LSHIFT },
- { XK_Alt_L, SDL_SCANCODE_LALT },
- { XK_Meta_L, SDL_SCANCODE_LGUI },
- { XK_Super_L, SDL_SCANCODE_LGUI },
- { XK_Control_R, SDL_SCANCODE_RCTRL },
- { XK_Shift_R, SDL_SCANCODE_RSHIFT },
- { XK_Alt_R, SDL_SCANCODE_RALT },
+ { XK_Hyper_R, SDL_SCANCODE_APPLICATION },
{ XK_ISO_Level3_Shift, SDL_SCANCODE_RALT },
- { XK_Meta_R, SDL_SCANCODE_RGUI },
+ { XK_Super_L, SDL_SCANCODE_LGUI },
{ XK_Super_R, SDL_SCANCODE_RGUI },
{ XK_Mode_switch, SDL_SCANCODE_MODE },
- { XK_period, SDL_SCANCODE_PERIOD },
- { XK_comma, SDL_SCANCODE_COMMA },
- { XK_slash, SDL_SCANCODE_SLASH },
- { XK_backslash, SDL_SCANCODE_BACKSLASH },
- { XK_minus, SDL_SCANCODE_MINUS },
- { XK_equal, SDL_SCANCODE_EQUALS },
- { XK_space, SDL_SCANCODE_SPACE },
- { XK_grave, SDL_SCANCODE_GRAVE },
- { XK_apostrophe, SDL_SCANCODE_APOSTROPHE },
- { XK_bracketleft, SDL_SCANCODE_LEFTBRACKET },
- { XK_bracketright, SDL_SCANCODE_RIGHTBRACKET },
+ { 0x1008FF65, SDL_SCANCODE_MENU }, /* XF86MenuKB */
+ { 0x1008FF81, SDL_SCANCODE_F13 }, /* XF86Tools */
+ { 0x1008FF45, SDL_SCANCODE_F14 }, /* XF86Launch5 */
+ { 0x1008FF46, SDL_SCANCODE_F15 }, /* XF86Launch6 */
+ { 0x1008FF47, SDL_SCANCODE_F16 }, /* XF86Launch7 */
+ { 0x1008FF48, SDL_SCANCODE_F17 }, /* XF86Launch8 */
+ { 0x1008FF49, SDL_SCANCODE_F18 }, /* XF86Launch9 */
};
-static const struct
+/* This is a mapping from X keysym to Linux keycode */
+static const KeySym LinuxKeycodeKeysyms[] = {
+ /* 0, 0x000 */ 0x0, /* NoSymbol */
+ /* 1, 0x001 */ 0xFF1B, /* Escape */
+ /* 2, 0x002 */ 0x31, /* 1 */
+ /* 3, 0x003 */ 0x32, /* 2 */
+ /* 4, 0x004 */ 0x33, /* 3 */
+ /* 5, 0x005 */ 0x34, /* 4 */
+ /* 6, 0x006 */ 0x35, /* 5 */
+ /* 7, 0x007 */ 0x36, /* 6 */
+ /* 8, 0x008 */ 0x37, /* 7 */
+ /* 9, 0x009 */ 0x38, /* 8 */
+ /* 10, 0x00a */ 0x39, /* 9 */
+ /* 11, 0x00b */ 0x30, /* 0 */
+ /* 12, 0x00c */ 0x2D, /* minus */
+ /* 13, 0x00d */ 0x3D, /* equal */
+ /* 14, 0x00e */ 0xFF08, /* BackSpace */
+ /* 15, 0x00f */ 0xFF09, /* Tab */
+ /* 16, 0x010 */ 0x71, /* q */
+ /* 17, 0x011 */ 0x77, /* w */
+ /* 18, 0x012 */ 0x65, /* e */
+ /* 19, 0x013 */ 0x72, /* r */
+ /* 20, 0x014 */ 0x74, /* t */
+ /* 21, 0x015 */ 0x79, /* y */
+ /* 22, 0x016 */ 0x75, /* u */
+ /* 23, 0x017 */ 0x69, /* i */
+ /* 24, 0x018 */ 0x6F, /* o */
+ /* 25, 0x019 */ 0x70, /* p */
+ /* 26, 0x01a */ 0x5B, /* bracketleft */
+ /* 27, 0x01b */ 0x5D, /* bracketright */
+ /* 28, 0x01c */ 0xFF0D, /* Return */
+ /* 29, 0x01d */ 0xFFE3, /* Control_L */
+ /* 30, 0x01e */ 0x61, /* a */
+ /* 31, 0x01f */ 0x73, /* s */
+ /* 32, 0x020 */ 0x64, /* d */
+ /* 33, 0x021 */ 0x66, /* f */
+ /* 34, 0x022 */ 0x67, /* g */
+ /* 35, 0x023 */ 0x68, /* h */
+ /* 36, 0x024 */ 0x6A, /* j */
+ /* 37, 0x025 */ 0x6B, /* k */
+ /* 38, 0x026 */ 0x6C, /* l */
+ /* 39, 0x027 */ 0x3B, /* semicolon */
+ /* 40, 0x028 */ 0x27, /* apostrophe */
+ /* 41, 0x029 */ 0x60, /* grave */
+ /* 42, 0x02a */ 0xFFE1, /* Shift_L */
+ /* 43, 0x02b */ 0x5C, /* backslash */
+ /* 44, 0x02c */ 0x7A, /* z */
+ /* 45, 0x02d */ 0x78, /* x */
+ /* 46, 0x02e */ 0x63, /* c */
+ /* 47, 0x02f */ 0x76, /* v */
+ /* 48, 0x030 */ 0x62, /* b */
+ /* 49, 0x031 */ 0x6E, /* n */
+ /* 50, 0x032 */ 0x6D, /* m */
+ /* 51, 0x033 */ 0x2C, /* comma */
+ /* 52, 0x034 */ 0x2E, /* period */
+ /* 53, 0x035 */ 0x2F, /* slash */
+ /* 54, 0x036 */ 0xFFE2, /* Shift_R */
+ /* 55, 0x037 */ 0xFFAA, /* KP_Multiply */
+ /* 56, 0x038 */ 0xFFE9, /* Alt_L */
+ /* 57, 0x039 */ 0x20, /* space */
+ /* 58, 0x03a */ 0xFFE5, /* Caps_Lock */
+ /* 59, 0x03b */ 0xFFBE, /* F1 */
+ /* 60, 0x03c */ 0xFFBF, /* F2 */
+ /* 61, 0x03d */ 0xFFC0, /* F3 */
+ /* 62, 0x03e */ 0xFFC1, /* F4 */
+ /* 63, 0x03f */ 0xFFC2, /* F5 */
+ /* 64, 0x040 */ 0xFFC3, /* F6 */
+ /* 65, 0x041 */ 0xFFC4, /* F7 */
+ /* 66, 0x042 */ 0xFFC5, /* F8 */
+ /* 67, 0x043 */ 0xFFC6, /* F9 */
+ /* 68, 0x044 */ 0xFFC7, /* F10 */
+ /* 69, 0x045 */ 0xFF7F, /* Num_Lock */
+ /* 70, 0x046 */ 0xFF14, /* Scroll_Lock */
+ /* 71, 0x047 */ 0xFFB7, /* KP_7 */
+ /* 72, 0x048 */ 0XFFB8, /* KP_8 */
+ /* 73, 0x049 */ 0XFFB9, /* KP_9 */
+ /* 74, 0x04a */ 0xFFAD, /* KP_Subtract */
+ /* 75, 0x04b */ 0xFFB4, /* KP_4 */
+ /* 76, 0x04c */ 0xFFB5, /* KP_5 */
+ /* 77, 0x04d */ 0xFFB6, /* KP_6 */
+ /* 78, 0x04e */ 0xFFAB, /* KP_Add */
+ /* 79, 0x04f */ 0xFFB1, /* KP_1 */
+ /* 80, 0x050 */ 0xFFB2, /* KP_2 */
+ /* 81, 0x051 */ 0xFFB3, /* KP_3 */
+ /* 82, 0x052 */ 0xFFB0, /* KP_0 */
+ /* 83, 0x053 */ 0xFFAE, /* KP_Decimal */
+ /* 84, 0x054 */ 0x0, /* NoSymbol */
+ /* 85, 0x055 */ 0x0, /* NoSymbol */
+ /* 86, 0x056 */ 0x3C, /* less */
+ /* 87, 0x057 */ 0xFFC8, /* F11 */
+ /* 88, 0x058 */ 0xFFC9, /* F12 */
+ /* 89, 0x059 */ 0x0, /* NoSymbol */
+ /* 90, 0x05a */ 0xFF26, /* Katakana */
+ /* 91, 0x05b */ 0xFF25, /* Hiragana */
+ /* 92, 0x05c */ 0xFF23, /* Henkan_Mode */
+ /* 93, 0x05d */ 0xFF27, /* Hiragana_Katakana */
+ /* 94, 0x05e */ 0xFF22, /* Muhenkan */
+ /* 95, 0x05f */ 0x0, /* NoSymbol */
+ /* 96, 0x060 */ 0xFF8D, /* KP_Enter */
+ /* 97, 0x061 */ 0xFFE4, /* Control_R */
+ /* 98, 0x062 */ 0xFFAF, /* KP_Divide */
+ /* 99, 0x063 */ 0xFF15, /* Sys_Req */
+ /* 100, 0x064 */ 0xFFEA, /* Alt_R */
+ /* 101, 0x065 */ 0xFF0A, /* Linefeed */
+ /* 102, 0x066 */ 0xFF50, /* Home */
+ /* 103, 0x067 */ 0xFF52, /* Up */
+ /* 104, 0x068 */ 0xFF55, /* Prior */
+ /* 105, 0x069 */ 0xFF51, /* Left */
+ /* 106, 0x06a */ 0xFF53, /* Right */
+ /* 107, 0x06b */ 0xFF57, /* End */
+ /* 108, 0x06c */ 0xFF54, /* Down */
+ /* 109, 0x06d */ 0xFF56, /* Next */
+ /* 110, 0x06e */ 0xFF63, /* Insert */
+ /* 111, 0x06f */ 0xFFFF, /* Delete */
+ /* 112, 0x070 */ 0x0, /* NoSymbol */
+ /* 113, 0x071 */ 0x1008FF12, /* XF86AudioMute */
+ /* 114, 0x072 */ 0x1008FF11, /* XF86AudioLowerVolume */
+ /* 115, 0x073 */ 0x1008FF13, /* XF86AudioRaiseVolume */
+ /* 116, 0x074 */ 0x1008FF2A, /* XF86PowerOff */
+ /* 117, 0x075 */ 0xFFBD, /* KP_Equal */
+ /* 118, 0x076 */ 0xB1, /* plusminus */
+ /* 119, 0x077 */ 0xFF13, /* Pause */
+ /* 120, 0x078 */ 0x1008FF4A, /* XF86LaunchA */
+ /* 121, 0x079 */ 0xFFAC, /* KP_Separator */
+ /* 122, 0x07a */ 0xFF31, /* Hangul */
+ /* 123, 0x07b */ 0xFF34, /* Hangul_Hanja */
+ /* 124, 0x07c */ 0x0, /* NoSymbol */
+ /* 125, 0x07d */ 0xFFE7, /* Meta_L */
+ /* 126, 0x07e */ 0xFFE8, /* Meta_R */
+ /* 127, 0x07f */ 0xFF67, /* Menu */
+ /* 128, 0x080 */ 0x00, /* NoSymbol */
+ /* 129, 0x081 */ 0xFF66, /* Redo */
+ /* 130, 0x082 */ 0x1005FF70, /* SunProps */
+ /* 131, 0x083 */ 0xFF65, /* Undo */
+ /* 132, 0x084 */ 0x1005FF71, /* SunFront */
+ /* 133, 0x085 */ 0x1008FF57, /* XF86Copy */
+ /* 134, 0x086 */ 0x1008FF6B, /* XF86Open */
+ /* 135, 0x087 */ 0x1008FF6D, /* XF86Paste */
+ /* 136, 0x088 */ 0xFF68, /* Find */
+ /* 137, 0x089 */ 0x1008FF58, /* XF86Cut */
+ /* 138, 0x08a */ 0xFF6A, /* Help */
+ /* 139, 0x08b */ 0xFF67, /* Menu */
+ /* 140, 0x08c */ 0x1008FF1D, /* XF86Calculator */
+ /* 141, 0x08d */ 0x0, /* NoSymbol */
+ /* 142, 0x08e */ 0x1008FF2F, /* XF86Sleep */
+ /* 143, 0x08f */ 0x1008FF2B, /* XF86WakeUp */
+ /* 144, 0x090 */ 0x1008FF5D, /* XF86Explorer */
+ /* 145, 0x091 */ 0x1008FF7B, /* XF86Send */
+ /* 146, 0x092 */ 0x0, /* NoSymbol */
+ /* 147, 0x093 */ 0x1008FF8A, /* XF86Xfer */
+ /* 148, 0x094 */ 0x1008FF41, /* XF86Launch1 */
+ /* 149, 0x095 */ 0x1008FF42, /* XF86Launch2 */
+ /* 150, 0x096 */ 0x1008FF2E, /* XF86WWW */
+ /* 151, 0x097 */ 0x1008FF5A, /* XF86DOS */
+ /* 152, 0x098 */ 0x1008FF2D, /* XF86ScreenSaver */
+ /* 153, 0x099 */ 0x1008FF74, /* XF86RotateWindows */
+ /* 154, 0x09a */ 0x1008FF7F, /* XF86TaskPane */
+ /* 155, 0x09b */ 0x1008FF19, /* XF86Mail */
+ /* 156, 0x09c */ 0x1008FF30, /* XF86Favorites */
+ /* 157, 0x09d */ 0x1008FF33, /* XF86MyComputer */
+ /* 158, 0x09e */ 0x1008FF26, /* XF86Back */
+ /* 159, 0x09f */ 0x1008FF27, /* XF86Forward */
+ /* 160, 0x0a0 */ 0x0, /* NoSymbol */
+ /* 161, 0x0a1 */ 0x1008FF2C, /* XF86Eject */
+ /* 162, 0x0a2 */ 0x1008FF2C, /* XF86Eject */
+ /* 163, 0x0a3 */ 0x1008FF17, /* XF86AudioNext */
+ /* 164, 0x0a4 */ 0x1008FF14, /* XF86AudioPlay */
+ /* 165, 0x0a5 */ 0x1008FF16, /* XF86AudioPrev */
+ /* 166, 0x0a6 */ 0x1008FF15, /* XF86AudioStop */
+ /* 167, 0x0a7 */ 0x1008FF1C, /* XF86AudioRecord */
+ /* 168, 0x0a8 */ 0x1008FF3E, /* XF86AudioRewind */
+ /* 169, 0x0a9 */ 0x1008FF6E, /* XF86Phone */
+ /* 170, 0x0aa */ 0x0, /* NoSymbol */
+ /* 171, 0x0ab */ 0x1008FF81, /* XF86Tools */
+ /* 172, 0x0ac */ 0x1008FF18, /* XF86HomePage */
+ /* 173, 0x0ad */ 0x1008FF73, /* XF86Reload */
+ /* 174, 0x0ae */ 0x1008FF56, /* XF86Close */
+ /* 175, 0x0af */ 0x0, /* NoSymbol */
+ /* 176, 0x0b0 */ 0x0, /* NoSymbol */
+ /* 177, 0x0b1 */ 0x1008FF78, /* XF86ScrollUp */
+ /* 178, 0x0b2 */ 0x1008FF79, /* XF86ScrollDown */
+ /* 179, 0x0b3 */ 0x28, /* parenleft */
+ /* 180, 0x0b4 */ 0x29, /* parenright */
+ /* 181, 0x0b5 */ 0x1008FF68, /* XF86New */
+ /* 182, 0x0b6 */ 0xFF66, /* Redo */
+ /* 183, 0x0b7 */ 0xFFCA, /* F13 */
+ /* 184, 0x0b8 */ 0xFFCB, /* F14 */
+ /* 185, 0x0b9 */ 0xFFCC, /* F15 */
+ /* 186, 0x0ba */ 0xFFCD, /* F16 */
+ /* 187, 0x0bb */ 0xFFCE, /* F17 */
+ /* 188, 0x0bc */ 0xFFCF, /* F18 */
+ /* 189, 0x0bd */ 0xFFD0, /* F19 */
+ /* 190, 0x0be */ 0xFFD1, /* F20 */
+ /* 191, 0x0bf */ 0xFFD2, /* F21 */
+ /* 192, 0x0c0 */ 0xFFD3, /* F22 */
+ /* 193, 0x0c1 */ 0xFFD4, /* F23 */
+ /* 194, 0x0c2 */ 0xFFD5, /* F24 */
+ /* 195, 0x0c3 */ 0x0, /* NoSymbol */
+ /* 196, 0x0c4 */ 0x0, /* NoSymbol */
+ /* 197, 0x0c5 */ 0x0, /* NoSymbol */
+ /* 198, 0x0c6 */ 0x0, /* NoSymbol */
+ /* 199, 0x0c7 */ 0x0, /* NoSymbol */
+ /* 200, 0x0c8 */ 0x1008FF14, /* XF86AudioPlay */
+ /* 201, 0x0c9 */ 0x1008FF31, /* XF86AudioPause */
+ /* 202, 0x0ca */ 0x1008FF43, /* XF86Launch3 */
+ /* 203, 0x0cb */ 0x1008FF44, /* XF86Launch4 */
+ /* 204, 0x0cc */ 0x1008FF4B, /* XF86LaunchB */
+ /* 205, 0x0cd */ 0x1008FFA7, /* XF86Suspend */
+ /* 206, 0x0ce */ 0x1008FF56, /* XF86Close */
+ /* 207, 0x0cf */ 0x1008FF14, /* XF86AudioPlay */
+ /* 208, 0x0d0 */ 0x1008FF97, /* XF86AudioForward */
+ /* 209, 0x0d1 */ 0x0, /* NoSymbol */
+ /* 210, 0x0d2 */ 0xFF61, /* Print */
+ /* 211, 0x0d3 */ 0x0, /* NoSymbol */
+ /* 212, 0x0d4 */ 0x1008FF8F, /* XF86WebCam */
+ /* 213, 0x0d5 */ 0x1008FFB6, /* XF86AudioPreset */
+ /* 214, 0x0d6 */ 0x0, /* NoSymbol */
+ /* 215, 0x0d7 */ 0x1008FF19, /* XF86Mail */
+ /* 216, 0x0d8 */ 0x1008FF8E, /* XF86Messenger */
+ /* 217, 0x0d9 */ 0x1008FF1B, /* XF86Search */
+ /* 218, 0x0da */ 0x1008FF5F, /* XF86Go */
+ /* 219, 0x0db */ 0x1008FF3C, /* XF86Finance */
+ /* 220, 0x0dc */ 0x1008FF5E, /* XF86Game */
+ /* 221, 0x0dd */ 0x1008FF36, /* XF86Shop */
+ /* 222, 0x0de */ 0x0, /* NoSymbol */
+ /* 223, 0x0df */ 0xFF69, /* Cancel */
+ /* 224, 0x0e0 */ 0x1008FF03, /* XF86MonBrightnessDown */
+ /* 225, 0x0e1 */ 0x1008FF02, /* XF86MonBrightnessUp */
+ /* 226, 0x0e2 */ 0x1008FF32, /* XF86AudioMedia */
+ /* 227, 0x0e3 */ 0x1008FF59, /* XF86Display */
+ /* 228, 0x0e4 */ 0x1008FF04, /* XF86KbdLightOnOff */
+ /* 229, 0x0e5 */ 0x1008FF06, /* XF86KbdBrightnessDown */
+ /* 230, 0x0e6 */ 0x1008FF05, /* XF86KbdBrightnessUp */
+ /* 231, 0x0e7 */ 0x1008FF7B, /* XF86Send */
+ /* 232, 0x0e8 */ 0x1008FF72, /* XF86Reply */
+ /* 233, 0x0e9 */ 0x1008FF90, /* XF86MailForward */
+ /* 234, 0x0ea */ 0x1008FF77, /* XF86Save */
+ /* 235, 0x0eb */ 0x1008FF5B, /* XF86Documents */
+ /* 236, 0x0ec */ 0x1008FF93, /* XF86Battery */
+ /* 237, 0x0ed */ 0x1008FF94, /* XF86Bluetooth */
+ /* 238, 0x0ee */ 0x1008FF95, /* XF86WLAN */
+ /* 239, 0x0ef */ 0x1008FF96, /* XF86UWB */
+ /* 240, 0x0f0 */ 0x0, /* NoSymbol */
+ /* 241, 0x0f1 */ 0x1008FE22, /* XF86Next_VMode */
+ /* 242, 0x0f2 */ 0x1008FE23, /* XF86Prev_VMode */
+ /* 243, 0x0f3 */ 0x1008FF07, /* XF86MonBrightnessCycle */
+ /* 244, 0x0f4 */ 0x100810F4, /* XF86BrightnessAuto */
+ /* 245, 0x0f5 */ 0x100810F5, /* XF86DisplayOff */
+ /* 246, 0x0f6 */ 0x1008FFB4, /* XF86WWAN */
+ /* 247, 0x0f7 */ 0x1008FFB5, /* XF86RFKill */
+};
+
+#if 0 /* Here is a script to generate the ExtendedLinuxKeycodeKeysyms table */
+#!/bin/bash
+
+function process_line
{
- SDL_Scancode const *table;
- int table_size;
-} scancode_set[] = {
- { darwin_scancode_table, SDL_arraysize(darwin_scancode_table) },
- { xfree86_scancode_table, SDL_arraysize(xfree86_scancode_table) },
- { xfree86_scancode_table2, SDL_arraysize(xfree86_scancode_table2) },
- { xvnc_scancode_table, SDL_arraysize(xvnc_scancode_table) },
+ sym=$(echo "$1" | awk '{print $3}')
+ code=$(echo "$1" | sed 's,.*_EVDEVK(\(0x[0-9A-Fa-f]*\)).*,\1,')
+ value=$(egrep "#define ${sym}\s" -R /usr/include/X11 | awk '{print $3}')
+ printf " { 0x%.8X, 0x%.3x }, /* $sym */\n" $value $code
+}
+
+fgrep "/* Use: " /usr/include/xkbcommon/xkbcommon-keysyms.h | fgrep _EVDEVK | while read line; do
+ process_line "$line"
+done
+#endif
+
+static const struct {
+ KeySym keysym;
+ int linux_keycode;
+} ExtendedLinuxKeycodeKeysyms[] = {
+ { 0x1008FF2C, 0x0a2 }, /* XF86XK_Eject */
+ { 0x1008FF68, 0x0b5 }, /* XF86XK_New */
+ { 0x0000FF66, 0x0b6 }, /* XK_Redo */
+ { 0x1008FF4B, 0x0cc }, /* XF86XK_LaunchB */
+ { 0x1008FF59, 0x0e3 }, /* XF86XK_Display */
+ { 0x1008FF04, 0x0e4 }, /* XF86XK_KbdLightOnOff */
+ { 0x1008FF06, 0x0e5 }, /* XF86XK_KbdBrightnessDown */
+ { 0x1008FF05, 0x0e6 }, /* XF86XK_KbdBrightnessUp */
+ { 0x1008FF7B, 0x0e7 }, /* XF86XK_Send */
+ { 0x1008FF72, 0x0e8 }, /* XF86XK_Reply */
+ { 0x1008FF90, 0x0e9 }, /* XF86XK_MailForward */
+ { 0x1008FF77, 0x0ea }, /* XF86XK_Save */
+ { 0x1008FF5B, 0x0eb }, /* XF86XK_Documents */
+ { 0x1008FF93, 0x0ec }, /* XF86XK_Battery */
+ { 0x1008FF94, 0x0ed }, /* XF86XK_Bluetooth */
+ { 0x1008FF95, 0x0ee }, /* XF86XK_WLAN */
+ { 0x1008FF96, 0x0ef }, /* XF86XK_UWB */
+ { 0x1008FE22, 0x0f1 }, /* XF86XK_Next_VMode */
+ { 0x1008FE23, 0x0f2 }, /* XF86XK_Prev_VMode */
+ { 0x1008FF07, 0x0f3 }, /* XF86XK_MonBrightnessCycle */
+ { 0x1008FFB4, 0x0f6 }, /* XF86XK_WWAN */
+ { 0x1008FFB5, 0x0f7 }, /* XF86XK_RFKill */
+ { 0x1008FFB2, 0x0f8 }, /* XF86XK_AudioMicMute */
+ { 0x1008FF9C, 0x173 }, /* XF86XK_CycleAngle */
+ { 0x1008FFB8, 0x174 }, /* XF86XK_FullScreen */
+ { 0x1008FF87, 0x189 }, /* XF86XK_Video */
+ { 0x1008FF20, 0x18d }, /* XF86XK_Calendar */
+ { 0x1008FF99, 0x19a }, /* XF86XK_AudioRandomPlay */
+ { 0x1008FF5E, 0x1a1 }, /* XF86XK_Game */
+ { 0x1008FF8B, 0x1a2 }, /* XF86XK_ZoomIn */
+ { 0x1008FF8C, 0x1a3 }, /* XF86XK_ZoomOut */
+ { 0x1008FF89, 0x1a5 }, /* XF86XK_Word */
+ { 0x1008FF5C, 0x1a7 }, /* XF86XK_Excel */
+ { 0x1008FF69, 0x1ab }, /* XF86XK_News */
+ { 0x1008FF8E, 0x1ae }, /* XF86XK_Messenger */
+ { 0x1008FF61, 0x1b1 }, /* XF86XK_LogOff */
+ { 0x00000024, 0x1b2 }, /* XK_dollar */
+ { 0x000020AC, 0x1b3 }, /* XK_EuroSign */
+ { 0x1008FF9D, 0x1b4 }, /* XF86XK_FrameBack */
+ { 0x1008FF9E, 0x1b5 }, /* XF86XK_FrameForward */
+ { 0x0000FFF1, 0x1f1 }, /* XK_braille_dot_1 */
+ { 0x0000FFF2, 0x1f2 }, /* XK_braille_dot_2 */
+ { 0x0000FFF3, 0x1f3 }, /* XK_braille_dot_3 */
+ { 0x0000FFF4, 0x1f4 }, /* XK_braille_dot_4 */
+ { 0x0000FFF5, 0x1f5 }, /* XK_braille_dot_5 */
+ { 0x0000FFF6, 0x1f6 }, /* XK_braille_dot_6 */
+ { 0x0000FFF7, 0x1f7 }, /* XK_braille_dot_7 */
+ { 0x0000FFF8, 0x1f8 }, /* XK_braille_dot_8 */
+ { 0x0000FFF9, 0x1f9 }, /* XK_braille_dot_9 */
+ { 0x0000FFF1, 0x1fa }, /* XK_braille_dot_1 */
+ { 0x1008FFA9, 0x212 }, /* XF86XK_TouchpadToggle */
+ { 0x1008FFB0, 0x213 }, /* XF86XK_TouchpadOn */
+ { 0x1008FFB1, 0x214 }, /* XF86XK_TouchpadOff */
+ { 0x1008FFB7, 0x231 }, /* XF86XK_RotationLockToggle */
+ { 0x0000FE08, 0x248 }, /* XK_ISO_Next_Group */
+};
+
+static SDL_ScancodeTable scancode_set[] = {
+ SDL_SCANCODE_TABLE_DARWIN,
+ SDL_SCANCODE_TABLE_XFREE86_1,
+ SDL_SCANCODE_TABLE_XFREE86_2,
+ SDL_SCANCODE_TABLE_XVNC,
};
/* *INDENT-OFF* */ /* clang-format off */
-/* This function only works for keyboards in US QWERTY layout */
+/* This function only correctly maps letters and numbers for keyboards in US QWERTY layout */
static SDL_Scancode
X11_KeyCodeToSDLScancode(_THIS, KeyCode keycode)
{
KeySym keysym;
int i;
+ int linux_keycode = 0;
keysym = X11_KeyCodeToSym(_this, keycode, 0);
if (keysym == NoSymbol) {
return SDL_SCANCODE_UNKNOWN;
}
- if (keysym >= XK_a && keysym <= XK_z) {
- return SDL_SCANCODE_A + (keysym - XK_a);
- }
- if (keysym >= XK_A && keysym <= XK_Z) {
- return SDL_SCANCODE_A + (keysym - XK_A);
- }
-
- if (keysym == XK_0) {
- return SDL_SCANCODE_0;
- }
- if (keysym >= XK_1 && keysym <= XK_9) {
- return SDL_SCANCODE_1 + (keysym - XK_1);
- }
-
+ /* First check our custom list */
for (i = 0; i < SDL_arraysize(KeySymToSDLScancode); ++i) {
if (keysym == KeySymToSDLScancode[i].keysym) {
return KeySymToSDLScancode[i].scancode;
}
}
- return SDL_SCANCODE_UNKNOWN;
+
+ /* The rest of the keysyms map to Linux keycodes, so use that mapping */
+ if (keysym >= 0x10081000 && keysym <= 0x10081FFF) {
+ /* Per xkbcommon-keysyms.h, this is actually a linux keycode */
+ linux_keycode = (keysym - 0x10081000);
+ }
+ if (!linux_keycode) {
+ /* See if this keysym is an exact match in our table */
+ i = (keycode - 8);
+ if (i >= 0 && i < SDL_arraysize(LinuxKeycodeKeysyms) && keysym == LinuxKeycodeKeysyms[i]) {
+ linux_keycode = i;
+ } else {
+ /* Scan the table for this keysym */
+ for (i = 0; i < SDL_arraysize(LinuxKeycodeKeysyms); ++i) {
+ if (keysym == LinuxKeycodeKeysyms[i]) {
+ linux_keycode = i;
+ break;
+ }
+ }
+ }
+ }
+ if (!linux_keycode) {
+ /* Scan the extended table for this keysym */
+ for (i = 0; i < SDL_arraysize(ExtendedLinuxKeycodeKeysyms); ++i) {
+ if (keysym == ExtendedLinuxKeycodeKeysyms[i].keysym) {
+ linux_keycode = ExtendedLinuxKeycodeKeysyms[i].linux_keycode;
+ break;
+ }
+ }
+ }
+ return SDL_GetScancodeFromTable(SDL_SCANCODE_TABLE_LINUX, linux_keycode);
}
static Uint32
@@ -339,21 +599,21 @@ X11_InitKeyboard(_THIS)
best_index = -1;
X11_XDisplayKeycodes(data->display, &min_keycode, &max_keycode);
for (i = 0; i < SDL_arraysize(fingerprint); ++i) {
- fingerprint[i].value =
- X11_XKeysymToKeycode(data->display, fingerprint[i].keysym) -
- min_keycode;
+ fingerprint[i].value = X11_XKeysymToKeycode(data->display, fingerprint[i].keysym) - min_keycode;
}
for (i = 0; i < SDL_arraysize(scancode_set); ++i) {
+ int table_size;
+ const SDL_Scancode *table = SDL_GetScancodeTable(scancode_set[i], &table_size);
+
/* Make sure the scancode set isn't too big */
- if ((max_keycode - min_keycode + 1) <= scancode_set[i].table_size) {
+ if (table_size > (max_keycode - min_keycode + 1)) {
continue;
}
distance = 0;
for (j = 0; j < SDL_arraysize(fingerprint); ++j) {
- if (fingerprint[j].value < 0
- || fingerprint[j].value >= scancode_set[i].table_size) {
+ if (fingerprint[j].value < 0 || fingerprint[j].value >= table_size) {
distance += 1;
- } else if (scancode_set[i].table[fingerprint[j].value] != fingerprint[j].scancode) {
+ } else if (table[fingerprint[j].value] != fingerprint[j].scancode) {
distance += 1;
}
}
@@ -363,34 +623,68 @@ X11_InitKeyboard(_THIS)
}
}
if (best_index >= 0 && best_distance <= 2) {
-#ifdef DEBUG_KEYBOARD
- printf("Using scancode set %d, min_keycode = %d, max_keycode = %d, table_size = %d\n", best_index, min_keycode, max_keycode, scancode_set[best_index].table_size);
-#endif
- SDL_memcpy(&data->key_layout[min_keycode], scancode_set[best_index].table,
- sizeof(SDL_Scancode) * scancode_set[best_index].table_size);
- } else {
- SDL_Keycode keymap[SDL_NUM_SCANCODES];
+ SDL_Keycode default_keymap[SDL_NUM_SCANCODES];
+ int table_size;
+ const SDL_Scancode *table = SDL_GetScancodeTable(scancode_set[best_index], &table_size);
- printf
- ("Keyboard layout unknown, please report the following to the SDL forums/mailing list (https://discourse.libsdl.org/):\n");
+#ifdef DEBUG_KEYBOARD
+ SDL_Log("Using scancode set %d, min_keycode = %d, max_keycode = %d, table_size = %d\n", best_index, min_keycode, max_keycode, table_size);
+#endif
+ /* This should never happen, but just in case... */
+ if (table_size > (SDL_arraysize(data->key_layout) - min_keycode)) {
+ table_size = (SDL_arraysize(data->key_layout) - min_keycode);
+ }
+ SDL_memcpy(&data->key_layout[min_keycode], table, sizeof(SDL_Scancode) * table_size);
+
+ /* Scancodes represent physical locations on the keyboard, unaffected by keyboard mapping.
+ However, there are a number of extended scancodes that have no standard location, so use
+ the X11 mapping for all non-character keys.
+ */
+ SDL_GetDefaultKeymap(default_keymap);
+
+ for (i = min_keycode; i <= max_keycode; ++i) {
+ SDL_Scancode scancode = X11_KeyCodeToSDLScancode(_this, i);
+#ifdef DEBUG_KEYBOARD
+ {
+ KeySym sym;
+ sym = X11_KeyCodeToSym(_this, (KeyCode)i, 0);
+ SDL_Log("code = %d, sym = 0x%X (%s) ", i - min_keycode,
+ (unsigned int)sym, sym == NoSymbol ? "NoSymbol" : X11_XKeysymToString(sym));
+ }
+#endif
+ if (scancode == data->key_layout[i]) {
+ continue;
+ }
+ if (scancode == SDL_SCANCODE_UNKNOWN || default_keymap[scancode] >= SDLK_SCANCODE_MASK) {
+ /* Not a character key, safe to remap */
+#ifdef DEBUG_KEYBOARD
+ SDL_Log("Changing scancode, was %d (%s), now %d (%s)\n", data->key_layout[i], SDL_GetScancodeName(data->key_layout[i]), scancode, SDL_GetScancodeName(scancode));
+#endif
+ data->key_layout[i] = scancode;
+ }
+ }
+ } else {
+#ifdef DEBUG_SCANCODES
+ SDL_Log("Keyboard layout unknown, please report the following to the SDL forums/mailing list (https://discourse.libsdl.org/):\n");
+#endif
/* Determine key_layout - only works on US QWERTY layout */
- SDL_GetDefaultKeymap(keymap);
for (i = min_keycode; i <= max_keycode; ++i) {
- KeySym sym;
- sym = X11_KeyCodeToSym(_this, (KeyCode) i, 0);
- if (sym != NoSymbol) {
- SDL_Scancode scancode;
- printf("code = %d, sym = 0x%X (%s) ", i - min_keycode,
- (unsigned int) sym, X11_XKeysymToString(sym));
- scancode = X11_KeyCodeToSDLScancode(_this, i);
- data->key_layout[i] = scancode;
- if (scancode == SDL_SCANCODE_UNKNOWN) {
- printf("scancode not found\n");
- } else {
- printf("scancode = %d (%s)\n", scancode, SDL_GetScancodeName(scancode));
- }
+ SDL_Scancode scancode = X11_KeyCodeToSDLScancode(_this, i);
+#ifdef DEBUG_SCANCODES
+ {
+ KeySym sym;
+ sym = X11_KeyCodeToSym(_this, (KeyCode)i, 0);
+ SDL_Log("code = %d, sym = 0x%X (%s) ", i - min_keycode,
+ (unsigned int)sym, sym == NoSymbol ? "NoSymbol" : X11_XKeysymToString(sym));
}
+ if (scancode == SDL_SCANCODE_UNKNOWN) {
+ SDL_Log("scancode not found\n");
+ } else {
+ SDL_Log("scancode = %d (%s)\n", scancode, SDL_GetScancodeName(scancode));
+ }
+#endif
+ data->key_layout[i] = scancode;
}
}