1 /*
2  *  SDL - Simple DirectMedia Layer
3  *  Copyright (C) 1997-2009 Sam Lantinga
4  *
5  *  SPDX-License-Identifier: LGPL-2.1-or-later
6  *  See LICENSES/README.md for more information.
7  *
8  *  Sam Lantinga
9  *  slouken@libsdl.org
10  */
11 
12 #pragma once
13 
14 // The XBMC_vkey identifies a key that is mapped to an action or function.
15 // The keysym.sym generated by SDL_KEYDOWN is mapped to a vkey and the vkey
16 // is used to lookup an action in the global mapping table.
17 // The vkey values are the ASCII code of the character where this is possible.
18 // Non-printing keypresses get a value in the range 0x80 - 0xFF.
19 // Note that the vkey is a byte value so it cannot be greater than 0xFF.
20 
21 typedef enum
22 {
23   XBMCVK_BACK = 0x08,
24   XBMCVK_TAB = 0x09,
25   XBMCVK_RETURN = 0x0D,
26   XBMCVK_ESCAPE = 0x1B,
27 
28   XBMCVK_SPACE = 0x20,
29   XBMCVK_EXCLAIM = 0x21,
30   XBMCVK_QUOTEDBL = 0x22,
31   XBMCVK_HASH = 0x23,
32   XBMCVK_DOLLAR = 0x24,
33   XBMCVK_PERCENT = 0x25,
34   XBMCVK_AMPERSAND = 0x26,
35   XBMCVK_QUOTE = 0x27,
36   XBMCVK_LEFTPAREN = 0x28,
37   XBMCVK_RIGHTPAREN = 0x29,
38   XBMCVK_ASTERISK = 0x2A,
39   XBMCVK_PLUS = 0x2B,
40   XBMCVK_COMMA = 0x2C,
41   XBMCVK_MINUS = 0x2D,
42   XBMCVK_PERIOD = 0x2E,
43   XBMCVK_SLASH = 0x2F,
44 
45   XBMCVK_0 = 0x30,
46   XBMCVK_1 = 0x31,
47   XBMCVK_2 = 0x32,
48   XBMCVK_3 = 0x33,
49   XBMCVK_4 = 0x34,
50   XBMCVK_5 = 0x35,
51   XBMCVK_6 = 0x36,
52   XBMCVK_7 = 0x37,
53   XBMCVK_8 = 0x38,
54   XBMCVK_9 = 0x39,
55 
56   XBMCVK_COLON = 0x3A,
57   XBMCVK_SEMICOLON = 0x3B,
58   XBMCVK_LESS = 0x3C,
59   XBMCVK_EQUALS = 0x3D,
60   XBMCVK_GREATER = 0x3E,
61   XBMCVK_QUESTION = 0x3F,
62   XBMCVK_AT = 0x40,
63 
64   XBMCVK_A = 0x41,
65   XBMCVK_B = 0x42,
66   XBMCVK_C = 0x43,
67   XBMCVK_D = 0x44,
68   XBMCVK_E = 0x45,
69   XBMCVK_F = 0x46,
70   XBMCVK_G = 0x47,
71   XBMCVK_H = 0x48,
72   XBMCVK_I = 0x49,
73   XBMCVK_J = 0x4A,
74   XBMCVK_K = 0x4B,
75   XBMCVK_L = 0x4C,
76   XBMCVK_M = 0x4D,
77   XBMCVK_N = 0x4E,
78   XBMCVK_O = 0x4F,
79   XBMCVK_P = 0x50,
80   XBMCVK_Q = 0x51,
81   XBMCVK_R = 0x52,
82   XBMCVK_S = 0x53,
83   XBMCVK_T = 0x54,
84   XBMCVK_U = 0x55,
85   XBMCVK_V = 0x56,
86   XBMCVK_W = 0x57,
87   XBMCVK_X = 0x58,
88   XBMCVK_Y = 0x59,
89   XBMCVK_Z = 0x5A,
90 
91   XBMCVK_LEFTBRACKET = 0x5B,
92   XBMCVK_BACKSLASH = 0x5C,
93   XBMCVK_RIGHTBRACKET = 0x5D,
94   XBMCVK_CARET = 0x5E,
95   XBMCVK_UNDERSCORE = 0x5F,
96   XBMCVK_BACKQUOTE = 0x60,
97 
98   // Lowercase letters 0x61 - 0x7a have the same vkey as uppercase, so
99   // use this block for the numpad keys
100   XBMCVK_NUMPADDIVIDE = 0x61,
101   XBMCVK_NUMPADTIMES = 0x62,
102   XBMCVK_NUMPADMINUS = 0x63,
103   XBMCVK_NUMPADPLUS = 0x64,
104   XBMCVK_NUMPADENTER = 0x65,
105   XBMCVK_NUMPADPERIOD = 0x66,
106   XBMCVK_NUMPAD0 = 0x70,
107   XBMCVK_NUMPAD1 = 0x71,
108   XBMCVK_NUMPAD2 = 0x72,
109   XBMCVK_NUMPAD3 = 0x73,
110   XBMCVK_NUMPAD4 = 0x74,
111   XBMCVK_NUMPAD5 = 0x75,
112   XBMCVK_NUMPAD6 = 0x76,
113   XBMCVK_NUMPAD7 = 0x77,
114   XBMCVK_NUMPAD8 = 0x78,
115   XBMCVK_NUMPAD9 = 0x79,
116 
117   XBMCVK_LEFTBRACE = 0x7B,
118   XBMCVK_PIPE = 0x7C,
119   XBMCVK_RIGHTBRACE = 0x7D,
120   XBMCVK_TILDE = 0x7E,
121 
122   // Non-printing characters
123 
124   XBMCVK_UP = 0x80,
125   XBMCVK_DOWN = 0x81,
126   XBMCVK_LEFT = 0x82,
127   XBMCVK_RIGHT = 0x83,
128   XBMCVK_PAGEUP = 0x84,
129   XBMCVK_PAGEDOWN = 0x85,
130   XBMCVK_INSERT = 0x86,
131   XBMCVK_DELETE = 0x87,
132   XBMCVK_HOME = 0x88,
133   XBMCVK_END = 0x89,
134 
135   XBMCVK_F1 = 0x90,
136   XBMCVK_F2 = 0x91,
137   XBMCVK_F3 = 0x92,
138   XBMCVK_F4 = 0x93,
139   XBMCVK_F5 = 0x94,
140   XBMCVK_F6 = 0x95,
141   XBMCVK_F7 = 0x96,
142   XBMCVK_F8 = 0x97,
143   XBMCVK_F9 = 0x98,
144   XBMCVK_F10 = 0x99,
145   XBMCVK_F11 = 0x9A,
146   XBMCVK_F12 = 0x9B,
147   XBMCVK_F13 = 0x9C,
148   XBMCVK_F14 = 0x9D,
149   XBMCVK_F15 = 0x9E,
150   XBMCVK_F16 = 0x9F,
151   XBMCVK_F17 = 0xA0,
152   XBMCVK_F18 = 0xA1,
153   XBMCVK_F19 = 0xA2,
154   XBMCVK_F20 = 0xA3,
155   XBMCVK_F21 = 0xA4,
156   XBMCVK_F22 = 0xA5,
157   XBMCVK_F23 = 0xA6,
158   XBMCVK_F24 = 0xA7,
159 
160   XBMCVK_BROWSER_BACK = 0xB0,
161   XBMCVK_BROWSER_FORWARD = 0xB1,
162   XBMCVK_BROWSER_REFRESH = 0xB2,
163   XBMCVK_BROWSER_STOP = 0xB3,
164   XBMCVK_BROWSER_SEARCH = 0xB4,
165   XBMCVK_BROWSER_FAVORITES = 0xB5,
166   XBMCVK_BROWSER_HOME = 0xB6,
167   XBMCVK_VOLUME_MUTE = 0xB7,
168   XBMCVK_VOLUME_DOWN = 0xB8,
169   XBMCVK_VOLUME_UP = 0xB9,
170   XBMCVK_MEDIA_NEXT_TRACK = 0xBA,
171   XBMCVK_MEDIA_PREV_TRACK = 0xBB,
172   XBMCVK_MEDIA_STOP = 0xBC,
173   XBMCVK_MEDIA_PLAY_PAUSE = 0xBD,
174   XBMCVK_LAUNCH_MAIL = 0xBE,
175   XBMCVK_LAUNCH_MEDIA_SELECT = 0xBF,
176   XBMCVK_LAUNCH_APP1 = 0xC0,
177   XBMCVK_LAUNCH_APP2 = 0xC1,
178   XBMCVK_LAUNCH_FILE_BROWSER = 0xC2,
179   XBMCVK_LAUNCH_MEDIA_CENTER = 0xC3,
180   XBMCVK_MEDIA_REWIND = 0xC4,
181   XBMCVK_MEDIA_FASTFORWARD = 0xC5,
182   XBMCVK_MEDIA_RECORD = 0xC6,
183 
184   XBMCVK_LCONTROL = 0xD0,
185   XBMCVK_RCONTROL = 0xD1,
186   XBMCVK_LSHIFT = 0xD2,
187   XBMCVK_RSHIFT = 0xD3,
188   XBMCVK_LMENU = 0xD4,
189   XBMCVK_RMENU = 0xD5,
190   XBMCVK_LWIN = 0xD6,
191   XBMCVK_RWIN = 0xD7,
192   XBMCVK_MENU = 0xD8,
193   XBMCVK_CAPSLOCK = 0xD9,
194   XBMCVK_NUMLOCK = 0xDA,
195 
196   XBMCVK_PRINTSCREEN = 0xDB,
197   XBMCVK_SCROLLLOCK = 0xDC,
198   XBMCVK_PAUSE = 0XDD,
199   XBMCVK_POWER = 0XDE,
200   XBMCVK_SLEEP = 0XDF,
201   XBMCVK_GUIDE = 0xE0,
202   XBMCVK_SETTINGS = 0xE1,
203   XBMCVK_INFO = 0xE2,
204   XBMCVK_RED = 0xE3,
205   XBMCVK_GREEN = 0xE4,
206   XBMCVK_YELLOW = 0xE5,
207   XBMCVK_BLUE = 0xE6,
208   XBMCVK_ZOOM = 0xE7,
209   XBMCVK_TEXT = 0xE8,
210   XBMCVK_FAVORITES = 0xE9,
211   XBMCVK_HOMEPAGE = 0xEA,
212   XBMCVK_CONFIG = 0xEB,
213   XBMCVK_EPG = 0xEC,
214 
215   XBMCVK_LAST = 0xFF
216 } XBMCVKey;
217 
218 // These should be in winuser.h. Not sure why they have been defined here
219 #ifndef VK_0
220 #define VK_0 '0'
221 #define VK_1 '1'
222 #define VK_2 '2'
223 #define VK_3 '3'
224 #define VK_4 '4'
225 #define VK_5 '5'
226 #define VK_6 '6'
227 #define VK_7 '7'
228 #define VK_8 '8'
229 #define VK_9 '9'
230 #define VK_A 'A'
231 #define VK_B 'B'
232 #define VK_C 'C'
233 #define VK_D 'D'
234 #define VK_E 'E'
235 #define VK_F 'F'
236 #define VK_G 'G'
237 #define VK_H 'H'
238 #define VK_I 'I'
239 #define VK_J 'J'
240 #define VK_K 'K'
241 #define VK_L 'L'
242 #define VK_M 'M'
243 #define VK_N 'N'
244 #define VK_O 'O'
245 #define VK_P 'P'
246 #define VK_Q 'Q'
247 #define VK_R 'R'
248 #define VK_S 'S'
249 #define VK_T 'T'
250 #define VK_U 'U'
251 #define VK_V 'V'
252 #define VK_W 'W'
253 #define VK_X 'X'
254 #define VK_Y 'Y'
255 #define VK_Z 'Z'
256 #endif /* VK_0 */
257 
258 /* These keys haven't been defined, but were experimentally determined */
259 #ifndef VK_SEMICOLON
260 #define VK_SEMICOLON 0xBA
261 #define VK_EQUALS 0xBB
262 #define VK_COMMA 0xBC
263 #define VK_MINUS 0xBD
264 #define VK_PERIOD 0xBE
265 #define VK_SLASH 0xBF
266 #define VK_GRAVE 0xC0
267 #define VK_LBRACKET 0xDB
268 #define VK_BACKSLASH 0xDC
269 #define VK_RBRACKET 0xDD
270 #define VK_APOSTROPHE 0xDE
271 #define VK_BACKTICK 0xDF
272 #define VK_OEM_102 0xE2
273 #endif
274