Subversion Repositories Games.Carmageddon

Rev

Rev 18 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Maps SDL2 scancodes to directinput keynums/scancodes.
  3.  * Useful if you're porting a game that uses dinput scancodes internally
  4.  * (for key bindings etc) or any other lib (like CEGUI) that uses them.
  5.  *
  6.  * (C) 2015 Daniel Gibson
  7.  *
  8.  * Homepage: https://github.com/DanielGibson/Snippets/
  9.  *
  10.  * License:
  11.  *   This software is dual-licensed to the public domain and under the following
  12.  *   license: you are granted a perpetual, irrevocable license to copy, modify,
  13.  *   publish, and distribute this file as you see fit.
  14.  *   No warranty implied; use at your own risk.
  15.  *
  16.  * So you can do whatever you want with this code, including copying it
  17.  * (or parts of it) into your own source.
  18.  * No need to mention me or this "license" in your code or docs, even though
  19.  * it would be appreciated, of course.
  20.  *
  21.  */
  22.  
  23. #include <glad/glad.h>
  24.  
  25. #include <SDL.h>
  26.  
  27. #if 0 // Usage Example:
  28. #include "sdl2_scancode_to_dinput.h"
  29.  static int SDLScanCodeToKeyNum(SDL_Scancode sc)
  30.  {
  31.    int idx = (int)sc;
  32.    assert(idx >= 0 && idx < SDL_NUM_SCANCODES);
  33.    return scanCodeToKeyNum[idx];
  34.  }
  35.  
  36.  static SDL_Scancode KeyNumToSDLScanCode( int keyNum )
  37.  {
  38.    if( keyNum >= 0 && keyNum < 0xEF )
  39.    {
  40.      for(int i = 0; i < SDL_NUM_SCANCODES; ++i)
  41.      {
  42.        if(scanCodeToKeyNum[i] == keyNum) return (SDL_Scancode)i;
  43.      }
  44.    }
  45.    return SDL_SCANCODE_UNKNOWN;
  46.  }
  47. #endif // 0
  48.  
  49. #ifndef _SDL2_SCANCODE_TO_DINPUT_H_
  50. #define _SDL2_SCANCODE_TO_DINPUT_H_
  51.  
  52. // TODO: map the following keys, if possible:
  53. // #define DIK_UNDERLINE       0x93    /*                     (NEC PC98) */
  54. // #define DIK_KANJI           0x94    /* (Japanese keyboard)            */
  55. // #define DIK_AX              0x96    /*                     (Japan AX) */
  56. // #define DIK_UNLABELED       0x97    /*                        (J3100) */
  57. //
  58. // #define DIK_WAKE            0xE3    /* System Wake */
  59. //
  60. // (#define DIK_ABNT_C2         0x7E    /* Numpad . on Brazilian keyboard */ - system should map this to KP_COMMA or something,
  61. //                                         according to USB doc, so probably it doesn't need mapping here)
  62.  
  63. // maps SDL2 scancodes to directinput keynums/scancodes - dinput_key = sdlScanCodeToDirectInputKeyNum[(int)your_sdl2_scancode];
  64. static int sdlScanCodeToDirectInputKeyNum[SDL_NUM_SCANCODES] = {
  65.     0x0,  //    SDL_SCANCODE_UNKNOWN = 0, => 0 should also work for dinput codes as "not assigned/unknown"
  66.     0x0,  //    // 1 (unused)
  67.     0x0,  //    // 2 (unused)
  68.     0x0,  //    // 3 (unused)
  69.     0x1E, //    SDL_SCANCODE_A = 4, - DIK_A
  70.     0x30, //    SDL_SCANCODE_B = 5, - DIK_B
  71.     0x2E, //    SDL_SCANCODE_C = 6, - DIK_C
  72.     0x20, //    SDL_SCANCODE_D = 7, - DIK_D
  73.     0x12, //    SDL_SCANCODE_E = 8, - DIK_E
  74.     0x21, //    SDL_SCANCODE_F = 9, - DIK_F
  75.     0x22, //    SDL_SCANCODE_G = 10, - DIK_G
  76.     0x23, //    SDL_SCANCODE_H = 11, - DIK_H
  77.     0x17, //    SDL_SCANCODE_I = 12, - DIK_I
  78.     0x24, //    SDL_SCANCODE_J = 13, - DIK_J
  79.     0x25, //    SDL_SCANCODE_K = 14, - DIK_K
  80.     0x26, //    SDL_SCANCODE_L = 15, - DIK_L
  81.     0x32, //    SDL_SCANCODE_M = 16, - DIK_M
  82.     0x31, //    SDL_SCANCODE_N = 17, - DIK_N
  83.     0x18, //    SDL_SCANCODE_O = 18, - DIK_O
  84.     0x19, //    SDL_SCANCODE_P = 19, - DIK_P
  85.     0x10, //    SDL_SCANCODE_Q = 20, - DIK_Q
  86.     0x13, //    SDL_SCANCODE_R = 21, - DIK_R
  87.     0x1F, //    SDL_SCANCODE_S = 22, - DIK_S
  88.     0x14, //    SDL_SCANCODE_T = 23, - DIK_T
  89.     0x16, //    SDL_SCANCODE_U = 24, - DIK_U
  90.     0x2F, //    SDL_SCANCODE_V = 25, - DIK_V
  91.     0x11, //    SDL_SCANCODE_W = 26, - DIK_W
  92.     0x2D, //    SDL_SCANCODE_X = 27, - DIK_X
  93.     0x15, //    SDL_SCANCODE_Y = 28, - DIK_Y
  94.     0x2C, //    SDL_SCANCODE_Z = 29, - DIK_Z
  95.  
  96.     0x02, //    SDL_SCANCODE_1 = 30, - DIK_1
  97.     0x03, //    SDL_SCANCODE_2 = 31, - DIK_2
  98.     0x04, //    SDL_SCANCODE_3 = 32, - DIK_3
  99.     0x05, //    SDL_SCANCODE_4 = 33, - DIK_4
  100.     0x06, //    SDL_SCANCODE_5 = 34, - DIK_5
  101.     0x07, //    SDL_SCANCODE_6 = 35, - DIK_6
  102.     0x08, //    SDL_SCANCODE_7 = 36, - DIK_7
  103.     0x09, //    SDL_SCANCODE_8 = 37, - DIK_8
  104.     0x0A, //    SDL_SCANCODE_9 = 38, - DIK_9
  105.     0x0B, //    SDL_SCANCODE_0 = 39, - DIK_0
  106.  
  107.     0x1C, //    SDL_SCANCODE_RETURN = 40, - DIK_RETURN
  108.     0x01, //    SDL_SCANCODE_ESCAPE = 41, - DIK_ESCAPE
  109.     0x0E, //    SDL_SCANCODE_BACKSPACE = 42, - DIK_BACK
  110.     0x0F, //    SDL_SCANCODE_TAB = 43, - DIK_TAB
  111.     0x39, //    SDL_SCANCODE_SPACE = 44, - DIK_SPACE
  112.  
  113.     0x0C, //    SDL_SCANCODE_MINUS = 45, - DIK_MINUS
  114.     0x0D, //    SDL_SCANCODE_EQUALS = 46, - DIK_EQUALS
  115.     0x1A, //    SDL_SCANCODE_LEFTBRACKET = 47, - DIK_LBRACKET
  116.     0x1B, //    SDL_SCANCODE_RIGHTBRACKET = 48, - DIK_RBRACKET
  117.     0x2B, //    SDL_SCANCODE_BACKSLASH = 49, // next to enter, US: [\|] DE: [#'] UK: [#~] - DIK_BACKSLASH
  118.     0x2B, //    SDL_SCANCODE_NONUSHASH = 50, // same key as before actually on some layouts, systems should map this to SDL_SCANCODE_BACKSLASH - DIK_BACKSLASH
  119.     0x27, //    SDL_SCANCODE_SEMICOLON = 51, - DIK_SEMICOLON
  120.     0x28, //    SDL_SCANCODE_APOSTROPHE = 52, - DIK_APOSTROPHE
  121.     0x29, //    SDL_SCANCODE_GRAVE = 53, // "quake/doom3 console key" - DIK_GRAVE
  122.     0x33, //    SDL_SCANCODE_COMMA = 54, - DIK_COMMA
  123.     0x34, //    SDL_SCANCODE_PERIOD = 55, - DIK_PERIOD
  124.     0x35, //    SDL_SCANCODE_SLASH = 56, - DIK_SLASH
  125.  
  126.     0x3A, //    SDL_SCANCODE_CAPSLOCK = 57, - DIK_CAPITAL
  127.  
  128.     0x3B, //    SDL_SCANCODE_F1 = 58,  - DIK_F1
  129.     0x3C, //    SDL_SCANCODE_F2 = 59,  - DIK_F2
  130.     0x3D, //    SDL_SCANCODE_F3 = 60,  - DIK_F3
  131.     0x3E, //    SDL_SCANCODE_F4 = 61,  - DIK_F4
  132.     0x3F, //    SDL_SCANCODE_F5 = 62,  - DIK_F5
  133.     0x40, //    SDL_SCANCODE_F6 = 63,  - DIK_F6
  134.     0x41, //    SDL_SCANCODE_F7 = 64,  - DIK_F7
  135.     0x42, //    SDL_SCANCODE_F8 = 65,  - DIK_F8
  136.     0x43, //    SDL_SCANCODE_F9 = 66,  - DIK_F9
  137.     0x44, //    SDL_SCANCODE_F10 = 67, - DIK_F10
  138.     0x57, //    SDL_SCANCODE_F11 = 68, - DIK_F11
  139.     0x58, //    SDL_SCANCODE_F12 = 69, - DIK_F12
  140.  
  141.     0xB7, //    SDL_SCANCODE_PRINTSCREEN = 70, // - DIK_SYSRQ; SDL_SCANCODE_SYSREQ also maps to this!
  142.  
  143.     0x46, //    SDL_SCANCODE_SCROLLLOCK = 71, - DIK_SCROLL
  144.     0xC5, //    SDL_SCANCODE_PAUSE = 72, - DIK_PAUSE
  145.     0xD2, //    SDL_SCANCODE_INSERT = 73, // insert on PC, help on some Mac keyboards (but does send code 73, not 117) - DIK_INSERT
  146.     0xC7, //    SDL_SCANCODE_HOME = 74, - DIK_HOME
  147.     0xC9, //    SDL_SCANCODE_PAGEUP = 75, - DIK_PRIOR
  148.     0xD3, //    SDL_SCANCODE_DELETE = 76, - DIK_DELETE
  149.     0xCF, //    SDL_SCANCODE_END = 77, - DIK_END
  150.     0xD1, //    SDL_SCANCODE_PAGEDOWN = 78, - DIK_NEXT
  151.     0xCD, //    SDL_SCANCODE_RIGHT = 79, - DIK_RIGHT
  152.     0xCB, //    SDL_SCANCODE_LEFT = 80, - DIK_LEFT
  153.     0xD0, //    SDL_SCANCODE_DOWN = 81, - DIK_DOWN
  154.     0xC8, //    SDL_SCANCODE_UP = 82, - DIK_UP
  155.  
  156.     0x45, //    SDL_SCANCODE_NUMLOCKCLEAR = 83, // num lock on PC, clear on Mac keyboards - DIK_NUMLOCK
  157.  
  158.     0xB5, //    SDL_SCANCODE_KP_DIVIDE = 84, - DIK_DIVIDE
  159.     0x37, //    SDL_SCANCODE_KP_MULTIPLY = 85, - DIK_MULTIPLY
  160.     0x4A, //    SDL_SCANCODE_KP_MINUS = 86, - DIK_SUBTRACT
  161.     0x4E, //    SDL_SCANCODE_KP_PLUS = 87, - DIK_ADD
  162.     0x9C, //    SDL_SCANCODE_KP_ENTER = 88, - DIK_NUMPADENTER
  163.     0x4F, //    SDL_SCANCODE_KP_1 = 89, - DIK_NUMPAD1
  164.     0x50, //    SDL_SCANCODE_KP_2 = 90, - DIK_NUMPAD2
  165.     0x51, //    SDL_SCANCODE_KP_3 = 91, - DIK_NUMPAD3
  166.     0x4B, //    SDL_SCANCODE_KP_4 = 92, - DIK_NUMPAD4
  167.     0x4C, //    SDL_SCANCODE_KP_5 = 93, - DIK_NUMPAD5
  168.     0x4D, //    SDL_SCANCODE_KP_6 = 94, - DIK_NUMPAD6
  169.     0x47, //    SDL_SCANCODE_KP_7 = 95, - DIK_NUMPAD7
  170.     0x48, //    SDL_SCANCODE_KP_8 = 96, - DIK_NUMPAD8
  171.     0x49, //    SDL_SCANCODE_KP_9 = 97, - DIK_NUMPAD9
  172.     0x52, //    SDL_SCANCODE_KP_0 = 98, - DIK_NUMPAD0
  173.     0x53, //    SDL_SCANCODE_KP_PERIOD = 99, - DIK_DECIMAL
  174.  
  175.     0x56, //    SDL_SCANCODE_NONUSBACKSLASH = 100, // [<>|] on german keyboard, next to left shift - DIK_OEM_102
  176.     0xDD, //    SDL_SCANCODE_APPLICATION = 101, // windows contextual menu, compose - DIK_APPS
  177.     0xDE, //    SDL_SCANCODE_POWER = 102, // should be a status flag, but some mac keyboards have a power key - DIK_POWER
  178.  
  179.     0x8D, //    SDL_SCANCODE_KP_EQUALS = 103, - DIK_NUMPADEQUALS
  180.     0x64, //    SDL_SCANCODE_F13 = 104, - DIK_F13
  181.     0x65, //    SDL_SCANCODE_F14 = 105, - DIK_F14
  182.     0x66, //    SDL_SCANCODE_F15 = 106, - DIK_F15
  183.     0x67, //    SDL_SCANCODE_F16 = 107, // TODO: F16 and up don't have DIK_ constants! is this right?
  184.     0x68, //    SDL_SCANCODE_F17 = 108, //        (at least 0x67-0x6F have no DIK_constants at all)
  185.     0x69, //    SDL_SCANCODE_F18 = 109,
  186.     0x6A, //    SDL_SCANCODE_F19 = 110,
  187.     0x6B, //    SDL_SCANCODE_F20 = 111,
  188.     0x6C, //    SDL_SCANCODE_F21 = 112,
  189.     0x6D, //    SDL_SCANCODE_F22 = 113,
  190.     0x6E, //    SDL_SCANCODE_F23 = 114,
  191.     0x6F, //    SDL_SCANCODE_F24 = 115,
  192.  
  193.     0x0, //     SDL_SCANCODE_EXECUTE = 116,
  194.     0x0, //     SDL_SCANCODE_HELP = 117,
  195.     0x0, //     SDL_SCANCODE_MENU = 118,
  196.     0x0, //     SDL_SCANCODE_SELECT = 119,
  197.  
  198.     0x95, //    SDL_SCANCODE_STOP = 120, - DIK_STOP
  199.  
  200.     0x0, //     SDL_SCANCODE_AGAIN = 121,  // redo
  201.     0x0, //     SDL_SCANCODE_UNDO = 122,
  202.     0x0, //     SDL_SCANCODE_CUT = 123,
  203.     0x0, //     SDL_SCANCODE_COPY = 124,
  204.     0x0, //     SDL_SCANCODE_PASTE = 125,
  205.     0x0, //     SDL_SCANCODE_FIND = 126,
  206.     0x0, //     SDL_SCANCODE_MUTE = 127,
  207.  
  208.     0xB0, //    SDL_SCANCODE_VOLUMEUP = 128, - DIK_VOLUMEUP
  209.     0xAE, //    SDL_SCANCODE_VOLUMEDOWN = 129, - DIK_VOLUMEDOWN
  210.  
  211.     //  /* not sure whether there's a reason to enable these */
  212.     0x0, //     /*     SDL_SCANCODE_LOCKINGCAPSLOCK = 130,  */
  213.     0x0, //     /*     SDL_SCANCODE_LOCKINGNUMLOCK = 131, */
  214.     0x0, //     /*     SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */
  215.  
  216.     0xB3, //    SDL_SCANCODE_KP_COMMA = 133, - DIK_NUMPADCOMMA
  217.  
  218.     0x0, //     SDL_SCANCODE_KP_EQUALSAS400 = 134,
  219.  
  220.     0x73, //    SDL_SCANCODE_INTERNATIONAL1 = 135, // this is really brazilian / and ? - DIK_ABNT_C1
  221.     0x0,  //    SDL_SCANCODE_INTERNATIONAL2 = 136, // TODO: Hut1_12v2.pdf page 60, footnote 16
  222.     0x7D, //    SDL_SCANCODE_INTERNATIONAL3 = 137, - DIK_YEN
  223.     0x79, //    SDL_SCANCODE_INTERNATIONAL4 = 138, // Japan: XFER/"convert kana -> kanji", right of space - DIK_CONVERT
  224.     0x7B, //    SDL_SCANCODE_INTERNATIONAL5 = 139, // Japan: NFER/"don't convert kana -> kanji", left of space - DIK_NOCONVERT
  225.     0x0,  //    SDL_SCANCODE_INTERNATIONAL6 = 140, // TODO: Hut1_12v2.pdf page 60, footnote 20
  226.     0x0,  //    SDL_SCANCODE_INTERNATIONAL7 = 141, // Toggle Double-Byte/Single-Byte mode.
  227.     0x0,  //    SDL_SCANCODE_INTERNATIONAL8 = 142, // Undefined, available for other Front End Language Processors
  228.     0x0,  //    SDL_SCANCODE_INTERNATIONAL9 = 143, // Undefined, available for other Front End Language Processors
  229.     0x0,  //    SDL_SCANCODE_LANG1 = 144, // Hangul/English toggle (Korea)
  230.     0x0,  //    SDL_SCANCODE_LANG2 = 145, // Hanja conversion (Korea)
  231.     0x70, //    SDL_SCANCODE_LANG3 = 146, // Katakana (Japan) - DIK_KANA
  232.     0x0,  //    SDL_SCANCODE_LANG4 = 147, // Hiragana (Japan)
  233.     0x0,  //    SDL_SCANCODE_LANG5 = 148, // Zenkaku/Hankaku (Japan)
  234.     0x0,  //    SDL_SCANCODE_LANG6 = 149, // reserved
  235.     0x0,  //    SDL_SCANCODE_LANG7 = 150, // reserved
  236.     0x0,  //    SDL_SCANCODE_LANG8 = 151, // reserved
  237.     0x0,  //    SDL_SCANCODE_LANG9 = 152, // reserved
  238.  
  239.     0x0, //     SDL_SCANCODE_ALTERASE = 153, // Erase-Eaze
  240.  
  241.     0xB7, //    SDL_SCANCODE_SYSREQ = 154, - DIK_SYSRQ; SDL_SCANCODE_PRINTSCREEN also maps to this!
  242.  
  243.     0x0, //     SDL_SCANCODE_CANCEL = 155,
  244.     0x0, //     SDL_SCANCODE_CLEAR = 156,
  245.     0x0, //     SDL_SCANCODE_PRIOR = 157,
  246.     0x0, //     SDL_SCANCODE_RETURN2 = 158,
  247.     0x0, //     SDL_SCANCODE_SEPARATOR = 159,
  248.     0x0, //     SDL_SCANCODE_OUT = 160,
  249.     0x0, //     SDL_SCANCODE_OPER = 161,
  250.     0x0, //     SDL_SCANCODE_CLEARAGAIN = 162,
  251.     0x0, //     SDL_SCANCODE_CRSEL = 163,
  252.     0x0, //     SDL_SCANCODE_EXSEL = 164,
  253.  
  254.     0x0, // 165 (unused)
  255.     0x0, // 166 (unused)
  256.     0x0, // 167 (unused)
  257.     0x0, // 168 (unused)
  258.     0x0, // 169 (unused)
  259.     0x0, // 170 (unused)
  260.     0x0, // 171 (unused)
  261.     0x0, // 172 (unused)
  262.     0x0, // 173 (unused)
  263.     0x0, // 174 (unused)
  264.     0x0, // 175 (unused)
  265.  
  266.     0x0, //     SDL_SCANCODE_KP_00 = 176,
  267.     0x0, //     SDL_SCANCODE_KP_000 = 177,
  268.     0x0, //     SDL_SCANCODE_THOUSANDSSEPARATOR = 178,
  269.     0x0, //     SDL_SCANCODE_DECIMALSEPARATOR = 179,
  270.     0x0, //     SDL_SCANCODE_CURRENCYUNIT = 180,
  271.     0x0, //     SDL_SCANCODE_CURRENCYSUBUNIT = 181,
  272.     0x0, //     SDL_SCANCODE_KP_LEFTPAREN = 182,
  273.     0x0, //     SDL_SCANCODE_KP_RIGHTPAREN = 183,
  274.     0x0, //     SDL_SCANCODE_KP_LEFTBRACE = 184,
  275.     0x0, //     SDL_SCANCODE_KP_RIGHTBRACE = 185,
  276.     0x0, //     SDL_SCANCODE_KP_TAB = 186,
  277.     0x0, //     SDL_SCANCODE_KP_BACKSPACE = 187,
  278.     0x0, //     SDL_SCANCODE_KP_A = 188,
  279.     0x0, //     SDL_SCANCODE_KP_B = 189,
  280.     0x0, //     SDL_SCANCODE_KP_C = 190,
  281.     0x0, //     SDL_SCANCODE_KP_D = 191,
  282.     0x0, //     SDL_SCANCODE_KP_E = 192,
  283.     0x0, //     SDL_SCANCODE_KP_F = 193,
  284.     0x0, //     SDL_SCANCODE_KP_XOR = 194,
  285.     0x0, //     SDL_SCANCODE_KP_POWER = 195,
  286.     0x0, //     SDL_SCANCODE_KP_PERCENT = 196,
  287.     0x0, //     SDL_SCANCODE_KP_LESS = 197,
  288.     0x0, //     SDL_SCANCODE_KP_GREATER = 198,
  289.     0x0, //     SDL_SCANCODE_KP_AMPERSAND = 199,
  290.     0x0, //     SDL_SCANCODE_KP_DBLAMPERSAND = 200,
  291.     0x0, //     SDL_SCANCODE_KP_VERTICALBAR = 201,
  292.     0x0, //     SDL_SCANCODE_KP_DBLVERTICALBAR = 202,
  293.  
  294.     0x92, //    SDL_SCANCODE_KP_COLON = 203, - DIK_COLON
  295.  
  296.     0x0, //     SDL_SCANCODE_KP_HASH = 204,
  297.     0x0, //     SDL_SCANCODE_KP_SPACE = 205,
  298.  
  299.     0x91, //    SDL_SCANCODE_KP_AT = 206, - DIK_AT
  300.  
  301.     0x0, //     SDL_SCANCODE_KP_EXCLAM = 207,
  302.     0x0, //     SDL_SCANCODE_KP_MEMSTORE = 208,
  303.     0x0, //     SDL_SCANCODE_KP_MEMRECALL = 209,
  304.     0x0, //     SDL_SCANCODE_KP_MEMCLEAR = 210,
  305.     0x0, //     SDL_SCANCODE_KP_MEMADD = 211,
  306.     0x0, //     SDL_SCANCODE_KP_MEMSUBTRACT = 212,
  307.     0x0, //     SDL_SCANCODE_KP_MEMMULTIPLY = 213,
  308.     0x0, //     SDL_SCANCODE_KP_MEMDIVIDE = 214,
  309.     0x0, //     SDL_SCANCODE_KP_PLUSMINUS = 215,
  310.     0x0, //     SDL_SCANCODE_KP_CLEAR = 216,
  311.     0x0, //     SDL_SCANCODE_KP_CLEARENTRY = 217,
  312.     0x0, //     SDL_SCANCODE_KP_BINARY = 218,
  313.     0x0, //     SDL_SCANCODE_KP_OCTAL = 219,
  314.     0x0, //     SDL_SCANCODE_KP_DECIMAL = 220,
  315.     0x0, //     SDL_SCANCODE_KP_HEXADECIMAL = 221,
  316.  
  317.     0x0, // 222 (unused)
  318.     0x0, // 223 (unused)
  319.  
  320.     0x1D, //    SDL_SCANCODE_LCTRL = 224, - DIK_LCONTROL
  321.     0x2A, //    SDL_SCANCODE_LSHIFT = 225, - DIK_LSHIFT
  322.     0x38, //    SDL_SCANCODE_LALT = 226, // left Alt, option - DIK_LMENU
  323.     0xDB, //    SDL_SCANCODE_LGUI = 227, // left windows, command (apple), meta - DIK_LWIN
  324.     0x9D, //    SDL_SCANCODE_RCTRL = 228, - DIK_RCONTROL
  325.     0x36, //    SDL_SCANCODE_RSHIFT = 229, - DIK_RSHIFT
  326.     0xB8, //    SDL_SCANCODE_RALT = 230, // right Alt/AltGr, option - DIK_RMENU, also used for SDL_SCANCODE_MODE!
  327.     0xDC, //    SDL_SCANCODE_RGUI = 231, // left windows, command (apple), meta - DIK_RWIN
  328.  
  329.     // 232 - 256 unused
  330.     0, 0, 0, 0, 0, 0, 0, 0, 0,    // 232 - 240 unused
  331.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 241-250 unused
  332.     0, 0, 0, 0, 0, 0,             // 251-256 unused
  333.  
  334.     0xB8, //    SDL_SCANCODE_MODE = 257,  // this seems to be the AltGr Key? - DIK_RMENU (right alt)
  335.  
  336.     // These values are mapped from usage page 0x0C (USB consumer page).
  337.     0x99, //    SDL_SCANCODE_AUDIONEXT = 258, - DIK_NEXTTRACK
  338.     0x90, //    SDL_SCANCODE_AUDIOPREV = 259, - DIK_PREVTRACK, which is DIK_CIRCUMFLEX on japanese keyboards
  339.     0xA4, //    SDL_SCANCODE_AUDIOSTOP = 260, - DIK_MEDIASTOP
  340.     0xA2, //    SDL_SCANCODE_AUDIOPLAY = 261, - DIK_PLAYPAUSE
  341.     0xA0, //    SDL_SCANCODE_AUDIOMUTE = 262, - DIK_MUTE
  342.     0xED, //    SDL_SCANCODE_MEDIASELECT = 263, - DIK_MEDIASELECT
  343.  
  344.     0x0, //     SDL_SCANCODE_WWW = 264,
  345.  
  346.     0xEC, //    SDL_SCANCODE_MAIL = 265, - DIK_MAIL
  347.     0xA1, //    SDL_SCANCODE_CALCULATOR = 266, - DIK_CALCULATOR
  348.     0xEB, //    SDL_SCANCODE_COMPUTER = 267, - DIK_MYCOMPUTER
  349.     0xE5, //    SDL_SCANCODE_AC_SEARCH = 268, - DIK_WEBSEARCH
  350.     0xB2, //    SDL_SCANCODE_AC_HOME = 269, - DIK_WEBHOME
  351.     0xEA, //    SDL_SCANCODE_AC_BACK = 270, - DIK_WEBBACK
  352.     0xE9, //    SDL_SCANCODE_AC_FORWARD = 271, - DIK_WEBFORWARD
  353.     0xE8, //    SDL_SCANCODE_AC_STOP = 272, - DIK_WEBSTOP
  354.     0xE7, //    SDL_SCANCODE_AC_REFRESH = 273, - DIK_WEBREFRESH
  355.     0xE6, //    SDL_SCANCODE_AC_BOOKMARKS = 274, - DIK_WEBFAVORITES
  356.  
  357.     // These are values that Christian Walther added (for mac keyboard?).
  358.     0x0, //     SDL_SCANCODE_BRIGHTNESSDOWN = 275,
  359.     0x0, //     SDL_SCANCODE_BRIGHTNESSUP = 276,
  360.     0x0, //     SDL_SCANCODE_DISPLAYSWITCH = 277, // display mirroring/dual display switch, video mode switch
  361.     0x0, //     SDL_SCANCODE_KBDILLUMTOGGLE = 278,
  362.     0x0, //     SDL_SCANCODE_KBDILLUMDOWN = 279,
  363.     0x0, //     SDL_SCANCODE_KBDILLUMUP = 280,
  364.     0x0, //     SDL_SCANCODE_EJECT = 281,
  365.  
  366.     0xDF, //    SDL_SCANCODE_SLEEP = 282, - DIK_SLEEP
  367.  
  368.     0x0, //     SDL_SCANCODE_APP1 = 283,
  369.     0x0, //     SDL_SCANCODE_APP2 = 284,
  370.          // end of Walther-keys
  371.  
  372.     // the rest up to 511 are currently not named in SDL
  373.  
  374.     0, 0, 0, 0, 0, 0,             // 285-290 unused
  375.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 291-300 unused
  376.  
  377.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 301-320 unused
  378.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 321-340 unused
  379.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 341-360 unused
  380.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 361-380 unused
  381.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 381-400 unused
  382.  
  383.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 401-420 unused
  384.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 421-440 unused
  385.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 441-460 unused
  386.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 461-480 unused
  387.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 481-500 unused
  388.  
  389.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 501-511 unused
  390. };
  391.  
  392. #endif /* _SDL2_SCANCODE_TO_DINPUT_H_ */
  393.