// auto-generated from keys.py, do not edit! #pragma once #include #include #include #include // map glfw key numbers to 7-bit numbers for compact data storage static const uint8_t key_map[349] = { UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 0, /* SPACE */ 1, /* EXCLAM */ 2, /* DOUBLE_QUOTE */ 3, /* NUMBER_SIGN */ 4, /* DOLLAR */ UINT8_MAX, 5, /* AMPERSAND */ 6, /* APOSTROPHE */ 7, /* PARENTHESIS_LEFT */ 8, /* PARENTHESIS_RIGHT */ UINT8_MAX, 9, /* PLUS */ 10, /* COMMA */ 11, /* MINUS */ 12, /* PERIOD */ 13, /* SLASH */ 14, /* 0 */ 15, /* 1 */ 16, /* 2 */ 17, /* 3 */ 18, /* 4 */ 19, /* 5 */ 20, /* 6 */ 21, /* 7 */ 22, /* 8 */ 23, /* 9 */ 24, /* COLON */ 25, /* SEMICOLON */ 26, /* LESS */ 27, /* EQUAL */ 28, /* GREATER */ UINT8_MAX, 29, /* AT */ 30, /* A */ 31, /* B */ 32, /* C */ 33, /* D */ 34, /* E */ 35, /* F */ 36, /* G */ 37, /* H */ 38, /* I */ 39, /* J */ 40, /* K */ 41, /* L */ 42, /* M */ 43, /* N */ 44, /* O */ 45, /* P */ 46, /* Q */ 47, /* R */ 48, /* S */ 49, /* T */ 50, /* U */ 51, /* V */ 52, /* W */ 53, /* X */ 54, /* Y */ 55, /* Z */ 56, /* LEFT_BRACKET */ 57, /* BACKSLASH */ 58, /* RIGHT_BRACKET */ UINT8_MAX, 59, /* UNDERSCORE */ 60, /* GRAVE_ACCENT */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 61, /* WORLD_1 */ 62, /* WORLD_2 */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 63, /* PARAGRAPH */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 64, /* MASCULINE */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 65, /* A_GRAVE */ UINT8_MAX, UINT8_MAX, UINT8_MAX, 66, /* A_DIAERESIS */ 67, /* A_RING */ 68, /* AE */ 69, /* C_CEDILLA */ 70, /* E_GRAVE */ 71, /* E_ACUTE */ UINT8_MAX, UINT8_MAX, 72, /* I_GRAVE */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 73, /* N_TILDE */ 74, /* O_GRAVE */ UINT8_MAX, UINT8_MAX, UINT8_MAX, 75, /* O_DIAERESIS */ UINT8_MAX, 76, /* O_SLASH */ 77, /* U_GRAVE */ UINT8_MAX, UINT8_MAX, 78, /* U_DIAERESIS */ UINT8_MAX, 79, /* S_SHARP */ 80, /* CYRILLIC_A */ 81, /* CYRILLIC_BE */ 82, /* CYRILLIC_VE */ 83, /* CYRILLIC_GHE */ 84, /* CYRILLIC_DE */ 85, /* CYRILLIC_IE */ 86, /* CYRILLIC_ZHE */ 87, /* CYRILLIC_ZE */ 88, /* CYRILLIC_I */ 89, /* CYRILLIC_SHORT_I */ 90, /* CYRILLIC_KA */ 91, /* CYRILLIC_EL */ 92, /* CYRILLIC_EM */ 93, /* CYRILLIC_EN */ 94, /* CYRILLIC_O */ 95, /* CYRILLIC_PE */ 96, /* CYRILLIC_ER */ 97, /* CYRILLIC_ES */ 98, /* CYRILLIC_TE */ 99, /* CYRILLIC_U */ 100, /* CYRILLIC_EF */ 101, /* CYRILLIC_HA */ 102, /* CYRILLIC_TSE */ 103, /* CYRILLIC_CHE */ 104, /* CYRILLIC_SHA */ 105, /* CYRILLIC_SHCHA */ 106, /* CYRILLIC_HARD_SIGN */ 107, /* CYRILLIC_YERU */ 108, /* CYRILLIC_SOFT_SIGN */ 109, /* CYRILLIC_E */ 110, /* CYRILLIC_YU */ 111, /* CYRILLIC_YA */ 112, /* CYRILLIC_IO */ 113, /* ESCAPE */ 114, /* ENTER */ 115, /* TAB */ 116, /* BACKSPACE */ 117, /* INSERT */ 118, /* DELETE */ 119, /* RIGHT */ 120, /* LEFT */ 121, /* DOWN */ 122, /* UP */ 123, /* PAGE_UP */ 124, /* PAGE_DOWN */ 125, /* HOME */ 126, /* END */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 127, /* CAPS_LOCK */ 128, /* SCROLL_LOCK */ 129, /* NUM_LOCK */ 130, /* PRINT_SCREEN */ 131, /* PAUSE */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 132, /* F1 */ 133, /* F2 */ 134, /* F3 */ 135, /* F4 */ 136, /* F5 */ 137, /* F6 */ 138, /* F7 */ 139, /* F8 */ 140, /* F9 */ 141, /* F10 */ 142, /* F11 */ 143, /* F12 */ 144, /* F13 */ 145, /* F14 */ 146, /* F15 */ 147, /* F16 */ 148, /* F17 */ 149, /* F18 */ 150, /* F19 */ 151, /* F20 */ 152, /* F21 */ 153, /* F22 */ 154, /* F23 */ 155, /* F24 */ 156, /* F25 */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, 157, /* KP_0 */ 158, /* KP_1 */ 159, /* KP_2 */ 160, /* KP_3 */ 161, /* KP_4 */ 162, /* KP_5 */ 163, /* KP_6 */ 164, /* KP_7 */ 165, /* KP_8 */ 166, /* KP_9 */ 167, /* KP_DECIMAL */ 168, /* KP_DIVIDE */ 169, /* KP_MULTIPLY */ 170, /* KP_SUBTRACT */ 171, /* KP_ADD */ 172, /* KP_ENTER */ 173, /* KP_EQUAL */ UINT8_MAX, UINT8_MAX, UINT8_MAX, 174, /* LEFT_SHIFT */ 175, /* LEFT_CONTROL */ 176, /* LEFT_ALT */ 177, /* LEFT_SUPER */ 178, /* RIGHT_SHIFT */ 179, /* RIGHT_CONTROL */ 180, /* RIGHT_ALT */ 181, /* RIGHT_SUPER */ 182, /* MENU */ }; static inline const char* key_name(int key) { switch(key) { case 32: return "SPACE"; case 33: return "EXCLAM"; case 34: return "DOUBLE_QUOTE"; case 35: return "NUMBER_SIGN"; case 36: return "DOLLAR"; case 38: return "AMPERSAND"; case 39: return "APOSTROPHE"; case 40: return "PARENTHESIS_LEFT"; case 41: return "PARENTHESIS_RIGHT"; case 43: return "PLUS"; case 44: return "COMMA"; case 45: return "MINUS"; case 46: return "PERIOD"; case 47: return "SLASH"; case 48: return "0"; case 49: return "1"; case 50: return "2"; case 51: return "3"; case 52: return "4"; case 53: return "5"; case 54: return "6"; case 55: return "7"; case 56: return "8"; case 57: return "9"; case 58: return "COLON"; case 59: return "SEMICOLON"; case 60: return "LESS"; case 61: return "EQUAL"; case 62: return "GREATER"; case 64: return "AT"; case 65: return "A"; case 66: return "B"; case 67: return "C"; case 68: return "D"; case 69: return "E"; case 70: return "F"; case 71: return "G"; case 72: return "H"; case 73: return "I"; case 74: return "J"; case 75: return "K"; case 76: return "L"; case 77: return "M"; case 78: return "N"; case 79: return "O"; case 80: return "P"; case 81: return "Q"; case 82: return "R"; case 83: return "S"; case 84: return "T"; case 85: return "U"; case 86: return "V"; case 87: return "W"; case 88: return "X"; case 89: return "Y"; case 90: return "Z"; case 91: return "LEFT_BRACKET"; case 92: return "BACKSLASH"; case 93: return "RIGHT_BRACKET"; case 95: return "UNDERSCORE"; case 96: return "GRAVE_ACCENT"; case 161: return "WORLD_1"; case 162: return "WORLD_2"; case 167: return "PARAGRAPH"; case 186: return "MASCULINE"; case 192: return "A_GRAVE"; case 196: return "A_DIAERESIS"; case 197: return "A_RING"; case 198: return "AE"; case 199: return "C_CEDILLA"; case 200: return "E_GRAVE"; case 201: return "E_ACUTE"; case 204: return "I_GRAVE"; case 209: return "N_TILDE"; case 210: return "O_GRAVE"; case 214: return "O_DIAERESIS"; case 216: return "O_SLASH"; case 217: return "U_GRAVE"; case 220: return "U_DIAERESIS"; case 222: return "S_SHARP"; case 223: return "CYRILLIC_A"; case 224: return "CYRILLIC_BE"; case 225: return "CYRILLIC_VE"; case 226: return "CYRILLIC_GHE"; case 227: return "CYRILLIC_DE"; case 228: return "CYRILLIC_IE"; case 229: return "CYRILLIC_ZHE"; case 230: return "CYRILLIC_ZE"; case 231: return "CYRILLIC_I"; case 232: return "CYRILLIC_SHORT_I"; case 233: return "CYRILLIC_KA"; case 234: return "CYRILLIC_EL"; case 235: return "CYRILLIC_EM"; case 236: return "CYRILLIC_EN"; case 237: return "CYRILLIC_O"; case 238: return "CYRILLIC_PE"; case 239: return "CYRILLIC_ER"; case 240: return "CYRILLIC_ES"; case 241: return "CYRILLIC_TE"; case 242: return "CYRILLIC_U"; case 243: return "CYRILLIC_EF"; case 244: return "CYRILLIC_HA"; case 245: return "CYRILLIC_TSE"; case 246: return "CYRILLIC_CHE"; case 247: return "CYRILLIC_SHA"; case 248: return "CYRILLIC_SHCHA"; case 249: return "CYRILLIC_HARD_SIGN"; case 250: return "CYRILLIC_YERU"; case 251: return "CYRILLIC_SOFT_SIGN"; case 252: return "CYRILLIC_E"; case 253: return "CYRILLIC_YU"; case 254: return "CYRILLIC_YA"; case 255: return "CYRILLIC_IO"; case 256: return "ESCAPE"; case 257: return "ENTER"; case 258: return "TAB"; case 259: return "BACKSPACE"; case 260: return "INSERT"; case 261: return "DELETE"; case 262: return "RIGHT"; case 263: return "LEFT"; case 264: return "DOWN"; case 265: return "UP"; case 266: return "PAGE_UP"; case 267: return "PAGE_DOWN"; case 268: return "HOME"; case 269: return "END"; case 280: return "CAPS_LOCK"; case 281: return "SCROLL_LOCK"; case 282: return "NUM_LOCK"; case 283: return "PRINT_SCREEN"; case 284: return "PAUSE"; case 290: return "F1"; case 291: return "F2"; case 292: return "F3"; case 293: return "F4"; case 294: return "F5"; case 295: return "F6"; case 296: return "F7"; case 297: return "F8"; case 298: return "F9"; case 299: return "F10"; case 300: return "F11"; case 301: return "F12"; case 302: return "F13"; case 303: return "F14"; case 304: return "F15"; case 305: return "F16"; case 306: return "F17"; case 307: return "F18"; case 308: return "F19"; case 309: return "F20"; case 310: return "F21"; case 311: return "F22"; case 312: return "F23"; case 313: return "F24"; case 314: return "F25"; case 320: return "KP_0"; case 321: return "KP_1"; case 322: return "KP_2"; case 323: return "KP_3"; case 324: return "KP_4"; case 325: return "KP_5"; case 326: return "KP_6"; case 327: return "KP_7"; case 328: return "KP_8"; case 329: return "KP_9"; case 330: return "KP_DECIMAL"; case 331: return "KP_DIVIDE"; case 332: return "KP_MULTIPLY"; case 333: return "KP_SUBTRACT"; case 334: return "KP_ADD"; case 335: return "KP_ENTER"; case 336: return "KP_EQUAL"; case 340: return "LEFT_SHIFT"; case 341: return "LEFT_CONTROL"; case 342: return "LEFT_ALT"; case 343: return "LEFT_SUPER"; case 344: return "RIGHT_SHIFT"; case 345: return "RIGHT_CONTROL"; case 346: return "RIGHT_ALT"; case 347: return "RIGHT_SUPER"; case 348: return "MENU"; default: return NULL; }} typedef enum { NORMAL, APPLICATION, EXTENDED } KeyboardMode; static inline const char* key_lookup(uint8_t key, KeyboardMode mode, uint8_t mods, uint8_t action) { switch(mode) { case NORMAL: switch(action & 3) { case 3: return NULL; case 0: // RELEASE return NULL; case 1: // PRESS switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x32\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x32\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x32\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x32\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x32\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x32\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x32\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x32\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x32\x7e"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x01\x00"; case 6: // APOSTROPHE return "\x01\x27"; case 10: // COMMA return "\x01\x2c"; case 11: // MINUS return "\x01\x2d"; case 12: // PERIOD return "\x01\x2e"; case 13: // SLASH return "\x01\x1f"; case 14: // 0 return "\x01\x30"; case 15: // 1 return "\x01\x31"; case 16: // 2 return "\x01\x00"; case 17: // 3 return "\x01\x1b"; case 18: // 4 return "\x01\x1c"; case 19: // 5 return "\x01\x1d"; case 20: // 6 return "\x01\x1e"; case 21: // 7 return "\x01\x1f"; case 22: // 8 return "\x01\x7f"; case 23: // 9 return "\x01\x39"; case 25: // SEMICOLON return "\x01\x3b"; case 27: // EQUAL return "\x01\x3d"; case 30: // A return "\x01\x01"; case 31: // B return "\x01\x02"; case 32: // C return "\x01\x03"; case 33: // D return "\x01\x04"; case 34: // E return "\x01\x05"; case 35: // F return "\x01\x06"; case 36: // G return "\x01\x07"; case 37: // H return "\x01\x08"; case 38: // I return "\x01\x09"; case 39: // J return "\x01\x0a"; case 40: // K return "\x01\x0b"; case 41: // L return "\x01\x0c"; case 42: // M return "\x01\x0d"; case 43: // N return "\x01\x0e"; case 44: // O return "\x01\x0f"; case 45: // P return "\x01\x10"; case 46: // Q return "\x01\x11"; case 47: // R return "\x01\x12"; case 48: // S return "\x01\x13"; case 49: // T return "\x01\x14"; case 50: // U return "\x01\x15"; case 51: // V return "\x01\x16"; case 52: // W return "\x01\x17"; case 53: // X return "\x01\x18"; case 54: // Y return "\x01\x19"; case 55: // Z return "\x01\x1a"; case 56: // LEFT_BRACKET return "\x01\x1b"; case 57: // BACKSLASH return "\x01\x1c"; case 58: // RIGHT_BRACKET return "\x01\x1d"; case 59: // UNDERSCORE return "\x01\x00"; case 60: // GRAVE_ACCENT return "\x01\x00"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x08"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x35\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x35\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x35\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x35\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x35\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x35\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x35\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x35\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x35\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x35\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x35\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x35\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x35\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x35\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x35\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x35\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x35\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x35\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x35\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x35\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x35\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x35\x7e"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 11: // MINUS return "\x01\x1f"; case 13: // SLASH return "\x01\x7f"; case 16: // 2 return "\x01\x00"; case 20: // 6 return "\x01\x1e"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x36\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x36\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x36\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x36\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x36\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x36\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x36\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x36\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x36\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x36\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x36\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x36\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x36\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x36\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x36\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x36\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x36\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x36\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x36\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x36\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x36\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x36\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x36\x7e"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x27"; case 10: // COMMA return "\x02\x1b\x2c"; case 11: // MINUS return "\x02\x1b\x2d"; case 12: // PERIOD return "\x02\x1b\x2e"; case 13: // SLASH return "\x02\x1b\x2f"; case 14: // 0 return "\x02\x1b\x30"; case 15: // 1 return "\x02\x1b\x31"; case 16: // 2 return "\x02\x1b\x32"; case 17: // 3 return "\x02\x1b\x33"; case 18: // 4 return "\x02\x1b\x34"; case 19: // 5 return "\x02\x1b\x35"; case 20: // 6 return "\x02\x1b\x36"; case 21: // 7 return "\x02\x1b\x37"; case 22: // 8 return "\x02\x1b\x38"; case 23: // 9 return "\x02\x1b\x39"; case 25: // SEMICOLON return "\x02\x1b\x3b"; case 27: // EQUAL return "\x02\x1b\x3d"; case 30: // A return "\x02\x1b\x61"; case 31: // B return "\x02\x1b\x62"; case 32: // C return "\x02\x1b\x63"; case 33: // D return "\x02\x1b\x64"; case 34: // E return "\x02\x1b\x65"; case 35: // F return "\x02\x1b\x66"; case 36: // G return "\x02\x1b\x67"; case 37: // H return "\x02\x1b\x68"; case 38: // I return "\x02\x1b\x69"; case 39: // J return "\x02\x1b\x6a"; case 40: // K return "\x02\x1b\x6b"; case 41: // L return "\x02\x1b\x6c"; case 42: // M return "\x02\x1b\x6d"; case 43: // N return "\x02\x1b\x6e"; case 44: // O return "\x02\x1b\x6f"; case 45: // P return "\x02\x1b\x70"; case 46: // Q return "\x02\x1b\x71"; case 47: // R return "\x02\x1b\x72"; case 48: // S return "\x02\x1b\x73"; case 49: // T return "\x02\x1b\x74"; case 50: // U return "\x02\x1b\x75"; case 51: // V return "\x02\x1b\x76"; case 52: // W return "\x02\x1b\x77"; case 53: // X return "\x02\x1b\x78"; case 54: // Y return "\x02\x1b\x79"; case 55: // Z return "\x02\x1b\x7a"; case 56: // LEFT_BRACKET return "\x02\x1b\x5b"; case 57: // BACKSLASH return "\x02\x1b\x5c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x5d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x60"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x02\x1b\x09"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x33\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x33\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x33\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x33\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x33\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x33\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x33\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x33\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x33\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x33\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x33\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x33\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x33\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x33\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x33\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x33\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x33\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x33\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x33\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x33\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x33\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x33\x7e"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x22"; case 10: // COMMA return "\x02\x1b\x3c"; case 11: // MINUS return "\x02\x1b\x5f"; case 12: // PERIOD return "\x02\x1b\x3e"; case 13: // SLASH return "\x02\x1b\x3f"; case 14: // 0 return "\x02\x1b\x29"; case 15: // 1 return "\x02\x1b\x21"; case 16: // 2 return "\x02\x1b\x40"; case 17: // 3 return "\x02\x1b\x23"; case 18: // 4 return "\x02\x1b\x24"; case 19: // 5 return "\x02\x1b\x25"; case 20: // 6 return "\x02\x1b\x5e"; case 21: // 7 return "\x02\x1b\x26"; case 22: // 8 return "\x02\x1b\x2a"; case 23: // 9 return "\x02\x1b\x28"; case 25: // SEMICOLON return "\x02\x1b\x3a"; case 27: // EQUAL return "\x02\x1b\x2b"; case 30: // A return "\x02\x1b\x41"; case 31: // B return "\x02\x1b\x42"; case 32: // C return "\x02\x1b\x43"; case 33: // D return "\x02\x1b\x44"; case 34: // E return "\x02\x1b\x45"; case 35: // F return "\x02\x1b\x46"; case 36: // G return "\x02\x1b\x47"; case 37: // H return "\x02\x1b\x48"; case 38: // I return "\x02\x1b\x49"; case 39: // J return "\x02\x1b\x4a"; case 40: // K return "\x02\x1b\x4b"; case 41: // L return "\x02\x1b\x4c"; case 42: // M return "\x02\x1b\x4d"; case 43: // N return "\x02\x1b\x4e"; case 44: // O return "\x02\x1b\x4f"; case 45: // P return "\x02\x1b\x50"; case 46: // Q return "\x02\x1b\x51"; case 47: // R return "\x02\x1b\x52"; case 48: // S return "\x02\x1b\x53"; case 49: // T return "\x02\x1b\x54"; case 50: // U return "\x02\x1b\x55"; case 51: // V return "\x02\x1b\x56"; case 52: // W return "\x02\x1b\x57"; case 53: // X return "\x02\x1b\x58"; case 54: // Y return "\x02\x1b\x59"; case 55: // Z return "\x02\x1b\x5a"; case 56: // LEFT_BRACKET return "\x02\x1b\x7b"; case 57: // BACKSLASH return "\x02\x1b\x7c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x7d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x7e"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x34\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x34\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x34\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x34\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x34\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x34\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x34\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x34\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x34\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x34\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x34\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x34\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x34\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x34\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x34\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x34\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x34\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x34\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x34\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x34\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x34\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x34\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x34\x7e"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x00"; case 30: // A return "\x02\x1b\x01"; case 31: // B return "\x02\x1b\x02"; case 32: // C return "\x02\x1b\x03"; case 33: // D return "\x02\x1b\x04"; case 34: // E return "\x02\x1b\x05"; case 35: // F return "\x02\x1b\x06"; case 36: // G return "\x02\x1b\x07"; case 37: // H return "\x02\x1b\x08"; case 38: // I return "\x02\x1b\x09"; case 39: // J return "\x02\x1b\x0a"; case 40: // K return "\x02\x1b\x0b"; case 41: // L return "\x02\x1b\x0c"; case 42: // M return "\x02\x1b\x0d"; case 43: // N return "\x02\x1b\x0e"; case 44: // O return "\x02\x1b\x0f"; case 45: // P return "\x02\x1b\x10"; case 46: // Q return "\x02\x1b\x11"; case 47: // R return "\x02\x1b\x12"; case 48: // S return "\x02\x1b\x13"; case 49: // T return "\x02\x1b\x14"; case 50: // U return "\x02\x1b\x15"; case 51: // V return "\x02\x1b\x16"; case 52: // W return "\x02\x1b\x17"; case 53: // X return "\x02\x1b\x18"; case 54: // Y return "\x02\x1b\x19"; case 55: // Z return "\x02\x1b\x1a"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x37\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x37\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x37\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x37\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x37\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x37\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x37\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x37\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x37\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x37\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x37\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x37\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x37\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x37\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x37\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x37\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x37\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x37\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x37\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x37\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x37\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x37\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x37\x7e"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x38\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x38\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x38\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x38\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x38\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x38\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x38\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x38\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x38\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x38\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x38\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x38\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x38\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x38\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x38\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x38\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x38\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x38\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x38\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x38\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x38\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x38\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x38\x7e"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) } // end switch(mods) break; case 2: // REPEAT switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x32\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x32\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x32\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x32\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x32\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x32\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x32\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x32\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x32\x7e"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x01\x00"; case 6: // APOSTROPHE return "\x01\x27"; case 10: // COMMA return "\x01\x2c"; case 11: // MINUS return "\x01\x2d"; case 12: // PERIOD return "\x01\x2e"; case 13: // SLASH return "\x01\x1f"; case 14: // 0 return "\x01\x30"; case 15: // 1 return "\x01\x31"; case 16: // 2 return "\x01\x00"; case 17: // 3 return "\x01\x1b"; case 18: // 4 return "\x01\x1c"; case 19: // 5 return "\x01\x1d"; case 20: // 6 return "\x01\x1e"; case 21: // 7 return "\x01\x1f"; case 22: // 8 return "\x01\x7f"; case 23: // 9 return "\x01\x39"; case 25: // SEMICOLON return "\x01\x3b"; case 27: // EQUAL return "\x01\x3d"; case 30: // A return "\x01\x01"; case 31: // B return "\x01\x02"; case 32: // C return "\x01\x03"; case 33: // D return "\x01\x04"; case 34: // E return "\x01\x05"; case 35: // F return "\x01\x06"; case 36: // G return "\x01\x07"; case 37: // H return "\x01\x08"; case 38: // I return "\x01\x09"; case 39: // J return "\x01\x0a"; case 40: // K return "\x01\x0b"; case 41: // L return "\x01\x0c"; case 42: // M return "\x01\x0d"; case 43: // N return "\x01\x0e"; case 44: // O return "\x01\x0f"; case 45: // P return "\x01\x10"; case 46: // Q return "\x01\x11"; case 47: // R return "\x01\x12"; case 48: // S return "\x01\x13"; case 49: // T return "\x01\x14"; case 50: // U return "\x01\x15"; case 51: // V return "\x01\x16"; case 52: // W return "\x01\x17"; case 53: // X return "\x01\x18"; case 54: // Y return "\x01\x19"; case 55: // Z return "\x01\x1a"; case 56: // LEFT_BRACKET return "\x01\x1b"; case 57: // BACKSLASH return "\x01\x1c"; case 58: // RIGHT_BRACKET return "\x01\x1d"; case 59: // UNDERSCORE return "\x01\x00"; case 60: // GRAVE_ACCENT return "\x01\x00"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x08"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x35\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x35\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x35\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x35\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x35\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x35\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x35\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x35\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x35\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x35\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x35\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x35\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x35\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x35\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x35\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x35\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x35\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x35\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x35\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x35\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x35\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x35\x7e"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 11: // MINUS return "\x01\x1f"; case 13: // SLASH return "\x01\x7f"; case 16: // 2 return "\x01\x00"; case 20: // 6 return "\x01\x1e"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x36\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x36\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x36\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x36\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x36\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x36\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x36\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x36\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x36\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x36\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x36\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x36\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x36\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x36\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x36\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x36\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x36\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x36\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x36\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x36\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x36\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x36\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x36\x7e"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x27"; case 10: // COMMA return "\x02\x1b\x2c"; case 11: // MINUS return "\x02\x1b\x2d"; case 12: // PERIOD return "\x02\x1b\x2e"; case 13: // SLASH return "\x02\x1b\x2f"; case 14: // 0 return "\x02\x1b\x30"; case 15: // 1 return "\x02\x1b\x31"; case 16: // 2 return "\x02\x1b\x32"; case 17: // 3 return "\x02\x1b\x33"; case 18: // 4 return "\x02\x1b\x34"; case 19: // 5 return "\x02\x1b\x35"; case 20: // 6 return "\x02\x1b\x36"; case 21: // 7 return "\x02\x1b\x37"; case 22: // 8 return "\x02\x1b\x38"; case 23: // 9 return "\x02\x1b\x39"; case 25: // SEMICOLON return "\x02\x1b\x3b"; case 27: // EQUAL return "\x02\x1b\x3d"; case 30: // A return "\x02\x1b\x61"; case 31: // B return "\x02\x1b\x62"; case 32: // C return "\x02\x1b\x63"; case 33: // D return "\x02\x1b\x64"; case 34: // E return "\x02\x1b\x65"; case 35: // F return "\x02\x1b\x66"; case 36: // G return "\x02\x1b\x67"; case 37: // H return "\x02\x1b\x68"; case 38: // I return "\x02\x1b\x69"; case 39: // J return "\x02\x1b\x6a"; case 40: // K return "\x02\x1b\x6b"; case 41: // L return "\x02\x1b\x6c"; case 42: // M return "\x02\x1b\x6d"; case 43: // N return "\x02\x1b\x6e"; case 44: // O return "\x02\x1b\x6f"; case 45: // P return "\x02\x1b\x70"; case 46: // Q return "\x02\x1b\x71"; case 47: // R return "\x02\x1b\x72"; case 48: // S return "\x02\x1b\x73"; case 49: // T return "\x02\x1b\x74"; case 50: // U return "\x02\x1b\x75"; case 51: // V return "\x02\x1b\x76"; case 52: // W return "\x02\x1b\x77"; case 53: // X return "\x02\x1b\x78"; case 54: // Y return "\x02\x1b\x79"; case 55: // Z return "\x02\x1b\x7a"; case 56: // LEFT_BRACKET return "\x02\x1b\x5b"; case 57: // BACKSLASH return "\x02\x1b\x5c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x5d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x60"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x02\x1b\x09"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x33\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x33\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x33\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x33\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x33\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x33\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x33\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x33\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x33\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x33\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x33\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x33\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x33\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x33\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x33\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x33\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x33\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x33\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x33\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x33\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x33\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x33\x7e"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x22"; case 10: // COMMA return "\x02\x1b\x3c"; case 11: // MINUS return "\x02\x1b\x5f"; case 12: // PERIOD return "\x02\x1b\x3e"; case 13: // SLASH return "\x02\x1b\x3f"; case 14: // 0 return "\x02\x1b\x29"; case 15: // 1 return "\x02\x1b\x21"; case 16: // 2 return "\x02\x1b\x40"; case 17: // 3 return "\x02\x1b\x23"; case 18: // 4 return "\x02\x1b\x24"; case 19: // 5 return "\x02\x1b\x25"; case 20: // 6 return "\x02\x1b\x5e"; case 21: // 7 return "\x02\x1b\x26"; case 22: // 8 return "\x02\x1b\x2a"; case 23: // 9 return "\x02\x1b\x28"; case 25: // SEMICOLON return "\x02\x1b\x3a"; case 27: // EQUAL return "\x02\x1b\x2b"; case 30: // A return "\x02\x1b\x41"; case 31: // B return "\x02\x1b\x42"; case 32: // C return "\x02\x1b\x43"; case 33: // D return "\x02\x1b\x44"; case 34: // E return "\x02\x1b\x45"; case 35: // F return "\x02\x1b\x46"; case 36: // G return "\x02\x1b\x47"; case 37: // H return "\x02\x1b\x48"; case 38: // I return "\x02\x1b\x49"; case 39: // J return "\x02\x1b\x4a"; case 40: // K return "\x02\x1b\x4b"; case 41: // L return "\x02\x1b\x4c"; case 42: // M return "\x02\x1b\x4d"; case 43: // N return "\x02\x1b\x4e"; case 44: // O return "\x02\x1b\x4f"; case 45: // P return "\x02\x1b\x50"; case 46: // Q return "\x02\x1b\x51"; case 47: // R return "\x02\x1b\x52"; case 48: // S return "\x02\x1b\x53"; case 49: // T return "\x02\x1b\x54"; case 50: // U return "\x02\x1b\x55"; case 51: // V return "\x02\x1b\x56"; case 52: // W return "\x02\x1b\x57"; case 53: // X return "\x02\x1b\x58"; case 54: // Y return "\x02\x1b\x59"; case 55: // Z return "\x02\x1b\x5a"; case 56: // LEFT_BRACKET return "\x02\x1b\x7b"; case 57: // BACKSLASH return "\x02\x1b\x7c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x7d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x7e"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x34\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x34\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x34\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x34\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x34\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x34\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x34\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x34\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x34\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x34\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x34\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x34\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x34\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x34\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x34\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x34\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x34\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x34\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x34\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x34\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x34\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x34\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x34\x7e"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x00"; case 30: // A return "\x02\x1b\x01"; case 31: // B return "\x02\x1b\x02"; case 32: // C return "\x02\x1b\x03"; case 33: // D return "\x02\x1b\x04"; case 34: // E return "\x02\x1b\x05"; case 35: // F return "\x02\x1b\x06"; case 36: // G return "\x02\x1b\x07"; case 37: // H return "\x02\x1b\x08"; case 38: // I return "\x02\x1b\x09"; case 39: // J return "\x02\x1b\x0a"; case 40: // K return "\x02\x1b\x0b"; case 41: // L return "\x02\x1b\x0c"; case 42: // M return "\x02\x1b\x0d"; case 43: // N return "\x02\x1b\x0e"; case 44: // O return "\x02\x1b\x0f"; case 45: // P return "\x02\x1b\x10"; case 46: // Q return "\x02\x1b\x11"; case 47: // R return "\x02\x1b\x12"; case 48: // S return "\x02\x1b\x13"; case 49: // T return "\x02\x1b\x14"; case 50: // U return "\x02\x1b\x15"; case 51: // V return "\x02\x1b\x16"; case 52: // W return "\x02\x1b\x17"; case 53: // X return "\x02\x1b\x18"; case 54: // Y return "\x02\x1b\x19"; case 55: // Z return "\x02\x1b\x1a"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x37\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x37\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x37\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x37\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x37\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x37\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x37\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x37\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x37\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x37\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x37\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x37\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x37\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x37\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x37\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x37\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x37\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x37\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x37\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x37\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x37\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x37\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x37\x7e"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x38\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x38\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x38\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x38\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x38\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x38\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x38\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x38\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x38\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x38\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x38\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x38\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x38\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x38\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x38\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x38\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x38\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x38\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x38\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x38\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x38\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x38\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x38\x7e"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x5b\x43"; case 120: // LEFT return "\x03\x1b\x5b\x44"; case 121: // DOWN return "\x03\x1b\x5b\x42"; case 122: // UP return "\x03\x1b\x5b\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x5b\x48"; case 126: // END return "\x03\x1b\x5b\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) } // end switch(mods) break; } // end switch(action) in mode NORMAL break; case APPLICATION: switch(action & 3) { case 3: return NULL; case 0: // RELEASE return NULL; case 1: // PRESS switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x32\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x32\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x32\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x32\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x32\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x32\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x32\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x32\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x32\x7e"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x01\x00"; case 6: // APOSTROPHE return "\x01\x27"; case 10: // COMMA return "\x01\x2c"; case 11: // MINUS return "\x01\x2d"; case 12: // PERIOD return "\x01\x2e"; case 13: // SLASH return "\x01\x1f"; case 14: // 0 return "\x01\x30"; case 15: // 1 return "\x01\x31"; case 16: // 2 return "\x01\x00"; case 17: // 3 return "\x01\x1b"; case 18: // 4 return "\x01\x1c"; case 19: // 5 return "\x01\x1d"; case 20: // 6 return "\x01\x1e"; case 21: // 7 return "\x01\x1f"; case 22: // 8 return "\x01\x7f"; case 23: // 9 return "\x01\x39"; case 25: // SEMICOLON return "\x01\x3b"; case 27: // EQUAL return "\x01\x3d"; case 30: // A return "\x01\x01"; case 31: // B return "\x01\x02"; case 32: // C return "\x01\x03"; case 33: // D return "\x01\x04"; case 34: // E return "\x01\x05"; case 35: // F return "\x01\x06"; case 36: // G return "\x01\x07"; case 37: // H return "\x01\x08"; case 38: // I return "\x01\x09"; case 39: // J return "\x01\x0a"; case 40: // K return "\x01\x0b"; case 41: // L return "\x01\x0c"; case 42: // M return "\x01\x0d"; case 43: // N return "\x01\x0e"; case 44: // O return "\x01\x0f"; case 45: // P return "\x01\x10"; case 46: // Q return "\x01\x11"; case 47: // R return "\x01\x12"; case 48: // S return "\x01\x13"; case 49: // T return "\x01\x14"; case 50: // U return "\x01\x15"; case 51: // V return "\x01\x16"; case 52: // W return "\x01\x17"; case 53: // X return "\x01\x18"; case 54: // Y return "\x01\x19"; case 55: // Z return "\x01\x1a"; case 56: // LEFT_BRACKET return "\x01\x1b"; case 57: // BACKSLASH return "\x01\x1c"; case 58: // RIGHT_BRACKET return "\x01\x1d"; case 59: // UNDERSCORE return "\x01\x00"; case 60: // GRAVE_ACCENT return "\x01\x00"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x08"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x35\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x35\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x35\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x35\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x35\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x35\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x35\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x35\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x35\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x35\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x35\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x35\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x35\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x35\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x35\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x35\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x35\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x35\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x35\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x35\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x35\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x35\x7e"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 11: // MINUS return "\x01\x1f"; case 13: // SLASH return "\x01\x7f"; case 16: // 2 return "\x01\x00"; case 20: // 6 return "\x01\x1e"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x36\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x36\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x36\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x36\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x36\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x36\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x36\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x36\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x36\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x36\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x36\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x36\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x36\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x36\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x36\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x36\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x36\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x36\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x36\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x36\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x36\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x36\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x36\x7e"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x27"; case 10: // COMMA return "\x02\x1b\x2c"; case 11: // MINUS return "\x02\x1b\x2d"; case 12: // PERIOD return "\x02\x1b\x2e"; case 13: // SLASH return "\x02\x1b\x2f"; case 14: // 0 return "\x02\x1b\x30"; case 15: // 1 return "\x02\x1b\x31"; case 16: // 2 return "\x02\x1b\x32"; case 17: // 3 return "\x02\x1b\x33"; case 18: // 4 return "\x02\x1b\x34"; case 19: // 5 return "\x02\x1b\x35"; case 20: // 6 return "\x02\x1b\x36"; case 21: // 7 return "\x02\x1b\x37"; case 22: // 8 return "\x02\x1b\x38"; case 23: // 9 return "\x02\x1b\x39"; case 25: // SEMICOLON return "\x02\x1b\x3b"; case 27: // EQUAL return "\x02\x1b\x3d"; case 30: // A return "\x02\x1b\x61"; case 31: // B return "\x02\x1b\x62"; case 32: // C return "\x02\x1b\x63"; case 33: // D return "\x02\x1b\x64"; case 34: // E return "\x02\x1b\x65"; case 35: // F return "\x02\x1b\x66"; case 36: // G return "\x02\x1b\x67"; case 37: // H return "\x02\x1b\x68"; case 38: // I return "\x02\x1b\x69"; case 39: // J return "\x02\x1b\x6a"; case 40: // K return "\x02\x1b\x6b"; case 41: // L return "\x02\x1b\x6c"; case 42: // M return "\x02\x1b\x6d"; case 43: // N return "\x02\x1b\x6e"; case 44: // O return "\x02\x1b\x6f"; case 45: // P return "\x02\x1b\x70"; case 46: // Q return "\x02\x1b\x71"; case 47: // R return "\x02\x1b\x72"; case 48: // S return "\x02\x1b\x73"; case 49: // T return "\x02\x1b\x74"; case 50: // U return "\x02\x1b\x75"; case 51: // V return "\x02\x1b\x76"; case 52: // W return "\x02\x1b\x77"; case 53: // X return "\x02\x1b\x78"; case 54: // Y return "\x02\x1b\x79"; case 55: // Z return "\x02\x1b\x7a"; case 56: // LEFT_BRACKET return "\x02\x1b\x5b"; case 57: // BACKSLASH return "\x02\x1b\x5c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x5d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x60"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x02\x1b\x09"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x33\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x33\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x33\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x33\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x33\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x33\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x33\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x33\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x33\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x33\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x33\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x33\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x33\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x33\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x33\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x33\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x33\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x33\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x33\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x33\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x33\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x33\x7e"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x22"; case 10: // COMMA return "\x02\x1b\x3c"; case 11: // MINUS return "\x02\x1b\x5f"; case 12: // PERIOD return "\x02\x1b\x3e"; case 13: // SLASH return "\x02\x1b\x3f"; case 14: // 0 return "\x02\x1b\x29"; case 15: // 1 return "\x02\x1b\x21"; case 16: // 2 return "\x02\x1b\x40"; case 17: // 3 return "\x02\x1b\x23"; case 18: // 4 return "\x02\x1b\x24"; case 19: // 5 return "\x02\x1b\x25"; case 20: // 6 return "\x02\x1b\x5e"; case 21: // 7 return "\x02\x1b\x26"; case 22: // 8 return "\x02\x1b\x2a"; case 23: // 9 return "\x02\x1b\x28"; case 25: // SEMICOLON return "\x02\x1b\x3a"; case 27: // EQUAL return "\x02\x1b\x2b"; case 30: // A return "\x02\x1b\x41"; case 31: // B return "\x02\x1b\x42"; case 32: // C return "\x02\x1b\x43"; case 33: // D return "\x02\x1b\x44"; case 34: // E return "\x02\x1b\x45"; case 35: // F return "\x02\x1b\x46"; case 36: // G return "\x02\x1b\x47"; case 37: // H return "\x02\x1b\x48"; case 38: // I return "\x02\x1b\x49"; case 39: // J return "\x02\x1b\x4a"; case 40: // K return "\x02\x1b\x4b"; case 41: // L return "\x02\x1b\x4c"; case 42: // M return "\x02\x1b\x4d"; case 43: // N return "\x02\x1b\x4e"; case 44: // O return "\x02\x1b\x4f"; case 45: // P return "\x02\x1b\x50"; case 46: // Q return "\x02\x1b\x51"; case 47: // R return "\x02\x1b\x52"; case 48: // S return "\x02\x1b\x53"; case 49: // T return "\x02\x1b\x54"; case 50: // U return "\x02\x1b\x55"; case 51: // V return "\x02\x1b\x56"; case 52: // W return "\x02\x1b\x57"; case 53: // X return "\x02\x1b\x58"; case 54: // Y return "\x02\x1b\x59"; case 55: // Z return "\x02\x1b\x5a"; case 56: // LEFT_BRACKET return "\x02\x1b\x7b"; case 57: // BACKSLASH return "\x02\x1b\x7c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x7d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x7e"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x34\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x34\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x34\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x34\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x34\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x34\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x34\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x34\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x34\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x34\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x34\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x34\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x34\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x34\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x34\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x34\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x34\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x34\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x34\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x34\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x34\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x34\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x34\x7e"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x00"; case 30: // A return "\x02\x1b\x01"; case 31: // B return "\x02\x1b\x02"; case 32: // C return "\x02\x1b\x03"; case 33: // D return "\x02\x1b\x04"; case 34: // E return "\x02\x1b\x05"; case 35: // F return "\x02\x1b\x06"; case 36: // G return "\x02\x1b\x07"; case 37: // H return "\x02\x1b\x08"; case 38: // I return "\x02\x1b\x09"; case 39: // J return "\x02\x1b\x0a"; case 40: // K return "\x02\x1b\x0b"; case 41: // L return "\x02\x1b\x0c"; case 42: // M return "\x02\x1b\x0d"; case 43: // N return "\x02\x1b\x0e"; case 44: // O return "\x02\x1b\x0f"; case 45: // P return "\x02\x1b\x10"; case 46: // Q return "\x02\x1b\x11"; case 47: // R return "\x02\x1b\x12"; case 48: // S return "\x02\x1b\x13"; case 49: // T return "\x02\x1b\x14"; case 50: // U return "\x02\x1b\x15"; case 51: // V return "\x02\x1b\x16"; case 52: // W return "\x02\x1b\x17"; case 53: // X return "\x02\x1b\x18"; case 54: // Y return "\x02\x1b\x19"; case 55: // Z return "\x02\x1b\x1a"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x37\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x37\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x37\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x37\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x37\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x37\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x37\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x37\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x37\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x37\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x37\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x37\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x37\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x37\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x37\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x37\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x37\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x37\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x37\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x37\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x37\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x37\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x37\x7e"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x38\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x38\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x38\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x38\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x38\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x38\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x38\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x38\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x38\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x38\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x38\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x38\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x38\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x38\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x38\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x38\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x38\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x38\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x38\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x38\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x38\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x38\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x38\x7e"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) } // end switch(mods) break; case 2: // REPEAT switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x32\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x32\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x32\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x32\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x32\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x32\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x32\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x32\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x32\x7e"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x01\x00"; case 6: // APOSTROPHE return "\x01\x27"; case 10: // COMMA return "\x01\x2c"; case 11: // MINUS return "\x01\x2d"; case 12: // PERIOD return "\x01\x2e"; case 13: // SLASH return "\x01\x1f"; case 14: // 0 return "\x01\x30"; case 15: // 1 return "\x01\x31"; case 16: // 2 return "\x01\x00"; case 17: // 3 return "\x01\x1b"; case 18: // 4 return "\x01\x1c"; case 19: // 5 return "\x01\x1d"; case 20: // 6 return "\x01\x1e"; case 21: // 7 return "\x01\x1f"; case 22: // 8 return "\x01\x7f"; case 23: // 9 return "\x01\x39"; case 25: // SEMICOLON return "\x01\x3b"; case 27: // EQUAL return "\x01\x3d"; case 30: // A return "\x01\x01"; case 31: // B return "\x01\x02"; case 32: // C return "\x01\x03"; case 33: // D return "\x01\x04"; case 34: // E return "\x01\x05"; case 35: // F return "\x01\x06"; case 36: // G return "\x01\x07"; case 37: // H return "\x01\x08"; case 38: // I return "\x01\x09"; case 39: // J return "\x01\x0a"; case 40: // K return "\x01\x0b"; case 41: // L return "\x01\x0c"; case 42: // M return "\x01\x0d"; case 43: // N return "\x01\x0e"; case 44: // O return "\x01\x0f"; case 45: // P return "\x01\x10"; case 46: // Q return "\x01\x11"; case 47: // R return "\x01\x12"; case 48: // S return "\x01\x13"; case 49: // T return "\x01\x14"; case 50: // U return "\x01\x15"; case 51: // V return "\x01\x16"; case 52: // W return "\x01\x17"; case 53: // X return "\x01\x18"; case 54: // Y return "\x01\x19"; case 55: // Z return "\x01\x1a"; case 56: // LEFT_BRACKET return "\x01\x1b"; case 57: // BACKSLASH return "\x01\x1c"; case 58: // RIGHT_BRACKET return "\x01\x1d"; case 59: // UNDERSCORE return "\x01\x00"; case 60: // GRAVE_ACCENT return "\x01\x00"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x08"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x35\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x35\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x35\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x35\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x35\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x35\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x35\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x35\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x35\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x35\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x35\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x35\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x35\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x35\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x35\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x35\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x35\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x35\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x35\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x35\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x35\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x35\x7e"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 11: // MINUS return "\x01\x1f"; case 13: // SLASH return "\x01\x7f"; case 16: // 2 return "\x01\x00"; case 20: // 6 return "\x01\x1e"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x36\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x36\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x36\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x36\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x36\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x36\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x36\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x36\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x36\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x36\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x36\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x36\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x36\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x36\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x36\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x36\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x36\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x36\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x36\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x36\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x36\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x36\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x36\x7e"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x27"; case 10: // COMMA return "\x02\x1b\x2c"; case 11: // MINUS return "\x02\x1b\x2d"; case 12: // PERIOD return "\x02\x1b\x2e"; case 13: // SLASH return "\x02\x1b\x2f"; case 14: // 0 return "\x02\x1b\x30"; case 15: // 1 return "\x02\x1b\x31"; case 16: // 2 return "\x02\x1b\x32"; case 17: // 3 return "\x02\x1b\x33"; case 18: // 4 return "\x02\x1b\x34"; case 19: // 5 return "\x02\x1b\x35"; case 20: // 6 return "\x02\x1b\x36"; case 21: // 7 return "\x02\x1b\x37"; case 22: // 8 return "\x02\x1b\x38"; case 23: // 9 return "\x02\x1b\x39"; case 25: // SEMICOLON return "\x02\x1b\x3b"; case 27: // EQUAL return "\x02\x1b\x3d"; case 30: // A return "\x02\x1b\x61"; case 31: // B return "\x02\x1b\x62"; case 32: // C return "\x02\x1b\x63"; case 33: // D return "\x02\x1b\x64"; case 34: // E return "\x02\x1b\x65"; case 35: // F return "\x02\x1b\x66"; case 36: // G return "\x02\x1b\x67"; case 37: // H return "\x02\x1b\x68"; case 38: // I return "\x02\x1b\x69"; case 39: // J return "\x02\x1b\x6a"; case 40: // K return "\x02\x1b\x6b"; case 41: // L return "\x02\x1b\x6c"; case 42: // M return "\x02\x1b\x6d"; case 43: // N return "\x02\x1b\x6e"; case 44: // O return "\x02\x1b\x6f"; case 45: // P return "\x02\x1b\x70"; case 46: // Q return "\x02\x1b\x71"; case 47: // R return "\x02\x1b\x72"; case 48: // S return "\x02\x1b\x73"; case 49: // T return "\x02\x1b\x74"; case 50: // U return "\x02\x1b\x75"; case 51: // V return "\x02\x1b\x76"; case 52: // W return "\x02\x1b\x77"; case 53: // X return "\x02\x1b\x78"; case 54: // Y return "\x02\x1b\x79"; case 55: // Z return "\x02\x1b\x7a"; case 56: // LEFT_BRACKET return "\x02\x1b\x5b"; case 57: // BACKSLASH return "\x02\x1b\x5c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x5d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x60"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x02\x1b\x09"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x33\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x33\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x33\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x33\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x33\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x33\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x33\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x33\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x33\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x33\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x33\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x33\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x33\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x33\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x33\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x33\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x33\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x33\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x33\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x33\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x33\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x33\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x33\x7e"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; case 6: // APOSTROPHE return "\x02\x1b\x22"; case 10: // COMMA return "\x02\x1b\x3c"; case 11: // MINUS return "\x02\x1b\x5f"; case 12: // PERIOD return "\x02\x1b\x3e"; case 13: // SLASH return "\x02\x1b\x3f"; case 14: // 0 return "\x02\x1b\x29"; case 15: // 1 return "\x02\x1b\x21"; case 16: // 2 return "\x02\x1b\x40"; case 17: // 3 return "\x02\x1b\x23"; case 18: // 4 return "\x02\x1b\x24"; case 19: // 5 return "\x02\x1b\x25"; case 20: // 6 return "\x02\x1b\x5e"; case 21: // 7 return "\x02\x1b\x26"; case 22: // 8 return "\x02\x1b\x2a"; case 23: // 9 return "\x02\x1b\x28"; case 25: // SEMICOLON return "\x02\x1b\x3a"; case 27: // EQUAL return "\x02\x1b\x2b"; case 30: // A return "\x02\x1b\x41"; case 31: // B return "\x02\x1b\x42"; case 32: // C return "\x02\x1b\x43"; case 33: // D return "\x02\x1b\x44"; case 34: // E return "\x02\x1b\x45"; case 35: // F return "\x02\x1b\x46"; case 36: // G return "\x02\x1b\x47"; case 37: // H return "\x02\x1b\x48"; case 38: // I return "\x02\x1b\x49"; case 39: // J return "\x02\x1b\x4a"; case 40: // K return "\x02\x1b\x4b"; case 41: // L return "\x02\x1b\x4c"; case 42: // M return "\x02\x1b\x4d"; case 43: // N return "\x02\x1b\x4e"; case 44: // O return "\x02\x1b\x4f"; case 45: // P return "\x02\x1b\x50"; case 46: // Q return "\x02\x1b\x51"; case 47: // R return "\x02\x1b\x52"; case 48: // S return "\x02\x1b\x53"; case 49: // T return "\x02\x1b\x54"; case 50: // U return "\x02\x1b\x55"; case 51: // V return "\x02\x1b\x56"; case 52: // W return "\x02\x1b\x57"; case 53: // X return "\x02\x1b\x58"; case 54: // Y return "\x02\x1b\x59"; case 55: // Z return "\x02\x1b\x5a"; case 56: // LEFT_BRACKET return "\x02\x1b\x7b"; case 57: // BACKSLASH return "\x02\x1b\x7c"; case 58: // RIGHT_BRACKET return "\x02\x1b\x7d"; case 59: // UNDERSCORE return "\x02\x1b\x5f"; case 60: // GRAVE_ACCENT return "\x02\x1b\x7e"; case 113: // ESCAPE return "\x02\x1b\x1b"; case 114: // ENTER return "\x02\x1b\x0d"; case 115: // TAB return "\x03\x1b\x5b\x5a"; case 116: // BACKSPACE return "\x02\x1b\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x34\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x34\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x34\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x34\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x34\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x34\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x34\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x34\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x34\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x34\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x34\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x34\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x34\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x34\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x34\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x34\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x34\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x34\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x34\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x34\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x34\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x34\x7e"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x34\x7e"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x00"; case 30: // A return "\x02\x1b\x01"; case 31: // B return "\x02\x1b\x02"; case 32: // C return "\x02\x1b\x03"; case 33: // D return "\x02\x1b\x04"; case 34: // E return "\x02\x1b\x05"; case 35: // F return "\x02\x1b\x06"; case 36: // G return "\x02\x1b\x07"; case 37: // H return "\x02\x1b\x08"; case 38: // I return "\x02\x1b\x09"; case 39: // J return "\x02\x1b\x0a"; case 40: // K return "\x02\x1b\x0b"; case 41: // L return "\x02\x1b\x0c"; case 42: // M return "\x02\x1b\x0d"; case 43: // N return "\x02\x1b\x0e"; case 44: // O return "\x02\x1b\x0f"; case 45: // P return "\x02\x1b\x10"; case 46: // Q return "\x02\x1b\x11"; case 47: // R return "\x02\x1b\x12"; case 48: // S return "\x02\x1b\x13"; case 49: // T return "\x02\x1b\x14"; case 50: // U return "\x02\x1b\x15"; case 51: // V return "\x02\x1b\x16"; case 52: // W return "\x02\x1b\x17"; case 53: // X return "\x02\x1b\x18"; case 54: // Y return "\x02\x1b\x19"; case 55: // Z return "\x02\x1b\x1a"; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x37\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x37\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x37\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x37\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x37\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x37\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x37\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x37\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x37\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x37\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x37\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x37\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x37\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x37\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x37\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x37\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x37\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x37\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x37\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x37\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x37\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x37\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x37\x7e"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x38\x7e"; case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x38\x7e"; case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x38\x43"; case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x38\x44"; case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x38\x42"; case 122: // UP return "\x06\x1b\x5b\x31\x3b\x38\x41"; case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x38\x7e"; case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x38\x7e"; case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x38\x48"; case 126: // END return "\x06\x1b\x5b\x31\x3b\x38\x46"; case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x38\x50"; case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x38\x51"; case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x38\x52"; case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x38\x53"; case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x38\x7e"; case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x38\x7e"; case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x38\x7e"; case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x38\x7e"; case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x38\x7e"; case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x38\x7e"; case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x38\x7e"; case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x38\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x38\x7e"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x01\x1b"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x01\x09"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; case 119: // RIGHT return "\x03\x1b\x4f\x43"; case 120: // LEFT return "\x03\x1b\x4f\x44"; case 121: // DOWN return "\x03\x1b\x4f\x42"; case 122: // UP return "\x03\x1b\x4f\x41"; case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; case 125: // HOME return "\x03\x1b\x4f\x48"; case 126: // END return "\x03\x1b\x4f\x46"; case 132: // F1 return "\x03\x1b\x4f\x50"; case 133: // F2 return "\x03\x1b\x4f\x51"; case 134: // F3 return "\x03\x1b\x4f\x52"; case 135: // F4 return "\x03\x1b\x4f\x53"; case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; case 172: // KP_ENTER return "\x01\x0d"; case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) } // end switch(mods) break; } // end switch(action) in mode APPLICATION break; case EXTENDED: switch(action & 3) { case 3: return NULL; case 0: // RELEASE switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x04\x4b\x72\x41\x79"; case 115: // TAB return "\x04\x4b\x72\x41\x30"; case 117: // INSERT return "\x04\x4b\x72\x41\x32"; case 118: // DELETE return "\x04\x4b\x72\x41\x33"; case 119: // RIGHT return "\x04\x4b\x72\x41\x34"; case 120: // LEFT return "\x04\x4b\x72\x41\x35"; case 121: // DOWN return "\x04\x4b\x72\x41\x36"; case 122: // UP return "\x04\x4b\x72\x41\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x41\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x41\x39"; case 125: // HOME return "\x04\x4b\x72\x41\x2e"; case 126: // END return "\x04\x4b\x72\x41\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x41\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x41\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x41\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x41\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x41\x21"; case 132: // F1 return "\x04\x4b\x72\x41\x2f"; case 133: // F2 return "\x04\x4b\x72\x41\x2a"; case 134: // F3 return "\x04\x4b\x72\x41\x3f"; case 135: // F4 return "\x04\x4b\x72\x41\x26"; case 136: // F5 return "\x04\x4b\x72\x41\x3c"; case 137: // F6 return "\x04\x4b\x72\x41\x3e"; case 138: // F7 return "\x04\x4b\x72\x41\x28"; case 139: // F8 return "\x04\x4b\x72\x41\x29"; case 140: // F9 return "\x04\x4b\x72\x41\x5b"; case 141: // F10 return "\x04\x4b\x72\x41\x5d"; case 142: // F11 return "\x04\x4b\x72\x41\x7b"; case 143: // F12 return "\x04\x4b\x72\x41\x7d"; case 144: // F13 return "\x04\x4b\x72\x41\x40"; case 145: // F14 return "\x04\x4b\x72\x41\x25"; case 146: // F15 return "\x04\x4b\x72\x41\x24"; case 147: // F16 return "\x04\x4b\x72\x41\x23"; case 148: // F17 return "\x05\x4b\x72\x41\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x41\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x41\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x41\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x41\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x41\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x41\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x41\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x41\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x41\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x41\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x41\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x41\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x41\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x41\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x41\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x41\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x41\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x41\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x41\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x41\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x41\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x41\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x41\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x41\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x41\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x41\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x41\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x41\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x41\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x41\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x41\x42\x68"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x04\x4b\x72\x42\x79"; case 114: // ENTER return "\x04\x4b\x72\x42\x7a"; case 115: // TAB return "\x04\x4b\x72\x42\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x42\x31"; case 117: // INSERT return "\x04\x4b\x72\x42\x32"; case 118: // DELETE return "\x04\x4b\x72\x42\x33"; case 119: // RIGHT return "\x04\x4b\x72\x42\x34"; case 120: // LEFT return "\x04\x4b\x72\x42\x35"; case 121: // DOWN return "\x04\x4b\x72\x42\x36"; case 122: // UP return "\x04\x4b\x72\x42\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x42\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x42\x39"; case 125: // HOME return "\x04\x4b\x72\x42\x2e"; case 126: // END return "\x04\x4b\x72\x42\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x42\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x42\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x42\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x42\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x42\x21"; case 132: // F1 return "\x04\x4b\x72\x42\x2f"; case 133: // F2 return "\x04\x4b\x72\x42\x2a"; case 134: // F3 return "\x04\x4b\x72\x42\x3f"; case 135: // F4 return "\x04\x4b\x72\x42\x26"; case 136: // F5 return "\x04\x4b\x72\x42\x3c"; case 137: // F6 return "\x04\x4b\x72\x42\x3e"; case 138: // F7 return "\x04\x4b\x72\x42\x28"; case 139: // F8 return "\x04\x4b\x72\x42\x29"; case 140: // F9 return "\x04\x4b\x72\x42\x5b"; case 141: // F10 return "\x04\x4b\x72\x42\x5d"; case 142: // F11 return "\x04\x4b\x72\x42\x7b"; case 143: // F12 return "\x04\x4b\x72\x42\x7d"; case 144: // F13 return "\x04\x4b\x72\x42\x40"; case 145: // F14 return "\x04\x4b\x72\x42\x25"; case 146: // F15 return "\x04\x4b\x72\x42\x24"; case 147: // F16 return "\x04\x4b\x72\x42\x23"; case 148: // F17 return "\x05\x4b\x72\x42\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x42\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x42\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x42\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x42\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x42\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x42\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x42\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x42\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x42\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x42\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x42\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x42\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x42\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x42\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x42\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x42\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x42\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x42\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x42\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x42\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x42\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x42\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x42\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x42\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x42\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x42\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x42\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x42\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x42\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x42\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x42\x42\x68"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x45\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x45\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x45\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x45\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x45\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x45\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x45\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x45\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x45\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x45\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x45\x43"; case 11: // MINUS return "\x04\x4b\x72\x45\x44"; case 12: // PERIOD return "\x04\x4b\x72\x45\x45"; case 13: // SLASH return "\x04\x4b\x72\x45\x46"; case 14: // 0 return "\x04\x4b\x72\x45\x47"; case 15: // 1 return "\x04\x4b\x72\x45\x48"; case 16: // 2 return "\x04\x4b\x72\x45\x49"; case 17: // 3 return "\x04\x4b\x72\x45\x4a"; case 18: // 4 return "\x04\x4b\x72\x45\x4b"; case 19: // 5 return "\x04\x4b\x72\x45\x4c"; case 20: // 6 return "\x04\x4b\x72\x45\x4d"; case 21: // 7 return "\x04\x4b\x72\x45\x4e"; case 22: // 8 return "\x04\x4b\x72\x45\x4f"; case 23: // 9 return "\x04\x4b\x72\x45\x50"; case 24: // COLON return "\x05\x4b\x72\x45\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x45\x51"; case 26: // LESS return "\x05\x4b\x72\x45\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x45\x52"; case 28: // GREATER return "\x05\x4b\x72\x45\x42\x75"; case 29: // AT return "\x05\x4b\x72\x45\x42\x76"; case 30: // A return "\x04\x4b\x72\x45\x53"; case 31: // B return "\x04\x4b\x72\x45\x54"; case 32: // C return "\x04\x4b\x72\x45\x55"; case 33: // D return "\x04\x4b\x72\x45\x56"; case 34: // E return "\x04\x4b\x72\x45\x57"; case 35: // F return "\x04\x4b\x72\x45\x58"; case 36: // G return "\x04\x4b\x72\x45\x59"; case 37: // H return "\x04\x4b\x72\x45\x5a"; case 38: // I return "\x04\x4b\x72\x45\x61"; case 39: // J return "\x04\x4b\x72\x45\x62"; case 40: // K return "\x04\x4b\x72\x45\x63"; case 41: // L return "\x04\x4b\x72\x45\x64"; case 42: // M return "\x04\x4b\x72\x45\x65"; case 43: // N return "\x04\x4b\x72\x45\x66"; case 44: // O return "\x04\x4b\x72\x45\x67"; case 45: // P return "\x04\x4b\x72\x45\x68"; case 46: // Q return "\x04\x4b\x72\x45\x69"; case 47: // R return "\x04\x4b\x72\x45\x6a"; case 48: // S return "\x04\x4b\x72\x45\x6b"; case 49: // T return "\x04\x4b\x72\x45\x6c"; case 50: // U return "\x04\x4b\x72\x45\x6d"; case 51: // V return "\x04\x4b\x72\x45\x6e"; case 52: // W return "\x04\x4b\x72\x45\x6f"; case 53: // X return "\x04\x4b\x72\x45\x70"; case 54: // Y return "\x04\x4b\x72\x45\x71"; case 55: // Z return "\x04\x4b\x72\x45\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x45\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x45\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x45\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x45\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x45\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x45\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x45\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x45\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x45\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x45\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x45\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x45\x42\x30"; case 68: // AE return "\x05\x4b\x72\x45\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x45\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x45\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x45\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x45\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x45\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x45\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x45\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x45\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x45\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x45\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x45\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x45\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x45\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x45\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x45\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x45\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x45\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x45\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x45\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x45\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x45\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x45\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x45\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x45\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x45\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x45\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x45\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x45\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x45\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x45\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x45\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x45\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x45\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x45\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x45\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x45\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x45\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x45\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x45\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x45\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x45\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x45\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x45\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x45\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x45\x79"; case 114: // ENTER return "\x04\x4b\x72\x45\x7a"; case 115: // TAB return "\x04\x4b\x72\x45\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x45\x31"; case 117: // INSERT return "\x04\x4b\x72\x45\x32"; case 118: // DELETE return "\x04\x4b\x72\x45\x33"; case 119: // RIGHT return "\x04\x4b\x72\x45\x34"; case 120: // LEFT return "\x04\x4b\x72\x45\x35"; case 121: // DOWN return "\x04\x4b\x72\x45\x36"; case 122: // UP return "\x04\x4b\x72\x45\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x45\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x45\x39"; case 125: // HOME return "\x04\x4b\x72\x45\x2e"; case 126: // END return "\x04\x4b\x72\x45\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x45\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x45\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x45\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x45\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x45\x21"; case 132: // F1 return "\x04\x4b\x72\x45\x2f"; case 133: // F2 return "\x04\x4b\x72\x45\x2a"; case 134: // F3 return "\x04\x4b\x72\x45\x3f"; case 135: // F4 return "\x04\x4b\x72\x45\x26"; case 136: // F5 return "\x04\x4b\x72\x45\x3c"; case 137: // F6 return "\x04\x4b\x72\x45\x3e"; case 138: // F7 return "\x04\x4b\x72\x45\x28"; case 139: // F8 return "\x04\x4b\x72\x45\x29"; case 140: // F9 return "\x04\x4b\x72\x45\x5b"; case 141: // F10 return "\x04\x4b\x72\x45\x5d"; case 142: // F11 return "\x04\x4b\x72\x45\x7b"; case 143: // F12 return "\x04\x4b\x72\x45\x7d"; case 144: // F13 return "\x04\x4b\x72\x45\x40"; case 145: // F14 return "\x04\x4b\x72\x45\x25"; case 146: // F15 return "\x04\x4b\x72\x45\x24"; case 147: // F16 return "\x04\x4b\x72\x45\x23"; case 148: // F17 return "\x05\x4b\x72\x45\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x45\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x45\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x45\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x45\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x45\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x45\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x45\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x45\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x45\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x45\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x45\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x45\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x45\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x45\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x45\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x45\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x45\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x45\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x45\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x45\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x45\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x45\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x45\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x45\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x45\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x45\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x45\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x45\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x45\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x45\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x45\x42\x68"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x46\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x46\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x46\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x46\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x46\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x46\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x46\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x46\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x46\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x46\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x46\x43"; case 11: // MINUS return "\x04\x4b\x72\x46\x44"; case 12: // PERIOD return "\x04\x4b\x72\x46\x45"; case 13: // SLASH return "\x04\x4b\x72\x46\x46"; case 14: // 0 return "\x04\x4b\x72\x46\x47"; case 15: // 1 return "\x04\x4b\x72\x46\x48"; case 16: // 2 return "\x04\x4b\x72\x46\x49"; case 17: // 3 return "\x04\x4b\x72\x46\x4a"; case 18: // 4 return "\x04\x4b\x72\x46\x4b"; case 19: // 5 return "\x04\x4b\x72\x46\x4c"; case 20: // 6 return "\x04\x4b\x72\x46\x4d"; case 21: // 7 return "\x04\x4b\x72\x46\x4e"; case 22: // 8 return "\x04\x4b\x72\x46\x4f"; case 23: // 9 return "\x04\x4b\x72\x46\x50"; case 24: // COLON return "\x05\x4b\x72\x46\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x46\x51"; case 26: // LESS return "\x05\x4b\x72\x46\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x46\x52"; case 28: // GREATER return "\x05\x4b\x72\x46\x42\x75"; case 29: // AT return "\x05\x4b\x72\x46\x42\x76"; case 30: // A return "\x04\x4b\x72\x46\x53"; case 31: // B return "\x04\x4b\x72\x46\x54"; case 32: // C return "\x04\x4b\x72\x46\x55"; case 33: // D return "\x04\x4b\x72\x46\x56"; case 34: // E return "\x04\x4b\x72\x46\x57"; case 35: // F return "\x04\x4b\x72\x46\x58"; case 36: // G return "\x04\x4b\x72\x46\x59"; case 37: // H return "\x04\x4b\x72\x46\x5a"; case 38: // I return "\x04\x4b\x72\x46\x61"; case 39: // J return "\x04\x4b\x72\x46\x62"; case 40: // K return "\x04\x4b\x72\x46\x63"; case 41: // L return "\x04\x4b\x72\x46\x64"; case 42: // M return "\x04\x4b\x72\x46\x65"; case 43: // N return "\x04\x4b\x72\x46\x66"; case 44: // O return "\x04\x4b\x72\x46\x67"; case 45: // P return "\x04\x4b\x72\x46\x68"; case 46: // Q return "\x04\x4b\x72\x46\x69"; case 47: // R return "\x04\x4b\x72\x46\x6a"; case 48: // S return "\x04\x4b\x72\x46\x6b"; case 49: // T return "\x04\x4b\x72\x46\x6c"; case 50: // U return "\x04\x4b\x72\x46\x6d"; case 51: // V return "\x04\x4b\x72\x46\x6e"; case 52: // W return "\x04\x4b\x72\x46\x6f"; case 53: // X return "\x04\x4b\x72\x46\x70"; case 54: // Y return "\x04\x4b\x72\x46\x71"; case 55: // Z return "\x04\x4b\x72\x46\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x46\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x46\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x46\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x46\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x46\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x46\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x46\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x46\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x46\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x46\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x46\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x46\x42\x30"; case 68: // AE return "\x05\x4b\x72\x46\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x46\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x46\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x46\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x46\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x46\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x46\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x46\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x46\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x46\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x46\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x46\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x46\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x46\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x46\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x46\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x46\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x46\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x46\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x46\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x46\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x46\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x46\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x46\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x46\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x46\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x46\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x46\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x46\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x46\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x46\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x46\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x46\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x46\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x46\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x46\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x46\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x46\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x46\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x46\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x46\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x46\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x46\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x46\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x46\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x46\x79"; case 114: // ENTER return "\x04\x4b\x72\x46\x7a"; case 115: // TAB return "\x04\x4b\x72\x46\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x46\x31"; case 117: // INSERT return "\x04\x4b\x72\x46\x32"; case 118: // DELETE return "\x04\x4b\x72\x46\x33"; case 119: // RIGHT return "\x04\x4b\x72\x46\x34"; case 120: // LEFT return "\x04\x4b\x72\x46\x35"; case 121: // DOWN return "\x04\x4b\x72\x46\x36"; case 122: // UP return "\x04\x4b\x72\x46\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x46\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x46\x39"; case 125: // HOME return "\x04\x4b\x72\x46\x2e"; case 126: // END return "\x04\x4b\x72\x46\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x46\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x46\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x46\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x46\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x46\x21"; case 132: // F1 return "\x04\x4b\x72\x46\x2f"; case 133: // F2 return "\x04\x4b\x72\x46\x2a"; case 134: // F3 return "\x04\x4b\x72\x46\x3f"; case 135: // F4 return "\x04\x4b\x72\x46\x26"; case 136: // F5 return "\x04\x4b\x72\x46\x3c"; case 137: // F6 return "\x04\x4b\x72\x46\x3e"; case 138: // F7 return "\x04\x4b\x72\x46\x28"; case 139: // F8 return "\x04\x4b\x72\x46\x29"; case 140: // F9 return "\x04\x4b\x72\x46\x5b"; case 141: // F10 return "\x04\x4b\x72\x46\x5d"; case 142: // F11 return "\x04\x4b\x72\x46\x7b"; case 143: // F12 return "\x04\x4b\x72\x46\x7d"; case 144: // F13 return "\x04\x4b\x72\x46\x40"; case 145: // F14 return "\x04\x4b\x72\x46\x25"; case 146: // F15 return "\x04\x4b\x72\x46\x24"; case 147: // F16 return "\x04\x4b\x72\x46\x23"; case 148: // F17 return "\x05\x4b\x72\x46\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x46\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x46\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x46\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x46\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x46\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x46\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x46\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x46\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x46\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x46\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x46\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x46\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x46\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x46\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x46\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x46\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x46\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x46\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x46\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x46\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x46\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x46\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x46\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x46\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x46\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x46\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x46\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x46\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x46\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x46\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x46\x42\x68"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x43\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x43\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x43\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x43\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x43\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x43\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x43\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x43\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x43\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x43\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x43\x43"; case 11: // MINUS return "\x04\x4b\x72\x43\x44"; case 12: // PERIOD return "\x04\x4b\x72\x43\x45"; case 13: // SLASH return "\x04\x4b\x72\x43\x46"; case 14: // 0 return "\x04\x4b\x72\x43\x47"; case 15: // 1 return "\x04\x4b\x72\x43\x48"; case 16: // 2 return "\x04\x4b\x72\x43\x49"; case 17: // 3 return "\x04\x4b\x72\x43\x4a"; case 18: // 4 return "\x04\x4b\x72\x43\x4b"; case 19: // 5 return "\x04\x4b\x72\x43\x4c"; case 20: // 6 return "\x04\x4b\x72\x43\x4d"; case 21: // 7 return "\x04\x4b\x72\x43\x4e"; case 22: // 8 return "\x04\x4b\x72\x43\x4f"; case 23: // 9 return "\x04\x4b\x72\x43\x50"; case 24: // COLON return "\x05\x4b\x72\x43\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x43\x51"; case 26: // LESS return "\x05\x4b\x72\x43\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x43\x52"; case 28: // GREATER return "\x05\x4b\x72\x43\x42\x75"; case 29: // AT return "\x05\x4b\x72\x43\x42\x76"; case 30: // A return "\x04\x4b\x72\x43\x53"; case 31: // B return "\x04\x4b\x72\x43\x54"; case 32: // C return "\x04\x4b\x72\x43\x55"; case 33: // D return "\x04\x4b\x72\x43\x56"; case 34: // E return "\x04\x4b\x72\x43\x57"; case 35: // F return "\x04\x4b\x72\x43\x58"; case 36: // G return "\x04\x4b\x72\x43\x59"; case 37: // H return "\x04\x4b\x72\x43\x5a"; case 38: // I return "\x04\x4b\x72\x43\x61"; case 39: // J return "\x04\x4b\x72\x43\x62"; case 40: // K return "\x04\x4b\x72\x43\x63"; case 41: // L return "\x04\x4b\x72\x43\x64"; case 42: // M return "\x04\x4b\x72\x43\x65"; case 43: // N return "\x04\x4b\x72\x43\x66"; case 44: // O return "\x04\x4b\x72\x43\x67"; case 45: // P return "\x04\x4b\x72\x43\x68"; case 46: // Q return "\x04\x4b\x72\x43\x69"; case 47: // R return "\x04\x4b\x72\x43\x6a"; case 48: // S return "\x04\x4b\x72\x43\x6b"; case 49: // T return "\x04\x4b\x72\x43\x6c"; case 50: // U return "\x04\x4b\x72\x43\x6d"; case 51: // V return "\x04\x4b\x72\x43\x6e"; case 52: // W return "\x04\x4b\x72\x43\x6f"; case 53: // X return "\x04\x4b\x72\x43\x70"; case 54: // Y return "\x04\x4b\x72\x43\x71"; case 55: // Z return "\x04\x4b\x72\x43\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x43\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x43\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x43\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x43\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x43\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x43\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x43\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x43\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x43\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x43\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x43\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x43\x42\x30"; case 68: // AE return "\x05\x4b\x72\x43\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x43\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x43\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x43\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x43\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x43\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x43\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x43\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x43\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x43\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x43\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x43\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x43\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x43\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x43\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x43\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x43\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x43\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x43\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x43\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x43\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x43\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x43\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x43\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x43\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x43\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x43\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x43\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x43\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x43\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x43\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x43\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x43\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x43\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x43\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x43\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x43\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x43\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x43\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x43\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x43\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x43\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x43\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x43\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x43\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x43\x79"; case 114: // ENTER return "\x04\x4b\x72\x43\x7a"; case 115: // TAB return "\x04\x4b\x72\x43\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x43\x31"; case 117: // INSERT return "\x04\x4b\x72\x43\x32"; case 118: // DELETE return "\x04\x4b\x72\x43\x33"; case 119: // RIGHT return "\x04\x4b\x72\x43\x34"; case 120: // LEFT return "\x04\x4b\x72\x43\x35"; case 121: // DOWN return "\x04\x4b\x72\x43\x36"; case 122: // UP return "\x04\x4b\x72\x43\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x43\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x43\x39"; case 125: // HOME return "\x04\x4b\x72\x43\x2e"; case 126: // END return "\x04\x4b\x72\x43\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x43\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x43\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x43\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x43\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x43\x21"; case 132: // F1 return "\x04\x4b\x72\x43\x2f"; case 133: // F2 return "\x04\x4b\x72\x43\x2a"; case 134: // F3 return "\x04\x4b\x72\x43\x3f"; case 135: // F4 return "\x04\x4b\x72\x43\x26"; case 136: // F5 return "\x04\x4b\x72\x43\x3c"; case 137: // F6 return "\x04\x4b\x72\x43\x3e"; case 138: // F7 return "\x04\x4b\x72\x43\x28"; case 139: // F8 return "\x04\x4b\x72\x43\x29"; case 140: // F9 return "\x04\x4b\x72\x43\x5b"; case 141: // F10 return "\x04\x4b\x72\x43\x5d"; case 142: // F11 return "\x04\x4b\x72\x43\x7b"; case 143: // F12 return "\x04\x4b\x72\x43\x7d"; case 144: // F13 return "\x04\x4b\x72\x43\x40"; case 145: // F14 return "\x04\x4b\x72\x43\x25"; case 146: // F15 return "\x04\x4b\x72\x43\x24"; case 147: // F16 return "\x04\x4b\x72\x43\x23"; case 148: // F17 return "\x05\x4b\x72\x43\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x43\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x43\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x43\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x43\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x43\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x43\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x43\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x43\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x43\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x43\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x43\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x43\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x43\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x43\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x43\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x43\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x43\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x43\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x43\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x43\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x43\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x43\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x43\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x43\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x43\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x43\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x43\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x43\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x43\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x43\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x43\x42\x68"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x44\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x44\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x44\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x44\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x44\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x44\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x44\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x44\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x44\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x44\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x44\x43"; case 11: // MINUS return "\x04\x4b\x72\x44\x44"; case 12: // PERIOD return "\x04\x4b\x72\x44\x45"; case 13: // SLASH return "\x04\x4b\x72\x44\x46"; case 14: // 0 return "\x04\x4b\x72\x44\x47"; case 15: // 1 return "\x04\x4b\x72\x44\x48"; case 16: // 2 return "\x04\x4b\x72\x44\x49"; case 17: // 3 return "\x04\x4b\x72\x44\x4a"; case 18: // 4 return "\x04\x4b\x72\x44\x4b"; case 19: // 5 return "\x04\x4b\x72\x44\x4c"; case 20: // 6 return "\x04\x4b\x72\x44\x4d"; case 21: // 7 return "\x04\x4b\x72\x44\x4e"; case 22: // 8 return "\x04\x4b\x72\x44\x4f"; case 23: // 9 return "\x04\x4b\x72\x44\x50"; case 24: // COLON return "\x05\x4b\x72\x44\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x44\x51"; case 26: // LESS return "\x05\x4b\x72\x44\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x44\x52"; case 28: // GREATER return "\x05\x4b\x72\x44\x42\x75"; case 29: // AT return "\x05\x4b\x72\x44\x42\x76"; case 30: // A return "\x04\x4b\x72\x44\x53"; case 31: // B return "\x04\x4b\x72\x44\x54"; case 32: // C return "\x04\x4b\x72\x44\x55"; case 33: // D return "\x04\x4b\x72\x44\x56"; case 34: // E return "\x04\x4b\x72\x44\x57"; case 35: // F return "\x04\x4b\x72\x44\x58"; case 36: // G return "\x04\x4b\x72\x44\x59"; case 37: // H return "\x04\x4b\x72\x44\x5a"; case 38: // I return "\x04\x4b\x72\x44\x61"; case 39: // J return "\x04\x4b\x72\x44\x62"; case 40: // K return "\x04\x4b\x72\x44\x63"; case 41: // L return "\x04\x4b\x72\x44\x64"; case 42: // M return "\x04\x4b\x72\x44\x65"; case 43: // N return "\x04\x4b\x72\x44\x66"; case 44: // O return "\x04\x4b\x72\x44\x67"; case 45: // P return "\x04\x4b\x72\x44\x68"; case 46: // Q return "\x04\x4b\x72\x44\x69"; case 47: // R return "\x04\x4b\x72\x44\x6a"; case 48: // S return "\x04\x4b\x72\x44\x6b"; case 49: // T return "\x04\x4b\x72\x44\x6c"; case 50: // U return "\x04\x4b\x72\x44\x6d"; case 51: // V return "\x04\x4b\x72\x44\x6e"; case 52: // W return "\x04\x4b\x72\x44\x6f"; case 53: // X return "\x04\x4b\x72\x44\x70"; case 54: // Y return "\x04\x4b\x72\x44\x71"; case 55: // Z return "\x04\x4b\x72\x44\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x44\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x44\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x44\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x44\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x44\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x44\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x44\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x44\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x44\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x44\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x44\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x44\x42\x30"; case 68: // AE return "\x05\x4b\x72\x44\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x44\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x44\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x44\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x44\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x44\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x44\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x44\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x44\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x44\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x44\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x44\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x44\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x44\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x44\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x44\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x44\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x44\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x44\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x44\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x44\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x44\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x44\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x44\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x44\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x44\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x44\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x44\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x44\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x44\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x44\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x44\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x44\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x44\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x44\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x44\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x44\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x44\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x44\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x44\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x44\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x44\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x44\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x44\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x44\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x44\x79"; case 114: // ENTER return "\x04\x4b\x72\x44\x7a"; case 115: // TAB return "\x04\x4b\x72\x44\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x44\x31"; case 117: // INSERT return "\x04\x4b\x72\x44\x32"; case 118: // DELETE return "\x04\x4b\x72\x44\x33"; case 119: // RIGHT return "\x04\x4b\x72\x44\x34"; case 120: // LEFT return "\x04\x4b\x72\x44\x35"; case 121: // DOWN return "\x04\x4b\x72\x44\x36"; case 122: // UP return "\x04\x4b\x72\x44\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x44\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x44\x39"; case 125: // HOME return "\x04\x4b\x72\x44\x2e"; case 126: // END return "\x04\x4b\x72\x44\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x44\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x44\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x44\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x44\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x44\x21"; case 132: // F1 return "\x04\x4b\x72\x44\x2f"; case 133: // F2 return "\x04\x4b\x72\x44\x2a"; case 134: // F3 return "\x04\x4b\x72\x44\x3f"; case 135: // F4 return "\x04\x4b\x72\x44\x26"; case 136: // F5 return "\x04\x4b\x72\x44\x3c"; case 137: // F6 return "\x04\x4b\x72\x44\x3e"; case 138: // F7 return "\x04\x4b\x72\x44\x28"; case 139: // F8 return "\x04\x4b\x72\x44\x29"; case 140: // F9 return "\x04\x4b\x72\x44\x5b"; case 141: // F10 return "\x04\x4b\x72\x44\x5d"; case 142: // F11 return "\x04\x4b\x72\x44\x7b"; case 143: // F12 return "\x04\x4b\x72\x44\x7d"; case 144: // F13 return "\x04\x4b\x72\x44\x40"; case 145: // F14 return "\x04\x4b\x72\x44\x25"; case 146: // F15 return "\x04\x4b\x72\x44\x24"; case 147: // F16 return "\x04\x4b\x72\x44\x23"; case 148: // F17 return "\x05\x4b\x72\x44\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x44\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x44\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x44\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x44\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x44\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x44\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x44\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x44\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x44\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x44\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x44\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x44\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x44\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x44\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x44\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x44\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x44\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x44\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x44\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x44\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x44\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x44\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x44\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x44\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x44\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x44\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x44\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x44\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x44\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x44\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x44\x42\x68"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x47\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x47\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x47\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x47\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x47\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x47\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x47\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x47\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x47\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x47\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x47\x43"; case 11: // MINUS return "\x04\x4b\x72\x47\x44"; case 12: // PERIOD return "\x04\x4b\x72\x47\x45"; case 13: // SLASH return "\x04\x4b\x72\x47\x46"; case 14: // 0 return "\x04\x4b\x72\x47\x47"; case 15: // 1 return "\x04\x4b\x72\x47\x48"; case 16: // 2 return "\x04\x4b\x72\x47\x49"; case 17: // 3 return "\x04\x4b\x72\x47\x4a"; case 18: // 4 return "\x04\x4b\x72\x47\x4b"; case 19: // 5 return "\x04\x4b\x72\x47\x4c"; case 20: // 6 return "\x04\x4b\x72\x47\x4d"; case 21: // 7 return "\x04\x4b\x72\x47\x4e"; case 22: // 8 return "\x04\x4b\x72\x47\x4f"; case 23: // 9 return "\x04\x4b\x72\x47\x50"; case 24: // COLON return "\x05\x4b\x72\x47\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x47\x51"; case 26: // LESS return "\x05\x4b\x72\x47\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x47\x52"; case 28: // GREATER return "\x05\x4b\x72\x47\x42\x75"; case 29: // AT return "\x05\x4b\x72\x47\x42\x76"; case 30: // A return "\x04\x4b\x72\x47\x53"; case 31: // B return "\x04\x4b\x72\x47\x54"; case 32: // C return "\x04\x4b\x72\x47\x55"; case 33: // D return "\x04\x4b\x72\x47\x56"; case 34: // E return "\x04\x4b\x72\x47\x57"; case 35: // F return "\x04\x4b\x72\x47\x58"; case 36: // G return "\x04\x4b\x72\x47\x59"; case 37: // H return "\x04\x4b\x72\x47\x5a"; case 38: // I return "\x04\x4b\x72\x47\x61"; case 39: // J return "\x04\x4b\x72\x47\x62"; case 40: // K return "\x04\x4b\x72\x47\x63"; case 41: // L return "\x04\x4b\x72\x47\x64"; case 42: // M return "\x04\x4b\x72\x47\x65"; case 43: // N return "\x04\x4b\x72\x47\x66"; case 44: // O return "\x04\x4b\x72\x47\x67"; case 45: // P return "\x04\x4b\x72\x47\x68"; case 46: // Q return "\x04\x4b\x72\x47\x69"; case 47: // R return "\x04\x4b\x72\x47\x6a"; case 48: // S return "\x04\x4b\x72\x47\x6b"; case 49: // T return "\x04\x4b\x72\x47\x6c"; case 50: // U return "\x04\x4b\x72\x47\x6d"; case 51: // V return "\x04\x4b\x72\x47\x6e"; case 52: // W return "\x04\x4b\x72\x47\x6f"; case 53: // X return "\x04\x4b\x72\x47\x70"; case 54: // Y return "\x04\x4b\x72\x47\x71"; case 55: // Z return "\x04\x4b\x72\x47\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x47\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x47\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x47\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x47\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x47\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x47\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x47\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x47\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x47\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x47\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x47\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x47\x42\x30"; case 68: // AE return "\x05\x4b\x72\x47\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x47\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x47\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x47\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x47\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x47\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x47\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x47\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x47\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x47\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x47\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x47\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x47\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x47\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x47\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x47\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x47\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x47\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x47\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x47\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x47\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x47\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x47\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x47\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x47\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x47\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x47\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x47\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x47\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x47\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x47\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x47\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x47\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x47\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x47\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x47\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x47\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x47\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x47\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x47\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x47\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x47\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x47\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x47\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x47\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x47\x79"; case 114: // ENTER return "\x04\x4b\x72\x47\x7a"; case 115: // TAB return "\x04\x4b\x72\x47\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x47\x31"; case 117: // INSERT return "\x04\x4b\x72\x47\x32"; case 118: // DELETE return "\x04\x4b\x72\x47\x33"; case 119: // RIGHT return "\x04\x4b\x72\x47\x34"; case 120: // LEFT return "\x04\x4b\x72\x47\x35"; case 121: // DOWN return "\x04\x4b\x72\x47\x36"; case 122: // UP return "\x04\x4b\x72\x47\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x47\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x47\x39"; case 125: // HOME return "\x04\x4b\x72\x47\x2e"; case 126: // END return "\x04\x4b\x72\x47\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x47\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x47\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x47\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x47\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x47\x21"; case 132: // F1 return "\x04\x4b\x72\x47\x2f"; case 133: // F2 return "\x04\x4b\x72\x47\x2a"; case 134: // F3 return "\x04\x4b\x72\x47\x3f"; case 135: // F4 return "\x04\x4b\x72\x47\x26"; case 136: // F5 return "\x04\x4b\x72\x47\x3c"; case 137: // F6 return "\x04\x4b\x72\x47\x3e"; case 138: // F7 return "\x04\x4b\x72\x47\x28"; case 139: // F8 return "\x04\x4b\x72\x47\x29"; case 140: // F9 return "\x04\x4b\x72\x47\x5b"; case 141: // F10 return "\x04\x4b\x72\x47\x5d"; case 142: // F11 return "\x04\x4b\x72\x47\x7b"; case 143: // F12 return "\x04\x4b\x72\x47\x7d"; case 144: // F13 return "\x04\x4b\x72\x47\x40"; case 145: // F14 return "\x04\x4b\x72\x47\x25"; case 146: // F15 return "\x04\x4b\x72\x47\x24"; case 147: // F16 return "\x04\x4b\x72\x47\x23"; case 148: // F17 return "\x05\x4b\x72\x47\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x47\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x47\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x47\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x47\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x47\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x47\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x47\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x47\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x47\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x47\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x47\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x47\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x47\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x47\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x47\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x47\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x47\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x47\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x47\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x47\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x47\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x47\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x47\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x47\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x47\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x47\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x47\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x47\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x47\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x47\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x47\x42\x68"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x48\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x48\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x48\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x48\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x48\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x48\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x48\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x48\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x48\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x48\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x48\x43"; case 11: // MINUS return "\x04\x4b\x72\x48\x44"; case 12: // PERIOD return "\x04\x4b\x72\x48\x45"; case 13: // SLASH return "\x04\x4b\x72\x48\x46"; case 14: // 0 return "\x04\x4b\x72\x48\x47"; case 15: // 1 return "\x04\x4b\x72\x48\x48"; case 16: // 2 return "\x04\x4b\x72\x48\x49"; case 17: // 3 return "\x04\x4b\x72\x48\x4a"; case 18: // 4 return "\x04\x4b\x72\x48\x4b"; case 19: // 5 return "\x04\x4b\x72\x48\x4c"; case 20: // 6 return "\x04\x4b\x72\x48\x4d"; case 21: // 7 return "\x04\x4b\x72\x48\x4e"; case 22: // 8 return "\x04\x4b\x72\x48\x4f"; case 23: // 9 return "\x04\x4b\x72\x48\x50"; case 24: // COLON return "\x05\x4b\x72\x48\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x48\x51"; case 26: // LESS return "\x05\x4b\x72\x48\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x48\x52"; case 28: // GREATER return "\x05\x4b\x72\x48\x42\x75"; case 29: // AT return "\x05\x4b\x72\x48\x42\x76"; case 30: // A return "\x04\x4b\x72\x48\x53"; case 31: // B return "\x04\x4b\x72\x48\x54"; case 32: // C return "\x04\x4b\x72\x48\x55"; case 33: // D return "\x04\x4b\x72\x48\x56"; case 34: // E return "\x04\x4b\x72\x48\x57"; case 35: // F return "\x04\x4b\x72\x48\x58"; case 36: // G return "\x04\x4b\x72\x48\x59"; case 37: // H return "\x04\x4b\x72\x48\x5a"; case 38: // I return "\x04\x4b\x72\x48\x61"; case 39: // J return "\x04\x4b\x72\x48\x62"; case 40: // K return "\x04\x4b\x72\x48\x63"; case 41: // L return "\x04\x4b\x72\x48\x64"; case 42: // M return "\x04\x4b\x72\x48\x65"; case 43: // N return "\x04\x4b\x72\x48\x66"; case 44: // O return "\x04\x4b\x72\x48\x67"; case 45: // P return "\x04\x4b\x72\x48\x68"; case 46: // Q return "\x04\x4b\x72\x48\x69"; case 47: // R return "\x04\x4b\x72\x48\x6a"; case 48: // S return "\x04\x4b\x72\x48\x6b"; case 49: // T return "\x04\x4b\x72\x48\x6c"; case 50: // U return "\x04\x4b\x72\x48\x6d"; case 51: // V return "\x04\x4b\x72\x48\x6e"; case 52: // W return "\x04\x4b\x72\x48\x6f"; case 53: // X return "\x04\x4b\x72\x48\x70"; case 54: // Y return "\x04\x4b\x72\x48\x71"; case 55: // Z return "\x04\x4b\x72\x48\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x48\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x48\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x48\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x48\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x48\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x48\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x48\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x48\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x48\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x48\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x48\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x48\x42\x30"; case 68: // AE return "\x05\x4b\x72\x48\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x48\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x48\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x48\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x48\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x48\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x48\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x48\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x48\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x48\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x48\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x48\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x48\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x48\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x48\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x48\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x48\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x48\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x48\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x48\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x48\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x48\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x48\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x48\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x48\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x48\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x48\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x48\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x48\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x48\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x48\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x48\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x48\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x48\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x48\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x48\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x48\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x48\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x48\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x48\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x48\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x48\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x48\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x48\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x48\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x48\x79"; case 114: // ENTER return "\x04\x4b\x72\x48\x7a"; case 115: // TAB return "\x04\x4b\x72\x48\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x48\x31"; case 117: // INSERT return "\x04\x4b\x72\x48\x32"; case 118: // DELETE return "\x04\x4b\x72\x48\x33"; case 119: // RIGHT return "\x04\x4b\x72\x48\x34"; case 120: // LEFT return "\x04\x4b\x72\x48\x35"; case 121: // DOWN return "\x04\x4b\x72\x48\x36"; case 122: // UP return "\x04\x4b\x72\x48\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x48\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x48\x39"; case 125: // HOME return "\x04\x4b\x72\x48\x2e"; case 126: // END return "\x04\x4b\x72\x48\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x48\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x48\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x48\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x48\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x48\x21"; case 132: // F1 return "\x04\x4b\x72\x48\x2f"; case 133: // F2 return "\x04\x4b\x72\x48\x2a"; case 134: // F3 return "\x04\x4b\x72\x48\x3f"; case 135: // F4 return "\x04\x4b\x72\x48\x26"; case 136: // F5 return "\x04\x4b\x72\x48\x3c"; case 137: // F6 return "\x04\x4b\x72\x48\x3e"; case 138: // F7 return "\x04\x4b\x72\x48\x28"; case 139: // F8 return "\x04\x4b\x72\x48\x29"; case 140: // F9 return "\x04\x4b\x72\x48\x5b"; case 141: // F10 return "\x04\x4b\x72\x48\x5d"; case 142: // F11 return "\x04\x4b\x72\x48\x7b"; case 143: // F12 return "\x04\x4b\x72\x48\x7d"; case 144: // F13 return "\x04\x4b\x72\x48\x40"; case 145: // F14 return "\x04\x4b\x72\x48\x25"; case 146: // F15 return "\x04\x4b\x72\x48\x24"; case 147: // F16 return "\x04\x4b\x72\x48\x23"; case 148: // F17 return "\x05\x4b\x72\x48\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x48\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x48\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x48\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x48\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x48\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x48\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x48\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x48\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x48\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x48\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x48\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x48\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x48\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x48\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x48\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x48\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x48\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x48\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x48\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x48\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x48\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x48\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x48\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x48\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x48\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x48\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x48\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x48\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x48\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x48\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x48\x42\x68"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x49\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x49\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x49\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x49\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x49\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x49\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x49\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x49\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x49\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x49\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x49\x43"; case 11: // MINUS return "\x04\x4b\x72\x49\x44"; case 12: // PERIOD return "\x04\x4b\x72\x49\x45"; case 13: // SLASH return "\x04\x4b\x72\x49\x46"; case 14: // 0 return "\x04\x4b\x72\x49\x47"; case 15: // 1 return "\x04\x4b\x72\x49\x48"; case 16: // 2 return "\x04\x4b\x72\x49\x49"; case 17: // 3 return "\x04\x4b\x72\x49\x4a"; case 18: // 4 return "\x04\x4b\x72\x49\x4b"; case 19: // 5 return "\x04\x4b\x72\x49\x4c"; case 20: // 6 return "\x04\x4b\x72\x49\x4d"; case 21: // 7 return "\x04\x4b\x72\x49\x4e"; case 22: // 8 return "\x04\x4b\x72\x49\x4f"; case 23: // 9 return "\x04\x4b\x72\x49\x50"; case 24: // COLON return "\x05\x4b\x72\x49\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x49\x51"; case 26: // LESS return "\x05\x4b\x72\x49\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x49\x52"; case 28: // GREATER return "\x05\x4b\x72\x49\x42\x75"; case 29: // AT return "\x05\x4b\x72\x49\x42\x76"; case 30: // A return "\x04\x4b\x72\x49\x53"; case 31: // B return "\x04\x4b\x72\x49\x54"; case 32: // C return "\x04\x4b\x72\x49\x55"; case 33: // D return "\x04\x4b\x72\x49\x56"; case 34: // E return "\x04\x4b\x72\x49\x57"; case 35: // F return "\x04\x4b\x72\x49\x58"; case 36: // G return "\x04\x4b\x72\x49\x59"; case 37: // H return "\x04\x4b\x72\x49\x5a"; case 38: // I return "\x04\x4b\x72\x49\x61"; case 39: // J return "\x04\x4b\x72\x49\x62"; case 40: // K return "\x04\x4b\x72\x49\x63"; case 41: // L return "\x04\x4b\x72\x49\x64"; case 42: // M return "\x04\x4b\x72\x49\x65"; case 43: // N return "\x04\x4b\x72\x49\x66"; case 44: // O return "\x04\x4b\x72\x49\x67"; case 45: // P return "\x04\x4b\x72\x49\x68"; case 46: // Q return "\x04\x4b\x72\x49\x69"; case 47: // R return "\x04\x4b\x72\x49\x6a"; case 48: // S return "\x04\x4b\x72\x49\x6b"; case 49: // T return "\x04\x4b\x72\x49\x6c"; case 50: // U return "\x04\x4b\x72\x49\x6d"; case 51: // V return "\x04\x4b\x72\x49\x6e"; case 52: // W return "\x04\x4b\x72\x49\x6f"; case 53: // X return "\x04\x4b\x72\x49\x70"; case 54: // Y return "\x04\x4b\x72\x49\x71"; case 55: // Z return "\x04\x4b\x72\x49\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x49\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x49\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x49\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x49\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x49\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x49\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x49\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x49\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x49\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x49\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x49\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x49\x42\x30"; case 68: // AE return "\x05\x4b\x72\x49\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x49\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x49\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x49\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x49\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x49\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x49\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x49\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x49\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x49\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x49\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x49\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x49\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x49\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x49\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x49\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x49\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x49\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x49\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x49\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x49\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x49\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x49\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x49\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x49\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x49\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x49\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x49\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x49\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x49\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x49\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x49\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x49\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x49\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x49\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x49\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x49\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x49\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x49\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x49\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x49\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x49\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x49\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x49\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x49\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x49\x79"; case 114: // ENTER return "\x04\x4b\x72\x49\x7a"; case 115: // TAB return "\x04\x4b\x72\x49\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x49\x31"; case 117: // INSERT return "\x04\x4b\x72\x49\x32"; case 118: // DELETE return "\x04\x4b\x72\x49\x33"; case 119: // RIGHT return "\x04\x4b\x72\x49\x34"; case 120: // LEFT return "\x04\x4b\x72\x49\x35"; case 121: // DOWN return "\x04\x4b\x72\x49\x36"; case 122: // UP return "\x04\x4b\x72\x49\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x49\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x49\x39"; case 125: // HOME return "\x04\x4b\x72\x49\x2e"; case 126: // END return "\x04\x4b\x72\x49\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x49\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x49\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x49\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x49\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x49\x21"; case 132: // F1 return "\x04\x4b\x72\x49\x2f"; case 133: // F2 return "\x04\x4b\x72\x49\x2a"; case 134: // F3 return "\x04\x4b\x72\x49\x3f"; case 135: // F4 return "\x04\x4b\x72\x49\x26"; case 136: // F5 return "\x04\x4b\x72\x49\x3c"; case 137: // F6 return "\x04\x4b\x72\x49\x3e"; case 138: // F7 return "\x04\x4b\x72\x49\x28"; case 139: // F8 return "\x04\x4b\x72\x49\x29"; case 140: // F9 return "\x04\x4b\x72\x49\x5b"; case 141: // F10 return "\x04\x4b\x72\x49\x5d"; case 142: // F11 return "\x04\x4b\x72\x49\x7b"; case 143: // F12 return "\x04\x4b\x72\x49\x7d"; case 144: // F13 return "\x04\x4b\x72\x49\x40"; case 145: // F14 return "\x04\x4b\x72\x49\x25"; case 146: // F15 return "\x04\x4b\x72\x49\x24"; case 147: // F16 return "\x04\x4b\x72\x49\x23"; case 148: // F17 return "\x05\x4b\x72\x49\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x49\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x49\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x49\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x49\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x49\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x49\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x49\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x49\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x49\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x49\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x49\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x49\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x49\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x49\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x49\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x49\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x49\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x49\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x49\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x49\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x49\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x49\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x49\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x49\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x49\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x49\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x49\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x49\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x49\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x49\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x49\x42\x68"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4a\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x4a\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x4a\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x4a\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x4a\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x4a\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x4a\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x4a\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x4a\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x4a\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x4a\x43"; case 11: // MINUS return "\x04\x4b\x72\x4a\x44"; case 12: // PERIOD return "\x04\x4b\x72\x4a\x45"; case 13: // SLASH return "\x04\x4b\x72\x4a\x46"; case 14: // 0 return "\x04\x4b\x72\x4a\x47"; case 15: // 1 return "\x04\x4b\x72\x4a\x48"; case 16: // 2 return "\x04\x4b\x72\x4a\x49"; case 17: // 3 return "\x04\x4b\x72\x4a\x4a"; case 18: // 4 return "\x04\x4b\x72\x4a\x4b"; case 19: // 5 return "\x04\x4b\x72\x4a\x4c"; case 20: // 6 return "\x04\x4b\x72\x4a\x4d"; case 21: // 7 return "\x04\x4b\x72\x4a\x4e"; case 22: // 8 return "\x04\x4b\x72\x4a\x4f"; case 23: // 9 return "\x04\x4b\x72\x4a\x50"; case 24: // COLON return "\x05\x4b\x72\x4a\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x4a\x51"; case 26: // LESS return "\x05\x4b\x72\x4a\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x4a\x52"; case 28: // GREATER return "\x05\x4b\x72\x4a\x42\x75"; case 29: // AT return "\x05\x4b\x72\x4a\x42\x76"; case 30: // A return "\x04\x4b\x72\x4a\x53"; case 31: // B return "\x04\x4b\x72\x4a\x54"; case 32: // C return "\x04\x4b\x72\x4a\x55"; case 33: // D return "\x04\x4b\x72\x4a\x56"; case 34: // E return "\x04\x4b\x72\x4a\x57"; case 35: // F return "\x04\x4b\x72\x4a\x58"; case 36: // G return "\x04\x4b\x72\x4a\x59"; case 37: // H return "\x04\x4b\x72\x4a\x5a"; case 38: // I return "\x04\x4b\x72\x4a\x61"; case 39: // J return "\x04\x4b\x72\x4a\x62"; case 40: // K return "\x04\x4b\x72\x4a\x63"; case 41: // L return "\x04\x4b\x72\x4a\x64"; case 42: // M return "\x04\x4b\x72\x4a\x65"; case 43: // N return "\x04\x4b\x72\x4a\x66"; case 44: // O return "\x04\x4b\x72\x4a\x67"; case 45: // P return "\x04\x4b\x72\x4a\x68"; case 46: // Q return "\x04\x4b\x72\x4a\x69"; case 47: // R return "\x04\x4b\x72\x4a\x6a"; case 48: // S return "\x04\x4b\x72\x4a\x6b"; case 49: // T return "\x04\x4b\x72\x4a\x6c"; case 50: // U return "\x04\x4b\x72\x4a\x6d"; case 51: // V return "\x04\x4b\x72\x4a\x6e"; case 52: // W return "\x04\x4b\x72\x4a\x6f"; case 53: // X return "\x04\x4b\x72\x4a\x70"; case 54: // Y return "\x04\x4b\x72\x4a\x71"; case 55: // Z return "\x04\x4b\x72\x4a\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4a\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x4a\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4a\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x4a\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4a\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x4a\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x4a\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x4a\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x4a\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x4a\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x4a\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x4a\x42\x30"; case 68: // AE return "\x05\x4b\x72\x4a\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x4a\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x4a\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x4a\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x4a\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x4a\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x4a\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x4a\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x4a\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x4a\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x4a\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x4a\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x4a\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x4a\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x4a\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x4a\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x4a\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x4a\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x4a\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x4a\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x4a\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x4a\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x4a\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x4a\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x4a\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x4a\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x4a\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x4a\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x4a\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x4a\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x4a\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x4a\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x4a\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x4a\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x4a\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x4a\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x4a\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x4a\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x4a\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x4a\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x4a\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x4a\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x4a\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x4a\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x4a\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x4a\x79"; case 114: // ENTER return "\x04\x4b\x72\x4a\x7a"; case 115: // TAB return "\x04\x4b\x72\x4a\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x4a\x31"; case 117: // INSERT return "\x04\x4b\x72\x4a\x32"; case 118: // DELETE return "\x04\x4b\x72\x4a\x33"; case 119: // RIGHT return "\x04\x4b\x72\x4a\x34"; case 120: // LEFT return "\x04\x4b\x72\x4a\x35"; case 121: // DOWN return "\x04\x4b\x72\x4a\x36"; case 122: // UP return "\x04\x4b\x72\x4a\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x4a\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x4a\x39"; case 125: // HOME return "\x04\x4b\x72\x4a\x2e"; case 126: // END return "\x04\x4b\x72\x4a\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x4a\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4a\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x4a\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4a\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x4a\x21"; case 132: // F1 return "\x04\x4b\x72\x4a\x2f"; case 133: // F2 return "\x04\x4b\x72\x4a\x2a"; case 134: // F3 return "\x04\x4b\x72\x4a\x3f"; case 135: // F4 return "\x04\x4b\x72\x4a\x26"; case 136: // F5 return "\x04\x4b\x72\x4a\x3c"; case 137: // F6 return "\x04\x4b\x72\x4a\x3e"; case 138: // F7 return "\x04\x4b\x72\x4a\x28"; case 139: // F8 return "\x04\x4b\x72\x4a\x29"; case 140: // F9 return "\x04\x4b\x72\x4a\x5b"; case 141: // F10 return "\x04\x4b\x72\x4a\x5d"; case 142: // F11 return "\x04\x4b\x72\x4a\x7b"; case 143: // F12 return "\x04\x4b\x72\x4a\x7d"; case 144: // F13 return "\x04\x4b\x72\x4a\x40"; case 145: // F14 return "\x04\x4b\x72\x4a\x25"; case 146: // F15 return "\x04\x4b\x72\x4a\x24"; case 147: // F16 return "\x04\x4b\x72\x4a\x23"; case 148: // F17 return "\x05\x4b\x72\x4a\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x4a\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x4a\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x4a\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x4a\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x4a\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x4a\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x4a\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x4a\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x4a\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x4a\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x4a\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x4a\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x4a\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x4a\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x4a\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x4a\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x4a\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x4a\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x4a\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x4a\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4a\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4a\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x4a\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x4a\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x4a\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4a\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x4a\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x4a\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4a\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x4a\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4a\x42\x68"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4d\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x4d\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x4d\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x4d\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x4d\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x4d\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x4d\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x4d\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x4d\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x4d\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x4d\x43"; case 11: // MINUS return "\x04\x4b\x72\x4d\x44"; case 12: // PERIOD return "\x04\x4b\x72\x4d\x45"; case 13: // SLASH return "\x04\x4b\x72\x4d\x46"; case 14: // 0 return "\x04\x4b\x72\x4d\x47"; case 15: // 1 return "\x04\x4b\x72\x4d\x48"; case 16: // 2 return "\x04\x4b\x72\x4d\x49"; case 17: // 3 return "\x04\x4b\x72\x4d\x4a"; case 18: // 4 return "\x04\x4b\x72\x4d\x4b"; case 19: // 5 return "\x04\x4b\x72\x4d\x4c"; case 20: // 6 return "\x04\x4b\x72\x4d\x4d"; case 21: // 7 return "\x04\x4b\x72\x4d\x4e"; case 22: // 8 return "\x04\x4b\x72\x4d\x4f"; case 23: // 9 return "\x04\x4b\x72\x4d\x50"; case 24: // COLON return "\x05\x4b\x72\x4d\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x4d\x51"; case 26: // LESS return "\x05\x4b\x72\x4d\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x4d\x52"; case 28: // GREATER return "\x05\x4b\x72\x4d\x42\x75"; case 29: // AT return "\x05\x4b\x72\x4d\x42\x76"; case 30: // A return "\x04\x4b\x72\x4d\x53"; case 31: // B return "\x04\x4b\x72\x4d\x54"; case 32: // C return "\x04\x4b\x72\x4d\x55"; case 33: // D return "\x04\x4b\x72\x4d\x56"; case 34: // E return "\x04\x4b\x72\x4d\x57"; case 35: // F return "\x04\x4b\x72\x4d\x58"; case 36: // G return "\x04\x4b\x72\x4d\x59"; case 37: // H return "\x04\x4b\x72\x4d\x5a"; case 38: // I return "\x04\x4b\x72\x4d\x61"; case 39: // J return "\x04\x4b\x72\x4d\x62"; case 40: // K return "\x04\x4b\x72\x4d\x63"; case 41: // L return "\x04\x4b\x72\x4d\x64"; case 42: // M return "\x04\x4b\x72\x4d\x65"; case 43: // N return "\x04\x4b\x72\x4d\x66"; case 44: // O return "\x04\x4b\x72\x4d\x67"; case 45: // P return "\x04\x4b\x72\x4d\x68"; case 46: // Q return "\x04\x4b\x72\x4d\x69"; case 47: // R return "\x04\x4b\x72\x4d\x6a"; case 48: // S return "\x04\x4b\x72\x4d\x6b"; case 49: // T return "\x04\x4b\x72\x4d\x6c"; case 50: // U return "\x04\x4b\x72\x4d\x6d"; case 51: // V return "\x04\x4b\x72\x4d\x6e"; case 52: // W return "\x04\x4b\x72\x4d\x6f"; case 53: // X return "\x04\x4b\x72\x4d\x70"; case 54: // Y return "\x04\x4b\x72\x4d\x71"; case 55: // Z return "\x04\x4b\x72\x4d\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4d\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x4d\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4d\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x4d\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4d\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x4d\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x4d\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x4d\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x4d\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x4d\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x4d\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x4d\x42\x30"; case 68: // AE return "\x05\x4b\x72\x4d\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x4d\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x4d\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x4d\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x4d\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x4d\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x4d\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x4d\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x4d\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x4d\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x4d\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x4d\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x4d\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x4d\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x4d\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x4d\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x4d\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x4d\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x4d\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x4d\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x4d\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x4d\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x4d\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x4d\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x4d\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x4d\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x4d\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x4d\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x4d\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x4d\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x4d\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x4d\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x4d\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x4d\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x4d\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x4d\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x4d\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x4d\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x4d\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x4d\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x4d\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x4d\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x4d\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x4d\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x4d\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x4d\x79"; case 114: // ENTER return "\x04\x4b\x72\x4d\x7a"; case 115: // TAB return "\x04\x4b\x72\x4d\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x4d\x31"; case 117: // INSERT return "\x04\x4b\x72\x4d\x32"; case 118: // DELETE return "\x04\x4b\x72\x4d\x33"; case 119: // RIGHT return "\x04\x4b\x72\x4d\x34"; case 120: // LEFT return "\x04\x4b\x72\x4d\x35"; case 121: // DOWN return "\x04\x4b\x72\x4d\x36"; case 122: // UP return "\x04\x4b\x72\x4d\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x4d\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x4d\x39"; case 125: // HOME return "\x04\x4b\x72\x4d\x2e"; case 126: // END return "\x04\x4b\x72\x4d\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x4d\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4d\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x4d\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4d\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x4d\x21"; case 132: // F1 return "\x04\x4b\x72\x4d\x2f"; case 133: // F2 return "\x04\x4b\x72\x4d\x2a"; case 134: // F3 return "\x04\x4b\x72\x4d\x3f"; case 135: // F4 return "\x04\x4b\x72\x4d\x26"; case 136: // F5 return "\x04\x4b\x72\x4d\x3c"; case 137: // F6 return "\x04\x4b\x72\x4d\x3e"; case 138: // F7 return "\x04\x4b\x72\x4d\x28"; case 139: // F8 return "\x04\x4b\x72\x4d\x29"; case 140: // F9 return "\x04\x4b\x72\x4d\x5b"; case 141: // F10 return "\x04\x4b\x72\x4d\x5d"; case 142: // F11 return "\x04\x4b\x72\x4d\x7b"; case 143: // F12 return "\x04\x4b\x72\x4d\x7d"; case 144: // F13 return "\x04\x4b\x72\x4d\x40"; case 145: // F14 return "\x04\x4b\x72\x4d\x25"; case 146: // F15 return "\x04\x4b\x72\x4d\x24"; case 147: // F16 return "\x04\x4b\x72\x4d\x23"; case 148: // F17 return "\x05\x4b\x72\x4d\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x4d\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x4d\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x4d\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x4d\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x4d\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x4d\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x4d\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x4d\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x4d\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x4d\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x4d\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x4d\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x4d\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x4d\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x4d\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x4d\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x4d\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x4d\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x4d\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x4d\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4d\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4d\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x4d\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x4d\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x4d\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4d\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x4d\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x4d\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4d\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x4d\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4d\x42\x68"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4e\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x4e\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x4e\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x4e\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x4e\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x4e\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x4e\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x4e\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x4e\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x4e\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x4e\x43"; case 11: // MINUS return "\x04\x4b\x72\x4e\x44"; case 12: // PERIOD return "\x04\x4b\x72\x4e\x45"; case 13: // SLASH return "\x04\x4b\x72\x4e\x46"; case 14: // 0 return "\x04\x4b\x72\x4e\x47"; case 15: // 1 return "\x04\x4b\x72\x4e\x48"; case 16: // 2 return "\x04\x4b\x72\x4e\x49"; case 17: // 3 return "\x04\x4b\x72\x4e\x4a"; case 18: // 4 return "\x04\x4b\x72\x4e\x4b"; case 19: // 5 return "\x04\x4b\x72\x4e\x4c"; case 20: // 6 return "\x04\x4b\x72\x4e\x4d"; case 21: // 7 return "\x04\x4b\x72\x4e\x4e"; case 22: // 8 return "\x04\x4b\x72\x4e\x4f"; case 23: // 9 return "\x04\x4b\x72\x4e\x50"; case 24: // COLON return "\x05\x4b\x72\x4e\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x4e\x51"; case 26: // LESS return "\x05\x4b\x72\x4e\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x4e\x52"; case 28: // GREATER return "\x05\x4b\x72\x4e\x42\x75"; case 29: // AT return "\x05\x4b\x72\x4e\x42\x76"; case 30: // A return "\x04\x4b\x72\x4e\x53"; case 31: // B return "\x04\x4b\x72\x4e\x54"; case 32: // C return "\x04\x4b\x72\x4e\x55"; case 33: // D return "\x04\x4b\x72\x4e\x56"; case 34: // E return "\x04\x4b\x72\x4e\x57"; case 35: // F return "\x04\x4b\x72\x4e\x58"; case 36: // G return "\x04\x4b\x72\x4e\x59"; case 37: // H return "\x04\x4b\x72\x4e\x5a"; case 38: // I return "\x04\x4b\x72\x4e\x61"; case 39: // J return "\x04\x4b\x72\x4e\x62"; case 40: // K return "\x04\x4b\x72\x4e\x63"; case 41: // L return "\x04\x4b\x72\x4e\x64"; case 42: // M return "\x04\x4b\x72\x4e\x65"; case 43: // N return "\x04\x4b\x72\x4e\x66"; case 44: // O return "\x04\x4b\x72\x4e\x67"; case 45: // P return "\x04\x4b\x72\x4e\x68"; case 46: // Q return "\x04\x4b\x72\x4e\x69"; case 47: // R return "\x04\x4b\x72\x4e\x6a"; case 48: // S return "\x04\x4b\x72\x4e\x6b"; case 49: // T return "\x04\x4b\x72\x4e\x6c"; case 50: // U return "\x04\x4b\x72\x4e\x6d"; case 51: // V return "\x04\x4b\x72\x4e\x6e"; case 52: // W return "\x04\x4b\x72\x4e\x6f"; case 53: // X return "\x04\x4b\x72\x4e\x70"; case 54: // Y return "\x04\x4b\x72\x4e\x71"; case 55: // Z return "\x04\x4b\x72\x4e\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4e\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x4e\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4e\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x4e\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4e\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x4e\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x4e\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x4e\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x4e\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x4e\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x4e\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x4e\x42\x30"; case 68: // AE return "\x05\x4b\x72\x4e\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x4e\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x4e\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x4e\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x4e\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x4e\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x4e\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x4e\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x4e\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x4e\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x4e\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x4e\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x4e\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x4e\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x4e\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x4e\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x4e\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x4e\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x4e\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x4e\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x4e\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x4e\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x4e\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x4e\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x4e\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x4e\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x4e\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x4e\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x4e\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x4e\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x4e\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x4e\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x4e\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x4e\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x4e\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x4e\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x4e\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x4e\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x4e\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x4e\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x4e\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x4e\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x4e\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x4e\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x4e\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x4e\x79"; case 114: // ENTER return "\x04\x4b\x72\x4e\x7a"; case 115: // TAB return "\x04\x4b\x72\x4e\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x4e\x31"; case 117: // INSERT return "\x04\x4b\x72\x4e\x32"; case 118: // DELETE return "\x04\x4b\x72\x4e\x33"; case 119: // RIGHT return "\x04\x4b\x72\x4e\x34"; case 120: // LEFT return "\x04\x4b\x72\x4e\x35"; case 121: // DOWN return "\x04\x4b\x72\x4e\x36"; case 122: // UP return "\x04\x4b\x72\x4e\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x4e\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x4e\x39"; case 125: // HOME return "\x04\x4b\x72\x4e\x2e"; case 126: // END return "\x04\x4b\x72\x4e\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x4e\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4e\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x4e\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4e\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x4e\x21"; case 132: // F1 return "\x04\x4b\x72\x4e\x2f"; case 133: // F2 return "\x04\x4b\x72\x4e\x2a"; case 134: // F3 return "\x04\x4b\x72\x4e\x3f"; case 135: // F4 return "\x04\x4b\x72\x4e\x26"; case 136: // F5 return "\x04\x4b\x72\x4e\x3c"; case 137: // F6 return "\x04\x4b\x72\x4e\x3e"; case 138: // F7 return "\x04\x4b\x72\x4e\x28"; case 139: // F8 return "\x04\x4b\x72\x4e\x29"; case 140: // F9 return "\x04\x4b\x72\x4e\x5b"; case 141: // F10 return "\x04\x4b\x72\x4e\x5d"; case 142: // F11 return "\x04\x4b\x72\x4e\x7b"; case 143: // F12 return "\x04\x4b\x72\x4e\x7d"; case 144: // F13 return "\x04\x4b\x72\x4e\x40"; case 145: // F14 return "\x04\x4b\x72\x4e\x25"; case 146: // F15 return "\x04\x4b\x72\x4e\x24"; case 147: // F16 return "\x04\x4b\x72\x4e\x23"; case 148: // F17 return "\x05\x4b\x72\x4e\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x4e\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x4e\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x4e\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x4e\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x4e\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x4e\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x4e\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x4e\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x4e\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x4e\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x4e\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x4e\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x4e\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x4e\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x4e\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x4e\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x4e\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x4e\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x4e\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x4e\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4e\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4e\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x4e\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x4e\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x4e\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4e\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x4e\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x4e\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4e\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x4e\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4e\x42\x68"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4b\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x4b\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x4b\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x4b\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x4b\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x4b\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x4b\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x4b\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x4b\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x4b\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x4b\x43"; case 11: // MINUS return "\x04\x4b\x72\x4b\x44"; case 12: // PERIOD return "\x04\x4b\x72\x4b\x45"; case 13: // SLASH return "\x04\x4b\x72\x4b\x46"; case 14: // 0 return "\x04\x4b\x72\x4b\x47"; case 15: // 1 return "\x04\x4b\x72\x4b\x48"; case 16: // 2 return "\x04\x4b\x72\x4b\x49"; case 17: // 3 return "\x04\x4b\x72\x4b\x4a"; case 18: // 4 return "\x04\x4b\x72\x4b\x4b"; case 19: // 5 return "\x04\x4b\x72\x4b\x4c"; case 20: // 6 return "\x04\x4b\x72\x4b\x4d"; case 21: // 7 return "\x04\x4b\x72\x4b\x4e"; case 22: // 8 return "\x04\x4b\x72\x4b\x4f"; case 23: // 9 return "\x04\x4b\x72\x4b\x50"; case 24: // COLON return "\x05\x4b\x72\x4b\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x4b\x51"; case 26: // LESS return "\x05\x4b\x72\x4b\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x4b\x52"; case 28: // GREATER return "\x05\x4b\x72\x4b\x42\x75"; case 29: // AT return "\x05\x4b\x72\x4b\x42\x76"; case 30: // A return "\x04\x4b\x72\x4b\x53"; case 31: // B return "\x04\x4b\x72\x4b\x54"; case 32: // C return "\x04\x4b\x72\x4b\x55"; case 33: // D return "\x04\x4b\x72\x4b\x56"; case 34: // E return "\x04\x4b\x72\x4b\x57"; case 35: // F return "\x04\x4b\x72\x4b\x58"; case 36: // G return "\x04\x4b\x72\x4b\x59"; case 37: // H return "\x04\x4b\x72\x4b\x5a"; case 38: // I return "\x04\x4b\x72\x4b\x61"; case 39: // J return "\x04\x4b\x72\x4b\x62"; case 40: // K return "\x04\x4b\x72\x4b\x63"; case 41: // L return "\x04\x4b\x72\x4b\x64"; case 42: // M return "\x04\x4b\x72\x4b\x65"; case 43: // N return "\x04\x4b\x72\x4b\x66"; case 44: // O return "\x04\x4b\x72\x4b\x67"; case 45: // P return "\x04\x4b\x72\x4b\x68"; case 46: // Q return "\x04\x4b\x72\x4b\x69"; case 47: // R return "\x04\x4b\x72\x4b\x6a"; case 48: // S return "\x04\x4b\x72\x4b\x6b"; case 49: // T return "\x04\x4b\x72\x4b\x6c"; case 50: // U return "\x04\x4b\x72\x4b\x6d"; case 51: // V return "\x04\x4b\x72\x4b\x6e"; case 52: // W return "\x04\x4b\x72\x4b\x6f"; case 53: // X return "\x04\x4b\x72\x4b\x70"; case 54: // Y return "\x04\x4b\x72\x4b\x71"; case 55: // Z return "\x04\x4b\x72\x4b\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4b\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x4b\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4b\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x4b\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4b\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x4b\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x4b\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x4b\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x4b\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x4b\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x4b\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x4b\x42\x30"; case 68: // AE return "\x05\x4b\x72\x4b\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x4b\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x4b\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x4b\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x4b\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x4b\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x4b\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x4b\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x4b\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x4b\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x4b\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x4b\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x4b\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x4b\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x4b\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x4b\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x4b\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x4b\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x4b\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x4b\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x4b\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x4b\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x4b\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x4b\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x4b\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x4b\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x4b\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x4b\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x4b\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x4b\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x4b\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x4b\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x4b\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x4b\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x4b\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x4b\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x4b\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x4b\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x4b\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x4b\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x4b\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x4b\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x4b\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x4b\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x4b\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x4b\x79"; case 114: // ENTER return "\x04\x4b\x72\x4b\x7a"; case 115: // TAB return "\x04\x4b\x72\x4b\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x4b\x31"; case 117: // INSERT return "\x04\x4b\x72\x4b\x32"; case 118: // DELETE return "\x04\x4b\x72\x4b\x33"; case 119: // RIGHT return "\x04\x4b\x72\x4b\x34"; case 120: // LEFT return "\x04\x4b\x72\x4b\x35"; case 121: // DOWN return "\x04\x4b\x72\x4b\x36"; case 122: // UP return "\x04\x4b\x72\x4b\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x4b\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x4b\x39"; case 125: // HOME return "\x04\x4b\x72\x4b\x2e"; case 126: // END return "\x04\x4b\x72\x4b\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x4b\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4b\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x4b\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4b\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x4b\x21"; case 132: // F1 return "\x04\x4b\x72\x4b\x2f"; case 133: // F2 return "\x04\x4b\x72\x4b\x2a"; case 134: // F3 return "\x04\x4b\x72\x4b\x3f"; case 135: // F4 return "\x04\x4b\x72\x4b\x26"; case 136: // F5 return "\x04\x4b\x72\x4b\x3c"; case 137: // F6 return "\x04\x4b\x72\x4b\x3e"; case 138: // F7 return "\x04\x4b\x72\x4b\x28"; case 139: // F8 return "\x04\x4b\x72\x4b\x29"; case 140: // F9 return "\x04\x4b\x72\x4b\x5b"; case 141: // F10 return "\x04\x4b\x72\x4b\x5d"; case 142: // F11 return "\x04\x4b\x72\x4b\x7b"; case 143: // F12 return "\x04\x4b\x72\x4b\x7d"; case 144: // F13 return "\x04\x4b\x72\x4b\x40"; case 145: // F14 return "\x04\x4b\x72\x4b\x25"; case 146: // F15 return "\x04\x4b\x72\x4b\x24"; case 147: // F16 return "\x04\x4b\x72\x4b\x23"; case 148: // F17 return "\x05\x4b\x72\x4b\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x4b\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x4b\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x4b\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x4b\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x4b\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x4b\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x4b\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x4b\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x4b\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x4b\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x4b\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x4b\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x4b\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x4b\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x4b\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x4b\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x4b\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x4b\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x4b\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x4b\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4b\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4b\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x4b\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x4b\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x4b\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4b\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x4b\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x4b\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4b\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x4b\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4b\x42\x68"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4c\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x4c\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x4c\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x4c\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x4c\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x4c\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x4c\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x4c\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x4c\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x4c\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x4c\x43"; case 11: // MINUS return "\x04\x4b\x72\x4c\x44"; case 12: // PERIOD return "\x04\x4b\x72\x4c\x45"; case 13: // SLASH return "\x04\x4b\x72\x4c\x46"; case 14: // 0 return "\x04\x4b\x72\x4c\x47"; case 15: // 1 return "\x04\x4b\x72\x4c\x48"; case 16: // 2 return "\x04\x4b\x72\x4c\x49"; case 17: // 3 return "\x04\x4b\x72\x4c\x4a"; case 18: // 4 return "\x04\x4b\x72\x4c\x4b"; case 19: // 5 return "\x04\x4b\x72\x4c\x4c"; case 20: // 6 return "\x04\x4b\x72\x4c\x4d"; case 21: // 7 return "\x04\x4b\x72\x4c\x4e"; case 22: // 8 return "\x04\x4b\x72\x4c\x4f"; case 23: // 9 return "\x04\x4b\x72\x4c\x50"; case 24: // COLON return "\x05\x4b\x72\x4c\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x4c\x51"; case 26: // LESS return "\x05\x4b\x72\x4c\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x4c\x52"; case 28: // GREATER return "\x05\x4b\x72\x4c\x42\x75"; case 29: // AT return "\x05\x4b\x72\x4c\x42\x76"; case 30: // A return "\x04\x4b\x72\x4c\x53"; case 31: // B return "\x04\x4b\x72\x4c\x54"; case 32: // C return "\x04\x4b\x72\x4c\x55"; case 33: // D return "\x04\x4b\x72\x4c\x56"; case 34: // E return "\x04\x4b\x72\x4c\x57"; case 35: // F return "\x04\x4b\x72\x4c\x58"; case 36: // G return "\x04\x4b\x72\x4c\x59"; case 37: // H return "\x04\x4b\x72\x4c\x5a"; case 38: // I return "\x04\x4b\x72\x4c\x61"; case 39: // J return "\x04\x4b\x72\x4c\x62"; case 40: // K return "\x04\x4b\x72\x4c\x63"; case 41: // L return "\x04\x4b\x72\x4c\x64"; case 42: // M return "\x04\x4b\x72\x4c\x65"; case 43: // N return "\x04\x4b\x72\x4c\x66"; case 44: // O return "\x04\x4b\x72\x4c\x67"; case 45: // P return "\x04\x4b\x72\x4c\x68"; case 46: // Q return "\x04\x4b\x72\x4c\x69"; case 47: // R return "\x04\x4b\x72\x4c\x6a"; case 48: // S return "\x04\x4b\x72\x4c\x6b"; case 49: // T return "\x04\x4b\x72\x4c\x6c"; case 50: // U return "\x04\x4b\x72\x4c\x6d"; case 51: // V return "\x04\x4b\x72\x4c\x6e"; case 52: // W return "\x04\x4b\x72\x4c\x6f"; case 53: // X return "\x04\x4b\x72\x4c\x70"; case 54: // Y return "\x04\x4b\x72\x4c\x71"; case 55: // Z return "\x04\x4b\x72\x4c\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4c\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x4c\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4c\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x4c\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4c\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x4c\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x4c\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x4c\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x4c\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x4c\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x4c\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x4c\x42\x30"; case 68: // AE return "\x05\x4b\x72\x4c\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x4c\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x4c\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x4c\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x4c\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x4c\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x4c\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x4c\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x4c\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x4c\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x4c\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x4c\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x4c\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x4c\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x4c\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x4c\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x4c\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x4c\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x4c\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x4c\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x4c\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x4c\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x4c\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x4c\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x4c\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x4c\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x4c\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x4c\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x4c\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x4c\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x4c\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x4c\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x4c\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x4c\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x4c\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x4c\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x4c\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x4c\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x4c\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x4c\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x4c\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x4c\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x4c\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x4c\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x4c\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x4c\x79"; case 114: // ENTER return "\x04\x4b\x72\x4c\x7a"; case 115: // TAB return "\x04\x4b\x72\x4c\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x4c\x31"; case 117: // INSERT return "\x04\x4b\x72\x4c\x32"; case 118: // DELETE return "\x04\x4b\x72\x4c\x33"; case 119: // RIGHT return "\x04\x4b\x72\x4c\x34"; case 120: // LEFT return "\x04\x4b\x72\x4c\x35"; case 121: // DOWN return "\x04\x4b\x72\x4c\x36"; case 122: // UP return "\x04\x4b\x72\x4c\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x4c\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x4c\x39"; case 125: // HOME return "\x04\x4b\x72\x4c\x2e"; case 126: // END return "\x04\x4b\x72\x4c\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x4c\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4c\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x4c\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4c\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x4c\x21"; case 132: // F1 return "\x04\x4b\x72\x4c\x2f"; case 133: // F2 return "\x04\x4b\x72\x4c\x2a"; case 134: // F3 return "\x04\x4b\x72\x4c\x3f"; case 135: // F4 return "\x04\x4b\x72\x4c\x26"; case 136: // F5 return "\x04\x4b\x72\x4c\x3c"; case 137: // F6 return "\x04\x4b\x72\x4c\x3e"; case 138: // F7 return "\x04\x4b\x72\x4c\x28"; case 139: // F8 return "\x04\x4b\x72\x4c\x29"; case 140: // F9 return "\x04\x4b\x72\x4c\x5b"; case 141: // F10 return "\x04\x4b\x72\x4c\x5d"; case 142: // F11 return "\x04\x4b\x72\x4c\x7b"; case 143: // F12 return "\x04\x4b\x72\x4c\x7d"; case 144: // F13 return "\x04\x4b\x72\x4c\x40"; case 145: // F14 return "\x04\x4b\x72\x4c\x25"; case 146: // F15 return "\x04\x4b\x72\x4c\x24"; case 147: // F16 return "\x04\x4b\x72\x4c\x23"; case 148: // F17 return "\x05\x4b\x72\x4c\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x4c\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x4c\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x4c\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x4c\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x4c\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x4c\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x4c\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x4c\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x4c\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x4c\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x4c\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x4c\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x4c\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x4c\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x4c\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x4c\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x4c\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x4c\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x4c\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x4c\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4c\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4c\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x4c\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x4c\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x4c\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4c\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x4c\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x4c\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4c\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x4c\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4c\x42\x68"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4f\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x4f\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x4f\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x4f\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x4f\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x4f\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x4f\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x4f\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x4f\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x4f\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x4f\x43"; case 11: // MINUS return "\x04\x4b\x72\x4f\x44"; case 12: // PERIOD return "\x04\x4b\x72\x4f\x45"; case 13: // SLASH return "\x04\x4b\x72\x4f\x46"; case 14: // 0 return "\x04\x4b\x72\x4f\x47"; case 15: // 1 return "\x04\x4b\x72\x4f\x48"; case 16: // 2 return "\x04\x4b\x72\x4f\x49"; case 17: // 3 return "\x04\x4b\x72\x4f\x4a"; case 18: // 4 return "\x04\x4b\x72\x4f\x4b"; case 19: // 5 return "\x04\x4b\x72\x4f\x4c"; case 20: // 6 return "\x04\x4b\x72\x4f\x4d"; case 21: // 7 return "\x04\x4b\x72\x4f\x4e"; case 22: // 8 return "\x04\x4b\x72\x4f\x4f"; case 23: // 9 return "\x04\x4b\x72\x4f\x50"; case 24: // COLON return "\x05\x4b\x72\x4f\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x4f\x51"; case 26: // LESS return "\x05\x4b\x72\x4f\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x4f\x52"; case 28: // GREATER return "\x05\x4b\x72\x4f\x42\x75"; case 29: // AT return "\x05\x4b\x72\x4f\x42\x76"; case 30: // A return "\x04\x4b\x72\x4f\x53"; case 31: // B return "\x04\x4b\x72\x4f\x54"; case 32: // C return "\x04\x4b\x72\x4f\x55"; case 33: // D return "\x04\x4b\x72\x4f\x56"; case 34: // E return "\x04\x4b\x72\x4f\x57"; case 35: // F return "\x04\x4b\x72\x4f\x58"; case 36: // G return "\x04\x4b\x72\x4f\x59"; case 37: // H return "\x04\x4b\x72\x4f\x5a"; case 38: // I return "\x04\x4b\x72\x4f\x61"; case 39: // J return "\x04\x4b\x72\x4f\x62"; case 40: // K return "\x04\x4b\x72\x4f\x63"; case 41: // L return "\x04\x4b\x72\x4f\x64"; case 42: // M return "\x04\x4b\x72\x4f\x65"; case 43: // N return "\x04\x4b\x72\x4f\x66"; case 44: // O return "\x04\x4b\x72\x4f\x67"; case 45: // P return "\x04\x4b\x72\x4f\x68"; case 46: // Q return "\x04\x4b\x72\x4f\x69"; case 47: // R return "\x04\x4b\x72\x4f\x6a"; case 48: // S return "\x04\x4b\x72\x4f\x6b"; case 49: // T return "\x04\x4b\x72\x4f\x6c"; case 50: // U return "\x04\x4b\x72\x4f\x6d"; case 51: // V return "\x04\x4b\x72\x4f\x6e"; case 52: // W return "\x04\x4b\x72\x4f\x6f"; case 53: // X return "\x04\x4b\x72\x4f\x70"; case 54: // Y return "\x04\x4b\x72\x4f\x71"; case 55: // Z return "\x04\x4b\x72\x4f\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4f\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x4f\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4f\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x4f\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4f\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x4f\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x4f\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x4f\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x4f\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x4f\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x4f\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x4f\x42\x30"; case 68: // AE return "\x05\x4b\x72\x4f\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x4f\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x4f\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x4f\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x4f\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x4f\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x4f\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x4f\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x4f\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x4f\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x4f\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x4f\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x4f\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x4f\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x4f\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x4f\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x4f\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x4f\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x4f\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x4f\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x4f\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x4f\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x4f\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x4f\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x4f\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x4f\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x4f\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x4f\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x4f\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x4f\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x4f\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x4f\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x4f\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x4f\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x4f\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x4f\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x4f\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x4f\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x4f\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x4f\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x4f\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x4f\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x4f\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x4f\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x4f\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x4f\x79"; case 114: // ENTER return "\x04\x4b\x72\x4f\x7a"; case 115: // TAB return "\x04\x4b\x72\x4f\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x4f\x31"; case 117: // INSERT return "\x04\x4b\x72\x4f\x32"; case 118: // DELETE return "\x04\x4b\x72\x4f\x33"; case 119: // RIGHT return "\x04\x4b\x72\x4f\x34"; case 120: // LEFT return "\x04\x4b\x72\x4f\x35"; case 121: // DOWN return "\x04\x4b\x72\x4f\x36"; case 122: // UP return "\x04\x4b\x72\x4f\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x4f\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x4f\x39"; case 125: // HOME return "\x04\x4b\x72\x4f\x2e"; case 126: // END return "\x04\x4b\x72\x4f\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x4f\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4f\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x4f\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4f\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x4f\x21"; case 132: // F1 return "\x04\x4b\x72\x4f\x2f"; case 133: // F2 return "\x04\x4b\x72\x4f\x2a"; case 134: // F3 return "\x04\x4b\x72\x4f\x3f"; case 135: // F4 return "\x04\x4b\x72\x4f\x26"; case 136: // F5 return "\x04\x4b\x72\x4f\x3c"; case 137: // F6 return "\x04\x4b\x72\x4f\x3e"; case 138: // F7 return "\x04\x4b\x72\x4f\x28"; case 139: // F8 return "\x04\x4b\x72\x4f\x29"; case 140: // F9 return "\x04\x4b\x72\x4f\x5b"; case 141: // F10 return "\x04\x4b\x72\x4f\x5d"; case 142: // F11 return "\x04\x4b\x72\x4f\x7b"; case 143: // F12 return "\x04\x4b\x72\x4f\x7d"; case 144: // F13 return "\x04\x4b\x72\x4f\x40"; case 145: // F14 return "\x04\x4b\x72\x4f\x25"; case 146: // F15 return "\x04\x4b\x72\x4f\x24"; case 147: // F16 return "\x04\x4b\x72\x4f\x23"; case 148: // F17 return "\x05\x4b\x72\x4f\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x4f\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x4f\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x4f\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x4f\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x4f\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x4f\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x4f\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x4f\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x4f\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x4f\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x4f\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x4f\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x4f\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x4f\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x4f\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x4f\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x4f\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x4f\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x4f\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x4f\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4f\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4f\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x4f\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x4f\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x4f\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4f\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x4f\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x4f\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4f\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x4f\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4f\x42\x68"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x50\x41"; case 1: // EXCLAM return "\x05\x4b\x72\x50\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x72\x50\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x72\x50\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x72\x50\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x72\x50\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x72\x50\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x72\x50\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x72\x50\x42\x72"; case 9: // PLUS return "\x05\x4b\x72\x50\x42\x69"; case 10: // COMMA return "\x04\x4b\x72\x50\x43"; case 11: // MINUS return "\x04\x4b\x72\x50\x44"; case 12: // PERIOD return "\x04\x4b\x72\x50\x45"; case 13: // SLASH return "\x04\x4b\x72\x50\x46"; case 14: // 0 return "\x04\x4b\x72\x50\x47"; case 15: // 1 return "\x04\x4b\x72\x50\x48"; case 16: // 2 return "\x04\x4b\x72\x50\x49"; case 17: // 3 return "\x04\x4b\x72\x50\x4a"; case 18: // 4 return "\x04\x4b\x72\x50\x4b"; case 19: // 5 return "\x04\x4b\x72\x50\x4c"; case 20: // 6 return "\x04\x4b\x72\x50\x4d"; case 21: // 7 return "\x04\x4b\x72\x50\x4e"; case 22: // 8 return "\x04\x4b\x72\x50\x4f"; case 23: // 9 return "\x04\x4b\x72\x50\x50"; case 24: // COLON return "\x05\x4b\x72\x50\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x72\x50\x51"; case 26: // LESS return "\x05\x4b\x72\x50\x42\x74"; case 27: // EQUAL return "\x04\x4b\x72\x50\x52"; case 28: // GREATER return "\x05\x4b\x72\x50\x42\x75"; case 29: // AT return "\x05\x4b\x72\x50\x42\x76"; case 30: // A return "\x04\x4b\x72\x50\x53"; case 31: // B return "\x04\x4b\x72\x50\x54"; case 32: // C return "\x04\x4b\x72\x50\x55"; case 33: // D return "\x04\x4b\x72\x50\x56"; case 34: // E return "\x04\x4b\x72\x50\x57"; case 35: // F return "\x04\x4b\x72\x50\x58"; case 36: // G return "\x04\x4b\x72\x50\x59"; case 37: // H return "\x04\x4b\x72\x50\x5a"; case 38: // I return "\x04\x4b\x72\x50\x61"; case 39: // J return "\x04\x4b\x72\x50\x62"; case 40: // K return "\x04\x4b\x72\x50\x63"; case 41: // L return "\x04\x4b\x72\x50\x64"; case 42: // M return "\x04\x4b\x72\x50\x65"; case 43: // N return "\x04\x4b\x72\x50\x66"; case 44: // O return "\x04\x4b\x72\x50\x67"; case 45: // P return "\x04\x4b\x72\x50\x68"; case 46: // Q return "\x04\x4b\x72\x50\x69"; case 47: // R return "\x04\x4b\x72\x50\x6a"; case 48: // S return "\x04\x4b\x72\x50\x6b"; case 49: // T return "\x04\x4b\x72\x50\x6c"; case 50: // U return "\x04\x4b\x72\x50\x6d"; case 51: // V return "\x04\x4b\x72\x50\x6e"; case 52: // W return "\x04\x4b\x72\x50\x6f"; case 53: // X return "\x04\x4b\x72\x50\x70"; case 54: // Y return "\x04\x4b\x72\x50\x71"; case 55: // Z return "\x04\x4b\x72\x50\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x72\x50\x73"; case 57: // BACKSLASH return "\x04\x4b\x72\x50\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x50\x75"; case 59: // UNDERSCORE return "\x05\x4b\x72\x50\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x50\x76"; case 61: // WORLD_1 return "\x04\x4b\x72\x50\x77"; case 62: // WORLD_2 return "\x04\x4b\x72\x50\x78"; case 63: // PARAGRAPH return "\x05\x4b\x72\x50\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x72\x50\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x72\x50\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x72\x50\x42\x7a"; case 67: // A_RING return "\x05\x4b\x72\x50\x42\x30"; case 68: // AE return "\x05\x4b\x72\x50\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x72\x50\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x72\x50\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x72\x50\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x72\x50\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x72\x50\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x72\x50\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x72\x50\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x72\x50\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x72\x50\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x72\x50\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x72\x50\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x72\x50\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x72\x50\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x72\x50\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x72\x50\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x72\x50\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x72\x50\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x72\x50\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x72\x50\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x72\x50\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x72\x50\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x72\x50\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x72\x50\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x72\x50\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x72\x50\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x72\x50\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x72\x50\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x72\x50\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x72\x50\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x72\x50\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x72\x50\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x72\x50\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x72\x50\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x72\x50\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x72\x50\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x72\x50\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x72\x50\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x72\x50\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x72\x50\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x72\x50\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x72\x50\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x72\x50\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x72\x50\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x72\x50\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x72\x50\x79"; case 114: // ENTER return "\x04\x4b\x72\x50\x7a"; case 115: // TAB return "\x04\x4b\x72\x50\x30"; case 116: // BACKSPACE return "\x04\x4b\x72\x50\x31"; case 117: // INSERT return "\x04\x4b\x72\x50\x32"; case 118: // DELETE return "\x04\x4b\x72\x50\x33"; case 119: // RIGHT return "\x04\x4b\x72\x50\x34"; case 120: // LEFT return "\x04\x4b\x72\x50\x35"; case 121: // DOWN return "\x04\x4b\x72\x50\x36"; case 122: // UP return "\x04\x4b\x72\x50\x37"; case 123: // PAGE_UP return "\x04\x4b\x72\x50\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x72\x50\x39"; case 125: // HOME return "\x04\x4b\x72\x50\x2e"; case 126: // END return "\x04\x4b\x72\x50\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x72\x50\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x72\x50\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x72\x50\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x72\x50\x5e"; case 131: // PAUSE return "\x04\x4b\x72\x50\x21"; case 132: // F1 return "\x04\x4b\x72\x50\x2f"; case 133: // F2 return "\x04\x4b\x72\x50\x2a"; case 134: // F3 return "\x04\x4b\x72\x50\x3f"; case 135: // F4 return "\x04\x4b\x72\x50\x26"; case 136: // F5 return "\x04\x4b\x72\x50\x3c"; case 137: // F6 return "\x04\x4b\x72\x50\x3e"; case 138: // F7 return "\x04\x4b\x72\x50\x28"; case 139: // F8 return "\x04\x4b\x72\x50\x29"; case 140: // F9 return "\x04\x4b\x72\x50\x5b"; case 141: // F10 return "\x04\x4b\x72\x50\x5d"; case 142: // F11 return "\x04\x4b\x72\x50\x7b"; case 143: // F12 return "\x04\x4b\x72\x50\x7d"; case 144: // F13 return "\x04\x4b\x72\x50\x40"; case 145: // F14 return "\x04\x4b\x72\x50\x25"; case 146: // F15 return "\x04\x4b\x72\x50\x24"; case 147: // F16 return "\x04\x4b\x72\x50\x23"; case 148: // F17 return "\x05\x4b\x72\x50\x42\x41"; case 149: // F18 return "\x05\x4b\x72\x50\x42\x42"; case 150: // F19 return "\x05\x4b\x72\x50\x42\x43"; case 151: // F20 return "\x05\x4b\x72\x50\x42\x44"; case 152: // F21 return "\x05\x4b\x72\x50\x42\x45"; case 153: // F22 return "\x05\x4b\x72\x50\x42\x46"; case 154: // F23 return "\x05\x4b\x72\x50\x42\x47"; case 155: // F24 return "\x05\x4b\x72\x50\x42\x48"; case 156: // F25 return "\x05\x4b\x72\x50\x42\x49"; case 157: // KP_0 return "\x05\x4b\x72\x50\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x72\x50\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x72\x50\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x72\x50\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x72\x50\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x72\x50\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x72\x50\x42\x50"; case 164: // KP_7 return "\x05\x4b\x72\x50\x42\x51"; case 165: // KP_8 return "\x05\x4b\x72\x50\x42\x52"; case 166: // KP_9 return "\x05\x4b\x72\x50\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x72\x50\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x72\x50\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x72\x50\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x72\x50\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x72\x50\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x72\x50\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x72\x50\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x72\x50\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x72\x50\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x72\x50\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x50\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x72\x50\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x72\x50\x42\x68"; } // end switch(key) } // end switch(mods) break; case 1: // PRESS switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x04\x4b\x70\x41\x79"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x04\x4b\x70\x41\x30"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x4b\x70\x41\x32"; case 118: // DELETE return "\x04\x4b\x70\x41\x33"; case 119: // RIGHT return "\x04\x4b\x70\x41\x34"; case 120: // LEFT return "\x04\x4b\x70\x41\x35"; case 121: // DOWN return "\x04\x4b\x70\x41\x36"; case 122: // UP return "\x04\x4b\x70\x41\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x41\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x41\x39"; case 125: // HOME return "\x04\x4b\x70\x41\x2e"; case 126: // END return "\x04\x4b\x70\x41\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x41\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x41\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x41\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x41\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x41\x21"; case 132: // F1 return "\x04\x4b\x70\x41\x2f"; case 133: // F2 return "\x04\x4b\x70\x41\x2a"; case 134: // F3 return "\x04\x4b\x70\x41\x3f"; case 135: // F4 return "\x04\x4b\x70\x41\x26"; case 136: // F5 return "\x04\x4b\x70\x41\x3c"; case 137: // F6 return "\x04\x4b\x70\x41\x3e"; case 138: // F7 return "\x04\x4b\x70\x41\x28"; case 139: // F8 return "\x04\x4b\x70\x41\x29"; case 140: // F9 return "\x04\x4b\x70\x41\x5b"; case 141: // F10 return "\x04\x4b\x70\x41\x5d"; case 142: // F11 return "\x04\x4b\x70\x41\x7b"; case 143: // F12 return "\x04\x4b\x70\x41\x7d"; case 144: // F13 return "\x04\x4b\x70\x41\x40"; case 145: // F14 return "\x04\x4b\x70\x41\x25"; case 146: // F15 return "\x04\x4b\x70\x41\x24"; case 147: // F16 return "\x04\x4b\x70\x41\x23"; case 148: // F17 return "\x05\x4b\x70\x41\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x41\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x41\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x41\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x41\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x41\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x41\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x41\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x41\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x41\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x41\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x41\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x41\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x41\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x41\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x41\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x41\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x41\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x41\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x41\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x41\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x41\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x41\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x41\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x41\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x41\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x41\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x41\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x41\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x41\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x41\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x41\x42\x68"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x04\x4b\x70\x42\x79"; case 114: // ENTER return "\x04\x4b\x70\x42\x7a"; case 115: // TAB return "\x04\x4b\x70\x42\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x42\x31"; case 117: // INSERT return "\x04\x4b\x70\x42\x32"; case 118: // DELETE return "\x04\x4b\x70\x42\x33"; case 119: // RIGHT return "\x04\x4b\x70\x42\x34"; case 120: // LEFT return "\x04\x4b\x70\x42\x35"; case 121: // DOWN return "\x04\x4b\x70\x42\x36"; case 122: // UP return "\x04\x4b\x70\x42\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x42\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x42\x39"; case 125: // HOME return "\x04\x4b\x70\x42\x2e"; case 126: // END return "\x04\x4b\x70\x42\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x42\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x42\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x42\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x42\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x42\x21"; case 132: // F1 return "\x04\x4b\x70\x42\x2f"; case 133: // F2 return "\x04\x4b\x70\x42\x2a"; case 134: // F3 return "\x04\x4b\x70\x42\x3f"; case 135: // F4 return "\x04\x4b\x70\x42\x26"; case 136: // F5 return "\x04\x4b\x70\x42\x3c"; case 137: // F6 return "\x04\x4b\x70\x42\x3e"; case 138: // F7 return "\x04\x4b\x70\x42\x28"; case 139: // F8 return "\x04\x4b\x70\x42\x29"; case 140: // F9 return "\x04\x4b\x70\x42\x5b"; case 141: // F10 return "\x04\x4b\x70\x42\x5d"; case 142: // F11 return "\x04\x4b\x70\x42\x7b"; case 143: // F12 return "\x04\x4b\x70\x42\x7d"; case 144: // F13 return "\x04\x4b\x70\x42\x40"; case 145: // F14 return "\x04\x4b\x70\x42\x25"; case 146: // F15 return "\x04\x4b\x70\x42\x24"; case 147: // F16 return "\x04\x4b\x70\x42\x23"; case 148: // F17 return "\x05\x4b\x70\x42\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x42\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x42\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x42\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x42\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x42\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x42\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x42\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x42\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x42\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x42\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x42\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x42\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x42\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x42\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x42\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x42\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x42\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x42\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x42\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x42\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x42\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x42\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x42\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x42\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x42\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x42\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x42\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x42\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x42\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x42\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x42\x42\x68"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x45\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x45\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x45\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x45\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x45\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x45\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x45\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x45\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x45\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x45\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x45\x43"; case 11: // MINUS return "\x04\x4b\x70\x45\x44"; case 12: // PERIOD return "\x04\x4b\x70\x45\x45"; case 13: // SLASH return "\x04\x4b\x70\x45\x46"; case 14: // 0 return "\x04\x4b\x70\x45\x47"; case 15: // 1 return "\x04\x4b\x70\x45\x48"; case 16: // 2 return "\x04\x4b\x70\x45\x49"; case 17: // 3 return "\x04\x4b\x70\x45\x4a"; case 18: // 4 return "\x04\x4b\x70\x45\x4b"; case 19: // 5 return "\x04\x4b\x70\x45\x4c"; case 20: // 6 return "\x04\x4b\x70\x45\x4d"; case 21: // 7 return "\x04\x4b\x70\x45\x4e"; case 22: // 8 return "\x04\x4b\x70\x45\x4f"; case 23: // 9 return "\x04\x4b\x70\x45\x50"; case 24: // COLON return "\x05\x4b\x70\x45\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x45\x51"; case 26: // LESS return "\x05\x4b\x70\x45\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x45\x52"; case 28: // GREATER return "\x05\x4b\x70\x45\x42\x75"; case 29: // AT return "\x05\x4b\x70\x45\x42\x76"; case 30: // A return "\x04\x4b\x70\x45\x53"; case 31: // B return "\x04\x4b\x70\x45\x54"; case 32: // C return "\x04\x4b\x70\x45\x55"; case 33: // D return "\x04\x4b\x70\x45\x56"; case 34: // E return "\x04\x4b\x70\x45\x57"; case 35: // F return "\x04\x4b\x70\x45\x58"; case 36: // G return "\x04\x4b\x70\x45\x59"; case 37: // H return "\x04\x4b\x70\x45\x5a"; case 38: // I return "\x04\x4b\x70\x45\x61"; case 39: // J return "\x04\x4b\x70\x45\x62"; case 40: // K return "\x04\x4b\x70\x45\x63"; case 41: // L return "\x04\x4b\x70\x45\x64"; case 42: // M return "\x04\x4b\x70\x45\x65"; case 43: // N return "\x04\x4b\x70\x45\x66"; case 44: // O return "\x04\x4b\x70\x45\x67"; case 45: // P return "\x04\x4b\x70\x45\x68"; case 46: // Q return "\x04\x4b\x70\x45\x69"; case 47: // R return "\x04\x4b\x70\x45\x6a"; case 48: // S return "\x04\x4b\x70\x45\x6b"; case 49: // T return "\x04\x4b\x70\x45\x6c"; case 50: // U return "\x04\x4b\x70\x45\x6d"; case 51: // V return "\x04\x4b\x70\x45\x6e"; case 52: // W return "\x04\x4b\x70\x45\x6f"; case 53: // X return "\x04\x4b\x70\x45\x70"; case 54: // Y return "\x04\x4b\x70\x45\x71"; case 55: // Z return "\x04\x4b\x70\x45\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x45\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x45\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x45\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x45\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x45\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x45\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x45\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x45\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x45\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x45\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x45\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x45\x42\x30"; case 68: // AE return "\x05\x4b\x70\x45\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x45\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x45\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x45\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x45\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x45\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x45\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x45\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x45\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x45\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x45\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x45\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x45\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x45\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x45\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x45\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x45\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x45\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x45\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x45\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x45\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x45\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x45\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x45\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x45\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x45\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x45\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x45\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x45\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x45\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x45\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x45\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x45\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x45\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x45\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x45\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x45\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x45\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x45\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x45\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x45\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x45\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x45\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x45\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x45\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x45\x79"; case 114: // ENTER return "\x04\x4b\x70\x45\x7a"; case 115: // TAB return "\x04\x4b\x70\x45\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x45\x31"; case 117: // INSERT return "\x04\x4b\x70\x45\x32"; case 118: // DELETE return "\x04\x4b\x70\x45\x33"; case 119: // RIGHT return "\x04\x4b\x70\x45\x34"; case 120: // LEFT return "\x04\x4b\x70\x45\x35"; case 121: // DOWN return "\x04\x4b\x70\x45\x36"; case 122: // UP return "\x04\x4b\x70\x45\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x45\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x45\x39"; case 125: // HOME return "\x04\x4b\x70\x45\x2e"; case 126: // END return "\x04\x4b\x70\x45\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x45\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x45\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x45\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x45\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x45\x21"; case 132: // F1 return "\x04\x4b\x70\x45\x2f"; case 133: // F2 return "\x04\x4b\x70\x45\x2a"; case 134: // F3 return "\x04\x4b\x70\x45\x3f"; case 135: // F4 return "\x04\x4b\x70\x45\x26"; case 136: // F5 return "\x04\x4b\x70\x45\x3c"; case 137: // F6 return "\x04\x4b\x70\x45\x3e"; case 138: // F7 return "\x04\x4b\x70\x45\x28"; case 139: // F8 return "\x04\x4b\x70\x45\x29"; case 140: // F9 return "\x04\x4b\x70\x45\x5b"; case 141: // F10 return "\x04\x4b\x70\x45\x5d"; case 142: // F11 return "\x04\x4b\x70\x45\x7b"; case 143: // F12 return "\x04\x4b\x70\x45\x7d"; case 144: // F13 return "\x04\x4b\x70\x45\x40"; case 145: // F14 return "\x04\x4b\x70\x45\x25"; case 146: // F15 return "\x04\x4b\x70\x45\x24"; case 147: // F16 return "\x04\x4b\x70\x45\x23"; case 148: // F17 return "\x05\x4b\x70\x45\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x45\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x45\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x45\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x45\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x45\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x45\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x45\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x45\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x45\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x45\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x45\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x45\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x45\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x45\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x45\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x45\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x45\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x45\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x45\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x45\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x45\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x45\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x45\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x45\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x45\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x45\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x45\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x45\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x45\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x45\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x45\x42\x68"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x46\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x46\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x46\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x46\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x46\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x46\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x46\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x46\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x46\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x46\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x46\x43"; case 11: // MINUS return "\x04\x4b\x70\x46\x44"; case 12: // PERIOD return "\x04\x4b\x70\x46\x45"; case 13: // SLASH return "\x04\x4b\x70\x46\x46"; case 14: // 0 return "\x04\x4b\x70\x46\x47"; case 15: // 1 return "\x04\x4b\x70\x46\x48"; case 16: // 2 return "\x04\x4b\x70\x46\x49"; case 17: // 3 return "\x04\x4b\x70\x46\x4a"; case 18: // 4 return "\x04\x4b\x70\x46\x4b"; case 19: // 5 return "\x04\x4b\x70\x46\x4c"; case 20: // 6 return "\x04\x4b\x70\x46\x4d"; case 21: // 7 return "\x04\x4b\x70\x46\x4e"; case 22: // 8 return "\x04\x4b\x70\x46\x4f"; case 23: // 9 return "\x04\x4b\x70\x46\x50"; case 24: // COLON return "\x05\x4b\x70\x46\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x46\x51"; case 26: // LESS return "\x05\x4b\x70\x46\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x46\x52"; case 28: // GREATER return "\x05\x4b\x70\x46\x42\x75"; case 29: // AT return "\x05\x4b\x70\x46\x42\x76"; case 30: // A return "\x04\x4b\x70\x46\x53"; case 31: // B return "\x04\x4b\x70\x46\x54"; case 32: // C return "\x04\x4b\x70\x46\x55"; case 33: // D return "\x04\x4b\x70\x46\x56"; case 34: // E return "\x04\x4b\x70\x46\x57"; case 35: // F return "\x04\x4b\x70\x46\x58"; case 36: // G return "\x04\x4b\x70\x46\x59"; case 37: // H return "\x04\x4b\x70\x46\x5a"; case 38: // I return "\x04\x4b\x70\x46\x61"; case 39: // J return "\x04\x4b\x70\x46\x62"; case 40: // K return "\x04\x4b\x70\x46\x63"; case 41: // L return "\x04\x4b\x70\x46\x64"; case 42: // M return "\x04\x4b\x70\x46\x65"; case 43: // N return "\x04\x4b\x70\x46\x66"; case 44: // O return "\x04\x4b\x70\x46\x67"; case 45: // P return "\x04\x4b\x70\x46\x68"; case 46: // Q return "\x04\x4b\x70\x46\x69"; case 47: // R return "\x04\x4b\x70\x46\x6a"; case 48: // S return "\x04\x4b\x70\x46\x6b"; case 49: // T return "\x04\x4b\x70\x46\x6c"; case 50: // U return "\x04\x4b\x70\x46\x6d"; case 51: // V return "\x04\x4b\x70\x46\x6e"; case 52: // W return "\x04\x4b\x70\x46\x6f"; case 53: // X return "\x04\x4b\x70\x46\x70"; case 54: // Y return "\x04\x4b\x70\x46\x71"; case 55: // Z return "\x04\x4b\x70\x46\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x46\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x46\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x46\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x46\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x46\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x46\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x46\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x46\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x46\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x46\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x46\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x46\x42\x30"; case 68: // AE return "\x05\x4b\x70\x46\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x46\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x46\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x46\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x46\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x46\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x46\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x46\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x46\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x46\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x46\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x46\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x46\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x46\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x46\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x46\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x46\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x46\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x46\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x46\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x46\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x46\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x46\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x46\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x46\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x46\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x46\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x46\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x46\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x46\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x46\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x46\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x46\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x46\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x46\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x46\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x46\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x46\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x46\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x46\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x46\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x46\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x46\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x46\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x46\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x46\x79"; case 114: // ENTER return "\x04\x4b\x70\x46\x7a"; case 115: // TAB return "\x04\x4b\x70\x46\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x46\x31"; case 117: // INSERT return "\x04\x4b\x70\x46\x32"; case 118: // DELETE return "\x04\x4b\x70\x46\x33"; case 119: // RIGHT return "\x04\x4b\x70\x46\x34"; case 120: // LEFT return "\x04\x4b\x70\x46\x35"; case 121: // DOWN return "\x04\x4b\x70\x46\x36"; case 122: // UP return "\x04\x4b\x70\x46\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x46\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x46\x39"; case 125: // HOME return "\x04\x4b\x70\x46\x2e"; case 126: // END return "\x04\x4b\x70\x46\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x46\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x46\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x46\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x46\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x46\x21"; case 132: // F1 return "\x04\x4b\x70\x46\x2f"; case 133: // F2 return "\x04\x4b\x70\x46\x2a"; case 134: // F3 return "\x04\x4b\x70\x46\x3f"; case 135: // F4 return "\x04\x4b\x70\x46\x26"; case 136: // F5 return "\x04\x4b\x70\x46\x3c"; case 137: // F6 return "\x04\x4b\x70\x46\x3e"; case 138: // F7 return "\x04\x4b\x70\x46\x28"; case 139: // F8 return "\x04\x4b\x70\x46\x29"; case 140: // F9 return "\x04\x4b\x70\x46\x5b"; case 141: // F10 return "\x04\x4b\x70\x46\x5d"; case 142: // F11 return "\x04\x4b\x70\x46\x7b"; case 143: // F12 return "\x04\x4b\x70\x46\x7d"; case 144: // F13 return "\x04\x4b\x70\x46\x40"; case 145: // F14 return "\x04\x4b\x70\x46\x25"; case 146: // F15 return "\x04\x4b\x70\x46\x24"; case 147: // F16 return "\x04\x4b\x70\x46\x23"; case 148: // F17 return "\x05\x4b\x70\x46\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x46\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x46\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x46\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x46\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x46\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x46\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x46\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x46\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x46\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x46\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x46\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x46\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x46\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x46\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x46\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x46\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x46\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x46\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x46\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x46\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x46\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x46\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x46\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x46\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x46\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x46\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x46\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x46\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x46\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x46\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x46\x42\x68"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x43\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x43\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x43\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x43\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x43\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x43\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x43\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x43\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x43\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x43\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x43\x43"; case 11: // MINUS return "\x04\x4b\x70\x43\x44"; case 12: // PERIOD return "\x04\x4b\x70\x43\x45"; case 13: // SLASH return "\x04\x4b\x70\x43\x46"; case 14: // 0 return "\x04\x4b\x70\x43\x47"; case 15: // 1 return "\x04\x4b\x70\x43\x48"; case 16: // 2 return "\x04\x4b\x70\x43\x49"; case 17: // 3 return "\x04\x4b\x70\x43\x4a"; case 18: // 4 return "\x04\x4b\x70\x43\x4b"; case 19: // 5 return "\x04\x4b\x70\x43\x4c"; case 20: // 6 return "\x04\x4b\x70\x43\x4d"; case 21: // 7 return "\x04\x4b\x70\x43\x4e"; case 22: // 8 return "\x04\x4b\x70\x43\x4f"; case 23: // 9 return "\x04\x4b\x70\x43\x50"; case 24: // COLON return "\x05\x4b\x70\x43\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x43\x51"; case 26: // LESS return "\x05\x4b\x70\x43\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x43\x52"; case 28: // GREATER return "\x05\x4b\x70\x43\x42\x75"; case 29: // AT return "\x05\x4b\x70\x43\x42\x76"; case 30: // A return "\x04\x4b\x70\x43\x53"; case 31: // B return "\x04\x4b\x70\x43\x54"; case 32: // C return "\x04\x4b\x70\x43\x55"; case 33: // D return "\x04\x4b\x70\x43\x56"; case 34: // E return "\x04\x4b\x70\x43\x57"; case 35: // F return "\x04\x4b\x70\x43\x58"; case 36: // G return "\x04\x4b\x70\x43\x59"; case 37: // H return "\x04\x4b\x70\x43\x5a"; case 38: // I return "\x04\x4b\x70\x43\x61"; case 39: // J return "\x04\x4b\x70\x43\x62"; case 40: // K return "\x04\x4b\x70\x43\x63"; case 41: // L return "\x04\x4b\x70\x43\x64"; case 42: // M return "\x04\x4b\x70\x43\x65"; case 43: // N return "\x04\x4b\x70\x43\x66"; case 44: // O return "\x04\x4b\x70\x43\x67"; case 45: // P return "\x04\x4b\x70\x43\x68"; case 46: // Q return "\x04\x4b\x70\x43\x69"; case 47: // R return "\x04\x4b\x70\x43\x6a"; case 48: // S return "\x04\x4b\x70\x43\x6b"; case 49: // T return "\x04\x4b\x70\x43\x6c"; case 50: // U return "\x04\x4b\x70\x43\x6d"; case 51: // V return "\x04\x4b\x70\x43\x6e"; case 52: // W return "\x04\x4b\x70\x43\x6f"; case 53: // X return "\x04\x4b\x70\x43\x70"; case 54: // Y return "\x04\x4b\x70\x43\x71"; case 55: // Z return "\x04\x4b\x70\x43\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x43\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x43\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x43\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x43\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x43\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x43\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x43\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x43\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x43\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x43\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x43\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x43\x42\x30"; case 68: // AE return "\x05\x4b\x70\x43\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x43\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x43\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x43\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x43\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x43\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x43\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x43\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x43\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x43\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x43\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x43\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x43\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x43\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x43\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x43\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x43\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x43\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x43\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x43\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x43\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x43\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x43\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x43\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x43\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x43\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x43\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x43\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x43\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x43\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x43\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x43\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x43\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x43\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x43\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x43\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x43\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x43\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x43\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x43\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x43\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x43\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x43\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x43\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x43\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x43\x79"; case 114: // ENTER return "\x04\x4b\x70\x43\x7a"; case 115: // TAB return "\x04\x4b\x70\x43\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x43\x31"; case 117: // INSERT return "\x04\x4b\x70\x43\x32"; case 118: // DELETE return "\x04\x4b\x70\x43\x33"; case 119: // RIGHT return "\x04\x4b\x70\x43\x34"; case 120: // LEFT return "\x04\x4b\x70\x43\x35"; case 121: // DOWN return "\x04\x4b\x70\x43\x36"; case 122: // UP return "\x04\x4b\x70\x43\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x43\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x43\x39"; case 125: // HOME return "\x04\x4b\x70\x43\x2e"; case 126: // END return "\x04\x4b\x70\x43\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x43\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x43\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x43\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x43\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x43\x21"; case 132: // F1 return "\x04\x4b\x70\x43\x2f"; case 133: // F2 return "\x04\x4b\x70\x43\x2a"; case 134: // F3 return "\x04\x4b\x70\x43\x3f"; case 135: // F4 return "\x04\x4b\x70\x43\x26"; case 136: // F5 return "\x04\x4b\x70\x43\x3c"; case 137: // F6 return "\x04\x4b\x70\x43\x3e"; case 138: // F7 return "\x04\x4b\x70\x43\x28"; case 139: // F8 return "\x04\x4b\x70\x43\x29"; case 140: // F9 return "\x04\x4b\x70\x43\x5b"; case 141: // F10 return "\x04\x4b\x70\x43\x5d"; case 142: // F11 return "\x04\x4b\x70\x43\x7b"; case 143: // F12 return "\x04\x4b\x70\x43\x7d"; case 144: // F13 return "\x04\x4b\x70\x43\x40"; case 145: // F14 return "\x04\x4b\x70\x43\x25"; case 146: // F15 return "\x04\x4b\x70\x43\x24"; case 147: // F16 return "\x04\x4b\x70\x43\x23"; case 148: // F17 return "\x05\x4b\x70\x43\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x43\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x43\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x43\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x43\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x43\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x43\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x43\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x43\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x43\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x43\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x43\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x43\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x43\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x43\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x43\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x43\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x43\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x43\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x43\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x43\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x43\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x43\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x43\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x43\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x43\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x43\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x43\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x43\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x43\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x43\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x43\x42\x68"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x44\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x44\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x44\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x44\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x44\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x44\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x44\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x44\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x44\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x44\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x44\x43"; case 11: // MINUS return "\x04\x4b\x70\x44\x44"; case 12: // PERIOD return "\x04\x4b\x70\x44\x45"; case 13: // SLASH return "\x04\x4b\x70\x44\x46"; case 14: // 0 return "\x04\x4b\x70\x44\x47"; case 15: // 1 return "\x04\x4b\x70\x44\x48"; case 16: // 2 return "\x04\x4b\x70\x44\x49"; case 17: // 3 return "\x04\x4b\x70\x44\x4a"; case 18: // 4 return "\x04\x4b\x70\x44\x4b"; case 19: // 5 return "\x04\x4b\x70\x44\x4c"; case 20: // 6 return "\x04\x4b\x70\x44\x4d"; case 21: // 7 return "\x04\x4b\x70\x44\x4e"; case 22: // 8 return "\x04\x4b\x70\x44\x4f"; case 23: // 9 return "\x04\x4b\x70\x44\x50"; case 24: // COLON return "\x05\x4b\x70\x44\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x44\x51"; case 26: // LESS return "\x05\x4b\x70\x44\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x44\x52"; case 28: // GREATER return "\x05\x4b\x70\x44\x42\x75"; case 29: // AT return "\x05\x4b\x70\x44\x42\x76"; case 30: // A return "\x04\x4b\x70\x44\x53"; case 31: // B return "\x04\x4b\x70\x44\x54"; case 32: // C return "\x04\x4b\x70\x44\x55"; case 33: // D return "\x04\x4b\x70\x44\x56"; case 34: // E return "\x04\x4b\x70\x44\x57"; case 35: // F return "\x04\x4b\x70\x44\x58"; case 36: // G return "\x04\x4b\x70\x44\x59"; case 37: // H return "\x04\x4b\x70\x44\x5a"; case 38: // I return "\x04\x4b\x70\x44\x61"; case 39: // J return "\x04\x4b\x70\x44\x62"; case 40: // K return "\x04\x4b\x70\x44\x63"; case 41: // L return "\x04\x4b\x70\x44\x64"; case 42: // M return "\x04\x4b\x70\x44\x65"; case 43: // N return "\x04\x4b\x70\x44\x66"; case 44: // O return "\x04\x4b\x70\x44\x67"; case 45: // P return "\x04\x4b\x70\x44\x68"; case 46: // Q return "\x04\x4b\x70\x44\x69"; case 47: // R return "\x04\x4b\x70\x44\x6a"; case 48: // S return "\x04\x4b\x70\x44\x6b"; case 49: // T return "\x04\x4b\x70\x44\x6c"; case 50: // U return "\x04\x4b\x70\x44\x6d"; case 51: // V return "\x04\x4b\x70\x44\x6e"; case 52: // W return "\x04\x4b\x70\x44\x6f"; case 53: // X return "\x04\x4b\x70\x44\x70"; case 54: // Y return "\x04\x4b\x70\x44\x71"; case 55: // Z return "\x04\x4b\x70\x44\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x44\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x44\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x44\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x44\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x44\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x44\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x44\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x44\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x44\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x44\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x44\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x44\x42\x30"; case 68: // AE return "\x05\x4b\x70\x44\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x44\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x44\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x44\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x44\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x44\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x44\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x44\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x44\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x44\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x44\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x44\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x44\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x44\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x44\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x44\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x44\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x44\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x44\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x44\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x44\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x44\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x44\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x44\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x44\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x44\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x44\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x44\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x44\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x44\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x44\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x44\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x44\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x44\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x44\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x44\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x44\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x44\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x44\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x44\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x44\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x44\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x44\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x44\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x44\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x44\x79"; case 114: // ENTER return "\x04\x4b\x70\x44\x7a"; case 115: // TAB return "\x04\x4b\x70\x44\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x44\x31"; case 117: // INSERT return "\x04\x4b\x70\x44\x32"; case 118: // DELETE return "\x04\x4b\x70\x44\x33"; case 119: // RIGHT return "\x04\x4b\x70\x44\x34"; case 120: // LEFT return "\x04\x4b\x70\x44\x35"; case 121: // DOWN return "\x04\x4b\x70\x44\x36"; case 122: // UP return "\x04\x4b\x70\x44\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x44\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x44\x39"; case 125: // HOME return "\x04\x4b\x70\x44\x2e"; case 126: // END return "\x04\x4b\x70\x44\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x44\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x44\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x44\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x44\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x44\x21"; case 132: // F1 return "\x04\x4b\x70\x44\x2f"; case 133: // F2 return "\x04\x4b\x70\x44\x2a"; case 134: // F3 return "\x04\x4b\x70\x44\x3f"; case 135: // F4 return "\x04\x4b\x70\x44\x26"; case 136: // F5 return "\x04\x4b\x70\x44\x3c"; case 137: // F6 return "\x04\x4b\x70\x44\x3e"; case 138: // F7 return "\x04\x4b\x70\x44\x28"; case 139: // F8 return "\x04\x4b\x70\x44\x29"; case 140: // F9 return "\x04\x4b\x70\x44\x5b"; case 141: // F10 return "\x04\x4b\x70\x44\x5d"; case 142: // F11 return "\x04\x4b\x70\x44\x7b"; case 143: // F12 return "\x04\x4b\x70\x44\x7d"; case 144: // F13 return "\x04\x4b\x70\x44\x40"; case 145: // F14 return "\x04\x4b\x70\x44\x25"; case 146: // F15 return "\x04\x4b\x70\x44\x24"; case 147: // F16 return "\x04\x4b\x70\x44\x23"; case 148: // F17 return "\x05\x4b\x70\x44\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x44\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x44\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x44\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x44\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x44\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x44\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x44\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x44\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x44\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x44\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x44\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x44\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x44\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x44\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x44\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x44\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x44\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x44\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x44\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x44\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x44\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x44\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x44\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x44\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x44\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x44\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x44\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x44\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x44\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x44\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x44\x42\x68"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x47\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x47\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x47\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x47\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x47\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x47\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x47\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x47\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x47\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x47\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x47\x43"; case 11: // MINUS return "\x04\x4b\x70\x47\x44"; case 12: // PERIOD return "\x04\x4b\x70\x47\x45"; case 13: // SLASH return "\x04\x4b\x70\x47\x46"; case 14: // 0 return "\x04\x4b\x70\x47\x47"; case 15: // 1 return "\x04\x4b\x70\x47\x48"; case 16: // 2 return "\x04\x4b\x70\x47\x49"; case 17: // 3 return "\x04\x4b\x70\x47\x4a"; case 18: // 4 return "\x04\x4b\x70\x47\x4b"; case 19: // 5 return "\x04\x4b\x70\x47\x4c"; case 20: // 6 return "\x04\x4b\x70\x47\x4d"; case 21: // 7 return "\x04\x4b\x70\x47\x4e"; case 22: // 8 return "\x04\x4b\x70\x47\x4f"; case 23: // 9 return "\x04\x4b\x70\x47\x50"; case 24: // COLON return "\x05\x4b\x70\x47\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x47\x51"; case 26: // LESS return "\x05\x4b\x70\x47\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x47\x52"; case 28: // GREATER return "\x05\x4b\x70\x47\x42\x75"; case 29: // AT return "\x05\x4b\x70\x47\x42\x76"; case 30: // A return "\x04\x4b\x70\x47\x53"; case 31: // B return "\x04\x4b\x70\x47\x54"; case 32: // C return "\x04\x4b\x70\x47\x55"; case 33: // D return "\x04\x4b\x70\x47\x56"; case 34: // E return "\x04\x4b\x70\x47\x57"; case 35: // F return "\x04\x4b\x70\x47\x58"; case 36: // G return "\x04\x4b\x70\x47\x59"; case 37: // H return "\x04\x4b\x70\x47\x5a"; case 38: // I return "\x04\x4b\x70\x47\x61"; case 39: // J return "\x04\x4b\x70\x47\x62"; case 40: // K return "\x04\x4b\x70\x47\x63"; case 41: // L return "\x04\x4b\x70\x47\x64"; case 42: // M return "\x04\x4b\x70\x47\x65"; case 43: // N return "\x04\x4b\x70\x47\x66"; case 44: // O return "\x04\x4b\x70\x47\x67"; case 45: // P return "\x04\x4b\x70\x47\x68"; case 46: // Q return "\x04\x4b\x70\x47\x69"; case 47: // R return "\x04\x4b\x70\x47\x6a"; case 48: // S return "\x04\x4b\x70\x47\x6b"; case 49: // T return "\x04\x4b\x70\x47\x6c"; case 50: // U return "\x04\x4b\x70\x47\x6d"; case 51: // V return "\x04\x4b\x70\x47\x6e"; case 52: // W return "\x04\x4b\x70\x47\x6f"; case 53: // X return "\x04\x4b\x70\x47\x70"; case 54: // Y return "\x04\x4b\x70\x47\x71"; case 55: // Z return "\x04\x4b\x70\x47\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x47\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x47\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x47\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x47\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x47\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x47\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x47\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x47\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x47\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x47\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x47\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x47\x42\x30"; case 68: // AE return "\x05\x4b\x70\x47\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x47\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x47\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x47\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x47\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x47\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x47\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x47\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x47\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x47\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x47\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x47\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x47\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x47\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x47\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x47\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x47\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x47\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x47\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x47\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x47\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x47\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x47\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x47\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x47\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x47\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x47\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x47\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x47\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x47\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x47\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x47\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x47\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x47\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x47\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x47\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x47\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x47\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x47\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x47\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x47\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x47\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x47\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x47\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x47\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x47\x79"; case 114: // ENTER return "\x04\x4b\x70\x47\x7a"; case 115: // TAB return "\x04\x4b\x70\x47\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x47\x31"; case 117: // INSERT return "\x04\x4b\x70\x47\x32"; case 118: // DELETE return "\x04\x4b\x70\x47\x33"; case 119: // RIGHT return "\x04\x4b\x70\x47\x34"; case 120: // LEFT return "\x04\x4b\x70\x47\x35"; case 121: // DOWN return "\x04\x4b\x70\x47\x36"; case 122: // UP return "\x04\x4b\x70\x47\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x47\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x47\x39"; case 125: // HOME return "\x04\x4b\x70\x47\x2e"; case 126: // END return "\x04\x4b\x70\x47\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x47\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x47\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x47\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x47\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x47\x21"; case 132: // F1 return "\x04\x4b\x70\x47\x2f"; case 133: // F2 return "\x04\x4b\x70\x47\x2a"; case 134: // F3 return "\x04\x4b\x70\x47\x3f"; case 135: // F4 return "\x04\x4b\x70\x47\x26"; case 136: // F5 return "\x04\x4b\x70\x47\x3c"; case 137: // F6 return "\x04\x4b\x70\x47\x3e"; case 138: // F7 return "\x04\x4b\x70\x47\x28"; case 139: // F8 return "\x04\x4b\x70\x47\x29"; case 140: // F9 return "\x04\x4b\x70\x47\x5b"; case 141: // F10 return "\x04\x4b\x70\x47\x5d"; case 142: // F11 return "\x04\x4b\x70\x47\x7b"; case 143: // F12 return "\x04\x4b\x70\x47\x7d"; case 144: // F13 return "\x04\x4b\x70\x47\x40"; case 145: // F14 return "\x04\x4b\x70\x47\x25"; case 146: // F15 return "\x04\x4b\x70\x47\x24"; case 147: // F16 return "\x04\x4b\x70\x47\x23"; case 148: // F17 return "\x05\x4b\x70\x47\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x47\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x47\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x47\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x47\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x47\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x47\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x47\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x47\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x47\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x47\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x47\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x47\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x47\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x47\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x47\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x47\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x47\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x47\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x47\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x47\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x47\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x47\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x47\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x47\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x47\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x47\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x47\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x47\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x47\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x47\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x47\x42\x68"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x48\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x48\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x48\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x48\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x48\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x48\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x48\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x48\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x48\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x48\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x48\x43"; case 11: // MINUS return "\x04\x4b\x70\x48\x44"; case 12: // PERIOD return "\x04\x4b\x70\x48\x45"; case 13: // SLASH return "\x04\x4b\x70\x48\x46"; case 14: // 0 return "\x04\x4b\x70\x48\x47"; case 15: // 1 return "\x04\x4b\x70\x48\x48"; case 16: // 2 return "\x04\x4b\x70\x48\x49"; case 17: // 3 return "\x04\x4b\x70\x48\x4a"; case 18: // 4 return "\x04\x4b\x70\x48\x4b"; case 19: // 5 return "\x04\x4b\x70\x48\x4c"; case 20: // 6 return "\x04\x4b\x70\x48\x4d"; case 21: // 7 return "\x04\x4b\x70\x48\x4e"; case 22: // 8 return "\x04\x4b\x70\x48\x4f"; case 23: // 9 return "\x04\x4b\x70\x48\x50"; case 24: // COLON return "\x05\x4b\x70\x48\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x48\x51"; case 26: // LESS return "\x05\x4b\x70\x48\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x48\x52"; case 28: // GREATER return "\x05\x4b\x70\x48\x42\x75"; case 29: // AT return "\x05\x4b\x70\x48\x42\x76"; case 30: // A return "\x04\x4b\x70\x48\x53"; case 31: // B return "\x04\x4b\x70\x48\x54"; case 32: // C return "\x04\x4b\x70\x48\x55"; case 33: // D return "\x04\x4b\x70\x48\x56"; case 34: // E return "\x04\x4b\x70\x48\x57"; case 35: // F return "\x04\x4b\x70\x48\x58"; case 36: // G return "\x04\x4b\x70\x48\x59"; case 37: // H return "\x04\x4b\x70\x48\x5a"; case 38: // I return "\x04\x4b\x70\x48\x61"; case 39: // J return "\x04\x4b\x70\x48\x62"; case 40: // K return "\x04\x4b\x70\x48\x63"; case 41: // L return "\x04\x4b\x70\x48\x64"; case 42: // M return "\x04\x4b\x70\x48\x65"; case 43: // N return "\x04\x4b\x70\x48\x66"; case 44: // O return "\x04\x4b\x70\x48\x67"; case 45: // P return "\x04\x4b\x70\x48\x68"; case 46: // Q return "\x04\x4b\x70\x48\x69"; case 47: // R return "\x04\x4b\x70\x48\x6a"; case 48: // S return "\x04\x4b\x70\x48\x6b"; case 49: // T return "\x04\x4b\x70\x48\x6c"; case 50: // U return "\x04\x4b\x70\x48\x6d"; case 51: // V return "\x04\x4b\x70\x48\x6e"; case 52: // W return "\x04\x4b\x70\x48\x6f"; case 53: // X return "\x04\x4b\x70\x48\x70"; case 54: // Y return "\x04\x4b\x70\x48\x71"; case 55: // Z return "\x04\x4b\x70\x48\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x48\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x48\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x48\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x48\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x48\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x48\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x48\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x48\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x48\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x48\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x48\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x48\x42\x30"; case 68: // AE return "\x05\x4b\x70\x48\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x48\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x48\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x48\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x48\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x48\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x48\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x48\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x48\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x48\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x48\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x48\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x48\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x48\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x48\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x48\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x48\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x48\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x48\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x48\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x48\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x48\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x48\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x48\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x48\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x48\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x48\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x48\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x48\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x48\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x48\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x48\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x48\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x48\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x48\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x48\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x48\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x48\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x48\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x48\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x48\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x48\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x48\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x48\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x48\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x48\x79"; case 114: // ENTER return "\x04\x4b\x70\x48\x7a"; case 115: // TAB return "\x04\x4b\x70\x48\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x48\x31"; case 117: // INSERT return "\x04\x4b\x70\x48\x32"; case 118: // DELETE return "\x04\x4b\x70\x48\x33"; case 119: // RIGHT return "\x04\x4b\x70\x48\x34"; case 120: // LEFT return "\x04\x4b\x70\x48\x35"; case 121: // DOWN return "\x04\x4b\x70\x48\x36"; case 122: // UP return "\x04\x4b\x70\x48\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x48\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x48\x39"; case 125: // HOME return "\x04\x4b\x70\x48\x2e"; case 126: // END return "\x04\x4b\x70\x48\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x48\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x48\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x48\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x48\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x48\x21"; case 132: // F1 return "\x04\x4b\x70\x48\x2f"; case 133: // F2 return "\x04\x4b\x70\x48\x2a"; case 134: // F3 return "\x04\x4b\x70\x48\x3f"; case 135: // F4 return "\x04\x4b\x70\x48\x26"; case 136: // F5 return "\x04\x4b\x70\x48\x3c"; case 137: // F6 return "\x04\x4b\x70\x48\x3e"; case 138: // F7 return "\x04\x4b\x70\x48\x28"; case 139: // F8 return "\x04\x4b\x70\x48\x29"; case 140: // F9 return "\x04\x4b\x70\x48\x5b"; case 141: // F10 return "\x04\x4b\x70\x48\x5d"; case 142: // F11 return "\x04\x4b\x70\x48\x7b"; case 143: // F12 return "\x04\x4b\x70\x48\x7d"; case 144: // F13 return "\x04\x4b\x70\x48\x40"; case 145: // F14 return "\x04\x4b\x70\x48\x25"; case 146: // F15 return "\x04\x4b\x70\x48\x24"; case 147: // F16 return "\x04\x4b\x70\x48\x23"; case 148: // F17 return "\x05\x4b\x70\x48\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x48\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x48\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x48\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x48\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x48\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x48\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x48\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x48\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x48\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x48\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x48\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x48\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x48\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x48\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x48\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x48\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x48\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x48\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x48\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x48\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x48\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x48\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x48\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x48\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x48\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x48\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x48\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x48\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x48\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x48\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x48\x42\x68"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x49\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x49\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x49\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x49\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x49\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x49\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x49\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x49\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x49\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x49\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x49\x43"; case 11: // MINUS return "\x04\x4b\x70\x49\x44"; case 12: // PERIOD return "\x04\x4b\x70\x49\x45"; case 13: // SLASH return "\x04\x4b\x70\x49\x46"; case 14: // 0 return "\x04\x4b\x70\x49\x47"; case 15: // 1 return "\x04\x4b\x70\x49\x48"; case 16: // 2 return "\x04\x4b\x70\x49\x49"; case 17: // 3 return "\x04\x4b\x70\x49\x4a"; case 18: // 4 return "\x04\x4b\x70\x49\x4b"; case 19: // 5 return "\x04\x4b\x70\x49\x4c"; case 20: // 6 return "\x04\x4b\x70\x49\x4d"; case 21: // 7 return "\x04\x4b\x70\x49\x4e"; case 22: // 8 return "\x04\x4b\x70\x49\x4f"; case 23: // 9 return "\x04\x4b\x70\x49\x50"; case 24: // COLON return "\x05\x4b\x70\x49\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x49\x51"; case 26: // LESS return "\x05\x4b\x70\x49\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x49\x52"; case 28: // GREATER return "\x05\x4b\x70\x49\x42\x75"; case 29: // AT return "\x05\x4b\x70\x49\x42\x76"; case 30: // A return "\x04\x4b\x70\x49\x53"; case 31: // B return "\x04\x4b\x70\x49\x54"; case 32: // C return "\x04\x4b\x70\x49\x55"; case 33: // D return "\x04\x4b\x70\x49\x56"; case 34: // E return "\x04\x4b\x70\x49\x57"; case 35: // F return "\x04\x4b\x70\x49\x58"; case 36: // G return "\x04\x4b\x70\x49\x59"; case 37: // H return "\x04\x4b\x70\x49\x5a"; case 38: // I return "\x04\x4b\x70\x49\x61"; case 39: // J return "\x04\x4b\x70\x49\x62"; case 40: // K return "\x04\x4b\x70\x49\x63"; case 41: // L return "\x04\x4b\x70\x49\x64"; case 42: // M return "\x04\x4b\x70\x49\x65"; case 43: // N return "\x04\x4b\x70\x49\x66"; case 44: // O return "\x04\x4b\x70\x49\x67"; case 45: // P return "\x04\x4b\x70\x49\x68"; case 46: // Q return "\x04\x4b\x70\x49\x69"; case 47: // R return "\x04\x4b\x70\x49\x6a"; case 48: // S return "\x04\x4b\x70\x49\x6b"; case 49: // T return "\x04\x4b\x70\x49\x6c"; case 50: // U return "\x04\x4b\x70\x49\x6d"; case 51: // V return "\x04\x4b\x70\x49\x6e"; case 52: // W return "\x04\x4b\x70\x49\x6f"; case 53: // X return "\x04\x4b\x70\x49\x70"; case 54: // Y return "\x04\x4b\x70\x49\x71"; case 55: // Z return "\x04\x4b\x70\x49\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x49\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x49\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x49\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x49\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x49\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x49\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x49\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x49\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x49\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x49\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x49\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x49\x42\x30"; case 68: // AE return "\x05\x4b\x70\x49\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x49\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x49\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x49\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x49\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x49\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x49\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x49\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x49\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x49\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x49\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x49\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x49\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x49\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x49\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x49\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x49\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x49\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x49\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x49\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x49\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x49\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x49\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x49\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x49\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x49\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x49\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x49\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x49\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x49\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x49\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x49\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x49\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x49\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x49\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x49\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x49\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x49\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x49\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x49\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x49\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x49\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x49\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x49\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x49\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x49\x79"; case 114: // ENTER return "\x04\x4b\x70\x49\x7a"; case 115: // TAB return "\x04\x4b\x70\x49\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x49\x31"; case 117: // INSERT return "\x04\x4b\x70\x49\x32"; case 118: // DELETE return "\x04\x4b\x70\x49\x33"; case 119: // RIGHT return "\x04\x4b\x70\x49\x34"; case 120: // LEFT return "\x04\x4b\x70\x49\x35"; case 121: // DOWN return "\x04\x4b\x70\x49\x36"; case 122: // UP return "\x04\x4b\x70\x49\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x49\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x49\x39"; case 125: // HOME return "\x04\x4b\x70\x49\x2e"; case 126: // END return "\x04\x4b\x70\x49\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x49\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x49\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x49\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x49\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x49\x21"; case 132: // F1 return "\x04\x4b\x70\x49\x2f"; case 133: // F2 return "\x04\x4b\x70\x49\x2a"; case 134: // F3 return "\x04\x4b\x70\x49\x3f"; case 135: // F4 return "\x04\x4b\x70\x49\x26"; case 136: // F5 return "\x04\x4b\x70\x49\x3c"; case 137: // F6 return "\x04\x4b\x70\x49\x3e"; case 138: // F7 return "\x04\x4b\x70\x49\x28"; case 139: // F8 return "\x04\x4b\x70\x49\x29"; case 140: // F9 return "\x04\x4b\x70\x49\x5b"; case 141: // F10 return "\x04\x4b\x70\x49\x5d"; case 142: // F11 return "\x04\x4b\x70\x49\x7b"; case 143: // F12 return "\x04\x4b\x70\x49\x7d"; case 144: // F13 return "\x04\x4b\x70\x49\x40"; case 145: // F14 return "\x04\x4b\x70\x49\x25"; case 146: // F15 return "\x04\x4b\x70\x49\x24"; case 147: // F16 return "\x04\x4b\x70\x49\x23"; case 148: // F17 return "\x05\x4b\x70\x49\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x49\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x49\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x49\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x49\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x49\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x49\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x49\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x49\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x49\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x49\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x49\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x49\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x49\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x49\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x49\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x49\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x49\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x49\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x49\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x49\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x49\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x49\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x49\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x49\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x49\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x49\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x49\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x49\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x49\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x49\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x49\x42\x68"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4a\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x4a\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x4a\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x4a\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x4a\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x4a\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x4a\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x4a\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x4a\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x4a\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x4a\x43"; case 11: // MINUS return "\x04\x4b\x70\x4a\x44"; case 12: // PERIOD return "\x04\x4b\x70\x4a\x45"; case 13: // SLASH return "\x04\x4b\x70\x4a\x46"; case 14: // 0 return "\x04\x4b\x70\x4a\x47"; case 15: // 1 return "\x04\x4b\x70\x4a\x48"; case 16: // 2 return "\x04\x4b\x70\x4a\x49"; case 17: // 3 return "\x04\x4b\x70\x4a\x4a"; case 18: // 4 return "\x04\x4b\x70\x4a\x4b"; case 19: // 5 return "\x04\x4b\x70\x4a\x4c"; case 20: // 6 return "\x04\x4b\x70\x4a\x4d"; case 21: // 7 return "\x04\x4b\x70\x4a\x4e"; case 22: // 8 return "\x04\x4b\x70\x4a\x4f"; case 23: // 9 return "\x04\x4b\x70\x4a\x50"; case 24: // COLON return "\x05\x4b\x70\x4a\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x4a\x51"; case 26: // LESS return "\x05\x4b\x70\x4a\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x4a\x52"; case 28: // GREATER return "\x05\x4b\x70\x4a\x42\x75"; case 29: // AT return "\x05\x4b\x70\x4a\x42\x76"; case 30: // A return "\x04\x4b\x70\x4a\x53"; case 31: // B return "\x04\x4b\x70\x4a\x54"; case 32: // C return "\x04\x4b\x70\x4a\x55"; case 33: // D return "\x04\x4b\x70\x4a\x56"; case 34: // E return "\x04\x4b\x70\x4a\x57"; case 35: // F return "\x04\x4b\x70\x4a\x58"; case 36: // G return "\x04\x4b\x70\x4a\x59"; case 37: // H return "\x04\x4b\x70\x4a\x5a"; case 38: // I return "\x04\x4b\x70\x4a\x61"; case 39: // J return "\x04\x4b\x70\x4a\x62"; case 40: // K return "\x04\x4b\x70\x4a\x63"; case 41: // L return "\x04\x4b\x70\x4a\x64"; case 42: // M return "\x04\x4b\x70\x4a\x65"; case 43: // N return "\x04\x4b\x70\x4a\x66"; case 44: // O return "\x04\x4b\x70\x4a\x67"; case 45: // P return "\x04\x4b\x70\x4a\x68"; case 46: // Q return "\x04\x4b\x70\x4a\x69"; case 47: // R return "\x04\x4b\x70\x4a\x6a"; case 48: // S return "\x04\x4b\x70\x4a\x6b"; case 49: // T return "\x04\x4b\x70\x4a\x6c"; case 50: // U return "\x04\x4b\x70\x4a\x6d"; case 51: // V return "\x04\x4b\x70\x4a\x6e"; case 52: // W return "\x04\x4b\x70\x4a\x6f"; case 53: // X return "\x04\x4b\x70\x4a\x70"; case 54: // Y return "\x04\x4b\x70\x4a\x71"; case 55: // Z return "\x04\x4b\x70\x4a\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4a\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x4a\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4a\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x4a\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4a\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x4a\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x4a\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x4a\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x4a\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x4a\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x4a\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x4a\x42\x30"; case 68: // AE return "\x05\x4b\x70\x4a\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x4a\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x4a\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x4a\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x4a\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x4a\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x4a\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x4a\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x4a\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x4a\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x4a\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x4a\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x4a\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x4a\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x4a\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x4a\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x4a\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x4a\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x4a\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x4a\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x4a\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x4a\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x4a\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x4a\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x4a\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x4a\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x4a\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x4a\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x4a\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x4a\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x4a\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x4a\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x4a\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x4a\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x4a\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x4a\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x4a\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x4a\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x4a\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x4a\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x4a\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x4a\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x4a\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x4a\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x4a\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x4a\x79"; case 114: // ENTER return "\x04\x4b\x70\x4a\x7a"; case 115: // TAB return "\x04\x4b\x70\x4a\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x4a\x31"; case 117: // INSERT return "\x04\x4b\x70\x4a\x32"; case 118: // DELETE return "\x04\x4b\x70\x4a\x33"; case 119: // RIGHT return "\x04\x4b\x70\x4a\x34"; case 120: // LEFT return "\x04\x4b\x70\x4a\x35"; case 121: // DOWN return "\x04\x4b\x70\x4a\x36"; case 122: // UP return "\x04\x4b\x70\x4a\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x4a\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x4a\x39"; case 125: // HOME return "\x04\x4b\x70\x4a\x2e"; case 126: // END return "\x04\x4b\x70\x4a\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x4a\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4a\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x4a\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4a\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x4a\x21"; case 132: // F1 return "\x04\x4b\x70\x4a\x2f"; case 133: // F2 return "\x04\x4b\x70\x4a\x2a"; case 134: // F3 return "\x04\x4b\x70\x4a\x3f"; case 135: // F4 return "\x04\x4b\x70\x4a\x26"; case 136: // F5 return "\x04\x4b\x70\x4a\x3c"; case 137: // F6 return "\x04\x4b\x70\x4a\x3e"; case 138: // F7 return "\x04\x4b\x70\x4a\x28"; case 139: // F8 return "\x04\x4b\x70\x4a\x29"; case 140: // F9 return "\x04\x4b\x70\x4a\x5b"; case 141: // F10 return "\x04\x4b\x70\x4a\x5d"; case 142: // F11 return "\x04\x4b\x70\x4a\x7b"; case 143: // F12 return "\x04\x4b\x70\x4a\x7d"; case 144: // F13 return "\x04\x4b\x70\x4a\x40"; case 145: // F14 return "\x04\x4b\x70\x4a\x25"; case 146: // F15 return "\x04\x4b\x70\x4a\x24"; case 147: // F16 return "\x04\x4b\x70\x4a\x23"; case 148: // F17 return "\x05\x4b\x70\x4a\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x4a\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x4a\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x4a\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x4a\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x4a\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x4a\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x4a\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x4a\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x4a\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x4a\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x4a\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x4a\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x4a\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x4a\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x4a\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x4a\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x4a\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x4a\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x4a\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x4a\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4a\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4a\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x4a\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x4a\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x4a\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4a\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x4a\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x4a\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4a\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x4a\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4a\x42\x68"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4d\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x4d\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x4d\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x4d\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x4d\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x4d\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x4d\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x4d\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x4d\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x4d\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x4d\x43"; case 11: // MINUS return "\x04\x4b\x70\x4d\x44"; case 12: // PERIOD return "\x04\x4b\x70\x4d\x45"; case 13: // SLASH return "\x04\x4b\x70\x4d\x46"; case 14: // 0 return "\x04\x4b\x70\x4d\x47"; case 15: // 1 return "\x04\x4b\x70\x4d\x48"; case 16: // 2 return "\x04\x4b\x70\x4d\x49"; case 17: // 3 return "\x04\x4b\x70\x4d\x4a"; case 18: // 4 return "\x04\x4b\x70\x4d\x4b"; case 19: // 5 return "\x04\x4b\x70\x4d\x4c"; case 20: // 6 return "\x04\x4b\x70\x4d\x4d"; case 21: // 7 return "\x04\x4b\x70\x4d\x4e"; case 22: // 8 return "\x04\x4b\x70\x4d\x4f"; case 23: // 9 return "\x04\x4b\x70\x4d\x50"; case 24: // COLON return "\x05\x4b\x70\x4d\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x4d\x51"; case 26: // LESS return "\x05\x4b\x70\x4d\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x4d\x52"; case 28: // GREATER return "\x05\x4b\x70\x4d\x42\x75"; case 29: // AT return "\x05\x4b\x70\x4d\x42\x76"; case 30: // A return "\x04\x4b\x70\x4d\x53"; case 31: // B return "\x04\x4b\x70\x4d\x54"; case 32: // C return "\x04\x4b\x70\x4d\x55"; case 33: // D return "\x04\x4b\x70\x4d\x56"; case 34: // E return "\x04\x4b\x70\x4d\x57"; case 35: // F return "\x04\x4b\x70\x4d\x58"; case 36: // G return "\x04\x4b\x70\x4d\x59"; case 37: // H return "\x04\x4b\x70\x4d\x5a"; case 38: // I return "\x04\x4b\x70\x4d\x61"; case 39: // J return "\x04\x4b\x70\x4d\x62"; case 40: // K return "\x04\x4b\x70\x4d\x63"; case 41: // L return "\x04\x4b\x70\x4d\x64"; case 42: // M return "\x04\x4b\x70\x4d\x65"; case 43: // N return "\x04\x4b\x70\x4d\x66"; case 44: // O return "\x04\x4b\x70\x4d\x67"; case 45: // P return "\x04\x4b\x70\x4d\x68"; case 46: // Q return "\x04\x4b\x70\x4d\x69"; case 47: // R return "\x04\x4b\x70\x4d\x6a"; case 48: // S return "\x04\x4b\x70\x4d\x6b"; case 49: // T return "\x04\x4b\x70\x4d\x6c"; case 50: // U return "\x04\x4b\x70\x4d\x6d"; case 51: // V return "\x04\x4b\x70\x4d\x6e"; case 52: // W return "\x04\x4b\x70\x4d\x6f"; case 53: // X return "\x04\x4b\x70\x4d\x70"; case 54: // Y return "\x04\x4b\x70\x4d\x71"; case 55: // Z return "\x04\x4b\x70\x4d\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4d\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x4d\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4d\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x4d\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4d\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x4d\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x4d\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x4d\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x4d\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x4d\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x4d\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x4d\x42\x30"; case 68: // AE return "\x05\x4b\x70\x4d\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x4d\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x4d\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x4d\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x4d\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x4d\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x4d\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x4d\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x4d\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x4d\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x4d\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x4d\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x4d\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x4d\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x4d\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x4d\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x4d\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x4d\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x4d\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x4d\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x4d\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x4d\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x4d\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x4d\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x4d\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x4d\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x4d\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x4d\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x4d\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x4d\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x4d\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x4d\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x4d\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x4d\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x4d\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x4d\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x4d\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x4d\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x4d\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x4d\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x4d\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x4d\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x4d\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x4d\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x4d\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x4d\x79"; case 114: // ENTER return "\x04\x4b\x70\x4d\x7a"; case 115: // TAB return "\x04\x4b\x70\x4d\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x4d\x31"; case 117: // INSERT return "\x04\x4b\x70\x4d\x32"; case 118: // DELETE return "\x04\x4b\x70\x4d\x33"; case 119: // RIGHT return "\x04\x4b\x70\x4d\x34"; case 120: // LEFT return "\x04\x4b\x70\x4d\x35"; case 121: // DOWN return "\x04\x4b\x70\x4d\x36"; case 122: // UP return "\x04\x4b\x70\x4d\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x4d\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x4d\x39"; case 125: // HOME return "\x04\x4b\x70\x4d\x2e"; case 126: // END return "\x04\x4b\x70\x4d\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x4d\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4d\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x4d\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4d\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x4d\x21"; case 132: // F1 return "\x04\x4b\x70\x4d\x2f"; case 133: // F2 return "\x04\x4b\x70\x4d\x2a"; case 134: // F3 return "\x04\x4b\x70\x4d\x3f"; case 135: // F4 return "\x04\x4b\x70\x4d\x26"; case 136: // F5 return "\x04\x4b\x70\x4d\x3c"; case 137: // F6 return "\x04\x4b\x70\x4d\x3e"; case 138: // F7 return "\x04\x4b\x70\x4d\x28"; case 139: // F8 return "\x04\x4b\x70\x4d\x29"; case 140: // F9 return "\x04\x4b\x70\x4d\x5b"; case 141: // F10 return "\x04\x4b\x70\x4d\x5d"; case 142: // F11 return "\x04\x4b\x70\x4d\x7b"; case 143: // F12 return "\x04\x4b\x70\x4d\x7d"; case 144: // F13 return "\x04\x4b\x70\x4d\x40"; case 145: // F14 return "\x04\x4b\x70\x4d\x25"; case 146: // F15 return "\x04\x4b\x70\x4d\x24"; case 147: // F16 return "\x04\x4b\x70\x4d\x23"; case 148: // F17 return "\x05\x4b\x70\x4d\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x4d\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x4d\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x4d\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x4d\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x4d\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x4d\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x4d\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x4d\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x4d\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x4d\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x4d\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x4d\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x4d\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x4d\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x4d\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x4d\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x4d\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x4d\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x4d\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x4d\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4d\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4d\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x4d\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x4d\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x4d\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4d\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x4d\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x4d\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4d\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x4d\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4d\x42\x68"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4e\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x4e\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x4e\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x4e\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x4e\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x4e\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x4e\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x4e\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x4e\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x4e\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x4e\x43"; case 11: // MINUS return "\x04\x4b\x70\x4e\x44"; case 12: // PERIOD return "\x04\x4b\x70\x4e\x45"; case 13: // SLASH return "\x04\x4b\x70\x4e\x46"; case 14: // 0 return "\x04\x4b\x70\x4e\x47"; case 15: // 1 return "\x04\x4b\x70\x4e\x48"; case 16: // 2 return "\x04\x4b\x70\x4e\x49"; case 17: // 3 return "\x04\x4b\x70\x4e\x4a"; case 18: // 4 return "\x04\x4b\x70\x4e\x4b"; case 19: // 5 return "\x04\x4b\x70\x4e\x4c"; case 20: // 6 return "\x04\x4b\x70\x4e\x4d"; case 21: // 7 return "\x04\x4b\x70\x4e\x4e"; case 22: // 8 return "\x04\x4b\x70\x4e\x4f"; case 23: // 9 return "\x04\x4b\x70\x4e\x50"; case 24: // COLON return "\x05\x4b\x70\x4e\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x4e\x51"; case 26: // LESS return "\x05\x4b\x70\x4e\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x4e\x52"; case 28: // GREATER return "\x05\x4b\x70\x4e\x42\x75"; case 29: // AT return "\x05\x4b\x70\x4e\x42\x76"; case 30: // A return "\x04\x4b\x70\x4e\x53"; case 31: // B return "\x04\x4b\x70\x4e\x54"; case 32: // C return "\x04\x4b\x70\x4e\x55"; case 33: // D return "\x04\x4b\x70\x4e\x56"; case 34: // E return "\x04\x4b\x70\x4e\x57"; case 35: // F return "\x04\x4b\x70\x4e\x58"; case 36: // G return "\x04\x4b\x70\x4e\x59"; case 37: // H return "\x04\x4b\x70\x4e\x5a"; case 38: // I return "\x04\x4b\x70\x4e\x61"; case 39: // J return "\x04\x4b\x70\x4e\x62"; case 40: // K return "\x04\x4b\x70\x4e\x63"; case 41: // L return "\x04\x4b\x70\x4e\x64"; case 42: // M return "\x04\x4b\x70\x4e\x65"; case 43: // N return "\x04\x4b\x70\x4e\x66"; case 44: // O return "\x04\x4b\x70\x4e\x67"; case 45: // P return "\x04\x4b\x70\x4e\x68"; case 46: // Q return "\x04\x4b\x70\x4e\x69"; case 47: // R return "\x04\x4b\x70\x4e\x6a"; case 48: // S return "\x04\x4b\x70\x4e\x6b"; case 49: // T return "\x04\x4b\x70\x4e\x6c"; case 50: // U return "\x04\x4b\x70\x4e\x6d"; case 51: // V return "\x04\x4b\x70\x4e\x6e"; case 52: // W return "\x04\x4b\x70\x4e\x6f"; case 53: // X return "\x04\x4b\x70\x4e\x70"; case 54: // Y return "\x04\x4b\x70\x4e\x71"; case 55: // Z return "\x04\x4b\x70\x4e\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4e\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x4e\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4e\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x4e\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4e\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x4e\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x4e\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x4e\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x4e\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x4e\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x4e\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x4e\x42\x30"; case 68: // AE return "\x05\x4b\x70\x4e\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x4e\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x4e\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x4e\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x4e\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x4e\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x4e\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x4e\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x4e\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x4e\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x4e\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x4e\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x4e\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x4e\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x4e\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x4e\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x4e\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x4e\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x4e\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x4e\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x4e\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x4e\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x4e\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x4e\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x4e\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x4e\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x4e\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x4e\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x4e\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x4e\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x4e\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x4e\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x4e\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x4e\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x4e\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x4e\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x4e\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x4e\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x4e\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x4e\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x4e\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x4e\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x4e\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x4e\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x4e\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x4e\x79"; case 114: // ENTER return "\x04\x4b\x70\x4e\x7a"; case 115: // TAB return "\x04\x4b\x70\x4e\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x4e\x31"; case 117: // INSERT return "\x04\x4b\x70\x4e\x32"; case 118: // DELETE return "\x04\x4b\x70\x4e\x33"; case 119: // RIGHT return "\x04\x4b\x70\x4e\x34"; case 120: // LEFT return "\x04\x4b\x70\x4e\x35"; case 121: // DOWN return "\x04\x4b\x70\x4e\x36"; case 122: // UP return "\x04\x4b\x70\x4e\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x4e\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x4e\x39"; case 125: // HOME return "\x04\x4b\x70\x4e\x2e"; case 126: // END return "\x04\x4b\x70\x4e\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x4e\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4e\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x4e\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4e\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x4e\x21"; case 132: // F1 return "\x04\x4b\x70\x4e\x2f"; case 133: // F2 return "\x04\x4b\x70\x4e\x2a"; case 134: // F3 return "\x04\x4b\x70\x4e\x3f"; case 135: // F4 return "\x04\x4b\x70\x4e\x26"; case 136: // F5 return "\x04\x4b\x70\x4e\x3c"; case 137: // F6 return "\x04\x4b\x70\x4e\x3e"; case 138: // F7 return "\x04\x4b\x70\x4e\x28"; case 139: // F8 return "\x04\x4b\x70\x4e\x29"; case 140: // F9 return "\x04\x4b\x70\x4e\x5b"; case 141: // F10 return "\x04\x4b\x70\x4e\x5d"; case 142: // F11 return "\x04\x4b\x70\x4e\x7b"; case 143: // F12 return "\x04\x4b\x70\x4e\x7d"; case 144: // F13 return "\x04\x4b\x70\x4e\x40"; case 145: // F14 return "\x04\x4b\x70\x4e\x25"; case 146: // F15 return "\x04\x4b\x70\x4e\x24"; case 147: // F16 return "\x04\x4b\x70\x4e\x23"; case 148: // F17 return "\x05\x4b\x70\x4e\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x4e\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x4e\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x4e\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x4e\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x4e\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x4e\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x4e\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x4e\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x4e\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x4e\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x4e\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x4e\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x4e\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x4e\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x4e\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x4e\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x4e\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x4e\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x4e\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x4e\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4e\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4e\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x4e\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x4e\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x4e\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4e\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x4e\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x4e\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4e\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x4e\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4e\x42\x68"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4b\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x4b\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x4b\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x4b\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x4b\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x4b\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x4b\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x4b\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x4b\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x4b\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x4b\x43"; case 11: // MINUS return "\x04\x4b\x70\x4b\x44"; case 12: // PERIOD return "\x04\x4b\x70\x4b\x45"; case 13: // SLASH return "\x04\x4b\x70\x4b\x46"; case 14: // 0 return "\x04\x4b\x70\x4b\x47"; case 15: // 1 return "\x04\x4b\x70\x4b\x48"; case 16: // 2 return "\x04\x4b\x70\x4b\x49"; case 17: // 3 return "\x04\x4b\x70\x4b\x4a"; case 18: // 4 return "\x04\x4b\x70\x4b\x4b"; case 19: // 5 return "\x04\x4b\x70\x4b\x4c"; case 20: // 6 return "\x04\x4b\x70\x4b\x4d"; case 21: // 7 return "\x04\x4b\x70\x4b\x4e"; case 22: // 8 return "\x04\x4b\x70\x4b\x4f"; case 23: // 9 return "\x04\x4b\x70\x4b\x50"; case 24: // COLON return "\x05\x4b\x70\x4b\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x4b\x51"; case 26: // LESS return "\x05\x4b\x70\x4b\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x4b\x52"; case 28: // GREATER return "\x05\x4b\x70\x4b\x42\x75"; case 29: // AT return "\x05\x4b\x70\x4b\x42\x76"; case 30: // A return "\x04\x4b\x70\x4b\x53"; case 31: // B return "\x04\x4b\x70\x4b\x54"; case 32: // C return "\x04\x4b\x70\x4b\x55"; case 33: // D return "\x04\x4b\x70\x4b\x56"; case 34: // E return "\x04\x4b\x70\x4b\x57"; case 35: // F return "\x04\x4b\x70\x4b\x58"; case 36: // G return "\x04\x4b\x70\x4b\x59"; case 37: // H return "\x04\x4b\x70\x4b\x5a"; case 38: // I return "\x04\x4b\x70\x4b\x61"; case 39: // J return "\x04\x4b\x70\x4b\x62"; case 40: // K return "\x04\x4b\x70\x4b\x63"; case 41: // L return "\x04\x4b\x70\x4b\x64"; case 42: // M return "\x04\x4b\x70\x4b\x65"; case 43: // N return "\x04\x4b\x70\x4b\x66"; case 44: // O return "\x04\x4b\x70\x4b\x67"; case 45: // P return "\x04\x4b\x70\x4b\x68"; case 46: // Q return "\x04\x4b\x70\x4b\x69"; case 47: // R return "\x04\x4b\x70\x4b\x6a"; case 48: // S return "\x04\x4b\x70\x4b\x6b"; case 49: // T return "\x04\x4b\x70\x4b\x6c"; case 50: // U return "\x04\x4b\x70\x4b\x6d"; case 51: // V return "\x04\x4b\x70\x4b\x6e"; case 52: // W return "\x04\x4b\x70\x4b\x6f"; case 53: // X return "\x04\x4b\x70\x4b\x70"; case 54: // Y return "\x04\x4b\x70\x4b\x71"; case 55: // Z return "\x04\x4b\x70\x4b\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4b\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x4b\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4b\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x4b\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4b\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x4b\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x4b\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x4b\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x4b\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x4b\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x4b\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x4b\x42\x30"; case 68: // AE return "\x05\x4b\x70\x4b\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x4b\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x4b\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x4b\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x4b\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x4b\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x4b\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x4b\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x4b\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x4b\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x4b\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x4b\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x4b\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x4b\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x4b\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x4b\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x4b\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x4b\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x4b\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x4b\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x4b\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x4b\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x4b\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x4b\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x4b\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x4b\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x4b\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x4b\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x4b\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x4b\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x4b\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x4b\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x4b\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x4b\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x4b\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x4b\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x4b\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x4b\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x4b\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x4b\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x4b\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x4b\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x4b\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x4b\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x4b\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x4b\x79"; case 114: // ENTER return "\x04\x4b\x70\x4b\x7a"; case 115: // TAB return "\x04\x4b\x70\x4b\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x4b\x31"; case 117: // INSERT return "\x04\x4b\x70\x4b\x32"; case 118: // DELETE return "\x04\x4b\x70\x4b\x33"; case 119: // RIGHT return "\x04\x4b\x70\x4b\x34"; case 120: // LEFT return "\x04\x4b\x70\x4b\x35"; case 121: // DOWN return "\x04\x4b\x70\x4b\x36"; case 122: // UP return "\x04\x4b\x70\x4b\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x4b\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x4b\x39"; case 125: // HOME return "\x04\x4b\x70\x4b\x2e"; case 126: // END return "\x04\x4b\x70\x4b\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x4b\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4b\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x4b\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4b\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x4b\x21"; case 132: // F1 return "\x04\x4b\x70\x4b\x2f"; case 133: // F2 return "\x04\x4b\x70\x4b\x2a"; case 134: // F3 return "\x04\x4b\x70\x4b\x3f"; case 135: // F4 return "\x04\x4b\x70\x4b\x26"; case 136: // F5 return "\x04\x4b\x70\x4b\x3c"; case 137: // F6 return "\x04\x4b\x70\x4b\x3e"; case 138: // F7 return "\x04\x4b\x70\x4b\x28"; case 139: // F8 return "\x04\x4b\x70\x4b\x29"; case 140: // F9 return "\x04\x4b\x70\x4b\x5b"; case 141: // F10 return "\x04\x4b\x70\x4b\x5d"; case 142: // F11 return "\x04\x4b\x70\x4b\x7b"; case 143: // F12 return "\x04\x4b\x70\x4b\x7d"; case 144: // F13 return "\x04\x4b\x70\x4b\x40"; case 145: // F14 return "\x04\x4b\x70\x4b\x25"; case 146: // F15 return "\x04\x4b\x70\x4b\x24"; case 147: // F16 return "\x04\x4b\x70\x4b\x23"; case 148: // F17 return "\x05\x4b\x70\x4b\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x4b\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x4b\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x4b\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x4b\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x4b\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x4b\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x4b\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x4b\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x4b\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x4b\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x4b\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x4b\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x4b\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x4b\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x4b\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x4b\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x4b\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x4b\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x4b\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x4b\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4b\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4b\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x4b\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x4b\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x4b\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4b\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x4b\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x4b\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4b\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x4b\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4b\x42\x68"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4c\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x4c\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x4c\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x4c\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x4c\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x4c\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x4c\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x4c\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x4c\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x4c\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x4c\x43"; case 11: // MINUS return "\x04\x4b\x70\x4c\x44"; case 12: // PERIOD return "\x04\x4b\x70\x4c\x45"; case 13: // SLASH return "\x04\x4b\x70\x4c\x46"; case 14: // 0 return "\x04\x4b\x70\x4c\x47"; case 15: // 1 return "\x04\x4b\x70\x4c\x48"; case 16: // 2 return "\x04\x4b\x70\x4c\x49"; case 17: // 3 return "\x04\x4b\x70\x4c\x4a"; case 18: // 4 return "\x04\x4b\x70\x4c\x4b"; case 19: // 5 return "\x04\x4b\x70\x4c\x4c"; case 20: // 6 return "\x04\x4b\x70\x4c\x4d"; case 21: // 7 return "\x04\x4b\x70\x4c\x4e"; case 22: // 8 return "\x04\x4b\x70\x4c\x4f"; case 23: // 9 return "\x04\x4b\x70\x4c\x50"; case 24: // COLON return "\x05\x4b\x70\x4c\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x4c\x51"; case 26: // LESS return "\x05\x4b\x70\x4c\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x4c\x52"; case 28: // GREATER return "\x05\x4b\x70\x4c\x42\x75"; case 29: // AT return "\x05\x4b\x70\x4c\x42\x76"; case 30: // A return "\x04\x4b\x70\x4c\x53"; case 31: // B return "\x04\x4b\x70\x4c\x54"; case 32: // C return "\x04\x4b\x70\x4c\x55"; case 33: // D return "\x04\x4b\x70\x4c\x56"; case 34: // E return "\x04\x4b\x70\x4c\x57"; case 35: // F return "\x04\x4b\x70\x4c\x58"; case 36: // G return "\x04\x4b\x70\x4c\x59"; case 37: // H return "\x04\x4b\x70\x4c\x5a"; case 38: // I return "\x04\x4b\x70\x4c\x61"; case 39: // J return "\x04\x4b\x70\x4c\x62"; case 40: // K return "\x04\x4b\x70\x4c\x63"; case 41: // L return "\x04\x4b\x70\x4c\x64"; case 42: // M return "\x04\x4b\x70\x4c\x65"; case 43: // N return "\x04\x4b\x70\x4c\x66"; case 44: // O return "\x04\x4b\x70\x4c\x67"; case 45: // P return "\x04\x4b\x70\x4c\x68"; case 46: // Q return "\x04\x4b\x70\x4c\x69"; case 47: // R return "\x04\x4b\x70\x4c\x6a"; case 48: // S return "\x04\x4b\x70\x4c\x6b"; case 49: // T return "\x04\x4b\x70\x4c\x6c"; case 50: // U return "\x04\x4b\x70\x4c\x6d"; case 51: // V return "\x04\x4b\x70\x4c\x6e"; case 52: // W return "\x04\x4b\x70\x4c\x6f"; case 53: // X return "\x04\x4b\x70\x4c\x70"; case 54: // Y return "\x04\x4b\x70\x4c\x71"; case 55: // Z return "\x04\x4b\x70\x4c\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4c\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x4c\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4c\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x4c\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4c\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x4c\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x4c\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x4c\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x4c\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x4c\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x4c\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x4c\x42\x30"; case 68: // AE return "\x05\x4b\x70\x4c\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x4c\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x4c\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x4c\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x4c\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x4c\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x4c\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x4c\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x4c\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x4c\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x4c\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x4c\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x4c\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x4c\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x4c\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x4c\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x4c\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x4c\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x4c\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x4c\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x4c\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x4c\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x4c\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x4c\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x4c\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x4c\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x4c\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x4c\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x4c\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x4c\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x4c\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x4c\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x4c\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x4c\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x4c\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x4c\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x4c\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x4c\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x4c\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x4c\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x4c\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x4c\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x4c\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x4c\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x4c\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x4c\x79"; case 114: // ENTER return "\x04\x4b\x70\x4c\x7a"; case 115: // TAB return "\x04\x4b\x70\x4c\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x4c\x31"; case 117: // INSERT return "\x04\x4b\x70\x4c\x32"; case 118: // DELETE return "\x04\x4b\x70\x4c\x33"; case 119: // RIGHT return "\x04\x4b\x70\x4c\x34"; case 120: // LEFT return "\x04\x4b\x70\x4c\x35"; case 121: // DOWN return "\x04\x4b\x70\x4c\x36"; case 122: // UP return "\x04\x4b\x70\x4c\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x4c\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x4c\x39"; case 125: // HOME return "\x04\x4b\x70\x4c\x2e"; case 126: // END return "\x04\x4b\x70\x4c\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x4c\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4c\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x4c\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4c\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x4c\x21"; case 132: // F1 return "\x04\x4b\x70\x4c\x2f"; case 133: // F2 return "\x04\x4b\x70\x4c\x2a"; case 134: // F3 return "\x04\x4b\x70\x4c\x3f"; case 135: // F4 return "\x04\x4b\x70\x4c\x26"; case 136: // F5 return "\x04\x4b\x70\x4c\x3c"; case 137: // F6 return "\x04\x4b\x70\x4c\x3e"; case 138: // F7 return "\x04\x4b\x70\x4c\x28"; case 139: // F8 return "\x04\x4b\x70\x4c\x29"; case 140: // F9 return "\x04\x4b\x70\x4c\x5b"; case 141: // F10 return "\x04\x4b\x70\x4c\x5d"; case 142: // F11 return "\x04\x4b\x70\x4c\x7b"; case 143: // F12 return "\x04\x4b\x70\x4c\x7d"; case 144: // F13 return "\x04\x4b\x70\x4c\x40"; case 145: // F14 return "\x04\x4b\x70\x4c\x25"; case 146: // F15 return "\x04\x4b\x70\x4c\x24"; case 147: // F16 return "\x04\x4b\x70\x4c\x23"; case 148: // F17 return "\x05\x4b\x70\x4c\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x4c\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x4c\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x4c\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x4c\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x4c\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x4c\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x4c\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x4c\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x4c\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x4c\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x4c\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x4c\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x4c\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x4c\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x4c\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x4c\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x4c\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x4c\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x4c\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x4c\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4c\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4c\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x4c\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x4c\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x4c\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4c\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x4c\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x4c\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4c\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x4c\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4c\x42\x68"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4f\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x4f\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x4f\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x4f\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x4f\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x4f\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x4f\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x4f\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x4f\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x4f\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x4f\x43"; case 11: // MINUS return "\x04\x4b\x70\x4f\x44"; case 12: // PERIOD return "\x04\x4b\x70\x4f\x45"; case 13: // SLASH return "\x04\x4b\x70\x4f\x46"; case 14: // 0 return "\x04\x4b\x70\x4f\x47"; case 15: // 1 return "\x04\x4b\x70\x4f\x48"; case 16: // 2 return "\x04\x4b\x70\x4f\x49"; case 17: // 3 return "\x04\x4b\x70\x4f\x4a"; case 18: // 4 return "\x04\x4b\x70\x4f\x4b"; case 19: // 5 return "\x04\x4b\x70\x4f\x4c"; case 20: // 6 return "\x04\x4b\x70\x4f\x4d"; case 21: // 7 return "\x04\x4b\x70\x4f\x4e"; case 22: // 8 return "\x04\x4b\x70\x4f\x4f"; case 23: // 9 return "\x04\x4b\x70\x4f\x50"; case 24: // COLON return "\x05\x4b\x70\x4f\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x4f\x51"; case 26: // LESS return "\x05\x4b\x70\x4f\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x4f\x52"; case 28: // GREATER return "\x05\x4b\x70\x4f\x42\x75"; case 29: // AT return "\x05\x4b\x70\x4f\x42\x76"; case 30: // A return "\x04\x4b\x70\x4f\x53"; case 31: // B return "\x04\x4b\x70\x4f\x54"; case 32: // C return "\x04\x4b\x70\x4f\x55"; case 33: // D return "\x04\x4b\x70\x4f\x56"; case 34: // E return "\x04\x4b\x70\x4f\x57"; case 35: // F return "\x04\x4b\x70\x4f\x58"; case 36: // G return "\x04\x4b\x70\x4f\x59"; case 37: // H return "\x04\x4b\x70\x4f\x5a"; case 38: // I return "\x04\x4b\x70\x4f\x61"; case 39: // J return "\x04\x4b\x70\x4f\x62"; case 40: // K return "\x04\x4b\x70\x4f\x63"; case 41: // L return "\x04\x4b\x70\x4f\x64"; case 42: // M return "\x04\x4b\x70\x4f\x65"; case 43: // N return "\x04\x4b\x70\x4f\x66"; case 44: // O return "\x04\x4b\x70\x4f\x67"; case 45: // P return "\x04\x4b\x70\x4f\x68"; case 46: // Q return "\x04\x4b\x70\x4f\x69"; case 47: // R return "\x04\x4b\x70\x4f\x6a"; case 48: // S return "\x04\x4b\x70\x4f\x6b"; case 49: // T return "\x04\x4b\x70\x4f\x6c"; case 50: // U return "\x04\x4b\x70\x4f\x6d"; case 51: // V return "\x04\x4b\x70\x4f\x6e"; case 52: // W return "\x04\x4b\x70\x4f\x6f"; case 53: // X return "\x04\x4b\x70\x4f\x70"; case 54: // Y return "\x04\x4b\x70\x4f\x71"; case 55: // Z return "\x04\x4b\x70\x4f\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4f\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x4f\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4f\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x4f\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4f\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x4f\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x4f\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x4f\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x4f\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x4f\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x4f\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x4f\x42\x30"; case 68: // AE return "\x05\x4b\x70\x4f\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x4f\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x4f\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x4f\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x4f\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x4f\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x4f\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x4f\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x4f\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x4f\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x4f\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x4f\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x4f\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x4f\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x4f\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x4f\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x4f\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x4f\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x4f\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x4f\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x4f\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x4f\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x4f\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x4f\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x4f\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x4f\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x4f\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x4f\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x4f\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x4f\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x4f\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x4f\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x4f\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x4f\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x4f\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x4f\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x4f\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x4f\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x4f\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x4f\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x4f\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x4f\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x4f\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x4f\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x4f\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x4f\x79"; case 114: // ENTER return "\x04\x4b\x70\x4f\x7a"; case 115: // TAB return "\x04\x4b\x70\x4f\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x4f\x31"; case 117: // INSERT return "\x04\x4b\x70\x4f\x32"; case 118: // DELETE return "\x04\x4b\x70\x4f\x33"; case 119: // RIGHT return "\x04\x4b\x70\x4f\x34"; case 120: // LEFT return "\x04\x4b\x70\x4f\x35"; case 121: // DOWN return "\x04\x4b\x70\x4f\x36"; case 122: // UP return "\x04\x4b\x70\x4f\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x4f\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x4f\x39"; case 125: // HOME return "\x04\x4b\x70\x4f\x2e"; case 126: // END return "\x04\x4b\x70\x4f\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x4f\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4f\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x4f\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4f\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x4f\x21"; case 132: // F1 return "\x04\x4b\x70\x4f\x2f"; case 133: // F2 return "\x04\x4b\x70\x4f\x2a"; case 134: // F3 return "\x04\x4b\x70\x4f\x3f"; case 135: // F4 return "\x04\x4b\x70\x4f\x26"; case 136: // F5 return "\x04\x4b\x70\x4f\x3c"; case 137: // F6 return "\x04\x4b\x70\x4f\x3e"; case 138: // F7 return "\x04\x4b\x70\x4f\x28"; case 139: // F8 return "\x04\x4b\x70\x4f\x29"; case 140: // F9 return "\x04\x4b\x70\x4f\x5b"; case 141: // F10 return "\x04\x4b\x70\x4f\x5d"; case 142: // F11 return "\x04\x4b\x70\x4f\x7b"; case 143: // F12 return "\x04\x4b\x70\x4f\x7d"; case 144: // F13 return "\x04\x4b\x70\x4f\x40"; case 145: // F14 return "\x04\x4b\x70\x4f\x25"; case 146: // F15 return "\x04\x4b\x70\x4f\x24"; case 147: // F16 return "\x04\x4b\x70\x4f\x23"; case 148: // F17 return "\x05\x4b\x70\x4f\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x4f\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x4f\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x4f\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x4f\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x4f\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x4f\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x4f\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x4f\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x4f\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x4f\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x4f\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x4f\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x4f\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x4f\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x4f\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x4f\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x4f\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x4f\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x4f\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x4f\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4f\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4f\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x4f\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x4f\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x4f\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4f\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x4f\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x4f\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4f\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x4f\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4f\x42\x68"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x50\x41"; case 1: // EXCLAM return "\x05\x4b\x70\x50\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x70\x50\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x70\x50\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x70\x50\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x70\x50\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x70\x50\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x70\x50\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x70\x50\x42\x72"; case 9: // PLUS return "\x05\x4b\x70\x50\x42\x69"; case 10: // COMMA return "\x04\x4b\x70\x50\x43"; case 11: // MINUS return "\x04\x4b\x70\x50\x44"; case 12: // PERIOD return "\x04\x4b\x70\x50\x45"; case 13: // SLASH return "\x04\x4b\x70\x50\x46"; case 14: // 0 return "\x04\x4b\x70\x50\x47"; case 15: // 1 return "\x04\x4b\x70\x50\x48"; case 16: // 2 return "\x04\x4b\x70\x50\x49"; case 17: // 3 return "\x04\x4b\x70\x50\x4a"; case 18: // 4 return "\x04\x4b\x70\x50\x4b"; case 19: // 5 return "\x04\x4b\x70\x50\x4c"; case 20: // 6 return "\x04\x4b\x70\x50\x4d"; case 21: // 7 return "\x04\x4b\x70\x50\x4e"; case 22: // 8 return "\x04\x4b\x70\x50\x4f"; case 23: // 9 return "\x04\x4b\x70\x50\x50"; case 24: // COLON return "\x05\x4b\x70\x50\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x70\x50\x51"; case 26: // LESS return "\x05\x4b\x70\x50\x42\x74"; case 27: // EQUAL return "\x04\x4b\x70\x50\x52"; case 28: // GREATER return "\x05\x4b\x70\x50\x42\x75"; case 29: // AT return "\x05\x4b\x70\x50\x42\x76"; case 30: // A return "\x04\x4b\x70\x50\x53"; case 31: // B return "\x04\x4b\x70\x50\x54"; case 32: // C return "\x04\x4b\x70\x50\x55"; case 33: // D return "\x04\x4b\x70\x50\x56"; case 34: // E return "\x04\x4b\x70\x50\x57"; case 35: // F return "\x04\x4b\x70\x50\x58"; case 36: // G return "\x04\x4b\x70\x50\x59"; case 37: // H return "\x04\x4b\x70\x50\x5a"; case 38: // I return "\x04\x4b\x70\x50\x61"; case 39: // J return "\x04\x4b\x70\x50\x62"; case 40: // K return "\x04\x4b\x70\x50\x63"; case 41: // L return "\x04\x4b\x70\x50\x64"; case 42: // M return "\x04\x4b\x70\x50\x65"; case 43: // N return "\x04\x4b\x70\x50\x66"; case 44: // O return "\x04\x4b\x70\x50\x67"; case 45: // P return "\x04\x4b\x70\x50\x68"; case 46: // Q return "\x04\x4b\x70\x50\x69"; case 47: // R return "\x04\x4b\x70\x50\x6a"; case 48: // S return "\x04\x4b\x70\x50\x6b"; case 49: // T return "\x04\x4b\x70\x50\x6c"; case 50: // U return "\x04\x4b\x70\x50\x6d"; case 51: // V return "\x04\x4b\x70\x50\x6e"; case 52: // W return "\x04\x4b\x70\x50\x6f"; case 53: // X return "\x04\x4b\x70\x50\x70"; case 54: // Y return "\x04\x4b\x70\x50\x71"; case 55: // Z return "\x04\x4b\x70\x50\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x70\x50\x73"; case 57: // BACKSLASH return "\x04\x4b\x70\x50\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x50\x75"; case 59: // UNDERSCORE return "\x05\x4b\x70\x50\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x50\x76"; case 61: // WORLD_1 return "\x04\x4b\x70\x50\x77"; case 62: // WORLD_2 return "\x04\x4b\x70\x50\x78"; case 63: // PARAGRAPH return "\x05\x4b\x70\x50\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x70\x50\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x70\x50\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x70\x50\x42\x7a"; case 67: // A_RING return "\x05\x4b\x70\x50\x42\x30"; case 68: // AE return "\x05\x4b\x70\x50\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x70\x50\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x70\x50\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x70\x50\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x70\x50\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x70\x50\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x70\x50\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x70\x50\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x70\x50\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x70\x50\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x70\x50\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x70\x50\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x70\x50\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x70\x50\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x70\x50\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x70\x50\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x70\x50\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x70\x50\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x70\x50\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x70\x50\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x70\x50\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x70\x50\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x70\x50\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x70\x50\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x70\x50\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x70\x50\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x70\x50\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x70\x50\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x70\x50\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x70\x50\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x70\x50\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x70\x50\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x70\x50\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x70\x50\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x70\x50\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x70\x50\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x70\x50\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x70\x50\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x70\x50\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x70\x50\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x70\x50\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x70\x50\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x70\x50\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x70\x50\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x70\x50\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x70\x50\x79"; case 114: // ENTER return "\x04\x4b\x70\x50\x7a"; case 115: // TAB return "\x04\x4b\x70\x50\x30"; case 116: // BACKSPACE return "\x04\x4b\x70\x50\x31"; case 117: // INSERT return "\x04\x4b\x70\x50\x32"; case 118: // DELETE return "\x04\x4b\x70\x50\x33"; case 119: // RIGHT return "\x04\x4b\x70\x50\x34"; case 120: // LEFT return "\x04\x4b\x70\x50\x35"; case 121: // DOWN return "\x04\x4b\x70\x50\x36"; case 122: // UP return "\x04\x4b\x70\x50\x37"; case 123: // PAGE_UP return "\x04\x4b\x70\x50\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x70\x50\x39"; case 125: // HOME return "\x04\x4b\x70\x50\x2e"; case 126: // END return "\x04\x4b\x70\x50\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x70\x50\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x70\x50\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x70\x50\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x70\x50\x5e"; case 131: // PAUSE return "\x04\x4b\x70\x50\x21"; case 132: // F1 return "\x04\x4b\x70\x50\x2f"; case 133: // F2 return "\x04\x4b\x70\x50\x2a"; case 134: // F3 return "\x04\x4b\x70\x50\x3f"; case 135: // F4 return "\x04\x4b\x70\x50\x26"; case 136: // F5 return "\x04\x4b\x70\x50\x3c"; case 137: // F6 return "\x04\x4b\x70\x50\x3e"; case 138: // F7 return "\x04\x4b\x70\x50\x28"; case 139: // F8 return "\x04\x4b\x70\x50\x29"; case 140: // F9 return "\x04\x4b\x70\x50\x5b"; case 141: // F10 return "\x04\x4b\x70\x50\x5d"; case 142: // F11 return "\x04\x4b\x70\x50\x7b"; case 143: // F12 return "\x04\x4b\x70\x50\x7d"; case 144: // F13 return "\x04\x4b\x70\x50\x40"; case 145: // F14 return "\x04\x4b\x70\x50\x25"; case 146: // F15 return "\x04\x4b\x70\x50\x24"; case 147: // F16 return "\x04\x4b\x70\x50\x23"; case 148: // F17 return "\x05\x4b\x70\x50\x42\x41"; case 149: // F18 return "\x05\x4b\x70\x50\x42\x42"; case 150: // F19 return "\x05\x4b\x70\x50\x42\x43"; case 151: // F20 return "\x05\x4b\x70\x50\x42\x44"; case 152: // F21 return "\x05\x4b\x70\x50\x42\x45"; case 153: // F22 return "\x05\x4b\x70\x50\x42\x46"; case 154: // F23 return "\x05\x4b\x70\x50\x42\x47"; case 155: // F24 return "\x05\x4b\x70\x50\x42\x48"; case 156: // F25 return "\x05\x4b\x70\x50\x42\x49"; case 157: // KP_0 return "\x05\x4b\x70\x50\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x70\x50\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x70\x50\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x70\x50\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x70\x50\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x70\x50\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x70\x50\x42\x50"; case 164: // KP_7 return "\x05\x4b\x70\x50\x42\x51"; case 165: // KP_8 return "\x05\x4b\x70\x50\x42\x52"; case 166: // KP_9 return "\x05\x4b\x70\x50\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x70\x50\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x70\x50\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x70\x50\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x70\x50\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x70\x50\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x70\x50\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x70\x50\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x70\x50\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x70\x50\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x70\x50\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x50\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x70\x50\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x70\x50\x42\x68"; } // end switch(key) } // end switch(mods) break; case 2: // REPEAT switch (mods & 0xf) { case 0x0: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x04\x4b\x74\x41\x79"; case 114: // ENTER return "\x01\x0d"; case 115: // TAB return "\x04\x4b\x74\x41\x30"; case 116: // BACKSPACE return "\x01\x7f"; case 117: // INSERT return "\x04\x4b\x74\x41\x32"; case 118: // DELETE return "\x04\x4b\x74\x41\x33"; case 119: // RIGHT return "\x04\x4b\x74\x41\x34"; case 120: // LEFT return "\x04\x4b\x74\x41\x35"; case 121: // DOWN return "\x04\x4b\x74\x41\x36"; case 122: // UP return "\x04\x4b\x74\x41\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x41\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x41\x39"; case 125: // HOME return "\x04\x4b\x74\x41\x2e"; case 126: // END return "\x04\x4b\x74\x41\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x41\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x41\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x41\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x41\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x41\x21"; case 132: // F1 return "\x04\x4b\x74\x41\x2f"; case 133: // F2 return "\x04\x4b\x74\x41\x2a"; case 134: // F3 return "\x04\x4b\x74\x41\x3f"; case 135: // F4 return "\x04\x4b\x74\x41\x26"; case 136: // F5 return "\x04\x4b\x74\x41\x3c"; case 137: // F6 return "\x04\x4b\x74\x41\x3e"; case 138: // F7 return "\x04\x4b\x74\x41\x28"; case 139: // F8 return "\x04\x4b\x74\x41\x29"; case 140: // F9 return "\x04\x4b\x74\x41\x5b"; case 141: // F10 return "\x04\x4b\x74\x41\x5d"; case 142: // F11 return "\x04\x4b\x74\x41\x7b"; case 143: // F12 return "\x04\x4b\x74\x41\x7d"; case 144: // F13 return "\x04\x4b\x74\x41\x40"; case 145: // F14 return "\x04\x4b\x74\x41\x25"; case 146: // F15 return "\x04\x4b\x74\x41\x24"; case 147: // F16 return "\x04\x4b\x74\x41\x23"; case 148: // F17 return "\x05\x4b\x74\x41\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x41\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x41\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x41\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x41\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x41\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x41\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x41\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x41\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x41\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x41\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x41\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x41\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x41\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x41\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x41\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x41\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x41\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x41\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x41\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x41\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x41\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x41\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x41\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x41\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x41\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x41\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x41\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x41\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x41\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x41\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x41\x42\x68"; } // end switch(key) case 0x1: switch(key & 0xff) { default: return NULL; case 113: // ESCAPE return "\x04\x4b\x74\x42\x79"; case 114: // ENTER return "\x04\x4b\x74\x42\x7a"; case 115: // TAB return "\x04\x4b\x74\x42\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x42\x31"; case 117: // INSERT return "\x04\x4b\x74\x42\x32"; case 118: // DELETE return "\x04\x4b\x74\x42\x33"; case 119: // RIGHT return "\x04\x4b\x74\x42\x34"; case 120: // LEFT return "\x04\x4b\x74\x42\x35"; case 121: // DOWN return "\x04\x4b\x74\x42\x36"; case 122: // UP return "\x04\x4b\x74\x42\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x42\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x42\x39"; case 125: // HOME return "\x04\x4b\x74\x42\x2e"; case 126: // END return "\x04\x4b\x74\x42\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x42\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x42\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x42\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x42\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x42\x21"; case 132: // F1 return "\x04\x4b\x74\x42\x2f"; case 133: // F2 return "\x04\x4b\x74\x42\x2a"; case 134: // F3 return "\x04\x4b\x74\x42\x3f"; case 135: // F4 return "\x04\x4b\x74\x42\x26"; case 136: // F5 return "\x04\x4b\x74\x42\x3c"; case 137: // F6 return "\x04\x4b\x74\x42\x3e"; case 138: // F7 return "\x04\x4b\x74\x42\x28"; case 139: // F8 return "\x04\x4b\x74\x42\x29"; case 140: // F9 return "\x04\x4b\x74\x42\x5b"; case 141: // F10 return "\x04\x4b\x74\x42\x5d"; case 142: // F11 return "\x04\x4b\x74\x42\x7b"; case 143: // F12 return "\x04\x4b\x74\x42\x7d"; case 144: // F13 return "\x04\x4b\x74\x42\x40"; case 145: // F14 return "\x04\x4b\x74\x42\x25"; case 146: // F15 return "\x04\x4b\x74\x42\x24"; case 147: // F16 return "\x04\x4b\x74\x42\x23"; case 148: // F17 return "\x05\x4b\x74\x42\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x42\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x42\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x42\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x42\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x42\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x42\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x42\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x42\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x42\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x42\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x42\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x42\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x42\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x42\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x42\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x42\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x42\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x42\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x42\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x42\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x42\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x42\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x42\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x42\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x42\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x42\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x42\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x42\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x42\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x42\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x42\x42\x68"; } // end switch(key) case 0x2: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x45\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x45\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x45\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x45\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x45\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x45\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x45\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x45\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x45\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x45\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x45\x43"; case 11: // MINUS return "\x04\x4b\x74\x45\x44"; case 12: // PERIOD return "\x04\x4b\x74\x45\x45"; case 13: // SLASH return "\x04\x4b\x74\x45\x46"; case 14: // 0 return "\x04\x4b\x74\x45\x47"; case 15: // 1 return "\x04\x4b\x74\x45\x48"; case 16: // 2 return "\x04\x4b\x74\x45\x49"; case 17: // 3 return "\x04\x4b\x74\x45\x4a"; case 18: // 4 return "\x04\x4b\x74\x45\x4b"; case 19: // 5 return "\x04\x4b\x74\x45\x4c"; case 20: // 6 return "\x04\x4b\x74\x45\x4d"; case 21: // 7 return "\x04\x4b\x74\x45\x4e"; case 22: // 8 return "\x04\x4b\x74\x45\x4f"; case 23: // 9 return "\x04\x4b\x74\x45\x50"; case 24: // COLON return "\x05\x4b\x74\x45\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x45\x51"; case 26: // LESS return "\x05\x4b\x74\x45\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x45\x52"; case 28: // GREATER return "\x05\x4b\x74\x45\x42\x75"; case 29: // AT return "\x05\x4b\x74\x45\x42\x76"; case 30: // A return "\x04\x4b\x74\x45\x53"; case 31: // B return "\x04\x4b\x74\x45\x54"; case 32: // C return "\x04\x4b\x74\x45\x55"; case 33: // D return "\x04\x4b\x74\x45\x56"; case 34: // E return "\x04\x4b\x74\x45\x57"; case 35: // F return "\x04\x4b\x74\x45\x58"; case 36: // G return "\x04\x4b\x74\x45\x59"; case 37: // H return "\x04\x4b\x74\x45\x5a"; case 38: // I return "\x04\x4b\x74\x45\x61"; case 39: // J return "\x04\x4b\x74\x45\x62"; case 40: // K return "\x04\x4b\x74\x45\x63"; case 41: // L return "\x04\x4b\x74\x45\x64"; case 42: // M return "\x04\x4b\x74\x45\x65"; case 43: // N return "\x04\x4b\x74\x45\x66"; case 44: // O return "\x04\x4b\x74\x45\x67"; case 45: // P return "\x04\x4b\x74\x45\x68"; case 46: // Q return "\x04\x4b\x74\x45\x69"; case 47: // R return "\x04\x4b\x74\x45\x6a"; case 48: // S return "\x04\x4b\x74\x45\x6b"; case 49: // T return "\x04\x4b\x74\x45\x6c"; case 50: // U return "\x04\x4b\x74\x45\x6d"; case 51: // V return "\x04\x4b\x74\x45\x6e"; case 52: // W return "\x04\x4b\x74\x45\x6f"; case 53: // X return "\x04\x4b\x74\x45\x70"; case 54: // Y return "\x04\x4b\x74\x45\x71"; case 55: // Z return "\x04\x4b\x74\x45\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x45\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x45\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x45\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x45\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x45\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x45\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x45\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x45\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x45\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x45\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x45\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x45\x42\x30"; case 68: // AE return "\x05\x4b\x74\x45\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x45\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x45\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x45\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x45\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x45\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x45\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x45\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x45\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x45\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x45\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x45\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x45\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x45\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x45\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x45\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x45\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x45\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x45\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x45\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x45\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x45\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x45\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x45\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x45\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x45\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x45\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x45\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x45\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x45\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x45\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x45\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x45\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x45\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x45\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x45\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x45\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x45\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x45\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x45\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x45\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x45\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x45\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x45\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x45\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x45\x79"; case 114: // ENTER return "\x04\x4b\x74\x45\x7a"; case 115: // TAB return "\x04\x4b\x74\x45\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x45\x31"; case 117: // INSERT return "\x04\x4b\x74\x45\x32"; case 118: // DELETE return "\x04\x4b\x74\x45\x33"; case 119: // RIGHT return "\x04\x4b\x74\x45\x34"; case 120: // LEFT return "\x04\x4b\x74\x45\x35"; case 121: // DOWN return "\x04\x4b\x74\x45\x36"; case 122: // UP return "\x04\x4b\x74\x45\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x45\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x45\x39"; case 125: // HOME return "\x04\x4b\x74\x45\x2e"; case 126: // END return "\x04\x4b\x74\x45\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x45\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x45\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x45\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x45\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x45\x21"; case 132: // F1 return "\x04\x4b\x74\x45\x2f"; case 133: // F2 return "\x04\x4b\x74\x45\x2a"; case 134: // F3 return "\x04\x4b\x74\x45\x3f"; case 135: // F4 return "\x04\x4b\x74\x45\x26"; case 136: // F5 return "\x04\x4b\x74\x45\x3c"; case 137: // F6 return "\x04\x4b\x74\x45\x3e"; case 138: // F7 return "\x04\x4b\x74\x45\x28"; case 139: // F8 return "\x04\x4b\x74\x45\x29"; case 140: // F9 return "\x04\x4b\x74\x45\x5b"; case 141: // F10 return "\x04\x4b\x74\x45\x5d"; case 142: // F11 return "\x04\x4b\x74\x45\x7b"; case 143: // F12 return "\x04\x4b\x74\x45\x7d"; case 144: // F13 return "\x04\x4b\x74\x45\x40"; case 145: // F14 return "\x04\x4b\x74\x45\x25"; case 146: // F15 return "\x04\x4b\x74\x45\x24"; case 147: // F16 return "\x04\x4b\x74\x45\x23"; case 148: // F17 return "\x05\x4b\x74\x45\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x45\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x45\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x45\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x45\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x45\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x45\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x45\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x45\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x45\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x45\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x45\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x45\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x45\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x45\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x45\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x45\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x45\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x45\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x45\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x45\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x45\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x45\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x45\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x45\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x45\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x45\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x45\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x45\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x45\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x45\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x45\x42\x68"; } // end switch(key) case 0x3: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x46\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x46\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x46\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x46\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x46\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x46\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x46\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x46\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x46\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x46\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x46\x43"; case 11: // MINUS return "\x04\x4b\x74\x46\x44"; case 12: // PERIOD return "\x04\x4b\x74\x46\x45"; case 13: // SLASH return "\x04\x4b\x74\x46\x46"; case 14: // 0 return "\x04\x4b\x74\x46\x47"; case 15: // 1 return "\x04\x4b\x74\x46\x48"; case 16: // 2 return "\x04\x4b\x74\x46\x49"; case 17: // 3 return "\x04\x4b\x74\x46\x4a"; case 18: // 4 return "\x04\x4b\x74\x46\x4b"; case 19: // 5 return "\x04\x4b\x74\x46\x4c"; case 20: // 6 return "\x04\x4b\x74\x46\x4d"; case 21: // 7 return "\x04\x4b\x74\x46\x4e"; case 22: // 8 return "\x04\x4b\x74\x46\x4f"; case 23: // 9 return "\x04\x4b\x74\x46\x50"; case 24: // COLON return "\x05\x4b\x74\x46\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x46\x51"; case 26: // LESS return "\x05\x4b\x74\x46\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x46\x52"; case 28: // GREATER return "\x05\x4b\x74\x46\x42\x75"; case 29: // AT return "\x05\x4b\x74\x46\x42\x76"; case 30: // A return "\x04\x4b\x74\x46\x53"; case 31: // B return "\x04\x4b\x74\x46\x54"; case 32: // C return "\x04\x4b\x74\x46\x55"; case 33: // D return "\x04\x4b\x74\x46\x56"; case 34: // E return "\x04\x4b\x74\x46\x57"; case 35: // F return "\x04\x4b\x74\x46\x58"; case 36: // G return "\x04\x4b\x74\x46\x59"; case 37: // H return "\x04\x4b\x74\x46\x5a"; case 38: // I return "\x04\x4b\x74\x46\x61"; case 39: // J return "\x04\x4b\x74\x46\x62"; case 40: // K return "\x04\x4b\x74\x46\x63"; case 41: // L return "\x04\x4b\x74\x46\x64"; case 42: // M return "\x04\x4b\x74\x46\x65"; case 43: // N return "\x04\x4b\x74\x46\x66"; case 44: // O return "\x04\x4b\x74\x46\x67"; case 45: // P return "\x04\x4b\x74\x46\x68"; case 46: // Q return "\x04\x4b\x74\x46\x69"; case 47: // R return "\x04\x4b\x74\x46\x6a"; case 48: // S return "\x04\x4b\x74\x46\x6b"; case 49: // T return "\x04\x4b\x74\x46\x6c"; case 50: // U return "\x04\x4b\x74\x46\x6d"; case 51: // V return "\x04\x4b\x74\x46\x6e"; case 52: // W return "\x04\x4b\x74\x46\x6f"; case 53: // X return "\x04\x4b\x74\x46\x70"; case 54: // Y return "\x04\x4b\x74\x46\x71"; case 55: // Z return "\x04\x4b\x74\x46\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x46\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x46\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x46\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x46\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x46\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x46\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x46\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x46\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x46\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x46\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x46\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x46\x42\x30"; case 68: // AE return "\x05\x4b\x74\x46\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x46\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x46\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x46\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x46\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x46\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x46\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x46\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x46\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x46\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x46\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x46\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x46\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x46\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x46\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x46\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x46\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x46\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x46\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x46\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x46\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x46\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x46\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x46\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x46\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x46\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x46\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x46\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x46\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x46\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x46\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x46\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x46\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x46\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x46\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x46\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x46\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x46\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x46\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x46\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x46\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x46\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x46\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x46\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x46\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x46\x79"; case 114: // ENTER return "\x04\x4b\x74\x46\x7a"; case 115: // TAB return "\x04\x4b\x74\x46\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x46\x31"; case 117: // INSERT return "\x04\x4b\x74\x46\x32"; case 118: // DELETE return "\x04\x4b\x74\x46\x33"; case 119: // RIGHT return "\x04\x4b\x74\x46\x34"; case 120: // LEFT return "\x04\x4b\x74\x46\x35"; case 121: // DOWN return "\x04\x4b\x74\x46\x36"; case 122: // UP return "\x04\x4b\x74\x46\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x46\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x46\x39"; case 125: // HOME return "\x04\x4b\x74\x46\x2e"; case 126: // END return "\x04\x4b\x74\x46\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x46\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x46\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x46\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x46\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x46\x21"; case 132: // F1 return "\x04\x4b\x74\x46\x2f"; case 133: // F2 return "\x04\x4b\x74\x46\x2a"; case 134: // F3 return "\x04\x4b\x74\x46\x3f"; case 135: // F4 return "\x04\x4b\x74\x46\x26"; case 136: // F5 return "\x04\x4b\x74\x46\x3c"; case 137: // F6 return "\x04\x4b\x74\x46\x3e"; case 138: // F7 return "\x04\x4b\x74\x46\x28"; case 139: // F8 return "\x04\x4b\x74\x46\x29"; case 140: // F9 return "\x04\x4b\x74\x46\x5b"; case 141: // F10 return "\x04\x4b\x74\x46\x5d"; case 142: // F11 return "\x04\x4b\x74\x46\x7b"; case 143: // F12 return "\x04\x4b\x74\x46\x7d"; case 144: // F13 return "\x04\x4b\x74\x46\x40"; case 145: // F14 return "\x04\x4b\x74\x46\x25"; case 146: // F15 return "\x04\x4b\x74\x46\x24"; case 147: // F16 return "\x04\x4b\x74\x46\x23"; case 148: // F17 return "\x05\x4b\x74\x46\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x46\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x46\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x46\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x46\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x46\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x46\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x46\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x46\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x46\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x46\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x46\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x46\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x46\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x46\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x46\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x46\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x46\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x46\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x46\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x46\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x46\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x46\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x46\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x46\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x46\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x46\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x46\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x46\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x46\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x46\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x46\x42\x68"; } // end switch(key) case 0x4: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x43\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x43\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x43\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x43\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x43\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x43\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x43\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x43\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x43\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x43\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x43\x43"; case 11: // MINUS return "\x04\x4b\x74\x43\x44"; case 12: // PERIOD return "\x04\x4b\x74\x43\x45"; case 13: // SLASH return "\x04\x4b\x74\x43\x46"; case 14: // 0 return "\x04\x4b\x74\x43\x47"; case 15: // 1 return "\x04\x4b\x74\x43\x48"; case 16: // 2 return "\x04\x4b\x74\x43\x49"; case 17: // 3 return "\x04\x4b\x74\x43\x4a"; case 18: // 4 return "\x04\x4b\x74\x43\x4b"; case 19: // 5 return "\x04\x4b\x74\x43\x4c"; case 20: // 6 return "\x04\x4b\x74\x43\x4d"; case 21: // 7 return "\x04\x4b\x74\x43\x4e"; case 22: // 8 return "\x04\x4b\x74\x43\x4f"; case 23: // 9 return "\x04\x4b\x74\x43\x50"; case 24: // COLON return "\x05\x4b\x74\x43\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x43\x51"; case 26: // LESS return "\x05\x4b\x74\x43\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x43\x52"; case 28: // GREATER return "\x05\x4b\x74\x43\x42\x75"; case 29: // AT return "\x05\x4b\x74\x43\x42\x76"; case 30: // A return "\x04\x4b\x74\x43\x53"; case 31: // B return "\x04\x4b\x74\x43\x54"; case 32: // C return "\x04\x4b\x74\x43\x55"; case 33: // D return "\x04\x4b\x74\x43\x56"; case 34: // E return "\x04\x4b\x74\x43\x57"; case 35: // F return "\x04\x4b\x74\x43\x58"; case 36: // G return "\x04\x4b\x74\x43\x59"; case 37: // H return "\x04\x4b\x74\x43\x5a"; case 38: // I return "\x04\x4b\x74\x43\x61"; case 39: // J return "\x04\x4b\x74\x43\x62"; case 40: // K return "\x04\x4b\x74\x43\x63"; case 41: // L return "\x04\x4b\x74\x43\x64"; case 42: // M return "\x04\x4b\x74\x43\x65"; case 43: // N return "\x04\x4b\x74\x43\x66"; case 44: // O return "\x04\x4b\x74\x43\x67"; case 45: // P return "\x04\x4b\x74\x43\x68"; case 46: // Q return "\x04\x4b\x74\x43\x69"; case 47: // R return "\x04\x4b\x74\x43\x6a"; case 48: // S return "\x04\x4b\x74\x43\x6b"; case 49: // T return "\x04\x4b\x74\x43\x6c"; case 50: // U return "\x04\x4b\x74\x43\x6d"; case 51: // V return "\x04\x4b\x74\x43\x6e"; case 52: // W return "\x04\x4b\x74\x43\x6f"; case 53: // X return "\x04\x4b\x74\x43\x70"; case 54: // Y return "\x04\x4b\x74\x43\x71"; case 55: // Z return "\x04\x4b\x74\x43\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x43\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x43\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x43\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x43\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x43\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x43\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x43\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x43\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x43\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x43\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x43\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x43\x42\x30"; case 68: // AE return "\x05\x4b\x74\x43\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x43\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x43\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x43\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x43\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x43\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x43\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x43\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x43\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x43\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x43\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x43\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x43\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x43\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x43\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x43\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x43\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x43\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x43\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x43\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x43\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x43\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x43\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x43\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x43\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x43\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x43\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x43\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x43\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x43\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x43\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x43\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x43\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x43\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x43\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x43\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x43\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x43\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x43\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x43\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x43\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x43\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x43\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x43\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x43\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x43\x79"; case 114: // ENTER return "\x04\x4b\x74\x43\x7a"; case 115: // TAB return "\x04\x4b\x74\x43\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x43\x31"; case 117: // INSERT return "\x04\x4b\x74\x43\x32"; case 118: // DELETE return "\x04\x4b\x74\x43\x33"; case 119: // RIGHT return "\x04\x4b\x74\x43\x34"; case 120: // LEFT return "\x04\x4b\x74\x43\x35"; case 121: // DOWN return "\x04\x4b\x74\x43\x36"; case 122: // UP return "\x04\x4b\x74\x43\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x43\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x43\x39"; case 125: // HOME return "\x04\x4b\x74\x43\x2e"; case 126: // END return "\x04\x4b\x74\x43\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x43\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x43\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x43\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x43\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x43\x21"; case 132: // F1 return "\x04\x4b\x74\x43\x2f"; case 133: // F2 return "\x04\x4b\x74\x43\x2a"; case 134: // F3 return "\x04\x4b\x74\x43\x3f"; case 135: // F4 return "\x04\x4b\x74\x43\x26"; case 136: // F5 return "\x04\x4b\x74\x43\x3c"; case 137: // F6 return "\x04\x4b\x74\x43\x3e"; case 138: // F7 return "\x04\x4b\x74\x43\x28"; case 139: // F8 return "\x04\x4b\x74\x43\x29"; case 140: // F9 return "\x04\x4b\x74\x43\x5b"; case 141: // F10 return "\x04\x4b\x74\x43\x5d"; case 142: // F11 return "\x04\x4b\x74\x43\x7b"; case 143: // F12 return "\x04\x4b\x74\x43\x7d"; case 144: // F13 return "\x04\x4b\x74\x43\x40"; case 145: // F14 return "\x04\x4b\x74\x43\x25"; case 146: // F15 return "\x04\x4b\x74\x43\x24"; case 147: // F16 return "\x04\x4b\x74\x43\x23"; case 148: // F17 return "\x05\x4b\x74\x43\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x43\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x43\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x43\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x43\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x43\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x43\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x43\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x43\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x43\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x43\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x43\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x43\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x43\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x43\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x43\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x43\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x43\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x43\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x43\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x43\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x43\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x43\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x43\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x43\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x43\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x43\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x43\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x43\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x43\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x43\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x43\x42\x68"; } // end switch(key) case 0x5: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x44\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x44\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x44\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x44\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x44\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x44\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x44\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x44\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x44\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x44\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x44\x43"; case 11: // MINUS return "\x04\x4b\x74\x44\x44"; case 12: // PERIOD return "\x04\x4b\x74\x44\x45"; case 13: // SLASH return "\x04\x4b\x74\x44\x46"; case 14: // 0 return "\x04\x4b\x74\x44\x47"; case 15: // 1 return "\x04\x4b\x74\x44\x48"; case 16: // 2 return "\x04\x4b\x74\x44\x49"; case 17: // 3 return "\x04\x4b\x74\x44\x4a"; case 18: // 4 return "\x04\x4b\x74\x44\x4b"; case 19: // 5 return "\x04\x4b\x74\x44\x4c"; case 20: // 6 return "\x04\x4b\x74\x44\x4d"; case 21: // 7 return "\x04\x4b\x74\x44\x4e"; case 22: // 8 return "\x04\x4b\x74\x44\x4f"; case 23: // 9 return "\x04\x4b\x74\x44\x50"; case 24: // COLON return "\x05\x4b\x74\x44\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x44\x51"; case 26: // LESS return "\x05\x4b\x74\x44\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x44\x52"; case 28: // GREATER return "\x05\x4b\x74\x44\x42\x75"; case 29: // AT return "\x05\x4b\x74\x44\x42\x76"; case 30: // A return "\x04\x4b\x74\x44\x53"; case 31: // B return "\x04\x4b\x74\x44\x54"; case 32: // C return "\x04\x4b\x74\x44\x55"; case 33: // D return "\x04\x4b\x74\x44\x56"; case 34: // E return "\x04\x4b\x74\x44\x57"; case 35: // F return "\x04\x4b\x74\x44\x58"; case 36: // G return "\x04\x4b\x74\x44\x59"; case 37: // H return "\x04\x4b\x74\x44\x5a"; case 38: // I return "\x04\x4b\x74\x44\x61"; case 39: // J return "\x04\x4b\x74\x44\x62"; case 40: // K return "\x04\x4b\x74\x44\x63"; case 41: // L return "\x04\x4b\x74\x44\x64"; case 42: // M return "\x04\x4b\x74\x44\x65"; case 43: // N return "\x04\x4b\x74\x44\x66"; case 44: // O return "\x04\x4b\x74\x44\x67"; case 45: // P return "\x04\x4b\x74\x44\x68"; case 46: // Q return "\x04\x4b\x74\x44\x69"; case 47: // R return "\x04\x4b\x74\x44\x6a"; case 48: // S return "\x04\x4b\x74\x44\x6b"; case 49: // T return "\x04\x4b\x74\x44\x6c"; case 50: // U return "\x04\x4b\x74\x44\x6d"; case 51: // V return "\x04\x4b\x74\x44\x6e"; case 52: // W return "\x04\x4b\x74\x44\x6f"; case 53: // X return "\x04\x4b\x74\x44\x70"; case 54: // Y return "\x04\x4b\x74\x44\x71"; case 55: // Z return "\x04\x4b\x74\x44\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x44\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x44\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x44\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x44\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x44\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x44\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x44\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x44\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x44\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x44\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x44\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x44\x42\x30"; case 68: // AE return "\x05\x4b\x74\x44\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x44\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x44\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x44\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x44\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x44\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x44\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x44\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x44\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x44\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x44\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x44\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x44\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x44\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x44\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x44\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x44\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x44\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x44\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x44\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x44\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x44\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x44\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x44\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x44\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x44\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x44\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x44\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x44\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x44\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x44\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x44\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x44\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x44\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x44\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x44\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x44\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x44\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x44\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x44\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x44\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x44\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x44\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x44\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x44\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x44\x79"; case 114: // ENTER return "\x04\x4b\x74\x44\x7a"; case 115: // TAB return "\x04\x4b\x74\x44\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x44\x31"; case 117: // INSERT return "\x04\x4b\x74\x44\x32"; case 118: // DELETE return "\x04\x4b\x74\x44\x33"; case 119: // RIGHT return "\x04\x4b\x74\x44\x34"; case 120: // LEFT return "\x04\x4b\x74\x44\x35"; case 121: // DOWN return "\x04\x4b\x74\x44\x36"; case 122: // UP return "\x04\x4b\x74\x44\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x44\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x44\x39"; case 125: // HOME return "\x04\x4b\x74\x44\x2e"; case 126: // END return "\x04\x4b\x74\x44\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x44\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x44\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x44\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x44\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x44\x21"; case 132: // F1 return "\x04\x4b\x74\x44\x2f"; case 133: // F2 return "\x04\x4b\x74\x44\x2a"; case 134: // F3 return "\x04\x4b\x74\x44\x3f"; case 135: // F4 return "\x04\x4b\x74\x44\x26"; case 136: // F5 return "\x04\x4b\x74\x44\x3c"; case 137: // F6 return "\x04\x4b\x74\x44\x3e"; case 138: // F7 return "\x04\x4b\x74\x44\x28"; case 139: // F8 return "\x04\x4b\x74\x44\x29"; case 140: // F9 return "\x04\x4b\x74\x44\x5b"; case 141: // F10 return "\x04\x4b\x74\x44\x5d"; case 142: // F11 return "\x04\x4b\x74\x44\x7b"; case 143: // F12 return "\x04\x4b\x74\x44\x7d"; case 144: // F13 return "\x04\x4b\x74\x44\x40"; case 145: // F14 return "\x04\x4b\x74\x44\x25"; case 146: // F15 return "\x04\x4b\x74\x44\x24"; case 147: // F16 return "\x04\x4b\x74\x44\x23"; case 148: // F17 return "\x05\x4b\x74\x44\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x44\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x44\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x44\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x44\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x44\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x44\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x44\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x44\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x44\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x44\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x44\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x44\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x44\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x44\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x44\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x44\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x44\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x44\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x44\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x44\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x44\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x44\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x44\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x44\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x44\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x44\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x44\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x44\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x44\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x44\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x44\x42\x68"; } // end switch(key) case 0x6: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x47\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x47\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x47\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x47\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x47\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x47\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x47\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x47\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x47\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x47\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x47\x43"; case 11: // MINUS return "\x04\x4b\x74\x47\x44"; case 12: // PERIOD return "\x04\x4b\x74\x47\x45"; case 13: // SLASH return "\x04\x4b\x74\x47\x46"; case 14: // 0 return "\x04\x4b\x74\x47\x47"; case 15: // 1 return "\x04\x4b\x74\x47\x48"; case 16: // 2 return "\x04\x4b\x74\x47\x49"; case 17: // 3 return "\x04\x4b\x74\x47\x4a"; case 18: // 4 return "\x04\x4b\x74\x47\x4b"; case 19: // 5 return "\x04\x4b\x74\x47\x4c"; case 20: // 6 return "\x04\x4b\x74\x47\x4d"; case 21: // 7 return "\x04\x4b\x74\x47\x4e"; case 22: // 8 return "\x04\x4b\x74\x47\x4f"; case 23: // 9 return "\x04\x4b\x74\x47\x50"; case 24: // COLON return "\x05\x4b\x74\x47\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x47\x51"; case 26: // LESS return "\x05\x4b\x74\x47\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x47\x52"; case 28: // GREATER return "\x05\x4b\x74\x47\x42\x75"; case 29: // AT return "\x05\x4b\x74\x47\x42\x76"; case 30: // A return "\x04\x4b\x74\x47\x53"; case 31: // B return "\x04\x4b\x74\x47\x54"; case 32: // C return "\x04\x4b\x74\x47\x55"; case 33: // D return "\x04\x4b\x74\x47\x56"; case 34: // E return "\x04\x4b\x74\x47\x57"; case 35: // F return "\x04\x4b\x74\x47\x58"; case 36: // G return "\x04\x4b\x74\x47\x59"; case 37: // H return "\x04\x4b\x74\x47\x5a"; case 38: // I return "\x04\x4b\x74\x47\x61"; case 39: // J return "\x04\x4b\x74\x47\x62"; case 40: // K return "\x04\x4b\x74\x47\x63"; case 41: // L return "\x04\x4b\x74\x47\x64"; case 42: // M return "\x04\x4b\x74\x47\x65"; case 43: // N return "\x04\x4b\x74\x47\x66"; case 44: // O return "\x04\x4b\x74\x47\x67"; case 45: // P return "\x04\x4b\x74\x47\x68"; case 46: // Q return "\x04\x4b\x74\x47\x69"; case 47: // R return "\x04\x4b\x74\x47\x6a"; case 48: // S return "\x04\x4b\x74\x47\x6b"; case 49: // T return "\x04\x4b\x74\x47\x6c"; case 50: // U return "\x04\x4b\x74\x47\x6d"; case 51: // V return "\x04\x4b\x74\x47\x6e"; case 52: // W return "\x04\x4b\x74\x47\x6f"; case 53: // X return "\x04\x4b\x74\x47\x70"; case 54: // Y return "\x04\x4b\x74\x47\x71"; case 55: // Z return "\x04\x4b\x74\x47\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x47\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x47\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x47\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x47\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x47\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x47\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x47\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x47\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x47\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x47\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x47\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x47\x42\x30"; case 68: // AE return "\x05\x4b\x74\x47\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x47\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x47\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x47\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x47\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x47\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x47\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x47\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x47\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x47\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x47\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x47\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x47\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x47\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x47\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x47\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x47\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x47\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x47\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x47\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x47\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x47\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x47\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x47\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x47\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x47\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x47\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x47\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x47\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x47\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x47\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x47\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x47\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x47\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x47\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x47\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x47\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x47\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x47\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x47\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x47\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x47\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x47\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x47\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x47\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x47\x79"; case 114: // ENTER return "\x04\x4b\x74\x47\x7a"; case 115: // TAB return "\x04\x4b\x74\x47\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x47\x31"; case 117: // INSERT return "\x04\x4b\x74\x47\x32"; case 118: // DELETE return "\x04\x4b\x74\x47\x33"; case 119: // RIGHT return "\x04\x4b\x74\x47\x34"; case 120: // LEFT return "\x04\x4b\x74\x47\x35"; case 121: // DOWN return "\x04\x4b\x74\x47\x36"; case 122: // UP return "\x04\x4b\x74\x47\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x47\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x47\x39"; case 125: // HOME return "\x04\x4b\x74\x47\x2e"; case 126: // END return "\x04\x4b\x74\x47\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x47\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x47\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x47\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x47\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x47\x21"; case 132: // F1 return "\x04\x4b\x74\x47\x2f"; case 133: // F2 return "\x04\x4b\x74\x47\x2a"; case 134: // F3 return "\x04\x4b\x74\x47\x3f"; case 135: // F4 return "\x04\x4b\x74\x47\x26"; case 136: // F5 return "\x04\x4b\x74\x47\x3c"; case 137: // F6 return "\x04\x4b\x74\x47\x3e"; case 138: // F7 return "\x04\x4b\x74\x47\x28"; case 139: // F8 return "\x04\x4b\x74\x47\x29"; case 140: // F9 return "\x04\x4b\x74\x47\x5b"; case 141: // F10 return "\x04\x4b\x74\x47\x5d"; case 142: // F11 return "\x04\x4b\x74\x47\x7b"; case 143: // F12 return "\x04\x4b\x74\x47\x7d"; case 144: // F13 return "\x04\x4b\x74\x47\x40"; case 145: // F14 return "\x04\x4b\x74\x47\x25"; case 146: // F15 return "\x04\x4b\x74\x47\x24"; case 147: // F16 return "\x04\x4b\x74\x47\x23"; case 148: // F17 return "\x05\x4b\x74\x47\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x47\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x47\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x47\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x47\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x47\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x47\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x47\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x47\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x47\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x47\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x47\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x47\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x47\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x47\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x47\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x47\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x47\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x47\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x47\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x47\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x47\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x47\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x47\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x47\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x47\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x47\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x47\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x47\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x47\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x47\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x47\x42\x68"; } // end switch(key) case 0x7: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x48\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x48\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x48\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x48\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x48\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x48\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x48\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x48\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x48\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x48\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x48\x43"; case 11: // MINUS return "\x04\x4b\x74\x48\x44"; case 12: // PERIOD return "\x04\x4b\x74\x48\x45"; case 13: // SLASH return "\x04\x4b\x74\x48\x46"; case 14: // 0 return "\x04\x4b\x74\x48\x47"; case 15: // 1 return "\x04\x4b\x74\x48\x48"; case 16: // 2 return "\x04\x4b\x74\x48\x49"; case 17: // 3 return "\x04\x4b\x74\x48\x4a"; case 18: // 4 return "\x04\x4b\x74\x48\x4b"; case 19: // 5 return "\x04\x4b\x74\x48\x4c"; case 20: // 6 return "\x04\x4b\x74\x48\x4d"; case 21: // 7 return "\x04\x4b\x74\x48\x4e"; case 22: // 8 return "\x04\x4b\x74\x48\x4f"; case 23: // 9 return "\x04\x4b\x74\x48\x50"; case 24: // COLON return "\x05\x4b\x74\x48\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x48\x51"; case 26: // LESS return "\x05\x4b\x74\x48\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x48\x52"; case 28: // GREATER return "\x05\x4b\x74\x48\x42\x75"; case 29: // AT return "\x05\x4b\x74\x48\x42\x76"; case 30: // A return "\x04\x4b\x74\x48\x53"; case 31: // B return "\x04\x4b\x74\x48\x54"; case 32: // C return "\x04\x4b\x74\x48\x55"; case 33: // D return "\x04\x4b\x74\x48\x56"; case 34: // E return "\x04\x4b\x74\x48\x57"; case 35: // F return "\x04\x4b\x74\x48\x58"; case 36: // G return "\x04\x4b\x74\x48\x59"; case 37: // H return "\x04\x4b\x74\x48\x5a"; case 38: // I return "\x04\x4b\x74\x48\x61"; case 39: // J return "\x04\x4b\x74\x48\x62"; case 40: // K return "\x04\x4b\x74\x48\x63"; case 41: // L return "\x04\x4b\x74\x48\x64"; case 42: // M return "\x04\x4b\x74\x48\x65"; case 43: // N return "\x04\x4b\x74\x48\x66"; case 44: // O return "\x04\x4b\x74\x48\x67"; case 45: // P return "\x04\x4b\x74\x48\x68"; case 46: // Q return "\x04\x4b\x74\x48\x69"; case 47: // R return "\x04\x4b\x74\x48\x6a"; case 48: // S return "\x04\x4b\x74\x48\x6b"; case 49: // T return "\x04\x4b\x74\x48\x6c"; case 50: // U return "\x04\x4b\x74\x48\x6d"; case 51: // V return "\x04\x4b\x74\x48\x6e"; case 52: // W return "\x04\x4b\x74\x48\x6f"; case 53: // X return "\x04\x4b\x74\x48\x70"; case 54: // Y return "\x04\x4b\x74\x48\x71"; case 55: // Z return "\x04\x4b\x74\x48\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x48\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x48\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x48\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x48\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x48\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x48\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x48\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x48\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x48\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x48\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x48\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x48\x42\x30"; case 68: // AE return "\x05\x4b\x74\x48\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x48\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x48\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x48\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x48\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x48\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x48\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x48\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x48\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x48\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x48\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x48\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x48\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x48\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x48\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x48\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x48\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x48\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x48\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x48\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x48\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x48\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x48\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x48\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x48\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x48\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x48\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x48\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x48\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x48\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x48\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x48\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x48\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x48\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x48\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x48\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x48\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x48\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x48\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x48\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x48\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x48\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x48\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x48\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x48\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x48\x79"; case 114: // ENTER return "\x04\x4b\x74\x48\x7a"; case 115: // TAB return "\x04\x4b\x74\x48\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x48\x31"; case 117: // INSERT return "\x04\x4b\x74\x48\x32"; case 118: // DELETE return "\x04\x4b\x74\x48\x33"; case 119: // RIGHT return "\x04\x4b\x74\x48\x34"; case 120: // LEFT return "\x04\x4b\x74\x48\x35"; case 121: // DOWN return "\x04\x4b\x74\x48\x36"; case 122: // UP return "\x04\x4b\x74\x48\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x48\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x48\x39"; case 125: // HOME return "\x04\x4b\x74\x48\x2e"; case 126: // END return "\x04\x4b\x74\x48\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x48\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x48\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x48\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x48\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x48\x21"; case 132: // F1 return "\x04\x4b\x74\x48\x2f"; case 133: // F2 return "\x04\x4b\x74\x48\x2a"; case 134: // F3 return "\x04\x4b\x74\x48\x3f"; case 135: // F4 return "\x04\x4b\x74\x48\x26"; case 136: // F5 return "\x04\x4b\x74\x48\x3c"; case 137: // F6 return "\x04\x4b\x74\x48\x3e"; case 138: // F7 return "\x04\x4b\x74\x48\x28"; case 139: // F8 return "\x04\x4b\x74\x48\x29"; case 140: // F9 return "\x04\x4b\x74\x48\x5b"; case 141: // F10 return "\x04\x4b\x74\x48\x5d"; case 142: // F11 return "\x04\x4b\x74\x48\x7b"; case 143: // F12 return "\x04\x4b\x74\x48\x7d"; case 144: // F13 return "\x04\x4b\x74\x48\x40"; case 145: // F14 return "\x04\x4b\x74\x48\x25"; case 146: // F15 return "\x04\x4b\x74\x48\x24"; case 147: // F16 return "\x04\x4b\x74\x48\x23"; case 148: // F17 return "\x05\x4b\x74\x48\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x48\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x48\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x48\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x48\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x48\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x48\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x48\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x48\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x48\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x48\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x48\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x48\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x48\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x48\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x48\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x48\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x48\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x48\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x48\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x48\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x48\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x48\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x48\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x48\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x48\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x48\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x48\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x48\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x48\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x48\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x48\x42\x68"; } // end switch(key) case 0x8: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x49\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x49\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x49\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x49\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x49\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x49\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x49\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x49\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x49\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x49\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x49\x43"; case 11: // MINUS return "\x04\x4b\x74\x49\x44"; case 12: // PERIOD return "\x04\x4b\x74\x49\x45"; case 13: // SLASH return "\x04\x4b\x74\x49\x46"; case 14: // 0 return "\x04\x4b\x74\x49\x47"; case 15: // 1 return "\x04\x4b\x74\x49\x48"; case 16: // 2 return "\x04\x4b\x74\x49\x49"; case 17: // 3 return "\x04\x4b\x74\x49\x4a"; case 18: // 4 return "\x04\x4b\x74\x49\x4b"; case 19: // 5 return "\x04\x4b\x74\x49\x4c"; case 20: // 6 return "\x04\x4b\x74\x49\x4d"; case 21: // 7 return "\x04\x4b\x74\x49\x4e"; case 22: // 8 return "\x04\x4b\x74\x49\x4f"; case 23: // 9 return "\x04\x4b\x74\x49\x50"; case 24: // COLON return "\x05\x4b\x74\x49\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x49\x51"; case 26: // LESS return "\x05\x4b\x74\x49\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x49\x52"; case 28: // GREATER return "\x05\x4b\x74\x49\x42\x75"; case 29: // AT return "\x05\x4b\x74\x49\x42\x76"; case 30: // A return "\x04\x4b\x74\x49\x53"; case 31: // B return "\x04\x4b\x74\x49\x54"; case 32: // C return "\x04\x4b\x74\x49\x55"; case 33: // D return "\x04\x4b\x74\x49\x56"; case 34: // E return "\x04\x4b\x74\x49\x57"; case 35: // F return "\x04\x4b\x74\x49\x58"; case 36: // G return "\x04\x4b\x74\x49\x59"; case 37: // H return "\x04\x4b\x74\x49\x5a"; case 38: // I return "\x04\x4b\x74\x49\x61"; case 39: // J return "\x04\x4b\x74\x49\x62"; case 40: // K return "\x04\x4b\x74\x49\x63"; case 41: // L return "\x04\x4b\x74\x49\x64"; case 42: // M return "\x04\x4b\x74\x49\x65"; case 43: // N return "\x04\x4b\x74\x49\x66"; case 44: // O return "\x04\x4b\x74\x49\x67"; case 45: // P return "\x04\x4b\x74\x49\x68"; case 46: // Q return "\x04\x4b\x74\x49\x69"; case 47: // R return "\x04\x4b\x74\x49\x6a"; case 48: // S return "\x04\x4b\x74\x49\x6b"; case 49: // T return "\x04\x4b\x74\x49\x6c"; case 50: // U return "\x04\x4b\x74\x49\x6d"; case 51: // V return "\x04\x4b\x74\x49\x6e"; case 52: // W return "\x04\x4b\x74\x49\x6f"; case 53: // X return "\x04\x4b\x74\x49\x70"; case 54: // Y return "\x04\x4b\x74\x49\x71"; case 55: // Z return "\x04\x4b\x74\x49\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x49\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x49\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x49\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x49\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x49\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x49\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x49\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x49\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x49\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x49\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x49\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x49\x42\x30"; case 68: // AE return "\x05\x4b\x74\x49\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x49\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x49\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x49\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x49\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x49\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x49\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x49\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x49\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x49\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x49\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x49\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x49\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x49\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x49\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x49\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x49\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x49\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x49\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x49\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x49\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x49\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x49\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x49\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x49\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x49\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x49\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x49\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x49\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x49\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x49\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x49\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x49\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x49\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x49\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x49\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x49\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x49\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x49\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x49\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x49\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x49\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x49\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x49\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x49\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x49\x79"; case 114: // ENTER return "\x04\x4b\x74\x49\x7a"; case 115: // TAB return "\x04\x4b\x74\x49\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x49\x31"; case 117: // INSERT return "\x04\x4b\x74\x49\x32"; case 118: // DELETE return "\x04\x4b\x74\x49\x33"; case 119: // RIGHT return "\x04\x4b\x74\x49\x34"; case 120: // LEFT return "\x04\x4b\x74\x49\x35"; case 121: // DOWN return "\x04\x4b\x74\x49\x36"; case 122: // UP return "\x04\x4b\x74\x49\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x49\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x49\x39"; case 125: // HOME return "\x04\x4b\x74\x49\x2e"; case 126: // END return "\x04\x4b\x74\x49\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x49\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x49\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x49\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x49\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x49\x21"; case 132: // F1 return "\x04\x4b\x74\x49\x2f"; case 133: // F2 return "\x04\x4b\x74\x49\x2a"; case 134: // F3 return "\x04\x4b\x74\x49\x3f"; case 135: // F4 return "\x04\x4b\x74\x49\x26"; case 136: // F5 return "\x04\x4b\x74\x49\x3c"; case 137: // F6 return "\x04\x4b\x74\x49\x3e"; case 138: // F7 return "\x04\x4b\x74\x49\x28"; case 139: // F8 return "\x04\x4b\x74\x49\x29"; case 140: // F9 return "\x04\x4b\x74\x49\x5b"; case 141: // F10 return "\x04\x4b\x74\x49\x5d"; case 142: // F11 return "\x04\x4b\x74\x49\x7b"; case 143: // F12 return "\x04\x4b\x74\x49\x7d"; case 144: // F13 return "\x04\x4b\x74\x49\x40"; case 145: // F14 return "\x04\x4b\x74\x49\x25"; case 146: // F15 return "\x04\x4b\x74\x49\x24"; case 147: // F16 return "\x04\x4b\x74\x49\x23"; case 148: // F17 return "\x05\x4b\x74\x49\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x49\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x49\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x49\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x49\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x49\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x49\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x49\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x49\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x49\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x49\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x49\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x49\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x49\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x49\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x49\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x49\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x49\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x49\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x49\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x49\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x49\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x49\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x49\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x49\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x49\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x49\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x49\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x49\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x49\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x49\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x49\x42\x68"; } // end switch(key) case 0x9: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4a\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x4a\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x4a\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x4a\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x4a\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x4a\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x4a\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x4a\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x4a\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x4a\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x4a\x43"; case 11: // MINUS return "\x04\x4b\x74\x4a\x44"; case 12: // PERIOD return "\x04\x4b\x74\x4a\x45"; case 13: // SLASH return "\x04\x4b\x74\x4a\x46"; case 14: // 0 return "\x04\x4b\x74\x4a\x47"; case 15: // 1 return "\x04\x4b\x74\x4a\x48"; case 16: // 2 return "\x04\x4b\x74\x4a\x49"; case 17: // 3 return "\x04\x4b\x74\x4a\x4a"; case 18: // 4 return "\x04\x4b\x74\x4a\x4b"; case 19: // 5 return "\x04\x4b\x74\x4a\x4c"; case 20: // 6 return "\x04\x4b\x74\x4a\x4d"; case 21: // 7 return "\x04\x4b\x74\x4a\x4e"; case 22: // 8 return "\x04\x4b\x74\x4a\x4f"; case 23: // 9 return "\x04\x4b\x74\x4a\x50"; case 24: // COLON return "\x05\x4b\x74\x4a\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x4a\x51"; case 26: // LESS return "\x05\x4b\x74\x4a\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x4a\x52"; case 28: // GREATER return "\x05\x4b\x74\x4a\x42\x75"; case 29: // AT return "\x05\x4b\x74\x4a\x42\x76"; case 30: // A return "\x04\x4b\x74\x4a\x53"; case 31: // B return "\x04\x4b\x74\x4a\x54"; case 32: // C return "\x04\x4b\x74\x4a\x55"; case 33: // D return "\x04\x4b\x74\x4a\x56"; case 34: // E return "\x04\x4b\x74\x4a\x57"; case 35: // F return "\x04\x4b\x74\x4a\x58"; case 36: // G return "\x04\x4b\x74\x4a\x59"; case 37: // H return "\x04\x4b\x74\x4a\x5a"; case 38: // I return "\x04\x4b\x74\x4a\x61"; case 39: // J return "\x04\x4b\x74\x4a\x62"; case 40: // K return "\x04\x4b\x74\x4a\x63"; case 41: // L return "\x04\x4b\x74\x4a\x64"; case 42: // M return "\x04\x4b\x74\x4a\x65"; case 43: // N return "\x04\x4b\x74\x4a\x66"; case 44: // O return "\x04\x4b\x74\x4a\x67"; case 45: // P return "\x04\x4b\x74\x4a\x68"; case 46: // Q return "\x04\x4b\x74\x4a\x69"; case 47: // R return "\x04\x4b\x74\x4a\x6a"; case 48: // S return "\x04\x4b\x74\x4a\x6b"; case 49: // T return "\x04\x4b\x74\x4a\x6c"; case 50: // U return "\x04\x4b\x74\x4a\x6d"; case 51: // V return "\x04\x4b\x74\x4a\x6e"; case 52: // W return "\x04\x4b\x74\x4a\x6f"; case 53: // X return "\x04\x4b\x74\x4a\x70"; case 54: // Y return "\x04\x4b\x74\x4a\x71"; case 55: // Z return "\x04\x4b\x74\x4a\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4a\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x4a\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4a\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x4a\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4a\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x4a\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x4a\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x4a\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x4a\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x4a\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x4a\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x4a\x42\x30"; case 68: // AE return "\x05\x4b\x74\x4a\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x4a\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x4a\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x4a\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x4a\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x4a\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x4a\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x4a\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x4a\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x4a\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x4a\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x4a\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x4a\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x4a\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x4a\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x4a\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x4a\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x4a\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x4a\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x4a\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x4a\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x4a\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x4a\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x4a\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x4a\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x4a\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x4a\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x4a\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x4a\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x4a\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x4a\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x4a\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x4a\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x4a\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x4a\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x4a\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x4a\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x4a\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x4a\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x4a\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x4a\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x4a\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x4a\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x4a\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x4a\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x4a\x79"; case 114: // ENTER return "\x04\x4b\x74\x4a\x7a"; case 115: // TAB return "\x04\x4b\x74\x4a\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x4a\x31"; case 117: // INSERT return "\x04\x4b\x74\x4a\x32"; case 118: // DELETE return "\x04\x4b\x74\x4a\x33"; case 119: // RIGHT return "\x04\x4b\x74\x4a\x34"; case 120: // LEFT return "\x04\x4b\x74\x4a\x35"; case 121: // DOWN return "\x04\x4b\x74\x4a\x36"; case 122: // UP return "\x04\x4b\x74\x4a\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x4a\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x4a\x39"; case 125: // HOME return "\x04\x4b\x74\x4a\x2e"; case 126: // END return "\x04\x4b\x74\x4a\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x4a\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4a\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x4a\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4a\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x4a\x21"; case 132: // F1 return "\x04\x4b\x74\x4a\x2f"; case 133: // F2 return "\x04\x4b\x74\x4a\x2a"; case 134: // F3 return "\x04\x4b\x74\x4a\x3f"; case 135: // F4 return "\x04\x4b\x74\x4a\x26"; case 136: // F5 return "\x04\x4b\x74\x4a\x3c"; case 137: // F6 return "\x04\x4b\x74\x4a\x3e"; case 138: // F7 return "\x04\x4b\x74\x4a\x28"; case 139: // F8 return "\x04\x4b\x74\x4a\x29"; case 140: // F9 return "\x04\x4b\x74\x4a\x5b"; case 141: // F10 return "\x04\x4b\x74\x4a\x5d"; case 142: // F11 return "\x04\x4b\x74\x4a\x7b"; case 143: // F12 return "\x04\x4b\x74\x4a\x7d"; case 144: // F13 return "\x04\x4b\x74\x4a\x40"; case 145: // F14 return "\x04\x4b\x74\x4a\x25"; case 146: // F15 return "\x04\x4b\x74\x4a\x24"; case 147: // F16 return "\x04\x4b\x74\x4a\x23"; case 148: // F17 return "\x05\x4b\x74\x4a\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x4a\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x4a\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x4a\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x4a\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x4a\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x4a\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x4a\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x4a\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x4a\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x4a\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x4a\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x4a\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x4a\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x4a\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x4a\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x4a\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x4a\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x4a\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x4a\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x4a\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4a\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4a\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x4a\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x4a\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x4a\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4a\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x4a\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x4a\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4a\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x4a\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4a\x42\x68"; } // end switch(key) case 0xa: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4d\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x4d\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x4d\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x4d\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x4d\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x4d\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x4d\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x4d\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x4d\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x4d\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x4d\x43"; case 11: // MINUS return "\x04\x4b\x74\x4d\x44"; case 12: // PERIOD return "\x04\x4b\x74\x4d\x45"; case 13: // SLASH return "\x04\x4b\x74\x4d\x46"; case 14: // 0 return "\x04\x4b\x74\x4d\x47"; case 15: // 1 return "\x04\x4b\x74\x4d\x48"; case 16: // 2 return "\x04\x4b\x74\x4d\x49"; case 17: // 3 return "\x04\x4b\x74\x4d\x4a"; case 18: // 4 return "\x04\x4b\x74\x4d\x4b"; case 19: // 5 return "\x04\x4b\x74\x4d\x4c"; case 20: // 6 return "\x04\x4b\x74\x4d\x4d"; case 21: // 7 return "\x04\x4b\x74\x4d\x4e"; case 22: // 8 return "\x04\x4b\x74\x4d\x4f"; case 23: // 9 return "\x04\x4b\x74\x4d\x50"; case 24: // COLON return "\x05\x4b\x74\x4d\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x4d\x51"; case 26: // LESS return "\x05\x4b\x74\x4d\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x4d\x52"; case 28: // GREATER return "\x05\x4b\x74\x4d\x42\x75"; case 29: // AT return "\x05\x4b\x74\x4d\x42\x76"; case 30: // A return "\x04\x4b\x74\x4d\x53"; case 31: // B return "\x04\x4b\x74\x4d\x54"; case 32: // C return "\x04\x4b\x74\x4d\x55"; case 33: // D return "\x04\x4b\x74\x4d\x56"; case 34: // E return "\x04\x4b\x74\x4d\x57"; case 35: // F return "\x04\x4b\x74\x4d\x58"; case 36: // G return "\x04\x4b\x74\x4d\x59"; case 37: // H return "\x04\x4b\x74\x4d\x5a"; case 38: // I return "\x04\x4b\x74\x4d\x61"; case 39: // J return "\x04\x4b\x74\x4d\x62"; case 40: // K return "\x04\x4b\x74\x4d\x63"; case 41: // L return "\x04\x4b\x74\x4d\x64"; case 42: // M return "\x04\x4b\x74\x4d\x65"; case 43: // N return "\x04\x4b\x74\x4d\x66"; case 44: // O return "\x04\x4b\x74\x4d\x67"; case 45: // P return "\x04\x4b\x74\x4d\x68"; case 46: // Q return "\x04\x4b\x74\x4d\x69"; case 47: // R return "\x04\x4b\x74\x4d\x6a"; case 48: // S return "\x04\x4b\x74\x4d\x6b"; case 49: // T return "\x04\x4b\x74\x4d\x6c"; case 50: // U return "\x04\x4b\x74\x4d\x6d"; case 51: // V return "\x04\x4b\x74\x4d\x6e"; case 52: // W return "\x04\x4b\x74\x4d\x6f"; case 53: // X return "\x04\x4b\x74\x4d\x70"; case 54: // Y return "\x04\x4b\x74\x4d\x71"; case 55: // Z return "\x04\x4b\x74\x4d\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4d\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x4d\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4d\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x4d\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4d\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x4d\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x4d\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x4d\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x4d\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x4d\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x4d\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x4d\x42\x30"; case 68: // AE return "\x05\x4b\x74\x4d\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x4d\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x4d\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x4d\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x4d\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x4d\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x4d\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x4d\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x4d\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x4d\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x4d\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x4d\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x4d\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x4d\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x4d\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x4d\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x4d\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x4d\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x4d\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x4d\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x4d\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x4d\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x4d\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x4d\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x4d\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x4d\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x4d\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x4d\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x4d\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x4d\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x4d\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x4d\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x4d\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x4d\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x4d\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x4d\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x4d\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x4d\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x4d\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x4d\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x4d\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x4d\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x4d\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x4d\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x4d\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x4d\x79"; case 114: // ENTER return "\x04\x4b\x74\x4d\x7a"; case 115: // TAB return "\x04\x4b\x74\x4d\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x4d\x31"; case 117: // INSERT return "\x04\x4b\x74\x4d\x32"; case 118: // DELETE return "\x04\x4b\x74\x4d\x33"; case 119: // RIGHT return "\x04\x4b\x74\x4d\x34"; case 120: // LEFT return "\x04\x4b\x74\x4d\x35"; case 121: // DOWN return "\x04\x4b\x74\x4d\x36"; case 122: // UP return "\x04\x4b\x74\x4d\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x4d\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x4d\x39"; case 125: // HOME return "\x04\x4b\x74\x4d\x2e"; case 126: // END return "\x04\x4b\x74\x4d\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x4d\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4d\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x4d\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4d\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x4d\x21"; case 132: // F1 return "\x04\x4b\x74\x4d\x2f"; case 133: // F2 return "\x04\x4b\x74\x4d\x2a"; case 134: // F3 return "\x04\x4b\x74\x4d\x3f"; case 135: // F4 return "\x04\x4b\x74\x4d\x26"; case 136: // F5 return "\x04\x4b\x74\x4d\x3c"; case 137: // F6 return "\x04\x4b\x74\x4d\x3e"; case 138: // F7 return "\x04\x4b\x74\x4d\x28"; case 139: // F8 return "\x04\x4b\x74\x4d\x29"; case 140: // F9 return "\x04\x4b\x74\x4d\x5b"; case 141: // F10 return "\x04\x4b\x74\x4d\x5d"; case 142: // F11 return "\x04\x4b\x74\x4d\x7b"; case 143: // F12 return "\x04\x4b\x74\x4d\x7d"; case 144: // F13 return "\x04\x4b\x74\x4d\x40"; case 145: // F14 return "\x04\x4b\x74\x4d\x25"; case 146: // F15 return "\x04\x4b\x74\x4d\x24"; case 147: // F16 return "\x04\x4b\x74\x4d\x23"; case 148: // F17 return "\x05\x4b\x74\x4d\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x4d\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x4d\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x4d\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x4d\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x4d\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x4d\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x4d\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x4d\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x4d\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x4d\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x4d\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x4d\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x4d\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x4d\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x4d\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x4d\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x4d\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x4d\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x4d\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x4d\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4d\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4d\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x4d\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x4d\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x4d\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4d\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x4d\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x4d\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4d\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x4d\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4d\x42\x68"; } // end switch(key) case 0xb: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4e\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x4e\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x4e\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x4e\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x4e\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x4e\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x4e\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x4e\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x4e\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x4e\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x4e\x43"; case 11: // MINUS return "\x04\x4b\x74\x4e\x44"; case 12: // PERIOD return "\x04\x4b\x74\x4e\x45"; case 13: // SLASH return "\x04\x4b\x74\x4e\x46"; case 14: // 0 return "\x04\x4b\x74\x4e\x47"; case 15: // 1 return "\x04\x4b\x74\x4e\x48"; case 16: // 2 return "\x04\x4b\x74\x4e\x49"; case 17: // 3 return "\x04\x4b\x74\x4e\x4a"; case 18: // 4 return "\x04\x4b\x74\x4e\x4b"; case 19: // 5 return "\x04\x4b\x74\x4e\x4c"; case 20: // 6 return "\x04\x4b\x74\x4e\x4d"; case 21: // 7 return "\x04\x4b\x74\x4e\x4e"; case 22: // 8 return "\x04\x4b\x74\x4e\x4f"; case 23: // 9 return "\x04\x4b\x74\x4e\x50"; case 24: // COLON return "\x05\x4b\x74\x4e\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x4e\x51"; case 26: // LESS return "\x05\x4b\x74\x4e\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x4e\x52"; case 28: // GREATER return "\x05\x4b\x74\x4e\x42\x75"; case 29: // AT return "\x05\x4b\x74\x4e\x42\x76"; case 30: // A return "\x04\x4b\x74\x4e\x53"; case 31: // B return "\x04\x4b\x74\x4e\x54"; case 32: // C return "\x04\x4b\x74\x4e\x55"; case 33: // D return "\x04\x4b\x74\x4e\x56"; case 34: // E return "\x04\x4b\x74\x4e\x57"; case 35: // F return "\x04\x4b\x74\x4e\x58"; case 36: // G return "\x04\x4b\x74\x4e\x59"; case 37: // H return "\x04\x4b\x74\x4e\x5a"; case 38: // I return "\x04\x4b\x74\x4e\x61"; case 39: // J return "\x04\x4b\x74\x4e\x62"; case 40: // K return "\x04\x4b\x74\x4e\x63"; case 41: // L return "\x04\x4b\x74\x4e\x64"; case 42: // M return "\x04\x4b\x74\x4e\x65"; case 43: // N return "\x04\x4b\x74\x4e\x66"; case 44: // O return "\x04\x4b\x74\x4e\x67"; case 45: // P return "\x04\x4b\x74\x4e\x68"; case 46: // Q return "\x04\x4b\x74\x4e\x69"; case 47: // R return "\x04\x4b\x74\x4e\x6a"; case 48: // S return "\x04\x4b\x74\x4e\x6b"; case 49: // T return "\x04\x4b\x74\x4e\x6c"; case 50: // U return "\x04\x4b\x74\x4e\x6d"; case 51: // V return "\x04\x4b\x74\x4e\x6e"; case 52: // W return "\x04\x4b\x74\x4e\x6f"; case 53: // X return "\x04\x4b\x74\x4e\x70"; case 54: // Y return "\x04\x4b\x74\x4e\x71"; case 55: // Z return "\x04\x4b\x74\x4e\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4e\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x4e\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4e\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x4e\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4e\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x4e\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x4e\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x4e\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x4e\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x4e\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x4e\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x4e\x42\x30"; case 68: // AE return "\x05\x4b\x74\x4e\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x4e\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x4e\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x4e\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x4e\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x4e\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x4e\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x4e\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x4e\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x4e\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x4e\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x4e\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x4e\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x4e\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x4e\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x4e\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x4e\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x4e\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x4e\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x4e\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x4e\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x4e\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x4e\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x4e\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x4e\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x4e\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x4e\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x4e\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x4e\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x4e\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x4e\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x4e\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x4e\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x4e\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x4e\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x4e\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x4e\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x4e\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x4e\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x4e\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x4e\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x4e\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x4e\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x4e\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x4e\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x4e\x79"; case 114: // ENTER return "\x04\x4b\x74\x4e\x7a"; case 115: // TAB return "\x04\x4b\x74\x4e\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x4e\x31"; case 117: // INSERT return "\x04\x4b\x74\x4e\x32"; case 118: // DELETE return "\x04\x4b\x74\x4e\x33"; case 119: // RIGHT return "\x04\x4b\x74\x4e\x34"; case 120: // LEFT return "\x04\x4b\x74\x4e\x35"; case 121: // DOWN return "\x04\x4b\x74\x4e\x36"; case 122: // UP return "\x04\x4b\x74\x4e\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x4e\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x4e\x39"; case 125: // HOME return "\x04\x4b\x74\x4e\x2e"; case 126: // END return "\x04\x4b\x74\x4e\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x4e\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4e\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x4e\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4e\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x4e\x21"; case 132: // F1 return "\x04\x4b\x74\x4e\x2f"; case 133: // F2 return "\x04\x4b\x74\x4e\x2a"; case 134: // F3 return "\x04\x4b\x74\x4e\x3f"; case 135: // F4 return "\x04\x4b\x74\x4e\x26"; case 136: // F5 return "\x04\x4b\x74\x4e\x3c"; case 137: // F6 return "\x04\x4b\x74\x4e\x3e"; case 138: // F7 return "\x04\x4b\x74\x4e\x28"; case 139: // F8 return "\x04\x4b\x74\x4e\x29"; case 140: // F9 return "\x04\x4b\x74\x4e\x5b"; case 141: // F10 return "\x04\x4b\x74\x4e\x5d"; case 142: // F11 return "\x04\x4b\x74\x4e\x7b"; case 143: // F12 return "\x04\x4b\x74\x4e\x7d"; case 144: // F13 return "\x04\x4b\x74\x4e\x40"; case 145: // F14 return "\x04\x4b\x74\x4e\x25"; case 146: // F15 return "\x04\x4b\x74\x4e\x24"; case 147: // F16 return "\x04\x4b\x74\x4e\x23"; case 148: // F17 return "\x05\x4b\x74\x4e\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x4e\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x4e\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x4e\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x4e\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x4e\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x4e\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x4e\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x4e\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x4e\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x4e\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x4e\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x4e\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x4e\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x4e\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x4e\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x4e\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x4e\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x4e\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x4e\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x4e\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4e\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4e\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x4e\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x4e\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x4e\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4e\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x4e\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x4e\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4e\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x4e\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4e\x42\x68"; } // end switch(key) case 0xc: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4b\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x4b\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x4b\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x4b\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x4b\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x4b\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x4b\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x4b\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x4b\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x4b\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x4b\x43"; case 11: // MINUS return "\x04\x4b\x74\x4b\x44"; case 12: // PERIOD return "\x04\x4b\x74\x4b\x45"; case 13: // SLASH return "\x04\x4b\x74\x4b\x46"; case 14: // 0 return "\x04\x4b\x74\x4b\x47"; case 15: // 1 return "\x04\x4b\x74\x4b\x48"; case 16: // 2 return "\x04\x4b\x74\x4b\x49"; case 17: // 3 return "\x04\x4b\x74\x4b\x4a"; case 18: // 4 return "\x04\x4b\x74\x4b\x4b"; case 19: // 5 return "\x04\x4b\x74\x4b\x4c"; case 20: // 6 return "\x04\x4b\x74\x4b\x4d"; case 21: // 7 return "\x04\x4b\x74\x4b\x4e"; case 22: // 8 return "\x04\x4b\x74\x4b\x4f"; case 23: // 9 return "\x04\x4b\x74\x4b\x50"; case 24: // COLON return "\x05\x4b\x74\x4b\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x4b\x51"; case 26: // LESS return "\x05\x4b\x74\x4b\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x4b\x52"; case 28: // GREATER return "\x05\x4b\x74\x4b\x42\x75"; case 29: // AT return "\x05\x4b\x74\x4b\x42\x76"; case 30: // A return "\x04\x4b\x74\x4b\x53"; case 31: // B return "\x04\x4b\x74\x4b\x54"; case 32: // C return "\x04\x4b\x74\x4b\x55"; case 33: // D return "\x04\x4b\x74\x4b\x56"; case 34: // E return "\x04\x4b\x74\x4b\x57"; case 35: // F return "\x04\x4b\x74\x4b\x58"; case 36: // G return "\x04\x4b\x74\x4b\x59"; case 37: // H return "\x04\x4b\x74\x4b\x5a"; case 38: // I return "\x04\x4b\x74\x4b\x61"; case 39: // J return "\x04\x4b\x74\x4b\x62"; case 40: // K return "\x04\x4b\x74\x4b\x63"; case 41: // L return "\x04\x4b\x74\x4b\x64"; case 42: // M return "\x04\x4b\x74\x4b\x65"; case 43: // N return "\x04\x4b\x74\x4b\x66"; case 44: // O return "\x04\x4b\x74\x4b\x67"; case 45: // P return "\x04\x4b\x74\x4b\x68"; case 46: // Q return "\x04\x4b\x74\x4b\x69"; case 47: // R return "\x04\x4b\x74\x4b\x6a"; case 48: // S return "\x04\x4b\x74\x4b\x6b"; case 49: // T return "\x04\x4b\x74\x4b\x6c"; case 50: // U return "\x04\x4b\x74\x4b\x6d"; case 51: // V return "\x04\x4b\x74\x4b\x6e"; case 52: // W return "\x04\x4b\x74\x4b\x6f"; case 53: // X return "\x04\x4b\x74\x4b\x70"; case 54: // Y return "\x04\x4b\x74\x4b\x71"; case 55: // Z return "\x04\x4b\x74\x4b\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4b\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x4b\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4b\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x4b\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4b\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x4b\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x4b\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x4b\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x4b\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x4b\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x4b\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x4b\x42\x30"; case 68: // AE return "\x05\x4b\x74\x4b\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x4b\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x4b\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x4b\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x4b\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x4b\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x4b\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x4b\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x4b\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x4b\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x4b\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x4b\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x4b\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x4b\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x4b\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x4b\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x4b\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x4b\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x4b\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x4b\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x4b\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x4b\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x4b\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x4b\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x4b\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x4b\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x4b\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x4b\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x4b\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x4b\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x4b\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x4b\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x4b\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x4b\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x4b\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x4b\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x4b\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x4b\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x4b\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x4b\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x4b\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x4b\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x4b\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x4b\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x4b\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x4b\x79"; case 114: // ENTER return "\x04\x4b\x74\x4b\x7a"; case 115: // TAB return "\x04\x4b\x74\x4b\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x4b\x31"; case 117: // INSERT return "\x04\x4b\x74\x4b\x32"; case 118: // DELETE return "\x04\x4b\x74\x4b\x33"; case 119: // RIGHT return "\x04\x4b\x74\x4b\x34"; case 120: // LEFT return "\x04\x4b\x74\x4b\x35"; case 121: // DOWN return "\x04\x4b\x74\x4b\x36"; case 122: // UP return "\x04\x4b\x74\x4b\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x4b\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x4b\x39"; case 125: // HOME return "\x04\x4b\x74\x4b\x2e"; case 126: // END return "\x04\x4b\x74\x4b\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x4b\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4b\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x4b\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4b\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x4b\x21"; case 132: // F1 return "\x04\x4b\x74\x4b\x2f"; case 133: // F2 return "\x04\x4b\x74\x4b\x2a"; case 134: // F3 return "\x04\x4b\x74\x4b\x3f"; case 135: // F4 return "\x04\x4b\x74\x4b\x26"; case 136: // F5 return "\x04\x4b\x74\x4b\x3c"; case 137: // F6 return "\x04\x4b\x74\x4b\x3e"; case 138: // F7 return "\x04\x4b\x74\x4b\x28"; case 139: // F8 return "\x04\x4b\x74\x4b\x29"; case 140: // F9 return "\x04\x4b\x74\x4b\x5b"; case 141: // F10 return "\x04\x4b\x74\x4b\x5d"; case 142: // F11 return "\x04\x4b\x74\x4b\x7b"; case 143: // F12 return "\x04\x4b\x74\x4b\x7d"; case 144: // F13 return "\x04\x4b\x74\x4b\x40"; case 145: // F14 return "\x04\x4b\x74\x4b\x25"; case 146: // F15 return "\x04\x4b\x74\x4b\x24"; case 147: // F16 return "\x04\x4b\x74\x4b\x23"; case 148: // F17 return "\x05\x4b\x74\x4b\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x4b\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x4b\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x4b\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x4b\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x4b\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x4b\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x4b\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x4b\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x4b\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x4b\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x4b\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x4b\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x4b\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x4b\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x4b\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x4b\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x4b\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x4b\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x4b\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x4b\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4b\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4b\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x4b\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x4b\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x4b\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4b\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x4b\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x4b\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4b\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x4b\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4b\x42\x68"; } // end switch(key) case 0xd: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4c\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x4c\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x4c\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x4c\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x4c\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x4c\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x4c\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x4c\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x4c\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x4c\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x4c\x43"; case 11: // MINUS return "\x04\x4b\x74\x4c\x44"; case 12: // PERIOD return "\x04\x4b\x74\x4c\x45"; case 13: // SLASH return "\x04\x4b\x74\x4c\x46"; case 14: // 0 return "\x04\x4b\x74\x4c\x47"; case 15: // 1 return "\x04\x4b\x74\x4c\x48"; case 16: // 2 return "\x04\x4b\x74\x4c\x49"; case 17: // 3 return "\x04\x4b\x74\x4c\x4a"; case 18: // 4 return "\x04\x4b\x74\x4c\x4b"; case 19: // 5 return "\x04\x4b\x74\x4c\x4c"; case 20: // 6 return "\x04\x4b\x74\x4c\x4d"; case 21: // 7 return "\x04\x4b\x74\x4c\x4e"; case 22: // 8 return "\x04\x4b\x74\x4c\x4f"; case 23: // 9 return "\x04\x4b\x74\x4c\x50"; case 24: // COLON return "\x05\x4b\x74\x4c\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x4c\x51"; case 26: // LESS return "\x05\x4b\x74\x4c\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x4c\x52"; case 28: // GREATER return "\x05\x4b\x74\x4c\x42\x75"; case 29: // AT return "\x05\x4b\x74\x4c\x42\x76"; case 30: // A return "\x04\x4b\x74\x4c\x53"; case 31: // B return "\x04\x4b\x74\x4c\x54"; case 32: // C return "\x04\x4b\x74\x4c\x55"; case 33: // D return "\x04\x4b\x74\x4c\x56"; case 34: // E return "\x04\x4b\x74\x4c\x57"; case 35: // F return "\x04\x4b\x74\x4c\x58"; case 36: // G return "\x04\x4b\x74\x4c\x59"; case 37: // H return "\x04\x4b\x74\x4c\x5a"; case 38: // I return "\x04\x4b\x74\x4c\x61"; case 39: // J return "\x04\x4b\x74\x4c\x62"; case 40: // K return "\x04\x4b\x74\x4c\x63"; case 41: // L return "\x04\x4b\x74\x4c\x64"; case 42: // M return "\x04\x4b\x74\x4c\x65"; case 43: // N return "\x04\x4b\x74\x4c\x66"; case 44: // O return "\x04\x4b\x74\x4c\x67"; case 45: // P return "\x04\x4b\x74\x4c\x68"; case 46: // Q return "\x04\x4b\x74\x4c\x69"; case 47: // R return "\x04\x4b\x74\x4c\x6a"; case 48: // S return "\x04\x4b\x74\x4c\x6b"; case 49: // T return "\x04\x4b\x74\x4c\x6c"; case 50: // U return "\x04\x4b\x74\x4c\x6d"; case 51: // V return "\x04\x4b\x74\x4c\x6e"; case 52: // W return "\x04\x4b\x74\x4c\x6f"; case 53: // X return "\x04\x4b\x74\x4c\x70"; case 54: // Y return "\x04\x4b\x74\x4c\x71"; case 55: // Z return "\x04\x4b\x74\x4c\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4c\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x4c\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4c\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x4c\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4c\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x4c\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x4c\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x4c\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x4c\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x4c\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x4c\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x4c\x42\x30"; case 68: // AE return "\x05\x4b\x74\x4c\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x4c\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x4c\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x4c\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x4c\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x4c\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x4c\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x4c\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x4c\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x4c\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x4c\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x4c\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x4c\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x4c\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x4c\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x4c\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x4c\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x4c\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x4c\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x4c\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x4c\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x4c\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x4c\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x4c\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x4c\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x4c\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x4c\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x4c\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x4c\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x4c\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x4c\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x4c\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x4c\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x4c\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x4c\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x4c\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x4c\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x4c\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x4c\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x4c\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x4c\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x4c\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x4c\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x4c\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x4c\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x4c\x79"; case 114: // ENTER return "\x04\x4b\x74\x4c\x7a"; case 115: // TAB return "\x04\x4b\x74\x4c\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x4c\x31"; case 117: // INSERT return "\x04\x4b\x74\x4c\x32"; case 118: // DELETE return "\x04\x4b\x74\x4c\x33"; case 119: // RIGHT return "\x04\x4b\x74\x4c\x34"; case 120: // LEFT return "\x04\x4b\x74\x4c\x35"; case 121: // DOWN return "\x04\x4b\x74\x4c\x36"; case 122: // UP return "\x04\x4b\x74\x4c\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x4c\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x4c\x39"; case 125: // HOME return "\x04\x4b\x74\x4c\x2e"; case 126: // END return "\x04\x4b\x74\x4c\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x4c\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4c\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x4c\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4c\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x4c\x21"; case 132: // F1 return "\x04\x4b\x74\x4c\x2f"; case 133: // F2 return "\x04\x4b\x74\x4c\x2a"; case 134: // F3 return "\x04\x4b\x74\x4c\x3f"; case 135: // F4 return "\x04\x4b\x74\x4c\x26"; case 136: // F5 return "\x04\x4b\x74\x4c\x3c"; case 137: // F6 return "\x04\x4b\x74\x4c\x3e"; case 138: // F7 return "\x04\x4b\x74\x4c\x28"; case 139: // F8 return "\x04\x4b\x74\x4c\x29"; case 140: // F9 return "\x04\x4b\x74\x4c\x5b"; case 141: // F10 return "\x04\x4b\x74\x4c\x5d"; case 142: // F11 return "\x04\x4b\x74\x4c\x7b"; case 143: // F12 return "\x04\x4b\x74\x4c\x7d"; case 144: // F13 return "\x04\x4b\x74\x4c\x40"; case 145: // F14 return "\x04\x4b\x74\x4c\x25"; case 146: // F15 return "\x04\x4b\x74\x4c\x24"; case 147: // F16 return "\x04\x4b\x74\x4c\x23"; case 148: // F17 return "\x05\x4b\x74\x4c\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x4c\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x4c\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x4c\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x4c\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x4c\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x4c\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x4c\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x4c\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x4c\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x4c\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x4c\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x4c\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x4c\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x4c\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x4c\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x4c\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x4c\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x4c\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x4c\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x4c\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4c\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4c\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x4c\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x4c\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x4c\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4c\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x4c\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x4c\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4c\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x4c\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4c\x42\x68"; } // end switch(key) case 0xe: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4f\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x4f\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x4f\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x4f\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x4f\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x4f\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x4f\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x4f\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x4f\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x4f\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x4f\x43"; case 11: // MINUS return "\x04\x4b\x74\x4f\x44"; case 12: // PERIOD return "\x04\x4b\x74\x4f\x45"; case 13: // SLASH return "\x04\x4b\x74\x4f\x46"; case 14: // 0 return "\x04\x4b\x74\x4f\x47"; case 15: // 1 return "\x04\x4b\x74\x4f\x48"; case 16: // 2 return "\x04\x4b\x74\x4f\x49"; case 17: // 3 return "\x04\x4b\x74\x4f\x4a"; case 18: // 4 return "\x04\x4b\x74\x4f\x4b"; case 19: // 5 return "\x04\x4b\x74\x4f\x4c"; case 20: // 6 return "\x04\x4b\x74\x4f\x4d"; case 21: // 7 return "\x04\x4b\x74\x4f\x4e"; case 22: // 8 return "\x04\x4b\x74\x4f\x4f"; case 23: // 9 return "\x04\x4b\x74\x4f\x50"; case 24: // COLON return "\x05\x4b\x74\x4f\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x4f\x51"; case 26: // LESS return "\x05\x4b\x74\x4f\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x4f\x52"; case 28: // GREATER return "\x05\x4b\x74\x4f\x42\x75"; case 29: // AT return "\x05\x4b\x74\x4f\x42\x76"; case 30: // A return "\x04\x4b\x74\x4f\x53"; case 31: // B return "\x04\x4b\x74\x4f\x54"; case 32: // C return "\x04\x4b\x74\x4f\x55"; case 33: // D return "\x04\x4b\x74\x4f\x56"; case 34: // E return "\x04\x4b\x74\x4f\x57"; case 35: // F return "\x04\x4b\x74\x4f\x58"; case 36: // G return "\x04\x4b\x74\x4f\x59"; case 37: // H return "\x04\x4b\x74\x4f\x5a"; case 38: // I return "\x04\x4b\x74\x4f\x61"; case 39: // J return "\x04\x4b\x74\x4f\x62"; case 40: // K return "\x04\x4b\x74\x4f\x63"; case 41: // L return "\x04\x4b\x74\x4f\x64"; case 42: // M return "\x04\x4b\x74\x4f\x65"; case 43: // N return "\x04\x4b\x74\x4f\x66"; case 44: // O return "\x04\x4b\x74\x4f\x67"; case 45: // P return "\x04\x4b\x74\x4f\x68"; case 46: // Q return "\x04\x4b\x74\x4f\x69"; case 47: // R return "\x04\x4b\x74\x4f\x6a"; case 48: // S return "\x04\x4b\x74\x4f\x6b"; case 49: // T return "\x04\x4b\x74\x4f\x6c"; case 50: // U return "\x04\x4b\x74\x4f\x6d"; case 51: // V return "\x04\x4b\x74\x4f\x6e"; case 52: // W return "\x04\x4b\x74\x4f\x6f"; case 53: // X return "\x04\x4b\x74\x4f\x70"; case 54: // Y return "\x04\x4b\x74\x4f\x71"; case 55: // Z return "\x04\x4b\x74\x4f\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4f\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x4f\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4f\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x4f\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4f\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x4f\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x4f\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x4f\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x4f\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x4f\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x4f\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x4f\x42\x30"; case 68: // AE return "\x05\x4b\x74\x4f\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x4f\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x4f\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x4f\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x4f\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x4f\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x4f\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x4f\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x4f\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x4f\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x4f\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x4f\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x4f\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x4f\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x4f\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x4f\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x4f\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x4f\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x4f\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x4f\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x4f\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x4f\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x4f\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x4f\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x4f\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x4f\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x4f\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x4f\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x4f\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x4f\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x4f\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x4f\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x4f\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x4f\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x4f\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x4f\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x4f\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x4f\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x4f\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x4f\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x4f\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x4f\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x4f\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x4f\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x4f\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x4f\x79"; case 114: // ENTER return "\x04\x4b\x74\x4f\x7a"; case 115: // TAB return "\x04\x4b\x74\x4f\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x4f\x31"; case 117: // INSERT return "\x04\x4b\x74\x4f\x32"; case 118: // DELETE return "\x04\x4b\x74\x4f\x33"; case 119: // RIGHT return "\x04\x4b\x74\x4f\x34"; case 120: // LEFT return "\x04\x4b\x74\x4f\x35"; case 121: // DOWN return "\x04\x4b\x74\x4f\x36"; case 122: // UP return "\x04\x4b\x74\x4f\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x4f\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x4f\x39"; case 125: // HOME return "\x04\x4b\x74\x4f\x2e"; case 126: // END return "\x04\x4b\x74\x4f\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x4f\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4f\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x4f\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4f\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x4f\x21"; case 132: // F1 return "\x04\x4b\x74\x4f\x2f"; case 133: // F2 return "\x04\x4b\x74\x4f\x2a"; case 134: // F3 return "\x04\x4b\x74\x4f\x3f"; case 135: // F4 return "\x04\x4b\x74\x4f\x26"; case 136: // F5 return "\x04\x4b\x74\x4f\x3c"; case 137: // F6 return "\x04\x4b\x74\x4f\x3e"; case 138: // F7 return "\x04\x4b\x74\x4f\x28"; case 139: // F8 return "\x04\x4b\x74\x4f\x29"; case 140: // F9 return "\x04\x4b\x74\x4f\x5b"; case 141: // F10 return "\x04\x4b\x74\x4f\x5d"; case 142: // F11 return "\x04\x4b\x74\x4f\x7b"; case 143: // F12 return "\x04\x4b\x74\x4f\x7d"; case 144: // F13 return "\x04\x4b\x74\x4f\x40"; case 145: // F14 return "\x04\x4b\x74\x4f\x25"; case 146: // F15 return "\x04\x4b\x74\x4f\x24"; case 147: // F16 return "\x04\x4b\x74\x4f\x23"; case 148: // F17 return "\x05\x4b\x74\x4f\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x4f\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x4f\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x4f\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x4f\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x4f\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x4f\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x4f\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x4f\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x4f\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x4f\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x4f\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x4f\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x4f\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x4f\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x4f\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x4f\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x4f\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x4f\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x4f\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x4f\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4f\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4f\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x4f\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x4f\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x4f\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4f\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x4f\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x4f\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4f\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x4f\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4f\x42\x68"; } // end switch(key) case 0xf: switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x50\x41"; case 1: // EXCLAM return "\x05\x4b\x74\x50\x42\x6c"; case 2: // DOUBLE_QUOTE return "\x05\x4b\x74\x50\x42\x6d"; case 3: // NUMBER_SIGN return "\x05\x4b\x74\x50\x42\x6e"; case 4: // DOLLAR return "\x05\x4b\x74\x50\x42\x6f"; case 5: // AMPERSAND return "\x05\x4b\x74\x50\x42\x70"; case 6: // APOSTROPHE return "\x04\x4b\x74\x50\x42"; case 7: // PARENTHESIS_LEFT return "\x05\x4b\x74\x50\x42\x71"; case 8: // PARENTHESIS_RIGHT return "\x05\x4b\x74\x50\x42\x72"; case 9: // PLUS return "\x05\x4b\x74\x50\x42\x69"; case 10: // COMMA return "\x04\x4b\x74\x50\x43"; case 11: // MINUS return "\x04\x4b\x74\x50\x44"; case 12: // PERIOD return "\x04\x4b\x74\x50\x45"; case 13: // SLASH return "\x04\x4b\x74\x50\x46"; case 14: // 0 return "\x04\x4b\x74\x50\x47"; case 15: // 1 return "\x04\x4b\x74\x50\x48"; case 16: // 2 return "\x04\x4b\x74\x50\x49"; case 17: // 3 return "\x04\x4b\x74\x50\x4a"; case 18: // 4 return "\x04\x4b\x74\x50\x4b"; case 19: // 5 return "\x04\x4b\x74\x50\x4c"; case 20: // 6 return "\x04\x4b\x74\x50\x4d"; case 21: // 7 return "\x04\x4b\x74\x50\x4e"; case 22: // 8 return "\x04\x4b\x74\x50\x4f"; case 23: // 9 return "\x04\x4b\x74\x50\x50"; case 24: // COLON return "\x05\x4b\x74\x50\x42\x73"; case 25: // SEMICOLON return "\x04\x4b\x74\x50\x51"; case 26: // LESS return "\x05\x4b\x74\x50\x42\x74"; case 27: // EQUAL return "\x04\x4b\x74\x50\x52"; case 28: // GREATER return "\x05\x4b\x74\x50\x42\x75"; case 29: // AT return "\x05\x4b\x74\x50\x42\x76"; case 30: // A return "\x04\x4b\x74\x50\x53"; case 31: // B return "\x04\x4b\x74\x50\x54"; case 32: // C return "\x04\x4b\x74\x50\x55"; case 33: // D return "\x04\x4b\x74\x50\x56"; case 34: // E return "\x04\x4b\x74\x50\x57"; case 35: // F return "\x04\x4b\x74\x50\x58"; case 36: // G return "\x04\x4b\x74\x50\x59"; case 37: // H return "\x04\x4b\x74\x50\x5a"; case 38: // I return "\x04\x4b\x74\x50\x61"; case 39: // J return "\x04\x4b\x74\x50\x62"; case 40: // K return "\x04\x4b\x74\x50\x63"; case 41: // L return "\x04\x4b\x74\x50\x64"; case 42: // M return "\x04\x4b\x74\x50\x65"; case 43: // N return "\x04\x4b\x74\x50\x66"; case 44: // O return "\x04\x4b\x74\x50\x67"; case 45: // P return "\x04\x4b\x74\x50\x68"; case 46: // Q return "\x04\x4b\x74\x50\x69"; case 47: // R return "\x04\x4b\x74\x50\x6a"; case 48: // S return "\x04\x4b\x74\x50\x6b"; case 49: // T return "\x04\x4b\x74\x50\x6c"; case 50: // U return "\x04\x4b\x74\x50\x6d"; case 51: // V return "\x04\x4b\x74\x50\x6e"; case 52: // W return "\x04\x4b\x74\x50\x6f"; case 53: // X return "\x04\x4b\x74\x50\x70"; case 54: // Y return "\x04\x4b\x74\x50\x71"; case 55: // Z return "\x04\x4b\x74\x50\x72"; case 56: // LEFT_BRACKET return "\x04\x4b\x74\x50\x73"; case 57: // BACKSLASH return "\x04\x4b\x74\x50\x74"; case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x50\x75"; case 59: // UNDERSCORE return "\x05\x4b\x74\x50\x42\x6a"; case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x50\x76"; case 61: // WORLD_1 return "\x04\x4b\x74\x50\x77"; case 62: // WORLD_2 return "\x04\x4b\x74\x50\x78"; case 63: // PARAGRAPH return "\x05\x4b\x74\x50\x42\x77"; case 64: // MASCULINE return "\x05\x4b\x74\x50\x42\x78"; case 65: // A_GRAVE return "\x05\x4b\x74\x50\x42\x79"; case 66: // A_DIAERESIS return "\x05\x4b\x74\x50\x42\x7a"; case 67: // A_RING return "\x05\x4b\x74\x50\x42\x30"; case 68: // AE return "\x05\x4b\x74\x50\x42\x31"; case 69: // C_CEDILLA return "\x05\x4b\x74\x50\x42\x32"; case 70: // E_GRAVE return "\x05\x4b\x74\x50\x42\x33"; case 71: // E_ACUTE return "\x05\x4b\x74\x50\x42\x34"; case 72: // I_GRAVE return "\x05\x4b\x74\x50\x42\x35"; case 73: // N_TILDE return "\x05\x4b\x74\x50\x42\x36"; case 74: // O_GRAVE return "\x05\x4b\x74\x50\x42\x37"; case 75: // O_DIAERESIS return "\x05\x4b\x74\x50\x42\x38"; case 76: // O_SLASH return "\x05\x4b\x74\x50\x42\x39"; case 77: // U_GRAVE return "\x05\x4b\x74\x50\x42\x2e"; case 78: // U_DIAERESIS return "\x05\x4b\x74\x50\x42\x2d"; case 79: // S_SHARP return "\x05\x4b\x74\x50\x42\x3a"; case 80: // CYRILLIC_A return "\x05\x4b\x74\x50\x42\x2b"; case 81: // CYRILLIC_BE return "\x05\x4b\x74\x50\x42\x3d"; case 82: // CYRILLIC_VE return "\x05\x4b\x74\x50\x42\x5e"; case 83: // CYRILLIC_GHE return "\x05\x4b\x74\x50\x42\x21"; case 84: // CYRILLIC_DE return "\x05\x4b\x74\x50\x42\x2f"; case 85: // CYRILLIC_IE return "\x05\x4b\x74\x50\x42\x2a"; case 86: // CYRILLIC_ZHE return "\x05\x4b\x74\x50\x42\x3f"; case 87: // CYRILLIC_ZE return "\x05\x4b\x74\x50\x42\x26"; case 88: // CYRILLIC_I return "\x05\x4b\x74\x50\x42\x3c"; case 89: // CYRILLIC_SHORT_I return "\x05\x4b\x74\x50\x42\x3e"; case 90: // CYRILLIC_KA return "\x05\x4b\x74\x50\x42\x28"; case 91: // CYRILLIC_EL return "\x05\x4b\x74\x50\x42\x29"; case 92: // CYRILLIC_EM return "\x05\x4b\x74\x50\x42\x5b"; case 93: // CYRILLIC_EN return "\x05\x4b\x74\x50\x42\x5d"; case 94: // CYRILLIC_O return "\x05\x4b\x74\x50\x42\x7b"; case 95: // CYRILLIC_PE return "\x05\x4b\x74\x50\x42\x7d"; case 96: // CYRILLIC_ER return "\x05\x4b\x74\x50\x42\x40"; case 97: // CYRILLIC_ES return "\x05\x4b\x74\x50\x42\x25"; case 98: // CYRILLIC_TE return "\x05\x4b\x74\x50\x42\x24"; case 99: // CYRILLIC_U return "\x05\x4b\x74\x50\x42\x23"; case 100: // CYRILLIC_EF return "\x05\x4b\x74\x50\x43\x41"; case 101: // CYRILLIC_HA return "\x05\x4b\x74\x50\x43\x42"; case 102: // CYRILLIC_TSE return "\x05\x4b\x74\x50\x43\x43"; case 103: // CYRILLIC_CHE return "\x05\x4b\x74\x50\x43\x44"; case 104: // CYRILLIC_SHA return "\x05\x4b\x74\x50\x43\x45"; case 105: // CYRILLIC_SHCHA return "\x05\x4b\x74\x50\x43\x46"; case 106: // CYRILLIC_HARD_SIGN return "\x05\x4b\x74\x50\x43\x47"; case 107: // CYRILLIC_YERU return "\x05\x4b\x74\x50\x43\x48"; case 108: // CYRILLIC_SOFT_SIGN return "\x05\x4b\x74\x50\x43\x49"; case 109: // CYRILLIC_E return "\x05\x4b\x74\x50\x43\x4a"; case 110: // CYRILLIC_YU return "\x05\x4b\x74\x50\x43\x4b"; case 111: // CYRILLIC_YA return "\x05\x4b\x74\x50\x43\x4c"; case 112: // CYRILLIC_IO return "\x05\x4b\x74\x50\x43\x4d"; case 113: // ESCAPE return "\x04\x4b\x74\x50\x79"; case 114: // ENTER return "\x04\x4b\x74\x50\x7a"; case 115: // TAB return "\x04\x4b\x74\x50\x30"; case 116: // BACKSPACE return "\x04\x4b\x74\x50\x31"; case 117: // INSERT return "\x04\x4b\x74\x50\x32"; case 118: // DELETE return "\x04\x4b\x74\x50\x33"; case 119: // RIGHT return "\x04\x4b\x74\x50\x34"; case 120: // LEFT return "\x04\x4b\x74\x50\x35"; case 121: // DOWN return "\x04\x4b\x74\x50\x36"; case 122: // UP return "\x04\x4b\x74\x50\x37"; case 123: // PAGE_UP return "\x04\x4b\x74\x50\x38"; case 124: // PAGE_DOWN return "\x04\x4b\x74\x50\x39"; case 125: // HOME return "\x04\x4b\x74\x50\x2e"; case 126: // END return "\x04\x4b\x74\x50\x2d"; case 127: // CAPS_LOCK return "\x04\x4b\x74\x50\x3a"; case 128: // SCROLL_LOCK return "\x04\x4b\x74\x50\x2b"; case 129: // NUM_LOCK return "\x04\x4b\x74\x50\x3d"; case 130: // PRINT_SCREEN return "\x04\x4b\x74\x50\x5e"; case 131: // PAUSE return "\x04\x4b\x74\x50\x21"; case 132: // F1 return "\x04\x4b\x74\x50\x2f"; case 133: // F2 return "\x04\x4b\x74\x50\x2a"; case 134: // F3 return "\x04\x4b\x74\x50\x3f"; case 135: // F4 return "\x04\x4b\x74\x50\x26"; case 136: // F5 return "\x04\x4b\x74\x50\x3c"; case 137: // F6 return "\x04\x4b\x74\x50\x3e"; case 138: // F7 return "\x04\x4b\x74\x50\x28"; case 139: // F8 return "\x04\x4b\x74\x50\x29"; case 140: // F9 return "\x04\x4b\x74\x50\x5b"; case 141: // F10 return "\x04\x4b\x74\x50\x5d"; case 142: // F11 return "\x04\x4b\x74\x50\x7b"; case 143: // F12 return "\x04\x4b\x74\x50\x7d"; case 144: // F13 return "\x04\x4b\x74\x50\x40"; case 145: // F14 return "\x04\x4b\x74\x50\x25"; case 146: // F15 return "\x04\x4b\x74\x50\x24"; case 147: // F16 return "\x04\x4b\x74\x50\x23"; case 148: // F17 return "\x05\x4b\x74\x50\x42\x41"; case 149: // F18 return "\x05\x4b\x74\x50\x42\x42"; case 150: // F19 return "\x05\x4b\x74\x50\x42\x43"; case 151: // F20 return "\x05\x4b\x74\x50\x42\x44"; case 152: // F21 return "\x05\x4b\x74\x50\x42\x45"; case 153: // F22 return "\x05\x4b\x74\x50\x42\x46"; case 154: // F23 return "\x05\x4b\x74\x50\x42\x47"; case 155: // F24 return "\x05\x4b\x74\x50\x42\x48"; case 156: // F25 return "\x05\x4b\x74\x50\x42\x49"; case 157: // KP_0 return "\x05\x4b\x74\x50\x42\x4a"; case 158: // KP_1 return "\x05\x4b\x74\x50\x42\x4b"; case 159: // KP_2 return "\x05\x4b\x74\x50\x42\x4c"; case 160: // KP_3 return "\x05\x4b\x74\x50\x42\x4d"; case 161: // KP_4 return "\x05\x4b\x74\x50\x42\x4e"; case 162: // KP_5 return "\x05\x4b\x74\x50\x42\x4f"; case 163: // KP_6 return "\x05\x4b\x74\x50\x42\x50"; case 164: // KP_7 return "\x05\x4b\x74\x50\x42\x51"; case 165: // KP_8 return "\x05\x4b\x74\x50\x42\x52"; case 166: // KP_9 return "\x05\x4b\x74\x50\x42\x53"; case 167: // KP_DECIMAL return "\x05\x4b\x74\x50\x42\x54"; case 168: // KP_DIVIDE return "\x05\x4b\x74\x50\x42\x55"; case 169: // KP_MULTIPLY return "\x05\x4b\x74\x50\x42\x56"; case 170: // KP_SUBTRACT return "\x05\x4b\x74\x50\x42\x57"; case 171: // KP_ADD return "\x05\x4b\x74\x50\x42\x58"; case 172: // KP_ENTER return "\x05\x4b\x74\x50\x42\x59"; case 173: // KP_EQUAL return "\x05\x4b\x74\x50\x42\x5a"; case 175: // LEFT_CONTROL return "\x05\x4b\x74\x50\x42\x62"; case 176: // LEFT_ALT return "\x05\x4b\x74\x50\x42\x63"; case 177: // LEFT_SUPER return "\x05\x4b\x74\x50\x42\x64"; case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x50\x42\x66"; case 180: // RIGHT_ALT return "\x05\x4b\x74\x50\x42\x67"; case 181: // RIGHT_SUPER return "\x05\x4b\x74\x50\x42\x68"; } // end switch(key) } // end switch(mods) break; } // end switch(action) in mode EXTENDED break; } return NULL; }