1 // GnashKey.h: map sets of keycodes to each other.
2 //
3 //   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
4 //   Free Software Foundation, Inc
5 //
6 // This program is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 3 of the License, or
9 // (at your option) any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software
18 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19 
20 #ifndef GNASHKEY_H
21 #define GNASHKEY_H
22 
23 namespace gnash {
24 
25 namespace key {
26 
27 /// Conflicts with mingw header with gcc3.x (or whatever
28 /// antiquated version mingw has).
29 #ifdef _WIN32
30 # undef REGISTERED
31 #endif
32 
33 enum modifier
34 {
35     GNASH_MOD_NONE = 0,
36     GNASH_MOD_SHIFT = 1,
37     GNASH_MOD_CONTROL = 2,
38     GNASH_MOD_ALT = 4
39 };
40 
41 // Gnash DisplayObject codes. Each code represents a single DisplayObject on the keyboard.
42 // The first 128 code are ordered by their correspond ASCII value.
43 enum code
44 {
45   INVALID = 0,
46   UNKNOWN1,
47   UNKNOWN2,
48   UNKNOWN3,
49   UNKNOWN4,
50   UNKNOWN5,
51   UNKNOWN6,
52   UNKNOWN7,
53   BACKSPACE = 8,
54   TAB = 9,
55   UNKNOWN10,
56   UNKNOWN11,
57   CLEAR = 12,
58   ENTER = 13,
59   UNKNOWN14,
60   UNKNOWN15,
61   SHIFT = 16,
62   CONTROL = 17,
63   ALT = 18,
64   PAUSE = 19,
65   CAPSLOCK = 20,
66   UNKNOWN21,
67   UNKNOWN22,
68   UNKNOWN23,
69   UNKNOWN24,
70   UNKNOWN25,
71   UNKNOWN26,
72   ESCAPE = 27,
73   UNKNOWN28,
74   UNKNOWN29,
75   UNKNOWN30,
76   UNKNOWN31,
77   SPACE = 32,
78   EXCLAM = 33,
79   DOUBLE_QUOTE = 34,
80   HASH = 35,
81   DOLLAR = 36,
82   PERCENT = 37,
83   AMPERSAND = 38 ,
84   SINGLE_QUOTE  = 39,
85   PAREN_LEFT = 40,
86   PAREN_RIGHT = 41,
87   ASTERISK = 42,
88   PLUS = 43,
89   COMMA = 44,
90   MINUS = 45,
91   PERIOD = 46,
92   SLASH =47,
93 
94   _0 = 48,
95   _1,
96   _2,
97   _3,
98   _4,
99   _5,
100   _6,
101   _7,
102   _8,
103   _9 = 57,
104 
105   COLON = 58,
106   SEMICOLON = 59,
107   LESS = 60,
108   EQUALS = 61,
109   MORE = 62,
110   QUESTION = 63,
111   AT = 64,
112 
113   A = 65,
114   B,
115   C,
116   D,
117   E,
118   F,
119   G,
120   H,
121   I,
122   J,
123   K,
124   L,
125   M,
126   N,
127   O,
128   P,
129   Q,
130   R,
131   S,
132   T,
133   U,
134   V,
135   W,
136   X,
137   Y,
138   Z = 90,
139 
140   LEFT_BRACKET =  91,
141   BACKSLASH =92,
142   RIGHT_BRACKET = 93,
143   CARET = 94,
144   UNDERSCORE = 95,
145   BACKQUOTE = 96,
146 
147   a = 97,
148   b,
149   c,
150   d,
151   e,
152   f,
153   g,
154   h,
155   i,
156   j,
157   k,
158   l,
159   m,
160   n,
161   o,
162   p,
163   q,
164   r,
165   s,
166   t,
167   u,
168   v,
169   w,
170   x,
171   y,
172   z = 122,
173   LEFT_BRACE = 123,
174   PIPE = 124,
175   RIGHT_BRACE = 125,
176   ASCIITILDE = 126,
177   DELETEKEY = 127,
178 
179   KP_0 = 128,
180   KP_1,
181   KP_2,
182   KP_3,
183   KP_4,
184   KP_5,
185   KP_6,
186   KP_7,
187   KP_8,
188   KP_9 = 137,
189 
190   F1 = 138,
191   F2,
192   F3,
193   F4,
194   F5,
195   F6,
196   F7,
197   F8,
198   F9,
199   F10,
200   F11,
201   F12,
202   F13,
203   F14,
204   F15 = 152,
205 
206   UP = 153,
207   DOWN = 154,
208   RIGHT = 155,
209   LEFT = 156,
210   INSERT = 157,
211   HOME = 158,
212   END  = 159,
213   PGUP = 160,
214   PGDN = 161,
215 
216   KP_ADD = 162,
217   KP_SUBTRACT = 163,
218   KP_MULTIPLY = 164,
219   KP_DIVIDE = 165,
220   KP_DECIMAL = 166,
221   KP_ENTER = 167,
222 
223   NUM_LOCK = 168,
224 
225 // Extended ASCII
226 
227   NOBREAKSPACE = 169,
228   EXCLAM_DOWN = 170,
229   CENT = 171,
230   STERLING = 172,
231   CURRENCY = 173,
232   YEN = 174,
233   BROKENBAR = 175,
234   SECTION = 176,
235   DIAERESIS = 177,
236   COPYRIGHT = 178,
237   ORDFEMININE = 179,
238   GUILLEMOTLEFT = 180,
239   NOTSIGN = 181,
240   HYPHEN = 182,
241   REGISTERED = 183,
242   MACRON = 184,
243   DEGREE = 185,
244   PLUSMINUS = 186,
245   TWOSUPERIOR = 187,
246   THREESUPERIOR = 188,
247   ACUTE = 189,
248   MU = 190,
249   PARAGRAPH = 191,
250   PERIODCENTRED = 192,
251   CEDILLA = 193,
252   ONESUPERIOR = 194,
253   MASCULINE = 195,
254   GUILLEMOTRIGHT = 196,
255   ONEQUARTER = 197,
256   ONEHALF = 198,
257   THREEQUARTERS = 199,
258   QUESTIONDOWN = 200,
259   AGRAVE = 201,
260   AACUTE = 202,
261   ACIRCUMFLEX = 203,
262   ATILDE = 204,
263   ADIAERESIS = 205,
264   ARING = 206,
265   AE = 207,
266   CCEDILLA = 208,
267   EGRAVE = 209,
268   EACUTE = 210,
269   ECIRCUMFLEX = 211,
270   EDIAERESIS = 212,
271   IGRAVE = 213,
272   IACUTE = 214,
273   ICIRCUMFLEX = 215,
274   IDIAERESIS = 216,
275   ETH = 217,
276   NTILDE = 218,
277   OGRAVE = 219,
278   OACUTE = 220,
279   OCIRCUMFLEX = 221,
280   OTILDE = 222,
281   ODIAERESIS = 223,
282   MULTIPLY = 224,
283   OSLASH = 225,
284   UGRAVE = 226,
285   UACUTE = 227,
286   UCIRCUMFLEX = 228,
287   UDIAERESIS = 229,
288   YACUTE = 230,
289   THORN = 231,
290   sSHARP = 232,
291   aGRAVE = 233,
292   aACUTE = 234,
293   aCIRCUMFLEX = 235,
294   aTILDE = 236,
295   aDIAERESIS = 237,
296   aRING = 238,
297   ae = 239,
298   cCEDILLA = 240,
299   eGRAVE = 241,
300   eACUTE = 242,
301   eCIRCUMFLEX = 243,
302   eDIAERESIS = 244,
303   iGRAVE = 245,
304   iACUTE = 246,
305   iCIRCUMFLEX = 247,
306   iDIAERESIS = 248,
307   eth = 249,
308   nTILDE = 250,
309   oGRAVE = 251,
310   oACUTE = 252,
311   oCIRCUMFLEX = 253,
312   oTILDE = 254,
313   oDIAERESIS = 255,
314   DIVISION = 256,
315   oSLASH = 257,
316   uGRAVE = 258,
317   uACUTE = 259,
318   uCIRCUMFLEX = 260,
319   uDIAERESIS = 261,
320   yACUTE = 262,
321   thorn = 263,
322   yDIAERESIS = 264,
323 
324   // TODO: add other function keys and DisplayObjects not yet known.
325   HELP = 265,
326   KEYCOUNT
327 };
328 
329 enum type
330 {
331 	SWF,
332 	KEY,
333 	ASCII,
334 	TYPES
335 };
336 
337 const unsigned char codeMap[KEYCOUNT][TYPES] = {
338 //{swfKeyCode, keycode, asciiKeyCode}
339   {0,   0,   0}, // INVALID = 0
340   {0,   0,   0}, // UNKNOWN1
341   {0,   0,   0}, // UNKNOWN2
342   {0,   0,   0}, // UNKNOWN3
343   {0,   0,   0}, // UNKNOWN4
344   {0,   0,   0}, // UNKNOWN5
345   {0,   0,   0}, // UNKNOWN6
346   {0,   0,   0}, // UNKNOWN7
347   {8,   8,   8}, // BACKSPACE = 8
348   {18,  9,   9}, // TAB = 9
349   {0,   0,   0}, // UNKNOWN10
350   {0,   0,   0}, // UNKNOWN11
351   {0,  12,   0}, // CLEAR = 12
352   {13, 13,  13}, // ENTER = 13
353   {0,   0,   0}, // UNKNOWN14
354   {0,   0,   0}, // UNKNOWN15
355   {0,  16,   0}, // SHIFT = 16
356   {0,  17,   0}, // CONTROL = 17
357   {0,  18,   0}, // ALT = 18
358   {0,  19,   0}, // PAUSE = 19
359   {0,  20,   0}, // CAPSLOCK = 20
360   {0,   0,   0}, // UNKNOWN21
361   {0,   0,   0}, // UNKNOWN22
362   {0,   0,   0}, // UNKNOWN23
363   {0,   0,   0}, // UNKNOWN24
364   {0,   0,   0}, // UNKNOWN25
365   {0,   0,   0}, // UNKNOWN26
366   {19, 27,  27}, // ESCAPE = 27
367   {0,   0,   0}, // UNKNOWN28
368   {0,   0,   0}, // UNKNOWN29
369   {0,   0,   0}, // UNKNOWN30
370   {0,   0,   0}, // UNKNOWN31
371   {32, 32,  32}, // SPACE = 32
372   {33, 49,  33}, // EXCLAM = 33
373   {34, 222,  34}, // DOUBLE_QUOTE = 34
374   {35, 51,  35}, // HASH = 35
375   {36, 52,  36}, // DOLLAR = 36
376   {37, 53,  37}, // PERCENT = 37
377   {38, 55,  38}, // AMPERSAND = 38
378   {39, 222,  39}, // SINGLE_QUOTE  = 39
379   {40, 57,  40}, // PAREN_LEFT = 40
380   {41, 48,  41}, // PAREN_RIGHT = 41
381   {42, 56,  42}, // ASTERISK = 42
382   {43, 187,  43}, // PLUS = 43
383   {44, 188,  44}, // COMMA = 44
384   {45, 189,  45}, // MINUS = 45
385   {46, 190,  46}, // PERIOD = 46
386   {47, 191,  47}, // SLASH = 47
387   {48, 48,  48}, // 0 = 48
388   {49, 49,  49}, // 1
389   {50, 50,  50}, // 2
390   {51, 51,  51}, // 3
391   {52, 52,  52}, // 4
392   {53, 53,  53}, // 5
393   {54, 54,  54}, // 6
394   {55, 55,  55}, // 7
395   {56, 56,  56}, // 8
396   {57, 57,  57}, // 9 = 57
397   {58, 186,  58}, // COLON = 58
398   {59, 186,  59}, // SEMICOLON = 59
399   {60, 188,  60}, // LESS = 60
400   {61, 187,  61}, // EQUALS = 61
401   {62, 190,  62}, // MORE = 62
402   {63, 191,  63}, // QUESTION = 63
403   {64, 50,  64}, // AT = 64
404   {65, 65,  65}, // A = 65
405   {66, 66,  66}, // B
406   {67, 67,  67}, // C
407   {68, 68,  68}, // D
408   {69, 69,  69}, // E
409   {70, 70,  70}, // F
410   {71, 71,  71}, // G
411   {72, 72,  72}, // H
412   {73, 73,  73}, // I
413   {74, 74,  74}, // J
414   {75, 75,  75}, // K
415   {76, 76,  76}, // L
416   {77, 77,  77}, // M
417   {78, 78,  78}, // N
418   {79, 79,  79}, // O
419   {80, 80,  80}, // P
420   {81, 81,  81}, // Q
421   {82, 82,  82}, // R
422   {83, 83,  83}, // S
423   {84, 84,  84}, // T
424   {85, 85,  85}, // U
425   {86, 86,  86}, // V
426   {87, 87,  87}, // W
427   {88, 88,  88}, // X
428   {89, 89,  89}, // Y
429   {90, 90,  90}, // Z = 90
430   {91, 219,  91}, // LEFT_BRACKET = 91
431   {92, 220,  92}, // BACKSLASH = 92
432   {93, 221,  93}, // RIGHT_BRACKET = 93
433   {94, 54,  94}, // CARET = 94
434   {95, 189,  95}, // UNDERSCORE = 95
435   {96, 192,  96}, // BACKQUOTE = 96
436   {97, 65,  97}, // a = 97
437   {98, 66,  98}, // b
438   {99, 67,  99}, // c
439   {100,68, 100}, // d
440   {101,69, 101}, // e
441   {102,70, 102}, // f
442   {103,71, 103}, // g
443   {104,72, 104}, // h
444   {105,73, 105}, // i
445   {106,74, 106}, // j
446   {107,75, 107}, // k
447   {108,76, 108}, // l
448   {109,77, 109}, // m
449   {110,78, 110}, // n
450   {111,79, 111}, // o
451   {112,80, 112}, // p
452   {113,81, 113}, // q
453   {114,82, 114}, // r
454   {115,83, 115}, // s
455   {116,84, 116}, // t
456   {117,85, 117}, // u
457   {118,86, 118}, // v
458   {119,87, 119}, // w
459   {120,88, 120}, // x
460   {121,89, 121}, // y
461   {122,90, 122}, // z = 122
462   {123,219,123}, // LEFT_BRACE = 123
463   {124,220,124}, // PIPE = 124
464   {125,221,125}, // RIGHT_BRACE = 125
465   {126,192,126}, // ASCIITILDE = 126
466   {6,  46, 127}, // DELETE = 127
467   {48, 96,  48}, // KP_0 = 128
468   {49, 97,  49}, // KP_1
469   {50, 98,  50}, // KP_2
470   {51, 99,  51}, // KP_3
471   {52, 100, 52}, // KP_4
472   {53, 101, 53}, // KP_5
473   {54, 102, 54}, // KP_6
474   {55, 103, 55}, // KP_7
475   {56, 104, 56}, // KP_8
476   {57, 105, 57}, // KP_9
477   {0,  112,  0}, // F1 = 138
478   {0,  113,  0}, // F2
479   {0,  114,  0}, // F3
480   {0,  115,  0}, // F4
481   {0,  116,  0}, // F5
482   {0,  117,  0}, // F6
483   {0,  118,  0}, // F7
484   {0,  119,  0}, // F8
485   {0,  120,  0}, // F9
486   {0,  121,  0}, // F10
487   {0,  122,  0}, // F11
488   {0,  123,  0}, // F12
489   {0,  124,  0}, // F13
490   {0,  125,  0}, // F14
491   {0,  126,  0}, // F15 = 152
492   {14, 38,   0}, // UP = 153
493   {15, 40,   0}, // DOWN = 154
494   {2,  39,   0}, // RIGHT = 155
495   {1,  37,   0}, // LEFT = 156
496   {5,  45,   0}, // INSERT = 157
497   {3,  36,   0}, // HOME = 158
498   {4,  35,   0}, // END = 159
499   {16, 33,   0}, // PAGEUP = 160
500   {17, 34,   0}, // PAGEDOWN = 161
501   {0, 107,  43}, // KP_ADD = 162
502   {0, 109,  45}, // KP_SUBTRACT = 163
503   {0, 106,  42}, // KP_MULITPLY = 164
504   {0, 111,  47}, // KP_DIVIDE = 165
505   {0, 110,  46}, // KP_DECIMAL = 166
506   {13, 13,  13}, // KP_ENTER = 167
507   {0, 144,   0}, // NUMLOCK = 168
508   {0, 160,   160}, // NOBREAKSPACE = 169
509   {0, 161,   161}, //   EXCLAM_DOWN = 170
510   {0, 162,   162}, //   CENT = 171
511   {0, 163,   163}, //   STERLING = 172
512   {0, 164,   164}, //   CURRENCY = 173
513   {0, 165,   165}, //   YEN = 174
514   {0, 166,   166}, //   BROKENBAR = 175
515   {0, 167,   167}, //   SECTION = 176
516   {0, 168,   168}, //   DIAERESIS = 177
517   {0, 169,   169}, //   COPYRIGHT = 178
518   {0, 170,   170}, //   ORDFEMININE = 179
519   {0, 171,   171}, //   GUILLEMOTLEFT = 180
520   {0, 172,   172}, //   NOTSIGN = 181
521   {0, 173,   173}, //   HYPHEN = 182
522   {0, 174,   174}, //   REGISTERED = 183
523   {0, 175,   175}, //   MACRON = 184
524   {0, 176,   176}, //   DEGREE = 185
525   {0, 177,   177}, //   PLUSMINUS = 186
526   {0, 178,   178}, //   TWOSUPERIOR = 187
527   {0, 179,   179}, //   THREESUPERIOR = 188
528   {0, 180,   180}, //   ACUTE = 189
529   {0, 181,   181}, //   MU = 190
530   {0, 182,   182}, //   PARAGRAPH = 191
531   {0, 183,   183}, //   PERIODCENTRED = 192
532   {0, 184,   184}, //   CEDILLA = 193
533   {0, 185,   185}, //   ONESUPERIOR = 194
534   {0, 186,   186}, //   MASCULINE = 195
535   {0, 187,   187}, //   GUILLEMOTRIGHT = 196
536   {0, 188,   188}, //   ONEQUARTER = 197
537   {0, 189,   189}, //   ONEHALF = 198
538   {0, 190,   190}, //   THREEQUARTERS = 199
539   {0, 191,   191}, //   QUESTIONDOWN = 200
540   {0, 192,   192}, //   AGRAVE = 201
541   {0, 193,   193}, //   AACUTE = 202
542   {0, 194,   194}, //   ACIRCUMFLEX = 203
543   {0, 195,   195}, //   ATILDE = 204
544   {0, 196,   196}, //   ADIAERISIS = 205
545   {0, 197,   197}, //   ARING = 206
546   {0, 198,   198}, //   AE = 207
547   {0, 199,   199}, //   CCEDILLA = 208
548   {0, 200,   200}, //   EGRAVE = 209
549   {0, 201,   201}, //   EACUTE = 210
550   {0, 202,   202}, //   ECIRCUMFLEX = 211
551   {0, 203,   203}, //   EDIAERESIS = 212
552   {0, 204,   204}, //   IGRAVE = 213
553   {0, 205,   205}, //   IACUTE = 214
554   {0, 206,   206}, //   ICIRCUMFLEX = 215
555   {0, 207,   207}, //   IDIAERESIS = 216
556   {0, 208,   208}, //   ETH = 217
557   {0, 209,   209}, //   NTILDE = 218
558   {0, 210,   210}, //   OGRAVE = 219
559   {0, 211,   211}, //   OACUTE = 220
560   {0, 212,   212}, //   OCIRCUMFLEX = 221
561   {0, 213,   213}, //   OTILDE = 222
562   {0, 214,   214}, //   ODIAERESIS = 223
563   {0, 215,   215}, //   MULTIPLY = 224
564   {0, 216,   116}, //   OSLASH = 225
565   {0, 217,   217}, //   UGRAVE = 226
566   {0, 218,   218}, //   UACTUE = 227
567   {0, 219,   219}, //   UCIRCUMFLEX = 228
568   {0, 220,   220}, //   UDIAERESIS = 229
569   {0, 221,   221}, //   ZACUTE = 230
570   {0, 222,   222}, //   THORN = 231
571   {0, 223,   223}, //   sSHARP = 232
572   {0, 224,   224}, //   aTILDE = 233
573   {0, 225,   225}, //   aACUTE = 234
574   {0, 226,   226}, //   aCIRCUMFLEX = 235
575   {0, 227,   227}, //   aTILDE = 236
576   {0, 228,   228}, //   aDIAERESIS = 237
577   {0, 229,   229}, //   aRING = 238
578   {0, 230,   230}, //   ae = 239
579   {0, 231,   231}, //   cCEDILLA = 240
580   {0, 232,   232}, //   eGRAVE = 241
581   {0, 233,   233}, //   eACUTE = 242
582   {0, 234,   234}, //   eCIRCUMFLEX = 243
583   {0, 235,   235}, //   eDIAERESIS = 244
584   {0, 236,   236}, //   iGRAVE = 245
585   {0, 237,   237}, //   iACUTE = 246
586   {0, 238,   238}, //   iCIRCUMFLEX = 247
587   {0, 239,   239}, //   iDIAERESIS = 248
588   {0, 240,   240}, //   eth = 249
589   {0, 241,   241}, //   nTILDE = 250
590   {0, 242,   242}, //   oTILDE = 251
591   {0, 243,   243}, //   oACUTE = 252
592   {0, 244,   244}, //   oCIRCUMFLEX = 253
593   {0, 245,   245}, //   oTILDE = 254
594   {0, 246,   246}, //   oDIAERESIS = 255
595   {0, 247,   247}, //   DIVISION = 256
596   {0, 248,   248}, //   oSLASH = 257
597   {0, 249,   249}, //   uGRAVE = 258
598   {0, 250,   250}, //   uACUTE = 259
599   {0, 251,   251}, //   uCIRCUMFLEX = 260
600   {0, 252,   252}, //   uDIAERESIS = 261
601   {0, 253,   253}, //   yACUTE = 262
602   {0, 254,   254}, //   thorn = 263
603   {0, 255,   255}, //   yDIAERESIS = 264
604   {0, 0,     0},   //   HELP (untested)
605 };
606 
607 }   // end namespace key
608 
609 } // end namespace gnash
610 
611 #endif // GNASHKEY_H
612