1 //============================================================================
2 //
3 //   SSSS    tt          lll  lll
4 //  SS  SS   tt           ll   ll
5 //  SS     tttttt  eeee   ll   ll   aaaa
6 //   SSSS    tt   ee  ee  ll   ll      aa
7 //      SS   tt   eeeeee  ll   ll   aaaaa  --  "An Atari 2600 VCS Emulator"
8 //  SS  SS   tt   ee      ll   ll  aa  aa
9 //   SSSS     ttt  eeeee llll llll  aaaaa
10 //
11 // Copyright (c) 1995-2014 by Bradford W. Mott, Stephen Anthony
12 // and the Stella Team
13 //
14 // See the file "License.txt" for information on usage and redistribution of
15 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
16 //
17 // $Id: StellaKeys.hxx 2838 2014-01-17 23:34:03Z stephena $
18 //============================================================================
19 
20 #ifndef STELLA_KEYS_HXX
21 #define STELLA_KEYS_HXX
22 
23 /**
24   This class implements a thin wrapper around the SDL keysym enumerations,
25   such that SDL-specific code doesn't have to go into the internal parts of
26   the codebase.  The keycodes are exactly the same, but from the POV of the
27   rest of the code, they are *KBD* (keyboard) keys, not *SDL* keys.
28 
29   Once the codebase is ported to SDL2, the intent is to simply change this
30   file without having to modify all other classes that use StellaKey.
31 
32   @author  Stephen Anthony
33 */
34 
35 // This comes directly from SDL_keysym.h
36 typedef enum {
37         /** @name ASCII mapped keysyms
38          *  The keyboard syms have been cleverly chosen to map to ASCII
39          */
40         /*@{*/
41 	KBDK_UNKNOWN		= 0,
42 	KBDK_FIRST		= 0,
43 	KBDK_BACKSPACE		= 8,
44 	KBDK_TAB		= 9,
45 	KBDK_CLEAR		= 12,
46 	KBDK_RETURN		= 13,
47 	KBDK_PAUSE		= 19,
48 	KBDK_ESCAPE		= 27,
49 	KBDK_SPACE		= 32,
50 	KBDK_EXCLAIM		= 33,
51 	KBDK_QUOTEDBL		= 34,
52 	KBDK_HASH		= 35,
53 	KBDK_DOLLAR		= 36,
54 	KBDK_AMPERSAND		= 38,
55 	KBDK_QUOTE		= 39,
56 	KBDK_LEFTPAREN		= 40,
57 	KBDK_RIGHTPAREN		= 41,
58 	KBDK_ASTERISK		= 42,
59 	KBDK_PLUS		= 43,
60 	KBDK_COMMA		= 44,
61 	KBDK_MINUS		= 45,
62 	KBDK_PERIOD		= 46,
63 	KBDK_SLASH		= 47,
64 	KBDK_0			= 48,
65 	KBDK_1			= 49,
66 	KBDK_2			= 50,
67 	KBDK_3			= 51,
68 	KBDK_4			= 52,
69 	KBDK_5			= 53,
70 	KBDK_6			= 54,
71 	KBDK_7			= 55,
72 	KBDK_8			= 56,
73 	KBDK_9			= 57,
74 	KBDK_COLON		= 58,
75 	KBDK_SEMICOLON		= 59,
76 	KBDK_LESS		= 60,
77 	KBDK_EQUALS		= 61,
78 	KBDK_GREATER		= 62,
79 	KBDK_QUESTION		= 63,
80 	KBDK_AT			= 64,
81 	/*
82 	   Skip uppercase letters
83 	 */
84 	KBDK_LEFTBRACKET	= 91,
85 	KBDK_BACKSLASH		= 92,
86 	KBDK_RIGHTBRACKET	= 93,
87 	KBDK_CARET		= 94,
88 	KBDK_UNDERSCORE		= 95,
89 	KBDK_BACKQUOTE		= 96,
90 	KBDK_a			= 97,
91 	KBDK_b			= 98,
92 	KBDK_c			= 99,
93 	KBDK_d			= 100,
94 	KBDK_e			= 101,
95 	KBDK_f			= 102,
96 	KBDK_g			= 103,
97 	KBDK_h			= 104,
98 	KBDK_i			= 105,
99 	KBDK_j			= 106,
100 	KBDK_k			= 107,
101 	KBDK_l			= 108,
102 	KBDK_m			= 109,
103 	KBDK_n			= 110,
104 	KBDK_o			= 111,
105 	KBDK_p			= 112,
106 	KBDK_q			= 113,
107 	KBDK_r			= 114,
108 	KBDK_s			= 115,
109 	KBDK_t			= 116,
110 	KBDK_u			= 117,
111 	KBDK_v			= 118,
112 	KBDK_w			= 119,
113 	KBDK_x			= 120,
114 	KBDK_y			= 121,
115 	KBDK_z			= 122,
116 	KBDK_DELETE		= 127,
117 	/* End of ASCII mapped keysyms */
118         /*@}*/
119 
120 	/** @name International keyboard syms */
121         /*@{*/
122 	KBDK_WORLD_0		= 160,		/* 0xA0 */
123 	KBDK_WORLD_1		= 161,
124 	KBDK_WORLD_2		= 162,
125 	KBDK_WORLD_3		= 163,
126 	KBDK_WORLD_4		= 164,
127 	KBDK_WORLD_5		= 165,
128 	KBDK_WORLD_6		= 166,
129 	KBDK_WORLD_7		= 167,
130 	KBDK_WORLD_8		= 168,
131 	KBDK_WORLD_9		= 169,
132 	KBDK_WORLD_10		= 170,
133 	KBDK_WORLD_11		= 171,
134 	KBDK_WORLD_12		= 172,
135 	KBDK_WORLD_13		= 173,
136 	KBDK_WORLD_14		= 174,
137 	KBDK_WORLD_15		= 175,
138 	KBDK_WORLD_16		= 176,
139 	KBDK_WORLD_17		= 177,
140 	KBDK_WORLD_18		= 178,
141 	KBDK_WORLD_19		= 179,
142 	KBDK_WORLD_20		= 180,
143 	KBDK_WORLD_21		= 181,
144 	KBDK_WORLD_22		= 182,
145 	KBDK_WORLD_23		= 183,
146 	KBDK_WORLD_24		= 184,
147 	KBDK_WORLD_25		= 185,
148 	KBDK_WORLD_26		= 186,
149 	KBDK_WORLD_27		= 187,
150 	KBDK_WORLD_28		= 188,
151 	KBDK_WORLD_29		= 189,
152 	KBDK_WORLD_30		= 190,
153 	KBDK_WORLD_31		= 191,
154 	KBDK_WORLD_32		= 192,
155 	KBDK_WORLD_33		= 193,
156 	KBDK_WORLD_34		= 194,
157 	KBDK_WORLD_35		= 195,
158 	KBDK_WORLD_36		= 196,
159 	KBDK_WORLD_37		= 197,
160 	KBDK_WORLD_38		= 198,
161 	KBDK_WORLD_39		= 199,
162 	KBDK_WORLD_40		= 200,
163 	KBDK_WORLD_41		= 201,
164 	KBDK_WORLD_42		= 202,
165 	KBDK_WORLD_43		= 203,
166 	KBDK_WORLD_44		= 204,
167 	KBDK_WORLD_45		= 205,
168 	KBDK_WORLD_46		= 206,
169 	KBDK_WORLD_47		= 207,
170 	KBDK_WORLD_48		= 208,
171 	KBDK_WORLD_49		= 209,
172 	KBDK_WORLD_50		= 210,
173 	KBDK_WORLD_51		= 211,
174 	KBDK_WORLD_52		= 212,
175 	KBDK_WORLD_53		= 213,
176 	KBDK_WORLD_54		= 214,
177 	KBDK_WORLD_55		= 215,
178 	KBDK_WORLD_56		= 216,
179 	KBDK_WORLD_57		= 217,
180 	KBDK_WORLD_58		= 218,
181 	KBDK_WORLD_59		= 219,
182 	KBDK_WORLD_60		= 220,
183 	KBDK_WORLD_61		= 221,
184 	KBDK_WORLD_62		= 222,
185 	KBDK_WORLD_63		= 223,
186 	KBDK_WORLD_64		= 224,
187 	KBDK_WORLD_65		= 225,
188 	KBDK_WORLD_66		= 226,
189 	KBDK_WORLD_67		= 227,
190 	KBDK_WORLD_68		= 228,
191 	KBDK_WORLD_69		= 229,
192 	KBDK_WORLD_70		= 230,
193 	KBDK_WORLD_71		= 231,
194 	KBDK_WORLD_72		= 232,
195 	KBDK_WORLD_73		= 233,
196 	KBDK_WORLD_74		= 234,
197 	KBDK_WORLD_75		= 235,
198 	KBDK_WORLD_76		= 236,
199 	KBDK_WORLD_77		= 237,
200 	KBDK_WORLD_78		= 238,
201 	KBDK_WORLD_79		= 239,
202 	KBDK_WORLD_80		= 240,
203 	KBDK_WORLD_81		= 241,
204 	KBDK_WORLD_82		= 242,
205 	KBDK_WORLD_83		= 243,
206 	KBDK_WORLD_84		= 244,
207 	KBDK_WORLD_85		= 245,
208 	KBDK_WORLD_86		= 246,
209 	KBDK_WORLD_87		= 247,
210 	KBDK_WORLD_88		= 248,
211 	KBDK_WORLD_89		= 249,
212 	KBDK_WORLD_90		= 250,
213 	KBDK_WORLD_91		= 251,
214 	KBDK_WORLD_92		= 252,
215 	KBDK_WORLD_93		= 253,
216 	KBDK_WORLD_94		= 254,
217 	KBDK_WORLD_95		= 255,		/* 0xFF */
218         /*@}*/
219 
220 	/** @name Numeric keypad */
221         /*@{*/
222 	KBDK_KP0		= 256,
223 	KBDK_KP1		= 257,
224 	KBDK_KP2		= 258,
225 	KBDK_KP3		= 259,
226 	KBDK_KP4		= 260,
227 	KBDK_KP5		= 261,
228 	KBDK_KP6		= 262,
229 	KBDK_KP7		= 263,
230 	KBDK_KP8		= 264,
231 	KBDK_KP9		= 265,
232 	KBDK_KP_PERIOD		= 266,
233 	KBDK_KP_DIVIDE		= 267,
234 	KBDK_KP_MULTIPLY	= 268,
235 	KBDK_KP_MINUS		= 269,
236 	KBDK_KP_PLUS		= 270,
237 	KBDK_KP_ENTER		= 271,
238 	KBDK_KP_EQUALS		= 272,
239         /*@}*/
240 
241 	/** @name Arrows + Home/End pad */
242         /*@{*/
243 	KBDK_UP			= 273,
244 	KBDK_DOWN		= 274,
245 	KBDK_RIGHT		= 275,
246 	KBDK_LEFT		= 276,
247 	KBDK_INSERT		= 277,
248 	KBDK_HOME		= 278,
249 	KBDK_END		= 279,
250 	KBDK_PAGEUP		= 280,
251 	KBDK_PAGEDOWN		= 281,
252         /*@}*/
253 
254 	/** @name Function keys */
255         /*@{*/
256 	KBDK_F1			= 282,
257 	KBDK_F2			= 283,
258 	KBDK_F3			= 284,
259 	KBDK_F4			= 285,
260 	KBDK_F5			= 286,
261 	KBDK_F6			= 287,
262 	KBDK_F7			= 288,
263 	KBDK_F8			= 289,
264 	KBDK_F9			= 290,
265 	KBDK_F10		= 291,
266 	KBDK_F11		= 292,
267 	KBDK_F12		= 293,
268 	KBDK_F13		= 294,
269 	KBDK_F14		= 295,
270 	KBDK_F15		= 296,
271         /*@}*/
272 
273 	/** @name Key state modifier keys */
274         /*@{*/
275 	KBDK_NUMLOCK		= 300,
276 	KBDK_CAPSLOCK		= 301,
277 	KBDK_SCROLLOCK		= 302,
278 	KBDK_RSHIFT		= 303,
279 	KBDK_LSHIFT		= 304,
280 	KBDK_RCTRL		= 305,
281 	KBDK_LCTRL		= 306,
282 	KBDK_RALT		= 307,
283 	KBDK_LALT		= 308,
284 	KBDK_RMETA		= 309,
285 	KBDK_LMETA		= 310,
286 	KBDK_LSUPER		= 311,		/**< Left "Windows" key */
287 	KBDK_RSUPER		= 312,		/**< Right "Windows" key */
288 	KBDK_MODE		= 313,		/**< "Alt Gr" key */
289 	KBDK_COMPOSE		= 314,		/**< Multi-key compose key */
290         /*@}*/
291 
292 	/** @name Miscellaneous function keys */
293         /*@{*/
294 	KBDK_HELP		= 315,
295 	KBDK_PRINT		= 316,
296 	KBDK_SYSREQ		= 317,
297 	KBDK_BREAK		= 318,
298 	KBDK_MENU		= 319,
299 	KBDK_POWER		= 320,		/**< Power Macintosh power key */
300 	KBDK_EURO		= 321,		/**< Some european keyboards */
301 	KBDK_UNDO		= 322,		/**< Atari keyboard has Undo */
302         /*@}*/
303 
304 	/* Add any other keys here */
305 
306 	KBDK_LAST
307 } StellaKey;
308 
309 // Just pass SDLMod directly as int (placeholder for now)
310 // The underlying code doesn't need to know how it's implemented
311 typedef int StellaMod;
312 
313 #endif /* StellaKeys */
314