1/*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
4
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
12
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
20*/
21#include "SDL_internal.h"
22
23#ifndef scancodes_xfree86_h_
24#define scancodes_xfree86_h_
25
26/* XFree86 key code to SDL scancode mapping table
27 Sources:
28 - atKeyNames.h from XFree86 source code
29*/
30/* *INDENT-OFF* */ // clang-format off
31static const SDL_Scancode xfree86_scancode_table[] = {
32 /* 0 */ SDL_SCANCODE_UNKNOWN,
33 /* 1 */ SDL_SCANCODE_ESCAPE,
34 /* 2 */ SDL_SCANCODE_1,
35 /* 3 */ SDL_SCANCODE_2,
36 /* 4 */ SDL_SCANCODE_3,
37 /* 5 */ SDL_SCANCODE_4,
38 /* 6 */ SDL_SCANCODE_5,
39 /* 7 */ SDL_SCANCODE_6,
40 /* 8 */ SDL_SCANCODE_7,
41 /* 9 */ SDL_SCANCODE_8,
42 /* 10 */ SDL_SCANCODE_9,
43 /* 11 */ SDL_SCANCODE_0,
44 /* 12 */ SDL_SCANCODE_MINUS,
45 /* 13 */ SDL_SCANCODE_EQUALS,
46 /* 14 */ SDL_SCANCODE_BACKSPACE,
47 /* 15 */ SDL_SCANCODE_TAB,
48 /* 16 */ SDL_SCANCODE_Q,
49 /* 17 */ SDL_SCANCODE_W,
50 /* 18 */ SDL_SCANCODE_E,
51 /* 19 */ SDL_SCANCODE_R,
52 /* 20 */ SDL_SCANCODE_T,
53 /* 21 */ SDL_SCANCODE_Y,
54 /* 22 */ SDL_SCANCODE_U,
55 /* 23 */ SDL_SCANCODE_I,
56 /* 24 */ SDL_SCANCODE_O,
57 /* 25 */ SDL_SCANCODE_P,
58 /* 26 */ SDL_SCANCODE_LEFTBRACKET,
59 /* 27 */ SDL_SCANCODE_RIGHTBRACKET,
60 /* 28 */ SDL_SCANCODE_RETURN,
61 /* 29 */ SDL_SCANCODE_LCTRL,
62 /* 30 */ SDL_SCANCODE_A,
63 /* 31 */ SDL_SCANCODE_S,
64 /* 32 */ SDL_SCANCODE_D,
65 /* 33 */ SDL_SCANCODE_F,
66 /* 34 */ SDL_SCANCODE_G,
67 /* 35 */ SDL_SCANCODE_H,
68 /* 36 */ SDL_SCANCODE_J,
69 /* 37 */ SDL_SCANCODE_K,
70 /* 38 */ SDL_SCANCODE_L,
71 /* 39 */ SDL_SCANCODE_SEMICOLON,
72 /* 40 */ SDL_SCANCODE_APOSTROPHE,
73 /* 41 */ SDL_SCANCODE_GRAVE,
74 /* 42 */ SDL_SCANCODE_LSHIFT,
75 /* 43 */ SDL_SCANCODE_BACKSLASH,
76 /* 44 */ SDL_SCANCODE_Z,
77 /* 45 */ SDL_SCANCODE_X,
78 /* 46 */ SDL_SCANCODE_C,
79 /* 47 */ SDL_SCANCODE_V,
80 /* 48 */ SDL_SCANCODE_B,
81 /* 49 */ SDL_SCANCODE_N,
82 /* 50 */ SDL_SCANCODE_M,
83 /* 51 */ SDL_SCANCODE_COMMA,
84 /* 52 */ SDL_SCANCODE_PERIOD,
85 /* 53 */ SDL_SCANCODE_SLASH,
86 /* 54 */ SDL_SCANCODE_RSHIFT,
87 /* 55 */ SDL_SCANCODE_KP_MULTIPLY,
88 /* 56 */ SDL_SCANCODE_LALT,
89 /* 57 */ SDL_SCANCODE_SPACE,
90 /* 58 */ SDL_SCANCODE_CAPSLOCK,
91 /* 59 */ SDL_SCANCODE_F1,
92 /* 60 */ SDL_SCANCODE_F2,
93 /* 61 */ SDL_SCANCODE_F3,
94 /* 62 */ SDL_SCANCODE_F4,
95 /* 63 */ SDL_SCANCODE_F5,
96 /* 64 */ SDL_SCANCODE_F6,
97 /* 65 */ SDL_SCANCODE_F7,
98 /* 66 */ SDL_SCANCODE_F8,
99 /* 67 */ SDL_SCANCODE_F9,
100 /* 68 */ SDL_SCANCODE_F10,
101 /* 69 */ SDL_SCANCODE_NUMLOCKCLEAR,
102 /* 70 */ SDL_SCANCODE_SCROLLLOCK,
103 /* 71 */ SDL_SCANCODE_KP_7,
104 /* 72 */ SDL_SCANCODE_KP_8,
105 /* 73 */ SDL_SCANCODE_KP_9,
106 /* 74 */ SDL_SCANCODE_KP_MINUS,
107 /* 75 */ SDL_SCANCODE_KP_4,
108 /* 76 */ SDL_SCANCODE_KP_5,
109 /* 77 */ SDL_SCANCODE_KP_6,
110 /* 78 */ SDL_SCANCODE_KP_PLUS,
111 /* 79 */ SDL_SCANCODE_KP_1,
112 /* 80 */ SDL_SCANCODE_KP_2,
113 /* 81 */ SDL_SCANCODE_KP_3,
114 /* 82 */ SDL_SCANCODE_KP_0,
115 /* 83 */ SDL_SCANCODE_KP_PERIOD,
116 /* 84 */ SDL_SCANCODE_SYSREQ,
117 /* 85 */ SDL_SCANCODE_MODE,
118 /* 86 */ SDL_SCANCODE_NONUSBACKSLASH,
119 /* 87 */ SDL_SCANCODE_F11,
120 /* 88 */ SDL_SCANCODE_F12,
121 /* 89 */ SDL_SCANCODE_HOME,
122 /* 90 */ SDL_SCANCODE_UP,
123 /* 91 */ SDL_SCANCODE_PAGEUP,
124 /* 92 */ SDL_SCANCODE_LEFT,
125 /* 93 */ SDL_SCANCODE_UNKNOWN, // on PowerBook G4 / KEY_Begin
126 /* 94 */ SDL_SCANCODE_RIGHT,
127 /* 95 */ SDL_SCANCODE_END,
128 /* 96 */ SDL_SCANCODE_DOWN,
129 /* 97 */ SDL_SCANCODE_PAGEDOWN,
130 /* 98 */ SDL_SCANCODE_INSERT,
131 /* 99 */ SDL_SCANCODE_DELETE,
132 /* 100 */ SDL_SCANCODE_KP_ENTER,
133 /* 101 */ SDL_SCANCODE_RCTRL,
134 /* 102 */ SDL_SCANCODE_PAUSE,
135 /* 103 */ SDL_SCANCODE_PRINTSCREEN,
136 /* 104 */ SDL_SCANCODE_KP_DIVIDE,
137 /* 105 */ SDL_SCANCODE_RALT,
138 /* 106 */ SDL_SCANCODE_UNKNOWN, // BREAK
139 /* 107 */ SDL_SCANCODE_LGUI,
140 /* 108 */ SDL_SCANCODE_RGUI,
141 /* 109 */ SDL_SCANCODE_APPLICATION,
142 /* 110 */ SDL_SCANCODE_F13,
143 /* 111 */ SDL_SCANCODE_F14,
144 /* 112 */ SDL_SCANCODE_F15,
145 /* 113 */ SDL_SCANCODE_F16,
146 /* 114 */ SDL_SCANCODE_F17,
147 /* 115 */ SDL_SCANCODE_INTERNATIONAL1, // \_
148 /* 116 */ SDL_SCANCODE_UNKNOWN, /* is translated to XK_ISO_Level3_Shift by my X server, but I have no keyboard that generates this code, so I don't know what the correct SDL_SCANCODE_* for it is */
149 /* 117 */ SDL_SCANCODE_UNKNOWN,
150 /* 118 */ SDL_SCANCODE_KP_EQUALS,
151 /* 119 */ SDL_SCANCODE_UNKNOWN,
152 /* 120 */ SDL_SCANCODE_UNKNOWN,
153 /* 121 */ SDL_SCANCODE_INTERNATIONAL4, // Henkan_Mode
154 /* 122 */ SDL_SCANCODE_UNKNOWN,
155 /* 123 */ SDL_SCANCODE_INTERNATIONAL5, // Muhenkan
156 /* 124 */ SDL_SCANCODE_UNKNOWN,
157 /* 125 */ SDL_SCANCODE_INTERNATIONAL3, // Yen
158 /* 126 */ SDL_SCANCODE_UNKNOWN,
159 /* 127 */ SDL_SCANCODE_UNKNOWN,
160 /* 128 */ SDL_SCANCODE_UNKNOWN,
161 /* 129 */ SDL_SCANCODE_UNKNOWN,
162 /* 130 */ SDL_SCANCODE_UNKNOWN,
163 /* 131 */ SDL_SCANCODE_UNKNOWN,
164 /* 132 */ SDL_SCANCODE_POWER,
165 /* 133 */ SDL_SCANCODE_MUTE,
166 /* 134 */ SDL_SCANCODE_VOLUMEDOWN,
167 /* 135 */ SDL_SCANCODE_VOLUMEUP,
168 /* 136 */ SDL_SCANCODE_HELP,
169 /* 137 */ SDL_SCANCODE_STOP,
170 /* 138 */ SDL_SCANCODE_AGAIN,
171 /* 139 */ SDL_SCANCODE_UNKNOWN, // PROPS
172 /* 140 */ SDL_SCANCODE_UNDO,
173 /* 141 */ SDL_SCANCODE_UNKNOWN, // FRONT
174 /* 142 */ SDL_SCANCODE_COPY,
175 /* 143 */ SDL_SCANCODE_UNKNOWN, // OPEN
176 /* 144 */ SDL_SCANCODE_PASTE,
177 /* 145 */ SDL_SCANCODE_FIND,
178 /* 146 */ SDL_SCANCODE_CUT,
179};
180
181// This is largely identical to the Linux keycode mapping
182static const SDL_Scancode xfree86_scancode_table2[] = {
183 /* 0, 0x000 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
184 /* 1, 0x001 */ SDL_SCANCODE_ESCAPE, // Escape
185 /* 2, 0x002 */ SDL_SCANCODE_1, // 1
186 /* 3, 0x003 */ SDL_SCANCODE_2, // 2
187 /* 4, 0x004 */ SDL_SCANCODE_3, // 3
188 /* 5, 0x005 */ SDL_SCANCODE_4, // 4
189 /* 6, 0x006 */ SDL_SCANCODE_5, // 5
190 /* 7, 0x007 */ SDL_SCANCODE_6, // 6
191 /* 8, 0x008 */ SDL_SCANCODE_7, // 7
192 /* 9, 0x009 */ SDL_SCANCODE_8, // 8
193 /* 10, 0x00a */ SDL_SCANCODE_9, // 9
194 /* 11, 0x00b */ SDL_SCANCODE_0, // 0
195 /* 12, 0x00c */ SDL_SCANCODE_MINUS, // minus
196 /* 13, 0x00d */ SDL_SCANCODE_EQUALS, // equal
197 /* 14, 0x00e */ SDL_SCANCODE_BACKSPACE, // BackSpace
198 /* 15, 0x00f */ SDL_SCANCODE_TAB, // Tab
199 /* 16, 0x010 */ SDL_SCANCODE_Q, // q
200 /* 17, 0x011 */ SDL_SCANCODE_W, // w
201 /* 18, 0x012 */ SDL_SCANCODE_E, // e
202 /* 19, 0x013 */ SDL_SCANCODE_R, // r
203 /* 20, 0x014 */ SDL_SCANCODE_T, // t
204 /* 21, 0x015 */ SDL_SCANCODE_Y, // y
205 /* 22, 0x016 */ SDL_SCANCODE_U, // u
206 /* 23, 0x017 */ SDL_SCANCODE_I, // i
207 /* 24, 0x018 */ SDL_SCANCODE_O, // o
208 /* 25, 0x019 */ SDL_SCANCODE_P, // p
209 /* 26, 0x01a */ SDL_SCANCODE_LEFTBRACKET, // bracketleft
210 /* 27, 0x01b */ SDL_SCANCODE_RIGHTBRACKET, // bracketright
211 /* 28, 0x01c */ SDL_SCANCODE_RETURN, // Return
212 /* 29, 0x01d */ SDL_SCANCODE_LCTRL, // Control_L
213 /* 30, 0x01e */ SDL_SCANCODE_A, // a
214 /* 31, 0x01f */ SDL_SCANCODE_S, // s
215 /* 32, 0x020 */ SDL_SCANCODE_D, // d
216 /* 33, 0x021 */ SDL_SCANCODE_F, // f
217 /* 34, 0x022 */ SDL_SCANCODE_G, // g
218 /* 35, 0x023 */ SDL_SCANCODE_H, // h
219 /* 36, 0x024 */ SDL_SCANCODE_J, // j
220 /* 37, 0x025 */ SDL_SCANCODE_K, // k
221 /* 38, 0x026 */ SDL_SCANCODE_L, // l
222 /* 39, 0x027 */ SDL_SCANCODE_SEMICOLON, // semicolon
223 /* 40, 0x028 */ SDL_SCANCODE_APOSTROPHE, // apostrophe
224 /* 41, 0x029 */ SDL_SCANCODE_GRAVE, // grave
225 /* 42, 0x02a */ SDL_SCANCODE_LSHIFT, // Shift_L
226 /* 43, 0x02b */ SDL_SCANCODE_BACKSLASH, // backslash
227 /* 44, 0x02c */ SDL_SCANCODE_Z, // z
228 /* 45, 0x02d */ SDL_SCANCODE_X, // x
229 /* 46, 0x02e */ SDL_SCANCODE_C, // c
230 /* 47, 0x02f */ SDL_SCANCODE_V, // v
231 /* 48, 0x030 */ SDL_SCANCODE_B, // b
232 /* 49, 0x031 */ SDL_SCANCODE_N, // n
233 /* 50, 0x032 */ SDL_SCANCODE_M, // m
234 /* 51, 0x033 */ SDL_SCANCODE_COMMA, // comma
235 /* 52, 0x034 */ SDL_SCANCODE_PERIOD, // period
236 /* 53, 0x035 */ SDL_SCANCODE_SLASH, // slash
237 /* 54, 0x036 */ SDL_SCANCODE_RSHIFT, // Shift_R
238 /* 55, 0x037 */ SDL_SCANCODE_KP_MULTIPLY, // KP_Multiply
239 /* 56, 0x038 */ SDL_SCANCODE_LALT, // Alt_L
240 /* 57, 0x039 */ SDL_SCANCODE_SPACE, // space
241 /* 58, 0x03a */ SDL_SCANCODE_CAPSLOCK, // Caps_Lock
242 /* 59, 0x03b */ SDL_SCANCODE_F1, // F1
243 /* 60, 0x03c */ SDL_SCANCODE_F2, // F2
244 /* 61, 0x03d */ SDL_SCANCODE_F3, // F3
245 /* 62, 0x03e */ SDL_SCANCODE_F4, // F4
246 /* 63, 0x03f */ SDL_SCANCODE_F5, // F5
247 /* 64, 0x040 */ SDL_SCANCODE_F6, // F6
248 /* 65, 0x041 */ SDL_SCANCODE_F7, // F7
249 /* 66, 0x042 */ SDL_SCANCODE_F8, // F8
250 /* 67, 0x043 */ SDL_SCANCODE_F9, // F9
251 /* 68, 0x044 */ SDL_SCANCODE_F10, // F10
252 /* 69, 0x045 */ SDL_SCANCODE_NUMLOCKCLEAR, // Num_Lock
253 /* 70, 0x046 */ SDL_SCANCODE_SCROLLLOCK, // Scroll_Lock
254 /* 71, 0x047 */ SDL_SCANCODE_KP_7, // KP_Home
255 /* 72, 0x048 */ SDL_SCANCODE_KP_8, // KP_Up
256 /* 73, 0x049 */ SDL_SCANCODE_KP_9, // KP_Prior
257 /* 74, 0x04a */ SDL_SCANCODE_KP_MINUS, // KP_Subtract
258 /* 75, 0x04b */ SDL_SCANCODE_KP_4, // KP_Left
259 /* 76, 0x04c */ SDL_SCANCODE_KP_5, // KP_Begin
260 /* 77, 0x04d */ SDL_SCANCODE_KP_6, // KP_Right
261 /* 78, 0x04e */ SDL_SCANCODE_KP_PLUS, // KP_Add
262 /* 79, 0x04f */ SDL_SCANCODE_KP_1, // KP_End
263 /* 80, 0x050 */ SDL_SCANCODE_KP_2, // KP_Down
264 /* 81, 0x051 */ SDL_SCANCODE_KP_3, // KP_Next
265 /* 82, 0x052 */ SDL_SCANCODE_KP_0, // KP_Insert
266 /* 83, 0x053 */ SDL_SCANCODE_KP_PERIOD, // KP_Delete
267 /* 84, 0x054 */ SDL_SCANCODE_RALT, // ISO_Level3_Shift
268 /* 85, 0x055 */ SDL_SCANCODE_MODE, // ????
269 /* 86, 0x056 */ SDL_SCANCODE_NONUSBACKSLASH, // less
270 /* 87, 0x057 */ SDL_SCANCODE_F11, // F11
271 /* 88, 0x058 */ SDL_SCANCODE_F12, // F12
272 /* 89, 0x059 */ SDL_SCANCODE_INTERNATIONAL1, // \_
273 /* 90, 0x05a */ SDL_SCANCODE_LANG3, // Katakana
274 /* 91, 0x05b */ SDL_SCANCODE_LANG4, // Hiragana
275 /* 92, 0x05c */ SDL_SCANCODE_INTERNATIONAL4, // Henkan_Mode
276 /* 93, 0x05d */ SDL_SCANCODE_INTERNATIONAL2, // Hiragana_Katakana
277 /* 94, 0x05e */ SDL_SCANCODE_INTERNATIONAL5, // Muhenkan
278 /* 95, 0x05f */ SDL_SCANCODE_UNKNOWN, // NoSymbol
279 /* 96, 0x060 */ SDL_SCANCODE_KP_ENTER, // KP_Enter
280 /* 97, 0x061 */ SDL_SCANCODE_RCTRL, // Control_R
281 /* 98, 0x062 */ SDL_SCANCODE_KP_DIVIDE, // KP_Divide
282 /* 99, 0x063 */ SDL_SCANCODE_PRINTSCREEN, // Print
283 /* 100, 0x064 */ SDL_SCANCODE_RALT, // ISO_Level3_Shift, ALTGR, RALT
284 /* 101, 0x065 */ SDL_SCANCODE_UNKNOWN, // Linefeed
285 /* 102, 0x066 */ SDL_SCANCODE_HOME, // Home
286 /* 103, 0x067 */ SDL_SCANCODE_UP, // Up
287 /* 104, 0x068 */ SDL_SCANCODE_PAGEUP, // Prior
288 /* 105, 0x069 */ SDL_SCANCODE_LEFT, // Left
289 /* 106, 0x06a */ SDL_SCANCODE_RIGHT, // Right
290 /* 107, 0x06b */ SDL_SCANCODE_END, // End
291 /* 108, 0x06c */ SDL_SCANCODE_DOWN, // Down
292 /* 109, 0x06d */ SDL_SCANCODE_PAGEDOWN, // Next
293 /* 110, 0x06e */ SDL_SCANCODE_INSERT, // Insert
294 /* 111, 0x06f */ SDL_SCANCODE_DELETE, // Delete
295 /* 112, 0x070 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
296 /* 113, 0x071 */ SDL_SCANCODE_MUTE, // XF86AudioMute
297 /* 114, 0x072 */ SDL_SCANCODE_VOLUMEDOWN, // XF86AudioLowerVolume
298 /* 115, 0x073 */ SDL_SCANCODE_VOLUMEUP, // XF86AudioRaiseVolume
299 /* 116, 0x074 */ SDL_SCANCODE_POWER, // XF86PowerOff
300 /* 117, 0x075 */ SDL_SCANCODE_KP_EQUALS, // KP_Equal
301 /* 118, 0x076 */ SDL_SCANCODE_KP_PLUSMINUS, // plusminus
302 /* 119, 0x077 */ SDL_SCANCODE_PAUSE, // Pause
303 /* 120, 0x078 */ SDL_SCANCODE_UNKNOWN, // XF86LaunchA
304 /* 121, 0x079 */ SDL_SCANCODE_KP_PERIOD, // KP_Decimal
305 /* 122, 0x07a */ SDL_SCANCODE_LANG1, // Hangul
306 /* 123, 0x07b */ SDL_SCANCODE_LANG2, // Hangul_Hanja
307 /* 124, 0x07c */ SDL_SCANCODE_INTERNATIONAL3, // Yen
308 /* 125, 0x07d */ SDL_SCANCODE_LGUI, // Super_L
309 /* 126, 0x07e */ SDL_SCANCODE_RGUI, // Super_R
310 /* 127, 0x07f */ SDL_SCANCODE_APPLICATION, // Menu
311 /* 128, 0x080 */ SDL_SCANCODE_CANCEL, // Cancel
312 /* 129, 0x081 */ SDL_SCANCODE_AGAIN, // Redo
313 /* 130, 0x082 */ SDL_SCANCODE_UNKNOWN, // SunProps
314 /* 131, 0x083 */ SDL_SCANCODE_UNDO, // Undo
315 /* 132, 0x084 */ SDL_SCANCODE_UNKNOWN, // SunFront
316 /* 133, 0x085 */ SDL_SCANCODE_COPY, // XF86Copy
317 /* 134, 0x086 */ SDL_SCANCODE_UNKNOWN, // SunOpen, XF86Open
318 /* 135, 0x087 */ SDL_SCANCODE_PASTE, // XF86Paste
319 /* 136, 0x088 */ SDL_SCANCODE_FIND, // Find
320 /* 137, 0x089 */ SDL_SCANCODE_CUT, // XF86Cut
321 /* 138, 0x08a */ SDL_SCANCODE_HELP, // Help
322 /* 139, 0x08b */ SDL_SCANCODE_MENU, // XF86MenuKB
323 /* 140, 0x08c */ SDL_SCANCODE_UNKNOWN, // XF86Calculator
324 /* 141, 0x08d */ SDL_SCANCODE_UNKNOWN, // NoSymbol
325 /* 142, 0x08e */ SDL_SCANCODE_SLEEP, // XF86Sleep
326 /* 143, 0x08f */ SDL_SCANCODE_UNKNOWN, // XF86WakeUp
327 /* 144, 0x090 */ SDL_SCANCODE_UNKNOWN, // XF86Explorer
328 /* 145, 0x091 */ SDL_SCANCODE_UNKNOWN, // XF86Send
329 /* 146, 0x092 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
330 /* 147, 0x093 */ SDL_SCANCODE_UNKNOWN, // XF86Xfer
331 /* 148, 0x094 */ SDL_SCANCODE_UNKNOWN, // XF86Launch1
332 /* 149, 0x095 */ SDL_SCANCODE_UNKNOWN, // XF86Launch2
333 /* 150, 0x096 */ SDL_SCANCODE_UNKNOWN, // XF86WWW
334 /* 151, 0x097 */ SDL_SCANCODE_UNKNOWN, // XF86DOS
335 /* 152, 0x098 */ SDL_SCANCODE_UNKNOWN, // XF86ScreenSaver
336 /* 153, 0x099 */ SDL_SCANCODE_UNKNOWN, // XF86RotateWindows
337 /* 154, 0x09a */ SDL_SCANCODE_UNKNOWN, // XF86TaskPane
338 /* 155, 0x09b */ SDL_SCANCODE_UNKNOWN, // XF86Mail
339 /* 156, 0x09c */ SDL_SCANCODE_AC_BOOKMARKS, // XF86Favorites
340 /* 157, 0x09d */ SDL_SCANCODE_UNKNOWN, // XF86MyComputer
341 /* 158, 0x09e */ SDL_SCANCODE_AC_BACK, // XF86Back
342 /* 159, 0x09f */ SDL_SCANCODE_AC_FORWARD, // XF86Forward
343 /* 160, 0x0a0 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
344 /* 161, 0x0a1 */ SDL_SCANCODE_MEDIA_EJECT, // XF86Eject
345 /* 162, 0x0a2 */ SDL_SCANCODE_MEDIA_EJECT, // XF86Eject
346 /* 163, 0x0a3 */ SDL_SCANCODE_MEDIA_NEXT_TRACK, // XF86AudioNext
347 /* 164, 0x0a4 */ SDL_SCANCODE_MEDIA_PLAY_PAUSE, // XF86AudioPlay
348 /* 165, 0x0a5 */ SDL_SCANCODE_MEDIA_PREVIOUS_TRACK, // XF86AudioPrev
349 /* 166, 0x0a6 */ SDL_SCANCODE_MEDIA_STOP, // XF86AudioStop
350 /* 167, 0x0a7 */ SDL_SCANCODE_MEDIA_RECORD, // XF86AudioRecord
351 /* 168, 0x0a8 */ SDL_SCANCODE_MEDIA_REWIND, // XF86AudioRewind
352 /* 169, 0x0a9 */ SDL_SCANCODE_UNKNOWN, // XF86Phone
353 /* 170, 0x0aa */ SDL_SCANCODE_UNKNOWN, // NoSymbol
354 /* 171, 0x0ab */ SDL_SCANCODE_F13, // XF86Tools
355 /* 172, 0x0ac */ SDL_SCANCODE_AC_HOME, // XF86HomePage
356 /* 173, 0x0ad */ SDL_SCANCODE_AC_REFRESH, // XF86Reload
357 /* 174, 0x0ae */ SDL_SCANCODE_UNKNOWN, // XF86Close
358 /* 175, 0x0af */ SDL_SCANCODE_UNKNOWN, // NoSymbol
359 /* 176, 0x0b0 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
360 /* 177, 0x0b1 */ SDL_SCANCODE_UNKNOWN, // XF86ScrollUp
361 /* 178, 0x0b2 */ SDL_SCANCODE_UNKNOWN, // XF86ScrollDown
362 /* 179, 0x0b3 */ SDL_SCANCODE_KP_LEFTPAREN, // parenleft
363 /* 180, 0x0b4 */ SDL_SCANCODE_KP_RIGHTPAREN, // parenright
364 /* 181, 0x0b5 */ SDL_SCANCODE_AC_NEW, // XF86New
365 /* 182, 0x0b6 */ SDL_SCANCODE_AGAIN, // Redo
366 /* 183, 0x0b7 */ SDL_SCANCODE_F13, // XF86Tools
367 /* 184, 0x0b8 */ SDL_SCANCODE_F14, // XF86Launch5
368 /* 185, 0x0b9 */ SDL_SCANCODE_F15, // XF86Launch6
369 /* 186, 0x0ba */ SDL_SCANCODE_F16, // XF86Launch7
370 /* 187, 0x0bb */ SDL_SCANCODE_F17, // XF86Launch8
371 /* 188, 0x0bc */ SDL_SCANCODE_F18, // XF86Launch9
372 /* 189, 0x0bd */ SDL_SCANCODE_F19, // NoSymbol
373 /* 190, 0x0be */ SDL_SCANCODE_F20, // XF86AudioMicMute
374 /* 191, 0x0bf */ SDL_SCANCODE_UNKNOWN, // XF86TouchpadToggle
375 /* 192, 0x0c0 */ SDL_SCANCODE_UNKNOWN, // XF86TouchpadOn
376 /* 193, 0x0c1 */ SDL_SCANCODE_UNKNOWN, // XF86TouchpadOff
377 /* 194, 0x0c2 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
378 /* 195, 0x0c3 */ SDL_SCANCODE_MODE, // Mode_switch
379 /* 196, 0x0c4 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
380 /* 197, 0x0c5 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
381 /* 198, 0x0c6 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
382 /* 199, 0x0c7 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
383 /* 200, 0x0c8 */ SDL_SCANCODE_MEDIA_PLAY, // XF86AudioPlay
384 /* 201, 0x0c9 */ SDL_SCANCODE_MEDIA_PAUSE, // XF86AudioPause
385 /* 202, 0x0ca */ SDL_SCANCODE_UNKNOWN, // XF86Launch3
386 /* 203, 0x0cb */ SDL_SCANCODE_UNKNOWN, // XF86Launch4
387 /* 204, 0x0cc */ SDL_SCANCODE_UNKNOWN, // XF86LaunchB
388 /* 205, 0x0cd */ SDL_SCANCODE_UNKNOWN, // XF86Suspend
389 /* 206, 0x0ce */ SDL_SCANCODE_AC_CLOSE, // XF86Close
390 /* 207, 0x0cf */ SDL_SCANCODE_MEDIA_PLAY, // XF86AudioPlay
391 /* 208, 0x0d0 */ SDL_SCANCODE_MEDIA_FAST_FORWARD, // XF86AudioForward
392 /* 209, 0x0d1 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
393 /* 210, 0x0d2 */ SDL_SCANCODE_PRINTSCREEN, // Print
394 /* 211, 0x0d3 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
395 /* 212, 0x0d4 */ SDL_SCANCODE_UNKNOWN, // XF86WebCam
396 /* 213, 0x0d5 */ SDL_SCANCODE_UNKNOWN, // XF86AudioPreset
397 /* 214, 0x0d6 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
398 /* 215, 0x0d7 */ SDL_SCANCODE_UNKNOWN, // XF86Mail
399 /* 216, 0x0d8 */ SDL_SCANCODE_UNKNOWN, // XF86Messenger
400 /* 217, 0x0d9 */ SDL_SCANCODE_AC_SEARCH, // XF86Search
401 /* 218, 0x0da */ SDL_SCANCODE_UNKNOWN, // XF86Go
402 /* 219, 0x0db */ SDL_SCANCODE_UNKNOWN, // XF86Finance
403 /* 220, 0x0dc */ SDL_SCANCODE_UNKNOWN, // XF86Game
404 /* 221, 0x0dd */ SDL_SCANCODE_UNKNOWN, // XF86Shop
405 /* 222, 0x0de */ SDL_SCANCODE_UNKNOWN, // NoSymbol
406 /* 223, 0x0df */ SDL_SCANCODE_CANCEL, // Cancel
407 /* 224, 0x0e0 */ SDL_SCANCODE_UNKNOWN, // XF86MonBrightnessDown
408 /* 225, 0x0e1 */ SDL_SCANCODE_UNKNOWN, // XF86MonBrightnessUp
409 /* 226, 0x0e2 */ SDL_SCANCODE_MEDIA_SELECT, // XF86AudioMedia
410 /* 227, 0x0e3 */ SDL_SCANCODE_UNKNOWN, // XF86Display
411 /* 228, 0x0e4 */ SDL_SCANCODE_UNKNOWN, // XF86KbdLightOnOff
412 /* 229, 0x0e5 */ SDL_SCANCODE_UNKNOWN, // XF86KbdBrightnessDown
413 /* 230, 0x0e6 */ SDL_SCANCODE_UNKNOWN, // XF86KbdBrightnessUp
414 /* 231, 0x0e7 */ SDL_SCANCODE_UNKNOWN, // XF86Send
415 /* 232, 0x0e8 */ SDL_SCANCODE_UNKNOWN, // XF86Reply
416 /* 233, 0x0e9 */ SDL_SCANCODE_UNKNOWN, // XF86MailForward
417 /* 234, 0x0ea */ SDL_SCANCODE_UNKNOWN, // XF86Save
418 /* 235, 0x0eb */ SDL_SCANCODE_UNKNOWN, // XF86Documents
419 /* 236, 0x0ec */ SDL_SCANCODE_UNKNOWN, // XF86Battery
420 /* 237, 0x0ed */ SDL_SCANCODE_UNKNOWN, // XF86Bluetooth
421 /* 238, 0x0ee */ SDL_SCANCODE_UNKNOWN, // XF86WLAN
422 /* 239, 0x0ef */ SDL_SCANCODE_UNKNOWN, // XF86UWB
423 /* 240, 0x0f0 */ SDL_SCANCODE_UNKNOWN, // NoSymbol
424 /* 241, 0x0f1 */ SDL_SCANCODE_UNKNOWN, // XF86Next_VMode
425 /* 242, 0x0f2 */ SDL_SCANCODE_UNKNOWN, // XF86Prev_VMode
426 /* 243, 0x0f3 */ SDL_SCANCODE_UNKNOWN, // XF86MonBrightnessCycle
427 /* 244, 0x0f4 */ SDL_SCANCODE_UNKNOWN, // XF86BrightnessAuto
428 /* 245, 0x0f5 */ SDL_SCANCODE_UNKNOWN, // XF86DisplayOff
429 /* 246, 0x0f6 */ SDL_SCANCODE_UNKNOWN, // XF86WWAN
430 /* 247, 0x0f7 */ SDL_SCANCODE_UNKNOWN, // XF86RFKill
431};
432
433// Xvnc / Xtightvnc scancodes from xmodmap -pk
434static const SDL_Scancode xvnc_scancode_table[] = {
435 /* 0 */ SDL_SCANCODE_LCTRL,
436 /* 1 */ SDL_SCANCODE_RCTRL,
437 /* 2 */ SDL_SCANCODE_LSHIFT,
438 /* 3 */ SDL_SCANCODE_RSHIFT,
439 /* 4 */ SDL_SCANCODE_UNKNOWN, // Meta_L
440 /* 5 */ SDL_SCANCODE_UNKNOWN, // Meta_R
441 /* 6 */ SDL_SCANCODE_LALT,
442 /* 7 */ SDL_SCANCODE_RALT,
443 /* 8 */ SDL_SCANCODE_SPACE,
444 /* 9 */ SDL_SCANCODE_0,
445 /* 10 */ SDL_SCANCODE_1,
446 /* 11 */ SDL_SCANCODE_2,
447 /* 12 */ SDL_SCANCODE_3,
448 /* 13 */ SDL_SCANCODE_4,
449 /* 14 */ SDL_SCANCODE_5,
450 /* 15 */ SDL_SCANCODE_6,
451 /* 16 */ SDL_SCANCODE_7,
452 /* 17 */ SDL_SCANCODE_8,
453 /* 18 */ SDL_SCANCODE_9,
454 /* 19 */ SDL_SCANCODE_MINUS,
455 /* 20 */ SDL_SCANCODE_EQUALS,
456 /* 21 */ SDL_SCANCODE_LEFTBRACKET,
457 /* 22 */ SDL_SCANCODE_RIGHTBRACKET,
458 /* 23 */ SDL_SCANCODE_SEMICOLON,
459 /* 24 */ SDL_SCANCODE_APOSTROPHE,
460 /* 25 */ SDL_SCANCODE_GRAVE,
461 /* 26 */ SDL_SCANCODE_COMMA,
462 /* 27 */ SDL_SCANCODE_PERIOD,
463 /* 28 */ SDL_SCANCODE_SLASH,
464 /* 29 */ SDL_SCANCODE_BACKSLASH,
465 /* 30 */ SDL_SCANCODE_A,
466 /* 31 */ SDL_SCANCODE_B,
467 /* 32 */ SDL_SCANCODE_C,
468 /* 33 */ SDL_SCANCODE_D,
469 /* 34 */ SDL_SCANCODE_E,
470 /* 35 */ SDL_SCANCODE_F,
471 /* 36 */ SDL_SCANCODE_G,
472 /* 37 */ SDL_SCANCODE_H,
473 /* 38 */ SDL_SCANCODE_I,
474 /* 39 */ SDL_SCANCODE_J,
475 /* 40 */ SDL_SCANCODE_K,
476 /* 41 */ SDL_SCANCODE_L,
477 /* 42 */ SDL_SCANCODE_M,
478 /* 43 */ SDL_SCANCODE_N,
479 /* 44 */ SDL_SCANCODE_O,
480 /* 45 */ SDL_SCANCODE_P,
481 /* 46 */ SDL_SCANCODE_Q,
482 /* 47 */ SDL_SCANCODE_R,
483 /* 48 */ SDL_SCANCODE_S,
484 /* 49 */ SDL_SCANCODE_T,
485 /* 50 */ SDL_SCANCODE_U,
486 /* 51 */ SDL_SCANCODE_V,
487 /* 52 */ SDL_SCANCODE_W,
488 /* 53 */ SDL_SCANCODE_X,
489 /* 54 */ SDL_SCANCODE_Y,
490 /* 55 */ SDL_SCANCODE_Z,
491 /* 56 */ SDL_SCANCODE_BACKSPACE,
492 /* 57 */ SDL_SCANCODE_RETURN,
493 /* 58 */ SDL_SCANCODE_TAB,
494 /* 59 */ SDL_SCANCODE_ESCAPE,
495 /* 60 */ SDL_SCANCODE_DELETE,
496 /* 61 */ SDL_SCANCODE_HOME,
497 /* 62 */ SDL_SCANCODE_END,
498 /* 63 */ SDL_SCANCODE_PAGEUP,
499 /* 64 */ SDL_SCANCODE_PAGEDOWN,
500 /* 65 */ SDL_SCANCODE_UP,
501 /* 66 */ SDL_SCANCODE_DOWN,
502 /* 67 */ SDL_SCANCODE_LEFT,
503 /* 68 */ SDL_SCANCODE_RIGHT,
504 /* 69 */ SDL_SCANCODE_F1,
505 /* 70 */ SDL_SCANCODE_F2,
506 /* 71 */ SDL_SCANCODE_F3,
507 /* 72 */ SDL_SCANCODE_F4,
508 /* 73 */ SDL_SCANCODE_F5,
509 /* 74 */ SDL_SCANCODE_F6,
510 /* 75 */ SDL_SCANCODE_F7,
511 /* 76 */ SDL_SCANCODE_F8,
512 /* 77 */ SDL_SCANCODE_F9,
513 /* 78 */ SDL_SCANCODE_F10,
514 /* 79 */ SDL_SCANCODE_F11,
515 /* 80 */ SDL_SCANCODE_F12,
516};
517
518#endif // scancodes_xfree86_h_
519
520/* *INDENT-ON* */ // clang-format on
521