#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <fs/ml.h>
static uint32_t g_sdl2_keys[] = {
    0, 0, 0, 0,
    FS_ML_KEY_A, // 4 SDL_SCANCODE_A
    FS_ML_KEY_B, // 5 SDL_SCANCODE_B
    FS_ML_KEY_C, // 6 SDL_SCANCODE_C
    FS_ML_KEY_D, // 7 SDL_SCANCODE_D
    FS_ML_KEY_E, // 8 SDL_SCANCODE_E
    FS_ML_KEY_F, // 9 SDL_SCANCODE_F
    FS_ML_KEY_G, // 10 SDL_SCANCODE_G
    FS_ML_KEY_H, // 11 SDL_SCANCODE_H
    FS_ML_KEY_I, // 12 SDL_SCANCODE_I
    FS_ML_KEY_J, // 13 SDL_SCANCODE_J
    FS_ML_KEY_K, // 14 SDL_SCANCODE_K
    FS_ML_KEY_L, // 15 SDL_SCANCODE_L
    FS_ML_KEY_M, // 16 SDL_SCANCODE_M
    FS_ML_KEY_N, // 17 SDL_SCANCODE_N
    FS_ML_KEY_O, // 18 SDL_SCANCODE_O
    FS_ML_KEY_P, // 19 SDL_SCANCODE_P
    FS_ML_KEY_Q, // 20 SDL_SCANCODE_Q
    FS_ML_KEY_R, // 21 SDL_SCANCODE_R
    FS_ML_KEY_S, // 22 SDL_SCANCODE_S
    FS_ML_KEY_T, // 23 SDL_SCANCODE_T
    FS_ML_KEY_U, // 24 SDL_SCANCODE_U
    FS_ML_KEY_V, // 25 SDL_SCANCODE_V
    FS_ML_KEY_W, // 26 SDL_SCANCODE_W
    FS_ML_KEY_X, // 27 SDL_SCANCODE_X
    FS_ML_KEY_Y, // 28 SDL_SCANCODE_Y
    FS_ML_KEY_Z, // 29 SDL_SCANCODE_Z
    FS_ML_KEY_1, // 30 SDL_SCANCODE_1
    FS_ML_KEY_2, // 31 SDL_SCANCODE_2
    FS_ML_KEY_3, // 32 SDL_SCANCODE_3
    FS_ML_KEY_4, // 33 SDL_SCANCODE_4
    FS_ML_KEY_5, // 34 SDL_SCANCODE_5
    FS_ML_KEY_6, // 35 SDL_SCANCODE_6
    FS_ML_KEY_7, // 36 SDL_SCANCODE_7
    FS_ML_KEY_8, // 37 SDL_SCANCODE_8
    FS_ML_KEY_9, // 38 SDL_SCANCODE_9
    FS_ML_KEY_0, // 39 SDL_SCANCODE_0
    FS_ML_KEY_RETURN, // 40 SDL_SCANCODE_RETURN
    FS_ML_KEY_ESCAPE, // 41 SDL_SCANCODE_ESCAPE
    FS_ML_KEY_BACKSPACE, // 42 SDL_SCANCODE_BACKSPACE
    FS_ML_KEY_TAB, // 43 SDL_SCANCODE_TAB
    FS_ML_KEY_SPACE, // 44 SDL_SCANCODE_SPACE
    FS_ML_KEY_MINUS, // 45 SDL_SCANCODE_MINUS
    FS_ML_KEY_EQUALS, // 46 SDL_SCANCODE_EQUALS
    FS_ML_KEY_LEFTBRACKET, // 47 SDL_SCANCODE_LEFTBRACKET
    FS_ML_KEY_RIGHTBRACKET, // 48 SDL_SCANCODE_RIGHTBRACKET
    FS_ML_KEY_BACKSLASH, // 49 SDL_SCANCODE_BACKSLASH
    0, // 50 SDL_SCANCODE_NONUSHASH
    FS_ML_KEY_SEMICOLON, // 51 SDL_SCANCODE_SEMICOLON
    FS_ML_KEY_QUOTE, // 52 SDL_SCANCODE_APOSTROPHE
    FS_ML_KEY_BACKQUOTE, // 53 SDL_SCANCODE_GRAVE
    FS_ML_KEY_COMMA, // 54 SDL_SCANCODE_COMMA
    FS_ML_KEY_PERIOD, // 55 SDL_SCANCODE_PERIOD
    FS_ML_KEY_SLASH, // 56 SDL_SCANCODE_SLASH
    FS_ML_KEY_CAPSLOCK, // 57 SDL_SCANCODE_CAPSLOCK
    FS_ML_KEY_F1, // 58 SDL_SCANCODE_F1
    FS_ML_KEY_F2, // 59 SDL_SCANCODE_F2
    FS_ML_KEY_F3, // 60 SDL_SCANCODE_F3
    FS_ML_KEY_F4, // 61 SDL_SCANCODE_F4
    FS_ML_KEY_F5, // 62 SDL_SCANCODE_F5
    FS_ML_KEY_F6, // 63 SDL_SCANCODE_F6
    FS_ML_KEY_F7, // 64 SDL_SCANCODE_F7
    FS_ML_KEY_F8, // 65 SDL_SCANCODE_F8
    FS_ML_KEY_F9, // 66 SDL_SCANCODE_F9
    FS_ML_KEY_F10, // 67 SDL_SCANCODE_F10
    FS_ML_KEY_F11, // 68 SDL_SCANCODE_F11
    FS_ML_KEY_F12, // 69 SDL_SCANCODE_F12
    FS_ML_KEY_PRINT, // 70 SDL_SCANCODE_PRINTSCREEN
    FS_ML_KEY_SCROLLOCK, // 71 SDL_SCANCODE_SCROLLLOCK
    FS_ML_KEY_PAUSE, // 72 SDL_SCANCODE_PAUSE
    FS_ML_KEY_INSERT, // 73 SDL_SCANCODE_INSERT
    FS_ML_KEY_HOME, // 74 SDL_SCANCODE_HOME
    FS_ML_KEY_PAGEUP, // 75 SDL_SCANCODE_PAGEUP
    FS_ML_KEY_DELETE, // 76 SDL_SCANCODE_DELETE
    FS_ML_KEY_END, // 77 SDL_SCANCODE_END
    FS_ML_KEY_PAGEDOWN, // 78 SDL_SCANCODE_PAGEDOWN
    FS_ML_KEY_RIGHT, // 79 SDL_SCANCODE_RIGHT
    FS_ML_KEY_LEFT, // 80 SDL_SCANCODE_LEFT
    FS_ML_KEY_DOWN, // 81 SDL_SCANCODE_DOWN
    FS_ML_KEY_UP, // 82 SDL_SCANCODE_UP
    FS_ML_KEY_NUMLOCK, // 83 SDL_SCANCODE_NUMLOCKCLEAR
    FS_ML_KEY_KP_DIVIDE, // 84 SDL_SCANCODE_KP_DIVIDE
    FS_ML_KEY_KP_MULTIPLY, // 85 SDL_SCANCODE_KP_MULTIPLY
    FS_ML_KEY_KP_MINUS, // 86 SDL_SCANCODE_KP_MINUS
    FS_ML_KEY_KP_PLUS, // 87 SDL_SCANCODE_KP_PLUS
    FS_ML_KEY_KP_ENTER, // 88 SDL_SCANCODE_KP_ENTER
    FS_ML_KEY_KP1, // 89 SDL_SCANCODE_KP_1
    FS_ML_KEY_KP2, // 90 SDL_SCANCODE_KP_2
    FS_ML_KEY_KP3, // 91 SDL_SCANCODE_KP_3
    FS_ML_KEY_KP4, // 92 SDL_SCANCODE_KP_4
    FS_ML_KEY_KP5, // 93 SDL_SCANCODE_KP_5
    FS_ML_KEY_KP6, // 94 SDL_SCANCODE_KP_6
    FS_ML_KEY_KP7, // 95 SDL_SCANCODE_KP_7
    FS_ML_KEY_KP8, // 96 SDL_SCANCODE_KP_8
    FS_ML_KEY_KP9, // 97 SDL_SCANCODE_KP_9
    FS_ML_KEY_KP0, // 98 SDL_SCANCODE_KP_0
    FS_ML_KEY_KP_PERIOD, // 99 SDL_SCANCODE_KP_PERIOD
    FS_ML_KEY_LESS, // 100 SDL_SCANCODE_NONUSBACKSLASH
    FS_ML_KEY_MENU, // 101 SDL_SCANCODE_APPLICATION
    0, // 102 SDL_SCANCODE_POWER
    0, // 103 SDL_SCANCODE_KP_EQUALS
    0, // 104 SDL_SCANCODE_F13
    0, // 105 SDL_SCANCODE_F14
    0, // 106 SDL_SCANCODE_F15
    0, // 107 SDL_SCANCODE_F16
    0, // 108 SDL_SCANCODE_F17
    0, // 109 SDL_SCANCODE_F18
    0, // 110 SDL_SCANCODE_F19
    0, // 111 SDL_SCANCODE_F20
    0, // 112 SDL_SCANCODE_F21
    0, // 113 SDL_SCANCODE_F22
    0, // 114 SDL_SCANCODE_F23
    0, // 115 SDL_SCANCODE_F24
    0, // 116 SDL_SCANCODE_EXECUTE
    0, // 117 SDL_SCANCODE_HELP
    0, // 118 SDL_SCANCODE_MENU
    0, // 119 SDL_SCANCODE_SELECT
    0, // 120 SDL_SCANCODE_STOP
    0, // 121 SDL_SCANCODE_AGAIN
    0, // 122 SDL_SCANCODE_UNDO
    0, // 123 SDL_SCANCODE_CUT
    0, // 124 SDL_SCANCODE_COPY
    0, // 125 SDL_SCANCODE_PASTE
    0, // 126 SDL_SCANCODE_FIND
    FS_ML_KEY_MUTE, // 127 SDL_SCANCODE_MUTE
    FS_ML_KEY_VOLUMEUP, // 128 SDL_SCANCODE_VOLUMEUP
    FS_ML_KEY_VOLUMEDOWN, // 129 SDL_SCANCODE_VOLUMEDOWN
    0, // 130 SDL_SCANCODE_LOCKINGCAPSLOCK
    0, // 131 SDL_SCANCODE_LOCKINGNUMLOCK
    0, // 132 SDL_SCANCODE_LOCKINGSCROLLLOCK
    0, // 133 SDL_SCANCODE_KP_COMMA
    0, // 134 SDL_SCANCODE_KP_EQUALSAS400
    0, // 135 SDL_SCANCODE_INTERNATIONAL1
    0, // 136 SDL_SCANCODE_INTERNATIONAL2
    0, // 137 SDL_SCANCODE_INTERNATIONAL3
    0, // 138 SDL_SCANCODE_INTERNATIONAL4
    0, // 139 SDL_SCANCODE_INTERNATIONAL5
    0, // 140 SDL_SCANCODE_INTERNATIONAL6
    0, // 141 SDL_SCANCODE_INTERNATIONAL7
    0, // 142 SDL_SCANCODE_INTERNATIONAL8
    0, // 143 SDL_SCANCODE_INTERNATIONAL9
    0, // 144 SDL_SCANCODE_LANG1
    0, // 145 SDL_SCANCODE_LANG2
    0, // 146 SDL_SCANCODE_LANG3
    0, // 147 SDL_SCANCODE_LANG4
    0, // 148 SDL_SCANCODE_LANG5
    0, // 149 SDL_SCANCODE_LANG6
    0, // 150 SDL_SCANCODE_LANG7
    0, // 151 SDL_SCANCODE_LANG8
    0, // 152 SDL_SCANCODE_LANG9
    0, // 153 SDL_SCANCODE_ALTERASE
    FS_ML_KEY_SYSREQ, // 154 SDL_SCANCODE_SYSREQ
    0, // 155 SDL_SCANCODE_CANCEL
    0, // 156 SDL_SCANCODE_CLEAR
    0, // 157 SDL_SCANCODE_PRIOR
    0, // 158 SDL_SCANCODE_RETURN2
    0, // 159 SDL_SCANCODE_SEPARATOR
    0, // 160 SDL_SCANCODE_OUT
    0, // 161 SDL_SCANCODE_OPER
    0, // 162 SDL_SCANCODE_CLEARAGAIN
    0, // 163 SDL_SCANCODE_CRSEL
    0, // 164 SDL_SCANCODE_EXSEL
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0, // 176 SDL_SCANCODE_KP_00
    0, // 177 SDL_SCANCODE_KP_000
    0, // 178 SDL_SCANCODE_THOUSANDSSEPARATOR
    0, // 179 SDL_SCANCODE_DECIMALSEPARATOR
    0, // 180 SDL_SCANCODE_CURRENCYUNIT
    0, // 181 SDL_SCANCODE_CURRENCYSUBUNIT
    0, // 182 SDL_SCANCODE_KP_LEFTPAREN
    0, // 183 SDL_SCANCODE_KP_RIGHTPAREN
    0, // 184 SDL_SCANCODE_KP_LEFTBRACE
    0, // 185 SDL_SCANCODE_KP_RIGHTBRACE
    0, // 186 SDL_SCANCODE_KP_TAB
    0, // 187 SDL_SCANCODE_KP_BACKSPACE
    0, // 188 SDL_SCANCODE_KP_A
    0, // 189 SDL_SCANCODE_KP_B
    0, // 190 SDL_SCANCODE_KP_C
    0, // 191 SDL_SCANCODE_KP_D
    0, // 192 SDL_SCANCODE_KP_E
    0, // 193 SDL_SCANCODE_KP_F
    0, // 194 SDL_SCANCODE_KP_XOR
    0, // 195 SDL_SCANCODE_KP_POWER
    0, // 196 SDL_SCANCODE_KP_PERCENT
    0, // 197 SDL_SCANCODE_KP_LESS
    0, // 198 SDL_SCANCODE_KP_GREATER
    0, // 199 SDL_SCANCODE_KP_AMPERSAND
    0, // 200 SDL_SCANCODE_KP_DBLAMPERSAND
    0, // 201 SDL_SCANCODE_KP_VERTICALBAR
    0, // 202 SDL_SCANCODE_KP_DBLVERTICALBAR
    0, // 203 SDL_SCANCODE_KP_COLON
    0, // 204 SDL_SCANCODE_KP_HASH
    0, // 205 SDL_SCANCODE_KP_SPACE
    0, // 206 SDL_SCANCODE_KP_AT
    0, // 207 SDL_SCANCODE_KP_EXCLAM
    0, // 208 SDL_SCANCODE_KP_MEMSTORE
    0, // 209 SDL_SCANCODE_KP_MEMRECALL
    0, // 210 SDL_SCANCODE_KP_MEMCLEAR
    0, // 211 SDL_SCANCODE_KP_MEMADD
    0, // 212 SDL_SCANCODE_KP_MEMSUBTRACT
    0, // 213 SDL_SCANCODE_KP_MEMMULTIPLY
    0, // 214 SDL_SCANCODE_KP_MEMDIVIDE
    0, // 215 SDL_SCANCODE_KP_PLUSMINUS
    0, // 216 SDL_SCANCODE_KP_CLEAR
    0, // 217 SDL_SCANCODE_KP_CLEARENTRY
    0, // 218 SDL_SCANCODE_KP_BINARY
    0, // 219 SDL_SCANCODE_KP_OCTAL
    0, // 220 SDL_SCANCODE_KP_DECIMAL
    0, // 221 SDL_SCANCODE_KP_HEXADECIMAL
    0,
    0,
    FS_ML_KEY_LCTRL, // 224 SDL_SCANCODE_LCTRL
    FS_ML_KEY_LSHIFT, // 225 SDL_SCANCODE_LSHIFT
    FS_ML_KEY_LALT, // 226 SDL_SCANCODE_LALT
    FS_ML_KEY_LSUPER, // 227 SDL_SCANCODE_LGUI
    FS_ML_KEY_RCTRL, // 228 SDL_SCANCODE_RCTRL
    FS_ML_KEY_RSHIFT, // 229 SDL_SCANCODE_RSHIFT
    FS_ML_KEY_RALT, // 230 SDL_SCANCODE_RALT
    FS_ML_KEY_RSUPER, // 231 SDL_SCANCODE_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,
    0, // 257 SDL_SCANCODE_MODE
    FS_ML_KEY_AUDIONEXT, // 258 SDL_SCANCODE_AUDIONEXT
    FS_ML_KEY_AUDIOPREV, // 259 SDL_SCANCODE_AUDIOPREV
    FS_ML_KEY_AUDIOSTOP, // 260 SDL_SCANCODE_AUDIOSTOP
    FS_ML_KEY_AUDIOPLAY, // 261 SDL_SCANCODE_AUDIOPLAY
    /* Mapped to same FS_ML_KEY as SDL_SCANMODE_MUTE. */
    FS_ML_KEY_MUTE, // 262 SDL_SCANCODE_AUDIOMUTE
    0, // 263 SDL_SCANCODE_MEDIASELECT
    0, // 264 SDL_SCANCODE_WWW
    0, // 265 SDL_SCANCODE_MAIL
    0, // 266 SDL_SCANCODE_CALCULATOR
    0, // 267 SDL_SCANCODE_COMPUTER
    0, // 268 SDL_SCANCODE_AC_SEARCH
    0, // 269 SDL_SCANCODE_AC_HOME
    0, // 270 SDL_SCANCODE_AC_BACK
    0, // 271 SDL_SCANCODE_AC_FORWARD
    0, // 272 SDL_SCANCODE_AC_STOP
    0, // 273 SDL_SCANCODE_AC_REFRESH
    0, // 274 SDL_SCANCODE_AC_BOOKMARKS
    0, // 275 SDL_SCANCODE_BRIGHTNESSDOWN
    0, // 276 SDL_SCANCODE_BRIGHTNESSUP
    0, // 277 SDL_SCANCODE_DISPLAYSWITCH
    0, // 278 SDL_SCANCODE_KBDILLUMTOGGLE
    0, // 279 SDL_SCANCODE_KBDILLUMDOWN
    0, // 280 SDL_SCANCODE_KBDILLUMUP
    0, // 281 SDL_SCANCODE_EJECT
    0, // 282 SDL_SCANCODE_SLEEP
    FS_ML_KEY_APP1, // SDL_SCANCODE_APP1 = 283,
    FS_ML_KEY_APP2, // SDL_SCANCODE_APP2 = 284,
};

#define LAST_SDL2_SCANCODE 282
