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