blob: 6f35114be44ac16203d20dd2772a4420ef40459a [file] [log] [blame] [edit]
/*
Simple DirectMedia Layer
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
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"
/*
* Windows scancode to SDL scancode mapping table
* https://learn.microsoft.com/windows/win32/inputdev/about-keyboard-input#scan-codes */
/* *INDENT-OFF* */ // clang-format off
static const SDL_Scancode windows_scancode_table[] = {
/*0x00*/ SDL_SCANCODE_UNKNOWN,
/*0x01*/ SDL_SCANCODE_ESCAPE,
/*0x02*/ SDL_SCANCODE_1,
/*0x03*/ SDL_SCANCODE_2,
/*0x04*/ SDL_SCANCODE_3,
/*0x05*/ SDL_SCANCODE_4,
/*0x06*/ SDL_SCANCODE_5,
/*0x07*/ SDL_SCANCODE_6,
/*0x08*/ SDL_SCANCODE_7,
/*0x09*/ SDL_SCANCODE_8,
/*0x0a*/ SDL_SCANCODE_9,
/*0x0b*/ SDL_SCANCODE_0,
/*0x0c*/ SDL_SCANCODE_MINUS,
/*0x0d*/ SDL_SCANCODE_EQUALS,
/*0x0e*/ SDL_SCANCODE_BACKSPACE,
/*0x0f*/ SDL_SCANCODE_TAB,
/*0x10*/ SDL_SCANCODE_Q,
/*0x11*/ SDL_SCANCODE_W,
/*0x12*/ SDL_SCANCODE_E,
/*0x13*/ SDL_SCANCODE_R,
/*0x14*/ SDL_SCANCODE_T,
/*0x15*/ SDL_SCANCODE_Y,
/*0x16*/ SDL_SCANCODE_U,
/*0x17*/ SDL_SCANCODE_I,
/*0x18*/ SDL_SCANCODE_O,
/*0x19*/ SDL_SCANCODE_P,
/*0x1a*/ SDL_SCANCODE_LEFTBRACKET,
/*0x1b*/ SDL_SCANCODE_RIGHTBRACKET,
/*0x1c*/ SDL_SCANCODE_RETURN,
/*0x1d*/ SDL_SCANCODE_LCTRL,
/*0x1e*/ SDL_SCANCODE_A,
/*0x1f*/ SDL_SCANCODE_S,
/*0x20*/ SDL_SCANCODE_D,
/*0x21*/ SDL_SCANCODE_F,
/*0x22*/ SDL_SCANCODE_G,
/*0x23*/ SDL_SCANCODE_H,
/*0x24*/ SDL_SCANCODE_J,
/*0x25*/ SDL_SCANCODE_K,
/*0x26*/ SDL_SCANCODE_L,
/*0x27*/ SDL_SCANCODE_SEMICOLON,
/*0x28*/ SDL_SCANCODE_APOSTROPHE,
/*0x29*/ SDL_SCANCODE_GRAVE,
/*0x2a*/ SDL_SCANCODE_LSHIFT,
/*0x2b*/ SDL_SCANCODE_BACKSLASH,
/*0x2c*/ SDL_SCANCODE_Z,
/*0x2d*/ SDL_SCANCODE_X,
/*0x2e*/ SDL_SCANCODE_C,
/*0x2f*/ SDL_SCANCODE_V,
/*0x30*/ SDL_SCANCODE_B,
/*0x31*/ SDL_SCANCODE_N,
/*0x32*/ SDL_SCANCODE_M,
/*0x33*/ SDL_SCANCODE_COMMA,
/*0x34*/ SDL_SCANCODE_PERIOD,
/*0x35*/ SDL_SCANCODE_SLASH,
/*0x36*/ SDL_SCANCODE_RSHIFT,
/*0x37*/ SDL_SCANCODE_KP_MULTIPLY,
/*0x38*/ SDL_SCANCODE_LALT,
/*0x39*/ SDL_SCANCODE_SPACE,
/*0x3a*/ SDL_SCANCODE_CAPSLOCK,
/*0x3b*/ SDL_SCANCODE_F1,
/*0x3c*/ SDL_SCANCODE_F2,
/*0x3d*/ SDL_SCANCODE_F3,
/*0x3e*/ SDL_SCANCODE_F4,
/*0x3f*/ SDL_SCANCODE_F5,
/*0x40*/ SDL_SCANCODE_F6,
/*0x41*/ SDL_SCANCODE_F7,
/*0x42*/ SDL_SCANCODE_F8,
/*0x43*/ SDL_SCANCODE_F9,
/*0x44*/ SDL_SCANCODE_F10,
/*0x45*/ SDL_SCANCODE_NUMLOCKCLEAR,
/*0x46*/ SDL_SCANCODE_SCROLLLOCK,
/*0x47*/ SDL_SCANCODE_KP_7,
/*0x48*/ SDL_SCANCODE_KP_8,
/*0x49*/ SDL_SCANCODE_KP_9,
/*0x4a*/ SDL_SCANCODE_KP_MINUS,
/*0x4b*/ SDL_SCANCODE_KP_4,
/*0x4c*/ SDL_SCANCODE_KP_5,
/*0x4d*/ SDL_SCANCODE_KP_6,
/*0x4e*/ SDL_SCANCODE_KP_PLUS,
/*0x4f*/ SDL_SCANCODE_KP_1,
/*0x50*/ SDL_SCANCODE_KP_2,
/*0x51*/ SDL_SCANCODE_KP_3,
/*0x52*/ SDL_SCANCODE_KP_0,
/*0x53*/ SDL_SCANCODE_KP_PERIOD,
/*0x54*/ SDL_SCANCODE_UNKNOWN,
/*0x55*/ SDL_SCANCODE_UNKNOWN,
/*0x56*/ SDL_SCANCODE_NONUSBACKSLASH,
/*0x57*/ SDL_SCANCODE_F11,
/*0x58*/ SDL_SCANCODE_F12,
/*0x59*/ SDL_SCANCODE_KP_EQUALS,
/*0x5a*/ SDL_SCANCODE_UNKNOWN,
/*0x5b*/ SDL_SCANCODE_UNKNOWN,
/*0x5c*/ SDL_SCANCODE_INTERNATIONAL6,
/*0x5d*/ SDL_SCANCODE_UNKNOWN,
/*0x5e*/ SDL_SCANCODE_UNKNOWN,
/*0x5f*/ SDL_SCANCODE_UNKNOWN,
/*0x60*/ SDL_SCANCODE_UNKNOWN,
/*0x61*/ SDL_SCANCODE_UNKNOWN,
/*0x62*/ SDL_SCANCODE_UNKNOWN,
/*0x63*/ SDL_SCANCODE_UNKNOWN,
/*0x64*/ SDL_SCANCODE_F13,
/*0x65*/ SDL_SCANCODE_F14,
/*0x66*/ SDL_SCANCODE_F15,
/*0x67*/ SDL_SCANCODE_F16,
/*0x68*/ SDL_SCANCODE_F17,
/*0x69*/ SDL_SCANCODE_F18,
/*0x6a*/ SDL_SCANCODE_F19,
/*0x6b*/ SDL_SCANCODE_F20,
/*0x6c*/ SDL_SCANCODE_F21,
/*0x6d*/ SDL_SCANCODE_F22,
/*0x6e*/ SDL_SCANCODE_F23,
/*0x6f*/ SDL_SCANCODE_UNKNOWN,
/*0x70*/ SDL_SCANCODE_INTERNATIONAL2,
/*0x71*/ SDL_SCANCODE_LANG2,
/*0x72*/ SDL_SCANCODE_LANG1,
/*0x73*/ SDL_SCANCODE_INTERNATIONAL1,
/*0x74*/ SDL_SCANCODE_UNKNOWN,
/*0x75*/ SDL_SCANCODE_UNKNOWN,
/*0x76*/ SDL_SCANCODE_F24,
/*0x77*/ SDL_SCANCODE_LANG4,
/*0x78*/ SDL_SCANCODE_LANG3,
/*0x79*/ SDL_SCANCODE_INTERNATIONAL4,
/*0x7a*/ SDL_SCANCODE_UNKNOWN,
/*0x7b*/ SDL_SCANCODE_INTERNATIONAL5,
/*0x7c*/ SDL_SCANCODE_UNKNOWN,
/*0x7d*/ SDL_SCANCODE_INTERNATIONAL3,
/*0x7e*/ SDL_SCANCODE_KP_COMMA,
/*0x7f*/ SDL_SCANCODE_UNKNOWN,
/*0xe000*/ SDL_SCANCODE_UNKNOWN,
/*0xe001*/ SDL_SCANCODE_UNKNOWN,
/*0xe002*/ SDL_SCANCODE_UNKNOWN,
/*0xe003*/ SDL_SCANCODE_UNKNOWN,
/*0xe004*/ SDL_SCANCODE_UNKNOWN,
/*0xe005*/ SDL_SCANCODE_UNKNOWN,
/*0xe006*/ SDL_SCANCODE_UNKNOWN,
/*0xe007*/ SDL_SCANCODE_UNKNOWN,
/*0xe008*/ SDL_SCANCODE_UNKNOWN,
/*0xe009*/ SDL_SCANCODE_UNKNOWN,
/*0xe00a*/ SDL_SCANCODE_PASTE,
/*0xe00b*/ SDL_SCANCODE_UNKNOWN,
/*0xe00c*/ SDL_SCANCODE_UNKNOWN,
/*0xe00d*/ SDL_SCANCODE_UNKNOWN,
/*0xe00e*/ SDL_SCANCODE_UNKNOWN,
/*0xe00f*/ SDL_SCANCODE_UNKNOWN,
/*0xe010*/ SDL_SCANCODE_MEDIA_PREVIOUS_TRACK,
/*0xe011*/ SDL_SCANCODE_UNKNOWN,
/*0xe012*/ SDL_SCANCODE_UNKNOWN,
/*0xe013*/ SDL_SCANCODE_UNKNOWN,
/*0xe014*/ SDL_SCANCODE_UNKNOWN,
/*0xe015*/ SDL_SCANCODE_UNKNOWN,
/*0xe016*/ SDL_SCANCODE_UNKNOWN,
/*0xe017*/ SDL_SCANCODE_CUT,
/*0xe018*/ SDL_SCANCODE_COPY,
/*0xe019*/ SDL_SCANCODE_MEDIA_NEXT_TRACK,
/*0xe01a*/ SDL_SCANCODE_UNKNOWN,
/*0xe01b*/ SDL_SCANCODE_UNKNOWN,
/*0xe01c*/ SDL_SCANCODE_KP_ENTER,
/*0xe01d*/ SDL_SCANCODE_RCTRL,
/*0xe01e*/ SDL_SCANCODE_UNKNOWN,
/*0xe01f*/ SDL_SCANCODE_UNKNOWN,
/*0xe020*/ SDL_SCANCODE_MUTE,
/*0xe021*/ SDL_SCANCODE_UNKNOWN, // LaunchApp2
/*0xe022*/ SDL_SCANCODE_MEDIA_PLAY_PAUSE,
/*0xe023*/ SDL_SCANCODE_UNKNOWN,
/*0xe024*/ SDL_SCANCODE_MEDIA_STOP,
/*0xe025*/ SDL_SCANCODE_UNKNOWN,
/*0xe026*/ SDL_SCANCODE_UNKNOWN,
/*0xe027*/ SDL_SCANCODE_UNKNOWN,
/*0xe028*/ SDL_SCANCODE_UNKNOWN,
/*0xe029*/ SDL_SCANCODE_UNKNOWN,
/*0xe02a*/ SDL_SCANCODE_UNKNOWN,
/*0xe02b*/ SDL_SCANCODE_UNKNOWN,
/*0xe02c*/ SDL_SCANCODE_MEDIA_EJECT,
/*0xe02d*/ SDL_SCANCODE_UNKNOWN,
/*0xe02e*/ SDL_SCANCODE_VOLUMEDOWN,
/*0xe02f*/ SDL_SCANCODE_UNKNOWN,
/*0xe030*/ SDL_SCANCODE_VOLUMEUP,
/*0xe031*/ SDL_SCANCODE_UNKNOWN,
/*0xe032*/ SDL_SCANCODE_AC_HOME,
/*0xe033*/ SDL_SCANCODE_UNKNOWN,
/*0xe034*/ SDL_SCANCODE_UNKNOWN,
/*0xe035*/ SDL_SCANCODE_KP_DIVIDE,
/*0xe036*/ SDL_SCANCODE_UNKNOWN,
/*0xe037*/ SDL_SCANCODE_PRINTSCREEN,
/*0xe038*/ SDL_SCANCODE_RALT,
/*0xe039*/ SDL_SCANCODE_UNKNOWN,
/*0xe03a*/ SDL_SCANCODE_UNKNOWN,
/*0xe03b*/ SDL_SCANCODE_HELP,
/*0xe03c*/ SDL_SCANCODE_UNKNOWN,
/*0xe03d*/ SDL_SCANCODE_UNKNOWN,
/*0xe03e*/ SDL_SCANCODE_UNKNOWN,
/*0xe03f*/ SDL_SCANCODE_UNKNOWN,
/*0xe040*/ SDL_SCANCODE_UNKNOWN,
/*0xe041*/ SDL_SCANCODE_UNKNOWN,
/*0xe042*/ SDL_SCANCODE_UNKNOWN,
/*0xe043*/ SDL_SCANCODE_UNKNOWN,
/*0xe044*/ SDL_SCANCODE_UNKNOWN,
/*0xe045*/ SDL_SCANCODE_NUMLOCKCLEAR,
/*0xe046*/ SDL_SCANCODE_PAUSE,
/*0xe047*/ SDL_SCANCODE_HOME,
/*0xe048*/ SDL_SCANCODE_UP,
/*0xe049*/ SDL_SCANCODE_PAGEUP,
/*0xe04a*/ SDL_SCANCODE_UNKNOWN,
/*0xe04b*/ SDL_SCANCODE_LEFT,
/*0xe04c*/ SDL_SCANCODE_UNKNOWN,
/*0xe04d*/ SDL_SCANCODE_RIGHT,
/*0xe04e*/ SDL_SCANCODE_UNKNOWN,
/*0xe04f*/ SDL_SCANCODE_END,
/*0xe050*/ SDL_SCANCODE_DOWN,
/*0xe051*/ SDL_SCANCODE_PAGEDOWN,
/*0xe052*/ SDL_SCANCODE_INSERT,
/*0xe053*/ SDL_SCANCODE_DELETE,
/*0xe054*/ SDL_SCANCODE_UNKNOWN,
/*0xe055*/ SDL_SCANCODE_UNKNOWN,
/*0xe056*/ SDL_SCANCODE_UNKNOWN,
/*0xe057*/ SDL_SCANCODE_UNKNOWN,
/*0xe058*/ SDL_SCANCODE_UNKNOWN,
/*0xe059*/ SDL_SCANCODE_UNKNOWN,
/*0xe05a*/ SDL_SCANCODE_UNKNOWN,
/*0xe05b*/ SDL_SCANCODE_LGUI,
/*0xe05c*/ SDL_SCANCODE_RGUI,
/*0xe05d*/ SDL_SCANCODE_APPLICATION,
/*0xe05e*/ SDL_SCANCODE_POWER,
/*0xe05f*/ SDL_SCANCODE_SLEEP,
/*0xe060*/ SDL_SCANCODE_UNKNOWN,
/*0xe061*/ SDL_SCANCODE_UNKNOWN,
/*0xe062*/ SDL_SCANCODE_UNKNOWN,
/*0xe063*/ SDL_SCANCODE_UNKNOWN,
/*0xe064*/ SDL_SCANCODE_UNKNOWN,
/*0xe065*/ SDL_SCANCODE_AC_SEARCH,
/*0xe066*/ SDL_SCANCODE_AC_BOOKMARKS,
/*0xe067*/ SDL_SCANCODE_AC_REFRESH,
/*0xe068*/ SDL_SCANCODE_AC_STOP,
/*0xe069*/ SDL_SCANCODE_AC_FORWARD,
/*0xe06a*/ SDL_SCANCODE_AC_BACK,
/*0xe06b*/ SDL_SCANCODE_UNKNOWN, // LaunchApp1
/*0xe06c*/ SDL_SCANCODE_UNKNOWN, // LaunchMail
/*0xe06d*/ SDL_SCANCODE_MEDIA_SELECT,
/*0xe06e*/ SDL_SCANCODE_UNKNOWN,
/*0xe06f*/ SDL_SCANCODE_UNKNOWN,
/*0xe070*/ SDL_SCANCODE_UNKNOWN,
/*0xe071*/ SDL_SCANCODE_UNKNOWN,
/*0xe072*/ SDL_SCANCODE_UNKNOWN,
/*0xe073*/ SDL_SCANCODE_UNKNOWN,
/*0xe074*/ SDL_SCANCODE_UNKNOWN,
/*0xe075*/ SDL_SCANCODE_UNKNOWN,
/*0xe076*/ SDL_SCANCODE_UNKNOWN,
/*0xe077*/ SDL_SCANCODE_UNKNOWN,
/*0xe078*/ SDL_SCANCODE_UNKNOWN,
/*0xe079*/ SDL_SCANCODE_UNKNOWN,
/*0xe07a*/ SDL_SCANCODE_UNKNOWN,
/*0xe07b*/ SDL_SCANCODE_UNKNOWN,
/*0xe07c*/ SDL_SCANCODE_UNKNOWN,
/*0xe07d*/ SDL_SCANCODE_UNKNOWN,
/*0xe07e*/ SDL_SCANCODE_UNKNOWN,
/*0xe07f*/ SDL_SCANCODE_UNKNOWN
};
/* *INDENT-ON* */ // clang-format on