From 7c52dd2bd85da317ae3cad2c0d78a3b6f08a7787 Mon Sep 17 00:00:00 2001 From: Luflosi Date: Mon, 2 Sep 2019 23:04:10 +0200 Subject: [PATCH 01/10] Fix update_encoding() not filtering GLFW_KEY_LAST_PRINTABLE b3b830bb5ffb8f42d5e2367e5aab03579be3a45f did not actually make `update_encoding()` filter `GLFW_KEY_LAST_PRINTABLE` because `name` contained the key name after applying `symbolic_name()`, which replaces underscores with spaces. Instead of replacing the underscore in `LAST_PRINTABLE` with a space, I moved the check above the call to `symbolic_name()`. This is more readable and future-proof in my opinion. --- kitty/key_encoding.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kitty/key_encoding.py b/kitty/key_encoding.py index 60aeaa467a0..a3618145bc0 100644 --- a/kitty/key_encoding.py +++ b/kitty/key_encoding.py @@ -296,11 +296,11 @@ def update_encoding(): key_map = {} i = len(ans) for k in sorted(keys, key=lambda k: getattr(defines, k)): + if k in ('GLFW_KEY_LAST', 'GLFW_KEY_LAST_PRINTABLE'): + continue val = getattr(defines, k) name = symbolic_name(k) - if val <= defines.GLFW_KEY_LAST and name not in ( - 'LAST', 'LAST_PRINTABLE' - ) and val != defines.GLFW_KEY_UNKNOWN: + if val <= defines.GLFW_KEY_LAST and val != defines.GLFW_KEY_UNKNOWN: if name not in ans: ans[name] = encode(i) i += 1 From 87059a2004a4e88ba6b227c03a44efb37b7293f6 Mon Sep 17 00:00:00 2001 From: Luflosi Date: Mon, 2 Sep 2019 21:16:02 +0200 Subject: [PATCH 02/10] Add GLFW_KEY_LAST_PRINTABLE as a GLFW constant --- kitty/glfw.c | 1 + 1 file changed, 1 insertion(+) diff --git a/kitty/glfw.c b/kitty/glfw.c index 8a9da6774c4..f1b3ee6976b 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -1285,6 +1285,7 @@ init_glfw(PyObject *m) { ADDC(GLFW_KEY_WORLD_2); ADDC(GLFW_KEY_PLUS); ADDC(GLFW_KEY_UNDERSCORE); + ADDC(GLFW_KEY_LAST_PRINTABLE); // --- Function keys ----------------------------------------------------------- ADDC(GLFW_KEY_ESCAPE); From 59f64c5e338815e1759f340cea2671d7ce54f47d Mon Sep 17 00:00:00 2001 From: Luflosi Date: Mon, 2 Sep 2019 21:20:08 +0200 Subject: [PATCH 03/10] Blacklist GLFW_KEY_LAST_PRINTABLE in kitty/keys.py --- kitty/keys.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kitty/keys.py b/kitty/keys.py index 2b95e586b81..e92eb6e4d2c 100644 --- a/kitty/keys.py +++ b/kitty/keys.py @@ -304,7 +304,7 @@ def generate_key_table_impl(w): def key_name(k): return k[len('GLFW_KEY_'):] - keys = {v: k for k, v in vars(defines).items() if k.startswith('GLFW_KEY_') and k not in {'GLFW_KEY_LAST', 'GLFW_KEY_UNKNOWN'}} + keys = {v: k for k, v in vars(defines).items() if k.startswith('GLFW_KEY_') and k not in {'GLFW_KEY_LAST', 'GLFW_KEY_LAST_PRINTABLE', 'GLFW_KEY_UNKNOWN'}} key_rmap = [] for i in range(number_of_keys): k = keys.get(i) From 3f926dfd8bc67fdb7205051cd013528524f153df Mon Sep 17 00:00:00 2001 From: Luflosi Date: Mon, 2 Sep 2019 21:22:27 +0200 Subject: [PATCH 04/10] Use keyboard key constants instead of hardcoded values --- kitty/keys.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kitty/keys.py b/kitty/keys.py index e92eb6e4d2c..c2568d86f2e 100644 --- a/kitty/keys.py +++ b/kitty/keys.py @@ -161,7 +161,7 @@ def keyboard_mode_name(screen): def extended_key_event(key, mods, action): if key >= defines.GLFW_KEY_LAST or key == defines.GLFW_KEY_UNKNOWN or ( # Shifted printable key should be handled by on_text_input() - mods <= defines.GLFW_MOD_SHIFT and 32 <= key <= 126 + mods <= defines.GLFW_MOD_SHIFT and defines.GLFW_KEY_SPACE <= key <= defines.GLFW_KEY_LAST_PRINTABLE ): return b'' if mods == 0 and key in ( From f05eefcc2096763f86d1f53915a1dbf70eb68b98 Mon Sep 17 00:00:00 2001 From: Luflosi Date: Sun, 1 Sep 2019 11:38:52 +0200 Subject: [PATCH 05/10] Allow adding keys with Unicode names on macOS --- glfw/cocoa_window.m | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/glfw/cocoa_window.m b/glfw/cocoa_window.m index 2550a3b4305..9f2e46b8279 100644 --- a/glfw/cocoa_window.m +++ b/glfw/cocoa_window.m @@ -288,10 +288,16 @@ static int translateKey(unsigned int key, bool apply_keymap) { if (apply_keymap) { // Look for the effective key name after applying any keyboard layouts/mappings - const char *name = _glfwPlatformGetScancodeName(key); - if (name && name[1] == 0) { - // Single letter key name - switch(name[0]) { + const char *name_chars = _glfwPlatformGetScancodeName(key); + uint32_t name = 0; + for (int i = 0; i < 4; i++) { + if (!name_chars[i]) break; + name <<= 8; + name |= (uint8_t)name_chars[i]; + } + if (name) { + // Key name + switch(name) { #define K(ch, name) case ch: return GLFW_KEY_##name K('A', A); K('a', A); K('B', B); K('b', B); From 97e6978ed8d0adbfab3e1e0912f5e8cf320fb532 Mon Sep 17 00:00:00 2001 From: Luflosi Date: Sat, 31 Aug 2019 22:31:38 +0200 Subject: [PATCH 06/10] Order keyboard keys by their ASCII value --- glfw/cocoa_window.m | 80 ++++++++++++++++++++++---------------------- glfw/glfw3.h | 10 +++--- glfw/input.c | 48 +++++++++++++------------- glfw/xkb_glfw.c | 8 ++--- kitty/config.py | 2 +- kitty/glfw-wrapper.h | 4 +-- kitty/glfw.c | 4 +-- 7 files changed, 78 insertions(+), 78 deletions(-) diff --git a/glfw/cocoa_window.m b/glfw/cocoa_window.m index 9f2e46b8279..b3f537aa386 100644 --- a/glfw/cocoa_window.m +++ b/glfw/cocoa_window.m @@ -299,6 +299,23 @@ static int translateKey(unsigned int key, bool apply_keymap) // Key name switch(name) { #define K(ch, name) case ch: return GLFW_KEY_##name + K('\'', APOSTROPHE); + K('+', PLUS); + K(',', COMMA); + K('-', MINUS); + K('.', PERIOD); + K('/', SLASH); + K('0', 0); + K('1', 1); + K('2', 2); + K('3', 3); + K('5', 5); + K('6', 6); + K('7', 7); + K('8', 8); + K('9', 9); + K(';', SEMICOLON); + K('=', EQUAL); K('A', A); K('a', A); K('B', B); K('b', B); K('C', C); K('c', C); @@ -325,28 +342,11 @@ static int translateKey(unsigned int key, bool apply_keymap) K('X', X); K('x', X); K('Y', Y); K('y', Y); K('Z', Z); K('z', Z); - K('0', 0); - K('1', 1); - K('2', 2); - K('3', 3); - K('5', 5); - K('6', 6); - K('7', 7); - K('8', 8); - K('9', 9); - K('\'', APOSTROPHE); - K(',', COMMA); - K('.', PERIOD); - K('/', SLASH); - K('-', MINUS); - K('=', EQUAL); - K(';', SEMICOLON); K('[', LEFT_BRACKET); + K('\\', BACKSLASH); K(']', RIGHT_BRACKET); - K('+', PLUS); K('_', UNDERSCORE); K('`', GRAVE_ACCENT); - K('\\', BACKSLASH); #undef K default: break; @@ -2296,6 +2296,28 @@ GLFWAPI void glfwGetCocoaKeyEquivalent(int glfw_key, int glfw_mods, unsigned sho START_ALLOW_CASE_RANGE switch(glfw_key) { #define K(ch, name) case GLFW_KEY_##name: *cocoa_key = ch; break; + K('\'', APOSTROPHE); + K('+', PLUS); + K(',', COMMA); + K('-', MINUS); + K('.', PERIOD); + K('/', SLASH); + K('0', 0); + K('1', 1); + K('2', 2); + K('3', 3); + K('5', 5); + K('6', 6); + K('7', 7); + K('8', 8); + K('9', 9); + K(';', SEMICOLON); + K('=', EQUAL); + K('[', LEFT_BRACKET); + K('\\', BACKSLASH); + K(']', RIGHT_BRACKET); + K('_', UNDERSCORE); + K('`', GRAVE_ACCENT); K('a', A); K('b', B); K('c', C); @@ -2322,28 +2344,6 @@ GLFWAPI void glfwGetCocoaKeyEquivalent(int glfw_key, int glfw_mods, unsigned sho K('x', X); K('y', Y); K('z', Z); - K('0', 0); - K('1', 1); - K('2', 2); - K('3', 3); - K('5', 5); - K('6', 6); - K('7', 7); - K('8', 8); - K('9', 9); - K('\'', APOSTROPHE); - K(',', COMMA); - K('.', PERIOD); - K('/', SLASH); - K('-', MINUS); - K('=', EQUAL); - K(';', SEMICOLON); - K('[', LEFT_BRACKET); - K(']', RIGHT_BRACKET); - K('+', PLUS); - K('_', UNDERSCORE); - K('`', GRAVE_ACCENT); - K('\\', BACKSLASH); K(0x35, ESCAPE); K('\r', ENTER); diff --git a/glfw/glfw3.h b/glfw/glfw3.h index 0d210c9fb68..b4826df5764 100644 --- a/glfw/glfw3.h +++ b/glfw/glfw3.h @@ -343,6 +343,7 @@ extern "C" { /* Printable keys */ #define GLFW_KEY_SPACE 32 #define GLFW_KEY_APOSTROPHE 39 /* ' */ +#define GLFW_KEY_PLUS 43 /* + */ #define GLFW_KEY_COMMA 44 /* , */ #define GLFW_KEY_MINUS 45 /* - */ #define GLFW_KEY_PERIOD 46 /* . */ @@ -388,11 +389,10 @@ extern "C" { #define GLFW_KEY_LEFT_BRACKET 91 /* [ */ #define GLFW_KEY_BACKSLASH 92 /* \ */ #define GLFW_KEY_RIGHT_BRACKET 93 /* ] */ +#define GLFW_KEY_UNDERSCORE 95 /* _ */ #define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ #define GLFW_KEY_WORLD_1 161 /* non-US #1 */ #define GLFW_KEY_WORLD_2 162 /* non-US #2 */ -#define GLFW_KEY_PLUS 163 -#define GLFW_KEY_UNDERSCORE 164 #define GLFW_KEY_LAST_PRINTABLE GLFW_KEY_UNDERSCORE @@ -3851,15 +3851,15 @@ GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); * - `GLFW_KEY_MINUS` * - `GLFW_KEY_PERIOD` * - `GLFW_KEY_SLASH` + * - `GLFW_KEY_0` to `GLFW_KEY_9` * - `GLFW_KEY_SEMICOLON` * - `GLFW_KEY_EQUAL` + * - `GLFW_KEY_A` to `GLFW_KEY_Z` * - `GLFW_KEY_LEFT_BRACKET` - * - `GLFW_KEY_RIGHT_BRACKET` * - `GLFW_KEY_BACKSLASH` + * - `GLFW_KEY_RIGHT_BRACKET` * - `GLFW_KEY_WORLD_1` * - `GLFW_KEY_WORLD_2` - * - `GLFW_KEY_0` to `GLFW_KEY_9` - * - `GLFW_KEY_A` to `GLFW_KEY_Z` * - `GLFW_KEY_KP_0` to `GLFW_KEY_KP_9` * - `GLFW_KEY_KP_DECIMAL` * - `GLFW_KEY_KP_DIVIDE` diff --git a/glfw/input.c b/glfw/input.c index fd747a76125..aeb0b85dd5f 100644 --- a/glfw/input.c +++ b/glfw/input.c @@ -439,6 +439,25 @@ const char* _glfwGetKeyName(int key) switch (key) { // Printable keys + case GLFW_KEY_SPACE: return "SPACE"; + case GLFW_KEY_APOSTROPHE: return "APOSTROPHE"; + case GLFW_KEY_PLUS: return "PLUS"; + case GLFW_KEY_COMMA: return "COMMA"; + case GLFW_KEY_MINUS: return "MINUS"; + case GLFW_KEY_PERIOD: return "PERIOD"; + case GLFW_KEY_SLASH: return "SLASH"; + case GLFW_KEY_0: return "0"; + case GLFW_KEY_1: return "1"; + case GLFW_KEY_2: return "2"; + case GLFW_KEY_3: return "3"; + case GLFW_KEY_4: return "4"; + case GLFW_KEY_5: return "5"; + case GLFW_KEY_6: return "6"; + case GLFW_KEY_7: return "7"; + case GLFW_KEY_8: return "8"; + case GLFW_KEY_9: return "9"; + case GLFW_KEY_SEMICOLON: return "SEMICOLON"; + case GLFW_KEY_EQUAL: return "EQUAL"; case GLFW_KEY_A: return "A"; case GLFW_KEY_B: return "B"; case GLFW_KEY_C: return "C"; @@ -465,32 +484,13 @@ const char* _glfwGetKeyName(int key) case GLFW_KEY_X: return "X"; case GLFW_KEY_Y: return "Y"; case GLFW_KEY_Z: return "Z"; - case GLFW_KEY_1: return "1"; - case GLFW_KEY_2: return "2"; - case GLFW_KEY_3: return "3"; - case GLFW_KEY_4: return "4"; - case GLFW_KEY_5: return "5"; - case GLFW_KEY_6: return "6"; - case GLFW_KEY_7: return "7"; - case GLFW_KEY_8: return "8"; - case GLFW_KEY_9: return "9"; - case GLFW_KEY_0: return "0"; - case GLFW_KEY_SPACE: return "SPACE"; - case GLFW_KEY_MINUS: return "MINUS"; - case GLFW_KEY_EQUAL: return "EQUAL"; - case GLFW_KEY_LEFT_BRACKET: return "LEFT BRACKET"; - case GLFW_KEY_RIGHT_BRACKET: return "RIGHT BRACKET"; + case GLFW_KEY_LEFT_BRACKET: return "LEFT_BRACKET"; case GLFW_KEY_BACKSLASH: return "BACKSLASH"; - case GLFW_KEY_SEMICOLON: return "SEMICOLON"; - case GLFW_KEY_APOSTROPHE: return "APOSTROPHE"; - case GLFW_KEY_GRAVE_ACCENT: return "GRAVE ACCENT"; - case GLFW_KEY_COMMA: return "COMMA"; - case GLFW_KEY_PERIOD: return "PERIOD"; - case GLFW_KEY_SLASH: return "SLASH"; - case GLFW_KEY_WORLD_1: return "WORLD 1"; - case GLFW_KEY_WORLD_2: return "WORLD 2"; - case GLFW_KEY_PLUS: return "PLUS"; + case GLFW_KEY_RIGHT_BRACKET: return "RIGHT_BRACKET"; case GLFW_KEY_UNDERSCORE: return "UNDERSCORE"; + case GLFW_KEY_GRAVE_ACCENT: return "GRAVE_ACCENT"; + case GLFW_KEY_WORLD_1: return "WORLD_1"; + case GLFW_KEY_WORLD_2: return "WORLD_2"; // Function keys case GLFW_KEY_ESCAPE: return "ESCAPE"; diff --git a/glfw/xkb_glfw.c b/glfw/xkb_glfw.c index 4a6d666fbd8..81f5b59327a 100644 --- a/glfw/xkb_glfw.c +++ b/glfw/xkb_glfw.c @@ -38,18 +38,21 @@ START_ALLOW_CASE_RANGE switch(key) { \ S(space, SPACE); \ S(apostrophe, APOSTROPHE); \ + S(plus, PLUS); \ S(comma, COMMA); \ S(minus, MINUS); \ S(period, PERIOD); \ S(slash, SLASH); \ + R(0, 9, 0, 9); \ S(semicolon, SEMICOLON); \ S(equal, EQUAL); \ + D(A, Z, A, Z); \ S(bracketleft, LEFT_BRACKET); \ S(backslash, BACKSLASH); \ S(bracketright, RIGHT_BRACKET); \ - S(plus, PLUS); \ S(underscore, UNDERSCORE); \ S(grave, GRAVE_ACCENT); \ + R(a, z, A, Z); \ S(Escape, ESCAPE); \ S(Return, ENTER); \ S(Tab, TAB); \ @@ -91,9 +94,6 @@ START_ALLOW_CASE_RANGE S(Alt_R, RIGHT_ALT); \ S(Super_R, RIGHT_SUPER); \ S(Menu, MENU); \ - R(0, 9, 0, 9); \ - R(a, z, A, Z); \ - D(A, Z, A, Z); \ R(F1, F25, F1, F25); \ R(KP_0, KP_9, KP_0, KP_9); \ diff --git a/kitty/config.py b/kitty/config.py index 5a14c381b6a..768160ed84b 100644 --- a/kitty/config.py +++ b/kitty/config.py @@ -26,7 +26,6 @@ "'": 'APOSTROPHE', ',': 'COMMA', '-': 'MINUS', - '_': 'UNDERSCORE', '.': 'PERIOD', '/': 'SLASH', ';': 'SEMICOLON', @@ -34,6 +33,7 @@ '[': 'LEFT_BRACKET', '\\': 'BACKSLASH', ']': 'RIGHT_BRACKET', + '_': 'UNDERSCORE', '`': 'GRAVE_ACCENT' } diff --git a/kitty/glfw-wrapper.h b/kitty/glfw-wrapper.h index 3fb90b3f13c..dfde9319e15 100644 --- a/kitty/glfw-wrapper.h +++ b/kitty/glfw-wrapper.h @@ -100,6 +100,7 @@ /* Printable keys */ #define GLFW_KEY_SPACE 32 #define GLFW_KEY_APOSTROPHE 39 /* ' */ +#define GLFW_KEY_PLUS 43 /* + */ #define GLFW_KEY_COMMA 44 /* , */ #define GLFW_KEY_MINUS 45 /* - */ #define GLFW_KEY_PERIOD 46 /* . */ @@ -145,11 +146,10 @@ #define GLFW_KEY_LEFT_BRACKET 91 /* [ */ #define GLFW_KEY_BACKSLASH 92 /* \ */ #define GLFW_KEY_RIGHT_BRACKET 93 /* ] */ +#define GLFW_KEY_UNDERSCORE 95 /* _ */ #define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ #define GLFW_KEY_WORLD_1 161 /* non-US #1 */ #define GLFW_KEY_WORLD_2 162 /* non-US #2 */ -#define GLFW_KEY_PLUS 163 -#define GLFW_KEY_UNDERSCORE 164 #define GLFW_KEY_LAST_PRINTABLE GLFW_KEY_UNDERSCORE diff --git a/kitty/glfw.c b/kitty/glfw.c index f1b3ee6976b..802d4e79445 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -1235,6 +1235,7 @@ init_glfw(PyObject *m) { // --- Printable keys ---------------------------------------------------------- ADDC(GLFW_KEY_SPACE); ADDC(GLFW_KEY_APOSTROPHE); + ADDC(GLFW_KEY_PLUS); ADDC(GLFW_KEY_COMMA); ADDC(GLFW_KEY_MINUS); ADDC(GLFW_KEY_PERIOD); @@ -1280,11 +1281,10 @@ init_glfw(PyObject *m) { ADDC(GLFW_KEY_LEFT_BRACKET); ADDC(GLFW_KEY_BACKSLASH); ADDC(GLFW_KEY_RIGHT_BRACKET); + ADDC(GLFW_KEY_UNDERSCORE); ADDC(GLFW_KEY_GRAVE_ACCENT); ADDC(GLFW_KEY_WORLD_1); ADDC(GLFW_KEY_WORLD_2); - ADDC(GLFW_KEY_PLUS); - ADDC(GLFW_KEY_UNDERSCORE); ADDC(GLFW_KEY_LAST_PRINTABLE); // --- Function keys ----------------------------------------------------------- From 4037480d2b6cc7ea5d9f3b041b1f620bda5076eb Mon Sep 17 00:00:00 2001 From: Luflosi Date: Mon, 2 Sep 2019 21:27:14 +0200 Subject: [PATCH 07/10] Allow for up to 256 keys instead of 128 --- kitty/keys.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kitty/keys.py b/kitty/keys.py index c2568d86f2e..49a36acce32 100644 --- a/kitty/keys.py +++ b/kitty/keys.py @@ -314,7 +314,7 @@ def key_name(k): w('%d, /* %s */' % (key_count, key_name(k))) key_rmap.append(i) key_count += 1 - if key_count > 128: + if key_count > 256: raise OverflowError('Too many keys') w('};\n') w('static inline const char* key_name(int key) { switch(key) {') @@ -354,7 +354,7 @@ def ind(*a): ind('case 0x{:x}:'.format(mods)) i += 1 if key_bytes: - ind('switch(key & 0x7f) { default: return NULL;') + ind('switch(key & 0xff) { default: return NULL;') i += 1 for key, (data, glfw_key) in key_bytes.items(): ind('case {}: // {}'.format(key, key_name(keys[glfw_key]))) From a65ee155c572e9d0e1b2f47b58a72300a51813cf Mon Sep 17 00:00:00 2001 From: Luflosi Date: Mon, 2 Sep 2019 21:32:22 +0200 Subject: [PATCH 08/10] Indent lookup table in _glfwGetKeyName() to allow for longer keyboard key names --- glfw/input.c | 248 +++++++++++++++++++++++++-------------------------- 1 file changed, 124 insertions(+), 124 deletions(-) diff --git a/glfw/input.c b/glfw/input.c index aeb0b85dd5f..1f5d3710f74 100644 --- a/glfw/input.c +++ b/glfw/input.c @@ -439,132 +439,132 @@ const char* _glfwGetKeyName(int key) switch (key) { // Printable keys - case GLFW_KEY_SPACE: return "SPACE"; - case GLFW_KEY_APOSTROPHE: return "APOSTROPHE"; - case GLFW_KEY_PLUS: return "PLUS"; - case GLFW_KEY_COMMA: return "COMMA"; - case GLFW_KEY_MINUS: return "MINUS"; - case GLFW_KEY_PERIOD: return "PERIOD"; - case GLFW_KEY_SLASH: return "SLASH"; - case GLFW_KEY_0: return "0"; - case GLFW_KEY_1: return "1"; - case GLFW_KEY_2: return "2"; - case GLFW_KEY_3: return "3"; - case GLFW_KEY_4: return "4"; - case GLFW_KEY_5: return "5"; - case GLFW_KEY_6: return "6"; - case GLFW_KEY_7: return "7"; - case GLFW_KEY_8: return "8"; - case GLFW_KEY_9: return "9"; - case GLFW_KEY_SEMICOLON: return "SEMICOLON"; - case GLFW_KEY_EQUAL: return "EQUAL"; - case GLFW_KEY_A: return "A"; - case GLFW_KEY_B: return "B"; - case GLFW_KEY_C: return "C"; - case GLFW_KEY_D: return "D"; - case GLFW_KEY_E: return "E"; - case GLFW_KEY_F: return "F"; - case GLFW_KEY_G: return "G"; - case GLFW_KEY_H: return "H"; - case GLFW_KEY_I: return "I"; - case GLFW_KEY_J: return "J"; - case GLFW_KEY_K: return "K"; - case GLFW_KEY_L: return "L"; - case GLFW_KEY_M: return "M"; - case GLFW_KEY_N: return "N"; - case GLFW_KEY_O: return "O"; - case GLFW_KEY_P: return "P"; - case GLFW_KEY_Q: return "Q"; - case GLFW_KEY_R: return "R"; - case GLFW_KEY_S: return "S"; - case GLFW_KEY_T: return "T"; - case GLFW_KEY_U: return "U"; - case GLFW_KEY_V: return "V"; - case GLFW_KEY_W: return "W"; - case GLFW_KEY_X: return "X"; - case GLFW_KEY_Y: return "Y"; - case GLFW_KEY_Z: return "Z"; - case GLFW_KEY_LEFT_BRACKET: return "LEFT_BRACKET"; - case GLFW_KEY_BACKSLASH: return "BACKSLASH"; - case GLFW_KEY_RIGHT_BRACKET: return "RIGHT_BRACKET"; - case GLFW_KEY_UNDERSCORE: return "UNDERSCORE"; - case GLFW_KEY_GRAVE_ACCENT: return "GRAVE_ACCENT"; - case GLFW_KEY_WORLD_1: return "WORLD_1"; - case GLFW_KEY_WORLD_2: return "WORLD_2"; + case GLFW_KEY_SPACE: return "SPACE"; + case GLFW_KEY_APOSTROPHE: return "APOSTROPHE"; + case GLFW_KEY_PLUS: return "PLUS"; + case GLFW_KEY_COMMA: return "COMMA"; + case GLFW_KEY_MINUS: return "MINUS"; + case GLFW_KEY_PERIOD: return "PERIOD"; + case GLFW_KEY_SLASH: return "SLASH"; + case GLFW_KEY_0: return "0"; + case GLFW_KEY_1: return "1"; + case GLFW_KEY_2: return "2"; + case GLFW_KEY_3: return "3"; + case GLFW_KEY_4: return "4"; + case GLFW_KEY_5: return "5"; + case GLFW_KEY_6: return "6"; + case GLFW_KEY_7: return "7"; + case GLFW_KEY_8: return "8"; + case GLFW_KEY_9: return "9"; + case GLFW_KEY_SEMICOLON: return "SEMICOLON"; + case GLFW_KEY_EQUAL: return "EQUAL"; + case GLFW_KEY_A: return "A"; + case GLFW_KEY_B: return "B"; + case GLFW_KEY_C: return "C"; + case GLFW_KEY_D: return "D"; + case GLFW_KEY_E: return "E"; + case GLFW_KEY_F: return "F"; + case GLFW_KEY_G: return "G"; + case GLFW_KEY_H: return "H"; + case GLFW_KEY_I: return "I"; + case GLFW_KEY_J: return "J"; + case GLFW_KEY_K: return "K"; + case GLFW_KEY_L: return "L"; + case GLFW_KEY_M: return "M"; + case GLFW_KEY_N: return "N"; + case GLFW_KEY_O: return "O"; + case GLFW_KEY_P: return "P"; + case GLFW_KEY_Q: return "Q"; + case GLFW_KEY_R: return "R"; + case GLFW_KEY_S: return "S"; + case GLFW_KEY_T: return "T"; + case GLFW_KEY_U: return "U"; + case GLFW_KEY_V: return "V"; + case GLFW_KEY_W: return "W"; + case GLFW_KEY_X: return "X"; + case GLFW_KEY_Y: return "Y"; + case GLFW_KEY_Z: return "Z"; + case GLFW_KEY_LEFT_BRACKET: return "LEFT_BRACKET"; + case GLFW_KEY_BACKSLASH: return "BACKSLASH"; + case GLFW_KEY_RIGHT_BRACKET: return "RIGHT_BRACKET"; + case GLFW_KEY_UNDERSCORE: return "UNDERSCORE"; + case GLFW_KEY_GRAVE_ACCENT: return "GRAVE_ACCENT"; + case GLFW_KEY_WORLD_1: return "WORLD_1"; + case GLFW_KEY_WORLD_2: return "WORLD_2"; // Function keys - case GLFW_KEY_ESCAPE: return "ESCAPE"; - case GLFW_KEY_F1: return "F1"; - case GLFW_KEY_F2: return "F2"; - case GLFW_KEY_F3: return "F3"; - case GLFW_KEY_F4: return "F4"; - case GLFW_KEY_F5: return "F5"; - case GLFW_KEY_F6: return "F6"; - case GLFW_KEY_F7: return "F7"; - case GLFW_KEY_F8: return "F8"; - case GLFW_KEY_F9: return "F9"; - case GLFW_KEY_F10: return "F10"; - case GLFW_KEY_F11: return "F11"; - case GLFW_KEY_F12: return "F12"; - case GLFW_KEY_F13: return "F13"; - case GLFW_KEY_F14: return "F14"; - case GLFW_KEY_F15: return "F15"; - case GLFW_KEY_F16: return "F16"; - case GLFW_KEY_F17: return "F17"; - case GLFW_KEY_F18: return "F18"; - case GLFW_KEY_F19: return "F19"; - case GLFW_KEY_F20: return "F20"; - case GLFW_KEY_F21: return "F21"; - case GLFW_KEY_F22: return "F22"; - case GLFW_KEY_F23: return "F23"; - case GLFW_KEY_F24: return "F24"; - case GLFW_KEY_F25: return "F25"; - case GLFW_KEY_UP: return "UP"; - case GLFW_KEY_DOWN: return "DOWN"; - case GLFW_KEY_LEFT: return "LEFT"; - case GLFW_KEY_RIGHT: return "RIGHT"; - case GLFW_KEY_LEFT_SHIFT: return "LEFT SHIFT"; - case GLFW_KEY_RIGHT_SHIFT: return "RIGHT SHIFT"; - case GLFW_KEY_LEFT_CONTROL: return "LEFT CONTROL"; - case GLFW_KEY_RIGHT_CONTROL: return "RIGHT CONTROL"; - case GLFW_KEY_LEFT_ALT: return "LEFT ALT"; - case GLFW_KEY_RIGHT_ALT: return "RIGHT ALT"; - case GLFW_KEY_TAB: return "TAB"; - case GLFW_KEY_ENTER: return "ENTER"; - case GLFW_KEY_BACKSPACE: return "BACKSPACE"; - case GLFW_KEY_INSERT: return "INSERT"; - case GLFW_KEY_DELETE: return "DELETE"; - case GLFW_KEY_PAGE_UP: return "PAGE UP"; - case GLFW_KEY_PAGE_DOWN: return "PAGE DOWN"; - case GLFW_KEY_HOME: return "HOME"; - case GLFW_KEY_END: return "END"; - case GLFW_KEY_KP_0: return "KEYPAD 0"; - case GLFW_KEY_KP_1: return "KEYPAD 1"; - case GLFW_KEY_KP_2: return "KEYPAD 2"; - case GLFW_KEY_KP_3: return "KEYPAD 3"; - case GLFW_KEY_KP_4: return "KEYPAD 4"; - case GLFW_KEY_KP_5: return "KEYPAD 5"; - case GLFW_KEY_KP_6: return "KEYPAD 6"; - case GLFW_KEY_KP_7: return "KEYPAD 7"; - case GLFW_KEY_KP_8: return "KEYPAD 8"; - case GLFW_KEY_KP_9: return "KEYPAD 9"; - case GLFW_KEY_KP_DIVIDE: return "KEYPAD DIVIDE"; - case GLFW_KEY_KP_MULTIPLY: return "KEYPAD MULTIPLY"; - case GLFW_KEY_KP_SUBTRACT: return "KEYPAD SUBTRACT"; - case GLFW_KEY_KP_ADD: return "KEYPAD ADD"; - case GLFW_KEY_KP_DECIMAL: return "KEYPAD DECIMAL"; - case GLFW_KEY_KP_EQUAL: return "KEYPAD EQUAL"; - case GLFW_KEY_KP_ENTER: return "KEYPAD ENTER"; - case GLFW_KEY_PRINT_SCREEN: return "PRINT SCREEN"; - case GLFW_KEY_NUM_LOCK: return "NUM LOCK"; - case GLFW_KEY_CAPS_LOCK: return "CAPS LOCK"; - case GLFW_KEY_SCROLL_LOCK: return "SCROLL LOCK"; - case GLFW_KEY_PAUSE: return "PAUSE"; - case GLFW_KEY_LEFT_SUPER: return "LEFT SUPER"; - case GLFW_KEY_RIGHT_SUPER: return "RIGHT SUPER"; - case GLFW_KEY_MENU: return "MENU"; - - default: return "UNKNOWN"; + case GLFW_KEY_ESCAPE: return "ESCAPE"; + case GLFW_KEY_F1: return "F1"; + case GLFW_KEY_F2: return "F2"; + case GLFW_KEY_F3: return "F3"; + case GLFW_KEY_F4: return "F4"; + case GLFW_KEY_F5: return "F5"; + case GLFW_KEY_F6: return "F6"; + case GLFW_KEY_F7: return "F7"; + case GLFW_KEY_F8: return "F8"; + case GLFW_KEY_F9: return "F9"; + case GLFW_KEY_F10: return "F10"; + case GLFW_KEY_F11: return "F11"; + case GLFW_KEY_F12: return "F12"; + case GLFW_KEY_F13: return "F13"; + case GLFW_KEY_F14: return "F14"; + case GLFW_KEY_F15: return "F15"; + case GLFW_KEY_F16: return "F16"; + case GLFW_KEY_F17: return "F17"; + case GLFW_KEY_F18: return "F18"; + case GLFW_KEY_F19: return "F19"; + case GLFW_KEY_F20: return "F20"; + case GLFW_KEY_F21: return "F21"; + case GLFW_KEY_F22: return "F22"; + case GLFW_KEY_F23: return "F23"; + case GLFW_KEY_F24: return "F24"; + case GLFW_KEY_F25: return "F25"; + case GLFW_KEY_UP: return "UP"; + case GLFW_KEY_DOWN: return "DOWN"; + case GLFW_KEY_LEFT: return "LEFT"; + case GLFW_KEY_RIGHT: return "RIGHT"; + case GLFW_KEY_LEFT_SHIFT: return "LEFT SHIFT"; + case GLFW_KEY_RIGHT_SHIFT: return "RIGHT SHIFT"; + case GLFW_KEY_LEFT_CONTROL: return "LEFT CONTROL"; + case GLFW_KEY_RIGHT_CONTROL: return "RIGHT CONTROL"; + case GLFW_KEY_LEFT_ALT: return "LEFT ALT"; + case GLFW_KEY_RIGHT_ALT: return "RIGHT ALT"; + case GLFW_KEY_TAB: return "TAB"; + case GLFW_KEY_ENTER: return "ENTER"; + case GLFW_KEY_BACKSPACE: return "BACKSPACE"; + case GLFW_KEY_INSERT: return "INSERT"; + case GLFW_KEY_DELETE: return "DELETE"; + case GLFW_KEY_PAGE_UP: return "PAGE UP"; + case GLFW_KEY_PAGE_DOWN: return "PAGE DOWN"; + case GLFW_KEY_HOME: return "HOME"; + case GLFW_KEY_END: return "END"; + case GLFW_KEY_KP_0: return "KEYPAD 0"; + case GLFW_KEY_KP_1: return "KEYPAD 1"; + case GLFW_KEY_KP_2: return "KEYPAD 2"; + case GLFW_KEY_KP_3: return "KEYPAD 3"; + case GLFW_KEY_KP_4: return "KEYPAD 4"; + case GLFW_KEY_KP_5: return "KEYPAD 5"; + case GLFW_KEY_KP_6: return "KEYPAD 6"; + case GLFW_KEY_KP_7: return "KEYPAD 7"; + case GLFW_KEY_KP_8: return "KEYPAD 8"; + case GLFW_KEY_KP_9: return "KEYPAD 9"; + case GLFW_KEY_KP_DIVIDE: return "KEYPAD DIVIDE"; + case GLFW_KEY_KP_MULTIPLY: return "KEYPAD MULTIPLY"; + case GLFW_KEY_KP_SUBTRACT: return "KEYPAD SUBTRACT"; + case GLFW_KEY_KP_ADD: return "KEYPAD ADD"; + case GLFW_KEY_KP_DECIMAL: return "KEYPAD DECIMAL"; + case GLFW_KEY_KP_EQUAL: return "KEYPAD EQUAL"; + case GLFW_KEY_KP_ENTER: return "KEYPAD ENTER"; + case GLFW_KEY_PRINT_SCREEN: return "PRINT SCREEN"; + case GLFW_KEY_NUM_LOCK: return "NUM LOCK"; + case GLFW_KEY_CAPS_LOCK: return "CAPS LOCK"; + case GLFW_KEY_SCROLL_LOCK: return "SCROLL LOCK"; + case GLFW_KEY_PAUSE: return "PAUSE"; + case GLFW_KEY_LEFT_SUPER: return "LEFT SUPER"; + case GLFW_KEY_RIGHT_SUPER: return "RIGHT SUPER"; + case GLFW_KEY_MENU: return "MENU"; + + default: return "UNKNOWN"; } } From e619eb9cbb5a7690afab09da688ac4c432b9c252 Mon Sep 17 00:00:00 2001 From: Luflosi Date: Sun, 1 Sep 2019 11:45:40 +0200 Subject: [PATCH 09/10] Add more keyboard keys --- glfw/cocoa_window.m | 180 ++++++++++++++++++++++++++++++++++++++++++ glfw/glfw3.h | 130 +++++++++++++++++++++++++++++- glfw/input.c | 61 ++++++++++++++ glfw/xkb_glfw.c | 108 +++++++++++++++++++++++++ kitty/config.py | 65 ++++++++++++++- kitty/glfw-wrapper.h | 65 ++++++++++++++- kitty/glfw.c | 61 ++++++++++++++ kitty/key_encoding.py | 6 +- 8 files changed, 670 insertions(+), 6 deletions(-) diff --git a/glfw/cocoa_window.m b/glfw/cocoa_window.m index b3f537aa386..5175984a709 100644 --- a/glfw/cocoa_window.m +++ b/glfw/cocoa_window.m @@ -34,6 +34,61 @@ // Needed for _NSGetProgname #include + +#define PARAGRAPH_UTF_8 0xc2a7 // § +#define MASCULINE_UTF_8 0xc2ba // º +#define A_DIAERESIS_UPPER_CASE_UTF_8 0xc384 // Ä +#define O_DIAERESIS_UPPER_CASE_UTF_8 0xc396 // Ö +#define U_DIAERESIS_UPPER_CASE_UTF_8 0xc39c // Ü +#define S_SHARP_UTF_8 0xc39f // ß +#define A_GRAVE_LOWER_CASE_UTF_8 0xc3a0 // à +#define A_DIAERESIS_LOWER_CASE_UTF_8 0xc3a4 // ä +#define A_RING_LOWER_CASE_UTF_8 0xc3a5 // å +#define AE_LOWER_CASE_UTF_8 0xc3a6 // æ +#define C_CEDILLA_LOWER_CASE_UTF_8 0xc3a7 // ç +#define E_GRAVE_LOWER_CASE_UTF_8 0xc3a8 // è +#define E_ACUTE_LOWER_CASE_UTF_8 0xc3a9 // é +#define I_GRAVE_LOWER_CASE_UTF_8 0xc3ac // ì +#define N_TILDE_LOWER_CASE_UTF_8 0xc3b1 // ñ +#define O_GRAVE_LOWER_CASE_UTF_8 0xc3b2 // ò +#define O_DIAERESIS_LOWER_CASE_UTF_8 0xc3b6 // ö +#define O_SLASH_LOWER_CASE_UTF_8 0xc3b8 // ø +#define U_GRAVE_LOWER_CASE_UTF_8 0xc3b9 // ù +#define U_DIAERESIS_LOWER_CASE_UTF_8 0xc3bc // ü +#define CYRILLIC_A_LOWER_CASE_UTF_8 0xd0b0 // а +#define CYRILLIC_BE_LOWER_CASE_UTF_8 0xd0b1 // б +#define CYRILLIC_VE_LOWER_CASE_UTF_8 0xd0b2 // в +#define CYRILLIC_GHE_LOWER_CASE_UTF_8 0xd0b3 // г +#define CYRILLIC_DE_LOWER_CASE_UTF_8 0xd0b4 // д +#define CYRILLIC_IE_LOWER_CASE_UTF_8 0xd0b5 // е +#define CYRILLIC_ZHE_LOWER_CASE_UTF_8 0xd0b6 // ж +#define CYRILLIC_ZE_LOWER_CASE_UTF_8 0xd0b7 // з +#define CYRILLIC_I_LOWER_CASE_UTF_8 0xd0b8 // и +#define CYRILLIC_SHORT_I_LOWER_CASE_UTF_8 0xd0b9 // й +#define CYRILLIC_KA_LOWER_CASE_UTF_8 0xd0ba // к +#define CYRILLIC_EL_LOWER_CASE_UTF_8 0xd0bb // л +#define CYRILLIC_EM_LOWER_CASE_UTF_8 0xd0bc // м +#define CYRILLIC_EN_LOWER_CASE_UTF_8 0xd0bd // н +#define CYRILLIC_O_LOWER_CASE_UTF_8 0xd0be // о +#define CYRILLIC_PE_LOWER_CASE_UTF_8 0xd0bf // п +#define CYRILLIC_ER_LOWER_CASE_UTF_8 0xd180 // р +#define CYRILLIC_ES_LOWER_CASE_UTF_8 0xd181 // с +#define CYRILLIC_TE_LOWER_CASE_UTF_8 0xd182 // т +#define CYRILLIC_U_LOWER_CASE_UTF_8 0xd183 // у +#define CYRILLIC_EF_LOWER_CASE_UTF_8 0xd184 // ф +#define CYRILLIC_HA_LOWER_CASE_UTF_8 0xd185 // х +#define CYRILLIC_TSE_LOWER_CASE_UTF_8 0xd186 // ц +#define CYRILLIC_CHE_LOWER_CASE_UTF_8 0xd187 // ч +#define CYRILLIC_SHA_LOWER_CASE_UTF_8 0xd188 // ш +#define CYRILLIC_SHCHA_LOWER_CASE_UTF_8 0xd189 // щ +#define CYRILLIC_HARD_SIGN_LOWER_CASE_UTF_8 0xd18a // ъ +#define CYRILLIC_YERU_LOWER_CASE_UTF_8 0xd18b // ы +#define CYRILLIC_SOFT_SIGN_LOWER_CASE_UTF_8 0xd18c // ь +#define CYRILLIC_E_LOWER_CASE_UTF_8 0xd18d // э +#define CYRILLIC_YU_LOWER_CASE_UTF_8 0xd18e // ю +#define CYRILLIC_YA_LOWER_CASE_UTF_8 0xd18f // я +#define CYRILLIC_IO_LOWER_CASE_UTF_8 0xd191 // ё + // Returns the style mask corresponding to the window settings // static NSUInteger getStyleMask(_GLFWwindow* window) @@ -299,7 +354,14 @@ static int translateKey(unsigned int key, bool apply_keymap) // Key name switch(name) { #define K(ch, name) case ch: return GLFW_KEY_##name + K('!', EXCLAM); + K('"', DOUBLE_QUOTE); + K('#', NUMBER_SIGN); + K('$', DOLLAR); + K('&', AMPERSAND); K('\'', APOSTROPHE); + K('(', PARENTHESIS_LEFT); + K(')', PARENTHESIS_RIGHT); K('+', PLUS); K(',', COMMA); K('-', MINUS); @@ -314,8 +376,12 @@ static int translateKey(unsigned int key, bool apply_keymap) K('7', 7); K('8', 8); K('9', 9); + K(':', COLON); K(';', SEMICOLON); + K('<', LESS); K('=', EQUAL); + K('>', GREATER); + K('@', AT); K('A', A); K('a', A); K('B', B); K('b', B); K('C', C); K('c', C); @@ -347,6 +413,59 @@ static int translateKey(unsigned int key, bool apply_keymap) K(']', RIGHT_BRACKET); K('_', UNDERSCORE); K('`', GRAVE_ACCENT); + K(PARAGRAPH_UTF_8, PARAGRAPH); + K(MASCULINE_UTF_8, MASCULINE); + K(A_DIAERESIS_UPPER_CASE_UTF_8, A_DIAERESIS); + K(O_DIAERESIS_UPPER_CASE_UTF_8, O_DIAERESIS); + K(U_DIAERESIS_UPPER_CASE_UTF_8, U_DIAERESIS); + K(S_SHARP_UTF_8, S_SHARP); + K(A_GRAVE_LOWER_CASE_UTF_8, A_GRAVE); + K(A_DIAERESIS_LOWER_CASE_UTF_8, A_DIAERESIS); + K(A_RING_LOWER_CASE_UTF_8, A_RING); + K(AE_LOWER_CASE_UTF_8, AE); + K(C_CEDILLA_LOWER_CASE_UTF_8, C_CEDILLA); + K(E_GRAVE_LOWER_CASE_UTF_8, E_GRAVE); + K(E_ACUTE_LOWER_CASE_UTF_8, E_ACUTE); + K(I_GRAVE_LOWER_CASE_UTF_8, I_GRAVE); + K(N_TILDE_LOWER_CASE_UTF_8, N_TILDE); + K(O_GRAVE_LOWER_CASE_UTF_8, O_GRAVE); + K(O_DIAERESIS_LOWER_CASE_UTF_8, O_DIAERESIS); + K(O_SLASH_LOWER_CASE_UTF_8, O_SLASH); + K(U_GRAVE_LOWER_CASE_UTF_8, U_GRAVE); + K(U_DIAERESIS_LOWER_CASE_UTF_8, U_DIAERESIS); + K(CYRILLIC_A_LOWER_CASE_UTF_8, CYRILLIC_A); + K(CYRILLIC_BE_LOWER_CASE_UTF_8, CYRILLIC_BE); + K(CYRILLIC_VE_LOWER_CASE_UTF_8, CYRILLIC_VE); + K(CYRILLIC_GHE_LOWER_CASE_UTF_8, CYRILLIC_GHE); + K(CYRILLIC_DE_LOWER_CASE_UTF_8, CYRILLIC_DE); + K(CYRILLIC_IE_LOWER_CASE_UTF_8, CYRILLIC_IE); + K(CYRILLIC_ZHE_LOWER_CASE_UTF_8, CYRILLIC_ZHE); + K(CYRILLIC_ZE_LOWER_CASE_UTF_8, CYRILLIC_ZE); + K(CYRILLIC_I_LOWER_CASE_UTF_8, CYRILLIC_I); + K(CYRILLIC_SHORT_I_LOWER_CASE_UTF_8, CYRILLIC_SHORT_I); + K(CYRILLIC_KA_LOWER_CASE_UTF_8, CYRILLIC_KA); + K(CYRILLIC_EL_LOWER_CASE_UTF_8, CYRILLIC_EL); + K(CYRILLIC_EM_LOWER_CASE_UTF_8, CYRILLIC_EM); + K(CYRILLIC_EN_LOWER_CASE_UTF_8, CYRILLIC_EN); + K(CYRILLIC_O_LOWER_CASE_UTF_8, CYRILLIC_O); + K(CYRILLIC_PE_LOWER_CASE_UTF_8, CYRILLIC_PE); + K(CYRILLIC_ER_LOWER_CASE_UTF_8, CYRILLIC_ER); + K(CYRILLIC_ES_LOWER_CASE_UTF_8, CYRILLIC_ES); + K(CYRILLIC_TE_LOWER_CASE_UTF_8, CYRILLIC_TE); + K(CYRILLIC_U_LOWER_CASE_UTF_8, CYRILLIC_U); + K(CYRILLIC_EF_LOWER_CASE_UTF_8, CYRILLIC_EF); + K(CYRILLIC_HA_LOWER_CASE_UTF_8, CYRILLIC_HA); + K(CYRILLIC_TSE_LOWER_CASE_UTF_8, CYRILLIC_TSE); + K(CYRILLIC_CHE_LOWER_CASE_UTF_8, CYRILLIC_CHE); + K(CYRILLIC_SHA_LOWER_CASE_UTF_8, CYRILLIC_SHA); + K(CYRILLIC_SHCHA_LOWER_CASE_UTF_8, CYRILLIC_SHCHA); + K(CYRILLIC_HARD_SIGN_LOWER_CASE_UTF_8, CYRILLIC_HARD_SIGN); + K(CYRILLIC_YERU_LOWER_CASE_UTF_8, CYRILLIC_YERU); + K(CYRILLIC_SOFT_SIGN_LOWER_CASE_UTF_8, CYRILLIC_SOFT_SIGN); + K(CYRILLIC_E_LOWER_CASE_UTF_8, CYRILLIC_E); + K(CYRILLIC_YU_LOWER_CASE_UTF_8, CYRILLIC_YU); + K(CYRILLIC_YA_LOWER_CASE_UTF_8, CYRILLIC_YA); + K(CYRILLIC_IO_LOWER_CASE_UTF_8, CYRILLIC_IO); #undef K default: break; @@ -2296,7 +2415,14 @@ GLFWAPI void glfwGetCocoaKeyEquivalent(int glfw_key, int glfw_mods, unsigned sho START_ALLOW_CASE_RANGE switch(glfw_key) { #define K(ch, name) case GLFW_KEY_##name: *cocoa_key = ch; break; + K('!', EXCLAM); + K('"', DOUBLE_QUOTE); + K('#', NUMBER_SIGN); + K('$', DOLLAR); + K('&', AMPERSAND); K('\'', APOSTROPHE); + K('(', PARENTHESIS_LEFT); + K(')', PARENTHESIS_RIGHT); K('+', PLUS); K(',', COMMA); K('-', MINUS); @@ -2311,8 +2437,12 @@ GLFWAPI void glfwGetCocoaKeyEquivalent(int glfw_key, int glfw_mods, unsigned sho K('7', 7); K('8', 8); K('9', 9); + K(':', COLON); K(';', SEMICOLON); + K('<', LESS); K('=', EQUAL); + K('>', GREATER); + K('@', AT); K('[', LEFT_BRACKET); K('\\', BACKSLASH); K(']', RIGHT_BRACKET); @@ -2344,6 +2474,56 @@ GLFWAPI void glfwGetCocoaKeyEquivalent(int glfw_key, int glfw_mods, unsigned sho K('x', X); K('y', Y); K('z', Z); + K(PARAGRAPH_UTF_8, PARAGRAPH); + K(MASCULINE_UTF_8, MASCULINE); + K(S_SHARP_UTF_8, S_SHARP); + K(A_GRAVE_LOWER_CASE_UTF_8, A_GRAVE); + K(A_DIAERESIS_LOWER_CASE_UTF_8, A_DIAERESIS); + K(A_RING_LOWER_CASE_UTF_8, A_RING); + K(AE_LOWER_CASE_UTF_8, AE); + K(C_CEDILLA_LOWER_CASE_UTF_8, C_CEDILLA); + K(E_GRAVE_LOWER_CASE_UTF_8, E_GRAVE); + K(E_ACUTE_LOWER_CASE_UTF_8, E_ACUTE); + K(I_GRAVE_LOWER_CASE_UTF_8, I_GRAVE); + K(N_TILDE_LOWER_CASE_UTF_8, N_TILDE); + K(O_GRAVE_LOWER_CASE_UTF_8, O_GRAVE); + K(O_DIAERESIS_LOWER_CASE_UTF_8, O_DIAERESIS); + K(O_SLASH_LOWER_CASE_UTF_8, O_SLASH); + K(U_GRAVE_LOWER_CASE_UTF_8, U_GRAVE); + K(U_DIAERESIS_LOWER_CASE_UTF_8, U_DIAERESIS); + K(CYRILLIC_A_LOWER_CASE_UTF_8, CYRILLIC_A); + K(CYRILLIC_BE_LOWER_CASE_UTF_8, CYRILLIC_BE); + K(CYRILLIC_VE_LOWER_CASE_UTF_8, CYRILLIC_VE); + K(CYRILLIC_GHE_LOWER_CASE_UTF_8, CYRILLIC_GHE); + K(CYRILLIC_DE_LOWER_CASE_UTF_8, CYRILLIC_DE); + K(CYRILLIC_IE_LOWER_CASE_UTF_8, CYRILLIC_IE); + K(CYRILLIC_ZHE_LOWER_CASE_UTF_8, CYRILLIC_ZHE); + K(CYRILLIC_ZE_LOWER_CASE_UTF_8, CYRILLIC_ZE); + K(CYRILLIC_I_LOWER_CASE_UTF_8, CYRILLIC_I); + K(CYRILLIC_SHORT_I_LOWER_CASE_UTF_8, CYRILLIC_SHORT_I); + K(CYRILLIC_KA_LOWER_CASE_UTF_8, CYRILLIC_KA); + K(CYRILLIC_EL_LOWER_CASE_UTF_8, CYRILLIC_EL); + K(CYRILLIC_EM_LOWER_CASE_UTF_8, CYRILLIC_EM); + K(CYRILLIC_EN_LOWER_CASE_UTF_8, CYRILLIC_EN); + K(CYRILLIC_O_LOWER_CASE_UTF_8, CYRILLIC_O); + K(CYRILLIC_PE_LOWER_CASE_UTF_8, CYRILLIC_PE); + K(CYRILLIC_ER_LOWER_CASE_UTF_8, CYRILLIC_ER); + K(CYRILLIC_ES_LOWER_CASE_UTF_8, CYRILLIC_ES); + K(CYRILLIC_TE_LOWER_CASE_UTF_8, CYRILLIC_TE); + K(CYRILLIC_U_LOWER_CASE_UTF_8, CYRILLIC_U); + K(CYRILLIC_EF_LOWER_CASE_UTF_8, CYRILLIC_EF); + K(CYRILLIC_HA_LOWER_CASE_UTF_8, CYRILLIC_HA); + K(CYRILLIC_TSE_LOWER_CASE_UTF_8, CYRILLIC_TSE); + K(CYRILLIC_CHE_LOWER_CASE_UTF_8, CYRILLIC_CHE); + K(CYRILLIC_SHA_LOWER_CASE_UTF_8, CYRILLIC_SHA); + K(CYRILLIC_SHCHA_LOWER_CASE_UTF_8, CYRILLIC_SHCHA); + K(CYRILLIC_HARD_SIGN_LOWER_CASE_UTF_8, CYRILLIC_HARD_SIGN); + K(CYRILLIC_YERU_LOWER_CASE_UTF_8, CYRILLIC_YERU); + K(CYRILLIC_SOFT_SIGN_LOWER_CASE_UTF_8, CYRILLIC_SOFT_SIGN); + K(CYRILLIC_E_LOWER_CASE_UTF_8, CYRILLIC_E); + K(CYRILLIC_YU_LOWER_CASE_UTF_8, CYRILLIC_YU); + K(CYRILLIC_YA_LOWER_CASE_UTF_8, CYRILLIC_YA); + K(CYRILLIC_IO_LOWER_CASE_UTF_8, CYRILLIC_IO); K(0x35, ESCAPE); K('\r', ENTER); diff --git a/glfw/glfw3.h b/glfw/glfw3.h index b4826df5764..dc609800ddb 100644 --- a/glfw/glfw3.h +++ b/glfw/glfw3.h @@ -342,7 +342,14 @@ extern "C" { /* Printable keys */ #define GLFW_KEY_SPACE 32 +#define GLFW_KEY_EXCLAM 33 /* ! */ +#define GLFW_KEY_DOUBLE_QUOTE 34 /* " */ +#define GLFW_KEY_NUMBER_SIGN 35 /* # */ +#define GLFW_KEY_DOLLAR 36 /* $ */ +#define GLFW_KEY_AMPERSAND 38 /* & */ #define GLFW_KEY_APOSTROPHE 39 /* ' */ +#define GLFW_KEY_PARENTHESIS_LEFT 40 /* ( */ +#define GLFW_KEY_PARENTHESIS_RIGHT 41 /* ) */ #define GLFW_KEY_PLUS 43 /* + */ #define GLFW_KEY_COMMA 44 /* , */ #define GLFW_KEY_MINUS 45 /* - */ @@ -358,8 +365,12 @@ extern "C" { #define GLFW_KEY_7 55 #define GLFW_KEY_8 56 #define GLFW_KEY_9 57 +#define GLFW_KEY_COLON 58 /* : */ #define GLFW_KEY_SEMICOLON 59 /* ; */ +#define GLFW_KEY_LESS 60 /* < */ #define GLFW_KEY_EQUAL 61 /* = */ +#define GLFW_KEY_GREATER 62 /* > */ +#define GLFW_KEY_AT 64 /* @ */ #define GLFW_KEY_A 65 #define GLFW_KEY_B 66 #define GLFW_KEY_C 67 @@ -393,8 +404,58 @@ extern "C" { #define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ #define GLFW_KEY_WORLD_1 161 /* non-US #1 */ #define GLFW_KEY_WORLD_2 162 /* non-US #2 */ - -#define GLFW_KEY_LAST_PRINTABLE GLFW_KEY_UNDERSCORE +#define GLFW_KEY_PARAGRAPH 167 /* § */ +#define GLFW_KEY_MASCULINE 186 /* º */ +#define GLFW_KEY_A_GRAVE 192 /* À */ +#define GLFW_KEY_A_DIAERESIS 196 /* Ä */ +#define GLFW_KEY_A_RING 197 /* Å */ +#define GLFW_KEY_AE 198 /* Æ */ +#define GLFW_KEY_C_CEDILLA 199 /* Ç */ +#define GLFW_KEY_E_GRAVE 200 /* È */ +#define GLFW_KEY_E_ACUTE 201 /* É */ +#define GLFW_KEY_I_GRAVE 204 /* Ì */ +#define GLFW_KEY_N_TILDE 209 /* Ñ */ +#define GLFW_KEY_O_GRAVE 210 /* Ò */ +#define GLFW_KEY_O_DIAERESIS 214 /* Ö */ +#define GLFW_KEY_O_SLASH 216 /* Ø */ +#define GLFW_KEY_U_GRAVE 217 /* Ù */ +#define GLFW_KEY_U_DIAERESIS 220 /* Ü */ +#define GLFW_KEY_S_SHARP 222 /* ß */ +#define GLFW_KEY_CYRILLIC_A 223 /* А */ +#define GLFW_KEY_CYRILLIC_BE 224 /* Б */ +#define GLFW_KEY_CYRILLIC_VE 225 /* В */ +#define GLFW_KEY_CYRILLIC_GHE 226 /* Г */ +#define GLFW_KEY_CYRILLIC_DE 227 /* Д */ +#define GLFW_KEY_CYRILLIC_IE 228 /* Е */ +#define GLFW_KEY_CYRILLIC_ZHE 229 /* Ж */ +#define GLFW_KEY_CYRILLIC_ZE 230 /* З */ +#define GLFW_KEY_CYRILLIC_I 231 /* И */ +#define GLFW_KEY_CYRILLIC_SHORT_I 232 /* Й */ +#define GLFW_KEY_CYRILLIC_KA 233 /* К */ +#define GLFW_KEY_CYRILLIC_EL 234 /* Л */ +#define GLFW_KEY_CYRILLIC_EM 235 /* М */ +#define GLFW_KEY_CYRILLIC_EN 236 /* Н */ +#define GLFW_KEY_CYRILLIC_O 237 /* О */ +#define GLFW_KEY_CYRILLIC_PE 238 /* П */ +#define GLFW_KEY_CYRILLIC_ER 239 /* Р */ +#define GLFW_KEY_CYRILLIC_ES 240 /* С */ +#define GLFW_KEY_CYRILLIC_TE 241 /* Т */ +#define GLFW_KEY_CYRILLIC_U 242 /* У */ +#define GLFW_KEY_CYRILLIC_EF 243 /* Ф */ +#define GLFW_KEY_CYRILLIC_HA 244 /* Х */ +#define GLFW_KEY_CYRILLIC_TSE 245 /* Ц */ +#define GLFW_KEY_CYRILLIC_CHE 246 /* Ч */ +#define GLFW_KEY_CYRILLIC_SHA 247 /* Ш */ +#define GLFW_KEY_CYRILLIC_SHCHA 248 /* Щ */ +#define GLFW_KEY_CYRILLIC_HARD_SIGN 249 /* Ъ */ +#define GLFW_KEY_CYRILLIC_YERU 250 /* Ы */ +#define GLFW_KEY_CYRILLIC_SOFT_SIGN 251 /* Ь */ +#define GLFW_KEY_CYRILLIC_E 252 /* Э */ +#define GLFW_KEY_CYRILLIC_YU 253 /* Ю */ +#define GLFW_KEY_CYRILLIC_YA 254 /* Я */ +#define GLFW_KEY_CYRILLIC_IO 255 /* Ё */ + +#define GLFW_KEY_LAST_PRINTABLE GLFW_KEY_CYRILLIC_IO /* Function keys */ #define GLFW_KEY_ESCAPE 256 @@ -3846,20 +3907,85 @@ GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); * [key callback](@ref input_key) without modification. * * The printable keys are: + * - `GLFW_KEY_SPACE` + * - `GLFW_KEY_EXCLAM` + * - `GLFW_KEY_DOUBLE_QUOTE` + * - `GLFW_KEY_NUMBER_SIGN` + * - `GLFW_KEY_DOLLAR` + * - `GLFW_KEY_AMPERSAND` * - `GLFW_KEY_APOSTROPHE` + * - `GLFW_KEY_PARENTHESIS_LEFT` + * - `GLFW_KEY_PARENTHESIS_RIGHT` + * - `GLFW_KEY_PLUS` * - `GLFW_KEY_COMMA` * - `GLFW_KEY_MINUS` * - `GLFW_KEY_PERIOD` * - `GLFW_KEY_SLASH` * - `GLFW_KEY_0` to `GLFW_KEY_9` + * - `GLFW_KEY_COLON` * - `GLFW_KEY_SEMICOLON` + * - `GLFW_KEY_LESS` * - `GLFW_KEY_EQUAL` + * - `GLFW_KEY_GREATER` + * - `GLFW_KEY_AT` * - `GLFW_KEY_A` to `GLFW_KEY_Z` * - `GLFW_KEY_LEFT_BRACKET` * - `GLFW_KEY_BACKSLASH` * - `GLFW_KEY_RIGHT_BRACKET` + * - `GLFW_KEY_UNDERSCORE` + * - `GLFW_KEY_GRAVE_ACCENT` * - `GLFW_KEY_WORLD_1` * - `GLFW_KEY_WORLD_2` + * - `GLFW_KEY_PARAGRAPH` + * - `GLFW_KEY_MASCULINE` + * - `GLFW_KEY_A_GRAVE` + * - `GLFW_KEY_A_DIAERESIS` + * - `GLFW_KEY_A_RING` + * - `GLFW_KEY_AE` + * - `GLFW_KEY_C_CEDILLA` + * - `GLFW_KEY_E_GRAVE` + * - `GLFW_KEY_E_ACUTE` + * - `GLFW_KEY_I_GRAVE` + * - `GLFW_KEY_N_TILDE` + * - `GLFW_KEY_O_GRAVE` + * - `GLFW_KEY_O_DIAERESIS` + * - `GLFW_KEY_O_SLASH` + * - `GLFW_KEY_U_GRAVE` + * - `GLFW_KEY_U_DIAERESIS` + * - `GLFW_KEY_S_SHARP` + * - `GLFW_KEY_CYRILLIC_A` + * - `GLFW_KEY_CYRILLIC_BE` + * - `GLFW_KEY_CYRILLIC_VE` + * - `GLFW_KEY_CYRILLIC_GHE` + * - `GLFW_KEY_CYRILLIC_DE` + * - `GLFW_KEY_CYRILLIC_IE` + * - `GLFW_KEY_CYRILLIC_ZHE` + * - `GLFW_KEY_CYRILLIC_ZE` + * - `GLFW_KEY_CYRILLIC_I` + * - `GLFW_KEY_CYRILLIC_SHORT_I` + * - `GLFW_KEY_CYRILLIC_KA` + * - `GLFW_KEY_CYRILLIC_EL` + * - `GLFW_KEY_CYRILLIC_EM` + * - `GLFW_KEY_CYRILLIC_EN` + * - `GLFW_KEY_CYRILLIC_O` + * - `GLFW_KEY_CYRILLIC_PE` + * - `GLFW_KEY_CYRILLIC_ER` + * - `GLFW_KEY_CYRILLIC_ES` + * - `GLFW_KEY_CYRILLIC_TE` + * - `GLFW_KEY_CYRILLIC_U` + * - `GLFW_KEY_CYRILLIC_EF` + * - `GLFW_KEY_CYRILLIC_HA` + * - `GLFW_KEY_CYRILLIC_TSE` + * - `GLFW_KEY_CYRILLIC_CHE` + * - `GLFW_KEY_CYRILLIC_SHA` + * - `GLFW_KEY_CYRILLIC_SHCHA` + * - `GLFW_KEY_CYRILLIC_HARD_SIGN` + * - `GLFW_KEY_CYRILLIC_YERU` + * - `GLFW_KEY_CYRILLIC_SOFT_SIGN` + * - `GLFW_KEY_CYRILLIC_E` + * - `GLFW_KEY_CYRILLIC_YU` + * - `GLFW_KEY_CYRILLIC_YA` + * - `GLFW_KEY_CYRILLIC_IO` * - `GLFW_KEY_KP_0` to `GLFW_KEY_KP_9` * - `GLFW_KEY_KP_DECIMAL` * - `GLFW_KEY_KP_DIVIDE` diff --git a/glfw/input.c b/glfw/input.c index 1f5d3710f74..66bc8fe2df3 100644 --- a/glfw/input.c +++ b/glfw/input.c @@ -440,7 +440,14 @@ const char* _glfwGetKeyName(int key) { // Printable keys case GLFW_KEY_SPACE: return "SPACE"; + case GLFW_KEY_EXCLAM: return "EXCLAM"; + case GLFW_KEY_DOUBLE_QUOTE: return "DOUBLE_QUOTE"; + case GLFW_KEY_NUMBER_SIGN: return "NUMBER_SIGN"; + case GLFW_KEY_DOLLAR: return "DOLLAR"; + case GLFW_KEY_AMPERSAND: return "AMPERSAND"; case GLFW_KEY_APOSTROPHE: return "APOSTROPHE"; + case GLFW_KEY_PARENTHESIS_LEFT: return "PARENTHESIS_LEFT"; + case GLFW_KEY_PARENTHESIS_RIGHT: return "PARENTHESIS_RIGHT"; case GLFW_KEY_PLUS: return "PLUS"; case GLFW_KEY_COMMA: return "COMMA"; case GLFW_KEY_MINUS: return "MINUS"; @@ -456,8 +463,12 @@ const char* _glfwGetKeyName(int key) case GLFW_KEY_7: return "7"; case GLFW_KEY_8: return "8"; case GLFW_KEY_9: return "9"; + case GLFW_KEY_COLON: return "COLON"; case GLFW_KEY_SEMICOLON: return "SEMICOLON"; + case GLFW_KEY_LESS: return "LESS"; case GLFW_KEY_EQUAL: return "EQUAL"; + case GLFW_KEY_GREATER: return "GREATER"; + case GLFW_KEY_AT: return "AT"; case GLFW_KEY_A: return "A"; case GLFW_KEY_B: return "B"; case GLFW_KEY_C: return "C"; @@ -491,6 +502,56 @@ const char* _glfwGetKeyName(int key) case GLFW_KEY_GRAVE_ACCENT: return "GRAVE_ACCENT"; case GLFW_KEY_WORLD_1: return "WORLD_1"; case GLFW_KEY_WORLD_2: return "WORLD_2"; + case GLFW_KEY_PARAGRAPH: return "PARAGRAPH"; + case GLFW_KEY_MASCULINE: return "MASCULINE"; + case GLFW_KEY_A_GRAVE: return "A_GRAVE"; + case GLFW_KEY_A_DIAERESIS: return "A_DIAERESIS"; + case GLFW_KEY_A_RING: return "A_RING"; + case GLFW_KEY_AE: return "AE"; + case GLFW_KEY_C_CEDILLA: return "C_CEDILLA"; + case GLFW_KEY_E_GRAVE: return "E_GRAVE"; + case GLFW_KEY_E_ACUTE: return "E_ACUTE"; + case GLFW_KEY_I_GRAVE: return "I_GRAVE"; + case GLFW_KEY_N_TILDE: return "N_TILDE"; + case GLFW_KEY_O_GRAVE: return "O_GRAVE"; + case GLFW_KEY_O_DIAERESIS: return "O_DIAERESIS"; + case GLFW_KEY_O_SLASH: return "O_SLASH"; + case GLFW_KEY_U_GRAVE: return "U_GRAVE"; + case GLFW_KEY_U_DIAERESIS: return "U_DIAERESIS"; + case GLFW_KEY_S_SHARP: return "S_SHARP"; + case GLFW_KEY_CYRILLIC_A: return "CYRILLIC_A"; + case GLFW_KEY_CYRILLIC_BE: return "CYRILLIC_BE"; + case GLFW_KEY_CYRILLIC_VE: return "CYRILLIC_VE"; + case GLFW_KEY_CYRILLIC_GHE: return "CYRILLIC_GHE"; + case GLFW_KEY_CYRILLIC_DE: return "CYRILLIC_DE"; + case GLFW_KEY_CYRILLIC_IE: return "CYRILLIC_IE"; + case GLFW_KEY_CYRILLIC_ZHE: return "CYRILLIC_ZHE"; + case GLFW_KEY_CYRILLIC_ZE: return "CYRILLIC_ZE"; + case GLFW_KEY_CYRILLIC_I: return "CYRILLIC_I"; + case GLFW_KEY_CYRILLIC_SHORT_I: return "CYRILLIC_SHORT_I"; + case GLFW_KEY_CYRILLIC_KA: return "CYRILLIC_KA"; + case GLFW_KEY_CYRILLIC_EL: return "CYRILLIC_EL"; + case GLFW_KEY_CYRILLIC_EM: return "CYRILLIC_EM"; + case GLFW_KEY_CYRILLIC_EN: return "CYRILLIC_EN"; + case GLFW_KEY_CYRILLIC_O: return "CYRILLIC_O"; + case GLFW_KEY_CYRILLIC_PE: return "CYRILLIC_PE"; + case GLFW_KEY_CYRILLIC_ER: return "CYRILLIC_ER"; + case GLFW_KEY_CYRILLIC_ES: return "CYRILLIC_ES"; + case GLFW_KEY_CYRILLIC_TE: return "CYRILLIC_TE"; + case GLFW_KEY_CYRILLIC_U: return "CYRILLIC_U"; + case GLFW_KEY_CYRILLIC_EF: return "CYRILLIC_EF"; + case GLFW_KEY_CYRILLIC_HA: return "CYRILLIC_HA"; + case GLFW_KEY_CYRILLIC_TSE: return "CYRILLIC_TSE"; + case GLFW_KEY_CYRILLIC_CHE: return "CYRILLIC_CHE"; + case GLFW_KEY_CYRILLIC_SHA: return "CYRILLIC_SHA"; + case GLFW_KEY_CYRILLIC_SHCHA: return "CYRILLIC_SHCHA"; + case GLFW_KEY_CYRILLIC_HARD_SIGN: return "CYRILLIC_HARD_SIGN"; + case GLFW_KEY_CYRILLIC_YERU: return "CYRILLIC_YERU"; + case GLFW_KEY_CYRILLIC_SOFT_SIGN: return "CYRILLIC_SOFT_SIGN"; + case GLFW_KEY_CYRILLIC_E: return "CYRILLIC_E"; + case GLFW_KEY_CYRILLIC_YU: return "CYRILLIC_YU"; + case GLFW_KEY_CYRILLIC_YA: return "CYRILLIC_YA"; + case GLFW_KEY_CYRILLIC_IO: return "CYRILLIC_IO"; // Function keys case GLFW_KEY_ESCAPE: return "ESCAPE"; diff --git a/glfw/xkb_glfw.c b/glfw/xkb_glfw.c index 81f5b59327a..d61fc57086c 100644 --- a/glfw/xkb_glfw.c +++ b/glfw/xkb_glfw.c @@ -37,15 +37,26 @@ START_ALLOW_CASE_RANGE #define map_key(key) \ switch(key) { \ S(space, SPACE); \ + S(exclam, EXCLAM); \ + S(quotedbl, DOUBLE_QUOTE); \ + S(numbersign, NUMBER_SIGN); \ + S(dollar, DOLLAR); \ + S(ampersand, AMPERSAND); \ S(apostrophe, APOSTROPHE); \ + S(parenleft, PARENTHESIS_LEFT); \ + S(parenright, PARENTHESIS_RIGHT); \ S(plus, PLUS); \ S(comma, COMMA); \ S(minus, MINUS); \ S(period, PERIOD); \ S(slash, SLASH); \ R(0, 9, 0, 9); \ + S(colon, COLON); \ S(semicolon, SEMICOLON); \ + S(less, LESS); \ S(equal, EQUAL); \ + S(greater, GREATER); \ + S(at, AT); \ D(A, Z, A, Z); \ S(bracketleft, LEFT_BRACKET); \ S(backslash, BACKSLASH); \ @@ -53,6 +64,103 @@ START_ALLOW_CASE_RANGE S(underscore, UNDERSCORE); \ S(grave, GRAVE_ACCENT); \ R(a, z, A, Z); \ + S(paragraph, PARAGRAPH); \ + S(masculine, MASCULINE); \ + S(agrave, A_GRAVE); \ + F(Agrave, A_GRAVE); \ + S(adiaeresis, A_DIAERESIS); \ + F(Adiaeresis, A_DIAERESIS); \ + S(aring, A_RING); \ + F(Aring, A_RING); \ + S(ae, AE); \ + F(AE, AE); \ + S(ccedilla, C_CEDILLA); \ + F(Ccedilla, C_CEDILLA); \ + S(egrave, E_GRAVE); \ + F(Egrave, E_GRAVE); \ + S(aacute, E_ACUTE); \ + F(Eacute, E_ACUTE); \ + S(igrave, I_GRAVE); \ + F(Igrave, I_GRAVE); \ + S(ntilde, N_TILDE); \ + F(Ntilde, N_TILDE); \ + S(ograve, O_GRAVE); \ + F(Ograve, O_GRAVE); \ + S(odiaeresis, O_DIAERESIS); \ + F(Odiaeresis, O_DIAERESIS); \ + S(oslash, O_SLASH); \ + F(Oslash, O_SLASH); \ + S(ugrave, U_GRAVE); \ + F(Ugrave, U_GRAVE); \ + S(udiaeresis, U_DIAERESIS); \ + F(Udiaeresis, U_DIAERESIS); \ + S(ssharp, S_SHARP); \ + S(Cyrillic_a, CYRILLIC_A); \ + F(Cyrillic_A, CYRILLIC_A); \ + S(Cyrillic_be, CYRILLIC_BE); \ + F(Cyrillic_BE, CYRILLIC_BE); \ + S(Cyrillic_ve, CYRILLIC_VE); \ + F(Cyrillic_VE, CYRILLIC_VE); \ + S(Cyrillic_ghe, CYRILLIC_GHE); \ + F(Cyrillic_GHE, CYRILLIC_GHE); \ + S(Cyrillic_de, CYRILLIC_DE); \ + F(Cyrillic_DE, CYRILLIC_DE); \ + S(Cyrillic_ie, CYRILLIC_IE); \ + F(Cyrillic_IE, CYRILLIC_IE); \ + S(Cyrillic_zhe, CYRILLIC_ZHE); \ + F(Cyrillic_ZHE, CYRILLIC_ZHE); \ + S(Cyrillic_ze, CYRILLIC_ZE); \ + F(Cyrillic_ZE, CYRILLIC_ZE); \ + S(Cyrillic_i, CYRILLIC_I); \ + F(Cyrillic_I, CYRILLIC_I); \ + S(Cyrillic_shorti, CYRILLIC_SHORT_I); \ + F(Cyrillic_SHORTI, CYRILLIC_SHORT_I); \ + S(Cyrillic_ka, CYRILLIC_KA); \ + F(Cyrillic_KA, CYRILLIC_KA); \ + S(Cyrillic_el, CYRILLIC_EL); \ + F(Cyrillic_EL, CYRILLIC_EL); \ + S(Cyrillic_em, CYRILLIC_EM); \ + F(Cyrillic_EM, CYRILLIC_EM); \ + S(Cyrillic_en, CYRILLIC_EN); \ + F(Cyrillic_EN, CYRILLIC_EN); \ + S(Cyrillic_o, CYRILLIC_O); \ + F(Cyrillic_O, CYRILLIC_O); \ + S(Cyrillic_pe, CYRILLIC_PE); \ + F(Cyrillic_PE, CYRILLIC_PE); \ + S(Cyrillic_er, CYRILLIC_ER); \ + F(Cyrillic_ER, CYRILLIC_ER); \ + S(Cyrillic_es, CYRILLIC_ES); \ + F(Cyrillic_ES, CYRILLIC_ES); \ + S(Cyrillic_te, CYRILLIC_TE); \ + F(Cyrillic_TE, CYRILLIC_TE); \ + S(Cyrillic_u, CYRILLIC_U); \ + F(Cyrillic_U, CYRILLIC_U); \ + S(Cyrillic_ef, CYRILLIC_EF); \ + F(Cyrillic_EF, CYRILLIC_EF); \ + S(Cyrillic_ha, CYRILLIC_HA); \ + F(Cyrillic_HA, CYRILLIC_HA); \ + S(Cyrillic_tse, CYRILLIC_TSE); \ + F(Cyrillic_TSE, CYRILLIC_TSE); \ + S(Cyrillic_che, CYRILLIC_CHE); \ + F(Cyrillic_CHE, CYRILLIC_CHE); \ + S(Cyrillic_sha, CYRILLIC_SHA); \ + F(Cyrillic_SHA, CYRILLIC_SHA); \ + S(Cyrillic_shcha, CYRILLIC_SHCHA); \ + F(Cyrillic_SHCHA, CYRILLIC_SHCHA); \ + S(Cyrillic_hardsign, CYRILLIC_HARD_SIGN); \ + F(Cyrillic_HARDSIGN, CYRILLIC_HARD_SIGN); \ + S(Cyrillic_yeru, CYRILLIC_YERU); \ + F(Cyrillic_YERU, CYRILLIC_YERU); \ + S(Cyrillic_softsign, CYRILLIC_SOFT_SIGN); \ + F(Cyrillic_SOFTSIGN, CYRILLIC_SOFT_SIGN); \ + S(Cyrillic_e, CYRILLIC_E); \ + F(Cyrillic_E, CYRILLIC_E); \ + S(Cyrillic_yu, CYRILLIC_YU); \ + F(Cyrillic_YU, CYRILLIC_YU); \ + S(Cyrillic_ya, CYRILLIC_YA); \ + F(Cyrillic_YA, CYRILLIC_YA); \ + S(Cyrillic_io, CYRILLIC_IO); \ + F(Cyrillic_IO, CYRILLIC_IO); \ S(Escape, ESCAPE); \ S(Return, ENTER); \ S(Tab, TAB); \ diff --git a/kitty/config.py b/kitty/config.py index 768160ed84b..a087064759d 100644 --- a/kitty/config.py +++ b/kitty/config.py @@ -23,18 +23,81 @@ from .key_names import get_key_name_lookup named_keys = { + ' ': 'SPACE', + '!': 'EXCLAM', + '"': 'DOUBLE_QUOTE', + '#': 'NUMBER_SIGN', + '$': 'DOLLAR', + '&': 'AMPERSAND', "'": 'APOSTROPHE', + '(': 'PARENTHESIS_LEFT', + ')': 'PARENTHESIS_RIGHT', + '+': 'PLUS', ',': 'COMMA', '-': 'MINUS', '.': 'PERIOD', '/': 'SLASH', + ':': 'COLON', ';': 'SEMICOLON', + '<': 'LESS', '=': 'EQUAL', + '>': 'GREATER', + '@': 'AT', '[': 'LEFT_BRACKET', '\\': 'BACKSLASH', ']': 'RIGHT_BRACKET', '_': 'UNDERSCORE', - '`': 'GRAVE_ACCENT' + '`': 'GRAVE_ACCENT', + '§': 'PARAGRAPH', + 'º': 'MASCULINE', + 'À': 'A_GRAVE', + 'Ä': 'A_DIAERESIS', + 'Å': 'A_RING', + 'Æ': 'AE', + 'Ç': 'C_CEDILLA', + 'È': 'E_GRAVE', + 'É': 'E_ACUTE', + 'Ì': 'I_GRAVE', + 'Ñ': 'N_TILDE', + 'Ò': 'O_GRAVE', + 'Ö': 'O_DIAERESIS', + 'Ø': 'O_SLASH', + 'Ù': 'U_GRAVE', + 'Ü': 'U_DIAERESIS', + 'SS': 'S_SHARP', # 'ß'.upper() == 'SS' + 'А': 'CYRILLIC_A', + 'Б': 'CYRILLIC_BE', + 'В': 'CYRILLIC_VE', + 'Г': 'CYRILLIC_GHE', + 'Д': 'CYRILLIC_DE', + 'Е': 'CYRILLIC_IE', + 'Ж': 'CYRILLIC_ZHE', + 'З': 'CYRILLIC_ZE', + 'И': 'CYRILLIC_I', + 'Й': 'CYRILLIC_SHORT_I', + 'К': 'CYRILLIC_KA', + 'Л': 'CYRILLIC_EL', + 'М': 'CYRILLIC_EM', + 'Н': 'CYRILLIC_EN', + 'О': 'CYRILLIC_O', + 'П': 'CYRILLIC_PE', + 'Р': 'CYRILLIC_ER', + 'С': 'CYRILLIC_ES', + 'Т': 'CYRILLIC_TE', + 'У': 'CYRILLIC_U', + 'Ф': 'CYRILLIC_EF', + 'Х': 'CYRILLIC_HA', + 'Ц': 'CYRILLIC_TSE', + 'Ч': 'CYRILLIC_CHE', + 'Ш': 'CYRILLIC_SHA', + 'Щ': 'CYRILLIC_SHCHA', + 'Ъ': 'CYRILLIC_HARD_SIGN', + 'Ы': 'CYRILLIC_YERU', + 'Ь': 'CYRILLIC_SOFT_SIGN', + 'Э': 'CYRILLIC_E', + 'Ю': 'CYRILLIC_YU', + 'Я': 'CYRILLIC_YA', + 'Ё': 'CYRILLIC_IO' } diff --git a/kitty/glfw-wrapper.h b/kitty/glfw-wrapper.h index dfde9319e15..0127da2d41f 100644 --- a/kitty/glfw-wrapper.h +++ b/kitty/glfw-wrapper.h @@ -99,7 +99,14 @@ /* Printable keys */ #define GLFW_KEY_SPACE 32 +#define GLFW_KEY_EXCLAM 33 /* ! */ +#define GLFW_KEY_DOUBLE_QUOTE 34 /* " */ +#define GLFW_KEY_NUMBER_SIGN 35 /* # */ +#define GLFW_KEY_DOLLAR 36 /* $ */ +#define GLFW_KEY_AMPERSAND 38 /* & */ #define GLFW_KEY_APOSTROPHE 39 /* ' */ +#define GLFW_KEY_PARENTHESIS_LEFT 40 /* ( */ +#define GLFW_KEY_PARENTHESIS_RIGHT 41 /* ) */ #define GLFW_KEY_PLUS 43 /* + */ #define GLFW_KEY_COMMA 44 /* , */ #define GLFW_KEY_MINUS 45 /* - */ @@ -115,8 +122,12 @@ #define GLFW_KEY_7 55 #define GLFW_KEY_8 56 #define GLFW_KEY_9 57 +#define GLFW_KEY_COLON 58 /* : */ #define GLFW_KEY_SEMICOLON 59 /* ; */ +#define GLFW_KEY_LESS 60 /* < */ #define GLFW_KEY_EQUAL 61 /* = */ +#define GLFW_KEY_GREATER 62 /* > */ +#define GLFW_KEY_AT 64 /* @ */ #define GLFW_KEY_A 65 #define GLFW_KEY_B 66 #define GLFW_KEY_C 67 @@ -150,8 +161,58 @@ #define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ #define GLFW_KEY_WORLD_1 161 /* non-US #1 */ #define GLFW_KEY_WORLD_2 162 /* non-US #2 */ - -#define GLFW_KEY_LAST_PRINTABLE GLFW_KEY_UNDERSCORE +#define GLFW_KEY_PARAGRAPH 167 /* § */ +#define GLFW_KEY_MASCULINE 186 /* º */ +#define GLFW_KEY_A_GRAVE 192 /* À */ +#define GLFW_KEY_A_DIAERESIS 196 /* Ä */ +#define GLFW_KEY_A_RING 197 /* Å */ +#define GLFW_KEY_AE 198 /* Æ */ +#define GLFW_KEY_C_CEDILLA 199 /* Ç */ +#define GLFW_KEY_E_GRAVE 200 /* È */ +#define GLFW_KEY_E_ACUTE 201 /* É */ +#define GLFW_KEY_I_GRAVE 204 /* Ì */ +#define GLFW_KEY_N_TILDE 209 /* Ñ */ +#define GLFW_KEY_O_GRAVE 210 /* Ò */ +#define GLFW_KEY_O_DIAERESIS 214 /* Ö */ +#define GLFW_KEY_O_SLASH 216 /* Ø */ +#define GLFW_KEY_U_GRAVE 217 /* Ù */ +#define GLFW_KEY_U_DIAERESIS 220 /* Ü */ +#define GLFW_KEY_S_SHARP 222 /* ß */ +#define GLFW_KEY_CYRILLIC_A 223 /* А */ +#define GLFW_KEY_CYRILLIC_BE 224 /* Б */ +#define GLFW_KEY_CYRILLIC_VE 225 /* В */ +#define GLFW_KEY_CYRILLIC_GHE 226 /* Г */ +#define GLFW_KEY_CYRILLIC_DE 227 /* Д */ +#define GLFW_KEY_CYRILLIC_IE 228 /* Е */ +#define GLFW_KEY_CYRILLIC_ZHE 229 /* Ж */ +#define GLFW_KEY_CYRILLIC_ZE 230 /* З */ +#define GLFW_KEY_CYRILLIC_I 231 /* И */ +#define GLFW_KEY_CYRILLIC_SHORT_I 232 /* Й */ +#define GLFW_KEY_CYRILLIC_KA 233 /* К */ +#define GLFW_KEY_CYRILLIC_EL 234 /* Л */ +#define GLFW_KEY_CYRILLIC_EM 235 /* М */ +#define GLFW_KEY_CYRILLIC_EN 236 /* Н */ +#define GLFW_KEY_CYRILLIC_O 237 /* О */ +#define GLFW_KEY_CYRILLIC_PE 238 /* П */ +#define GLFW_KEY_CYRILLIC_ER 239 /* Р */ +#define GLFW_KEY_CYRILLIC_ES 240 /* С */ +#define GLFW_KEY_CYRILLIC_TE 241 /* Т */ +#define GLFW_KEY_CYRILLIC_U 242 /* У */ +#define GLFW_KEY_CYRILLIC_EF 243 /* Ф */ +#define GLFW_KEY_CYRILLIC_HA 244 /* Х */ +#define GLFW_KEY_CYRILLIC_TSE 245 /* Ц */ +#define GLFW_KEY_CYRILLIC_CHE 246 /* Ч */ +#define GLFW_KEY_CYRILLIC_SHA 247 /* Ш */ +#define GLFW_KEY_CYRILLIC_SHCHA 248 /* Щ */ +#define GLFW_KEY_CYRILLIC_HARD_SIGN 249 /* Ъ */ +#define GLFW_KEY_CYRILLIC_YERU 250 /* Ы */ +#define GLFW_KEY_CYRILLIC_SOFT_SIGN 251 /* Ь */ +#define GLFW_KEY_CYRILLIC_E 252 /* Э */ +#define GLFW_KEY_CYRILLIC_YU 253 /* Ю */ +#define GLFW_KEY_CYRILLIC_YA 254 /* Я */ +#define GLFW_KEY_CYRILLIC_IO 255 /* Ё */ + +#define GLFW_KEY_LAST_PRINTABLE GLFW_KEY_CYRILLIC_IO /* Function keys */ #define GLFW_KEY_ESCAPE 256 diff --git a/kitty/glfw.c b/kitty/glfw.c index 802d4e79445..952425901f1 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -1234,7 +1234,14 @@ init_glfw(PyObject *m) { // --- Printable keys ---------------------------------------------------------- ADDC(GLFW_KEY_SPACE); + ADDC(GLFW_KEY_EXCLAM); + ADDC(GLFW_KEY_DOUBLE_QUOTE); + ADDC(GLFW_KEY_NUMBER_SIGN); + ADDC(GLFW_KEY_DOLLAR); + ADDC(GLFW_KEY_AMPERSAND); ADDC(GLFW_KEY_APOSTROPHE); + ADDC(GLFW_KEY_PARENTHESIS_LEFT); + ADDC(GLFW_KEY_PARENTHESIS_RIGHT); ADDC(GLFW_KEY_PLUS); ADDC(GLFW_KEY_COMMA); ADDC(GLFW_KEY_MINUS); @@ -1250,8 +1257,12 @@ init_glfw(PyObject *m) { ADDC(GLFW_KEY_7); ADDC(GLFW_KEY_8); ADDC(GLFW_KEY_9); + ADDC(GLFW_KEY_COLON); ADDC(GLFW_KEY_SEMICOLON); + ADDC(GLFW_KEY_LESS); ADDC(GLFW_KEY_EQUAL); + ADDC(GLFW_KEY_GREATER); + ADDC(GLFW_KEY_AT); ADDC(GLFW_KEY_A); ADDC(GLFW_KEY_B); ADDC(GLFW_KEY_C); @@ -1285,6 +1296,56 @@ init_glfw(PyObject *m) { ADDC(GLFW_KEY_GRAVE_ACCENT); ADDC(GLFW_KEY_WORLD_1); ADDC(GLFW_KEY_WORLD_2); + ADDC(GLFW_KEY_PARAGRAPH); + ADDC(GLFW_KEY_MASCULINE); + ADDC(GLFW_KEY_A_GRAVE); + ADDC(GLFW_KEY_A_DIAERESIS); + ADDC(GLFW_KEY_A_RING); + ADDC(GLFW_KEY_AE); + ADDC(GLFW_KEY_C_CEDILLA); + ADDC(GLFW_KEY_E_GRAVE); + ADDC(GLFW_KEY_E_ACUTE); + ADDC(GLFW_KEY_I_GRAVE); + ADDC(GLFW_KEY_N_TILDE); + ADDC(GLFW_KEY_O_GRAVE); + ADDC(GLFW_KEY_O_DIAERESIS); + ADDC(GLFW_KEY_O_SLASH); + ADDC(GLFW_KEY_U_GRAVE); + ADDC(GLFW_KEY_U_DIAERESIS); + ADDC(GLFW_KEY_S_SHARP); + ADDC(GLFW_KEY_CYRILLIC_A); + ADDC(GLFW_KEY_CYRILLIC_BE); + ADDC(GLFW_KEY_CYRILLIC_VE); + ADDC(GLFW_KEY_CYRILLIC_GHE); + ADDC(GLFW_KEY_CYRILLIC_DE); + ADDC(GLFW_KEY_CYRILLIC_IE); + ADDC(GLFW_KEY_CYRILLIC_ZHE); + ADDC(GLFW_KEY_CYRILLIC_ZE); + ADDC(GLFW_KEY_CYRILLIC_I); + ADDC(GLFW_KEY_CYRILLIC_SHORT_I); + ADDC(GLFW_KEY_CYRILLIC_KA); + ADDC(GLFW_KEY_CYRILLIC_EL); + ADDC(GLFW_KEY_CYRILLIC_EM); + ADDC(GLFW_KEY_CYRILLIC_EN); + ADDC(GLFW_KEY_CYRILLIC_O); + ADDC(GLFW_KEY_CYRILLIC_PE); + ADDC(GLFW_KEY_CYRILLIC_ER); + ADDC(GLFW_KEY_CYRILLIC_ES); + ADDC(GLFW_KEY_CYRILLIC_TE); + ADDC(GLFW_KEY_CYRILLIC_U); + ADDC(GLFW_KEY_CYRILLIC_EF); + ADDC(GLFW_KEY_CYRILLIC_HA); + ADDC(GLFW_KEY_CYRILLIC_TSE); + ADDC(GLFW_KEY_CYRILLIC_CHE); + ADDC(GLFW_KEY_CYRILLIC_SHA); + ADDC(GLFW_KEY_CYRILLIC_SHCHA); + ADDC(GLFW_KEY_CYRILLIC_HARD_SIGN); + ADDC(GLFW_KEY_CYRILLIC_YERU); + ADDC(GLFW_KEY_CYRILLIC_SOFT_SIGN); + ADDC(GLFW_KEY_CYRILLIC_E); + ADDC(GLFW_KEY_CYRILLIC_YU); + ADDC(GLFW_KEY_CYRILLIC_YA); + ADDC(GLFW_KEY_CYRILLIC_IO); ADDC(GLFW_KEY_LAST_PRINTABLE); // --- Function keys ----------------------------------------------------------- diff --git a/kitty/key_encoding.py b/kitty/key_encoding.py index a3618145bc0..bd876b02894 100644 --- a/kitty/key_encoding.py +++ b/kitty/key_encoding.py @@ -258,7 +258,11 @@ } # END_ENCODING }}} -text_keys = string.ascii_uppercase + string.ascii_lowercase + string.digits + '`~!@#$%^&*()_-+=[{]}\\|<,>./?;:\'" ' +text_keys = ( + string.ascii_uppercase + string.ascii_lowercase + string.digits + + '`~!@#$%^&*()_-+=[{]}\\|<,>./?;:\'" ' + 'ÄäÖöÜüߧºàåæçèéìñòøùабвгдежзийклмнопрстуфхцчшщъыьэюяё' +) def text_match(key): From f3be5b5e5747903a803e50099525facd15c65474 Mon Sep 17 00:00:00 2001 From: Luflosi Date: Tue, 3 Sep 2019 01:05:27 +0200 Subject: [PATCH 10/10] Regenerate automatically generated key_encoding.py and keys.h --- kitty/key_encoding.py | 128 +- kitty/keys.h | 23137 ++++++++++++++++++++++++---------------- 2 files changed, 14262 insertions(+), 9003 deletions(-) diff --git a/kitty/key_encoding.py b/kitty/key_encoding.py index bd876b02894..624e7f77b96 100644 --- a/kitty/key_encoding.py +++ b/kitty/key_encoding.py @@ -130,11 +130,80 @@ 'Z': 'r', 'PLUS': 'Bi', 'UNDERSCORE': 'Bj', - 'MENU': 'Bk' + 'MENU': 'Bk', + 'EXCLAM': 'Bl', + 'DOUBLE QUOTE': 'Bm', + 'NUMBER SIGN': 'Bn', + 'DOLLAR': 'Bo', + 'AMPERSAND': 'Bp', + 'PARENTHESIS LEFT': 'Bq', + 'PARENTHESIS RIGHT': 'Br', + 'COLON': 'Bs', + 'LESS': 'Bt', + 'GREATER': 'Bu', + 'AT': 'Bv', + 'PARAGRAPH': 'Bw', + 'MASCULINE': 'Bx', + 'A GRAVE': 'By', + 'A DIAERESIS': 'Bz', + 'A RING': 'B0', + 'AE': 'B1', + 'C CEDILLA': 'B2', + 'E GRAVE': 'B3', + 'E ACUTE': 'B4', + 'I GRAVE': 'B5', + 'N TILDE': 'B6', + 'O GRAVE': 'B7', + 'O DIAERESIS': 'B8', + 'O SLASH': 'B9', + 'U GRAVE': 'B.', + 'U DIAERESIS': 'B-', + 'S SHARP': 'B:', + 'CYRILLIC A': 'B+', + 'CYRILLIC BE': 'B=', + 'CYRILLIC VE': 'B^', + 'CYRILLIC GHE': 'B!', + 'CYRILLIC DE': 'B/', + 'CYRILLIC IE': 'B*', + 'CYRILLIC ZHE': 'B?', + 'CYRILLIC ZE': 'B&', + 'CYRILLIC I': 'B<', + 'CYRILLIC SHORT I': 'B>', + 'CYRILLIC KA': 'B(', + 'CYRILLIC EL': 'B)', + 'CYRILLIC EM': 'B[', + 'CYRILLIC EN': 'B]', + 'CYRILLIC O': 'B{', + 'CYRILLIC PE': 'B}', + 'CYRILLIC ER': 'B@', + 'CYRILLIC ES': 'B%', + 'CYRILLIC TE': 'B$', + 'CYRILLIC U': 'B#', + 'CYRILLIC EF': 'CA', + 'CYRILLIC HA': 'CB', + 'CYRILLIC TSE': 'CC', + 'CYRILLIC CHE': 'CD', + 'CYRILLIC SHA': 'CE', + 'CYRILLIC SHCHA': 'CF', + 'CYRILLIC HARD SIGN': 'CG', + 'CYRILLIC YERU': 'CH', + 'CYRILLIC SOFT SIGN': 'CI', + 'CYRILLIC E': 'CJ', + 'CYRILLIC YU': 'CK', + 'CYRILLIC YA': 'CL', + 'CYRILLIC IO': 'CM' } KEY_MAP = { 32: 'A', + 33: 'Bl', + 34: 'Bm', + 35: 'Bn', + 36: 'Bo', + 38: 'Bp', 39: 'B', + 40: 'Bq', + 41: 'Br', + 43: 'Bi', 44: 'C', 45: 'D', 46: 'E', @@ -149,8 +218,12 @@ 55: 'N', 56: 'O', 57: 'P', + 58: 'Bs', 59: 'Q', + 60: 'Bt', 61: 'R', + 62: 'Bu', + 64: 'Bv', 65: 'S', 66: 'T', 67: 'U', @@ -180,11 +253,60 @@ 91: 's', 92: 't', 93: 'u', + 95: 'Bj', 96: 'v', 161: 'w', 162: 'x', - 163: 'Bi', - 164: 'Bj', + 167: 'Bw', + 186: 'Bx', + 192: 'By', + 196: 'Bz', + 197: 'B0', + 198: 'B1', + 199: 'B2', + 200: 'B3', + 201: 'B4', + 204: 'B5', + 209: 'B6', + 210: 'B7', + 214: 'B8', + 216: 'B9', + 217: 'B.', + 220: 'B-', + 222: 'B:', + 223: 'B+', + 224: 'B=', + 225: 'B^', + 226: 'B!', + 227: 'B/', + 228: 'B*', + 229: 'B?', + 230: 'B&', + 231: 'B<', + 232: 'B>', + 233: 'B(', + 234: 'B)', + 235: 'B[', + 236: 'B]', + 237: 'B{', + 238: 'B}', + 239: 'B@', + 240: 'B%', + 241: 'B$', + 242: 'B#', + 243: 'CA', + 244: 'CB', + 245: 'CC', + 246: 'CD', + 247: 'CE', + 248: 'CF', + 249: 'CG', + 250: 'CH', + 251: 'CI', + 252: 'CJ', + 253: 'CK', + 254: 'CL', + 255: 'CM', 256: 'y', 257: 'z', 258: '0', diff --git a/kitty/keys.h b/kitty/keys.h index 31c188ff97f..817ecec2fa7 100644 --- a/kitty/keys.h +++ b/kitty/keys.h @@ -39,70 +39,83 @@ 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, -1, /* APOSTROPHE */ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, -2, /* COMMA */ -3, /* MINUS */ -4, /* PERIOD */ -5, /* SLASH */ -6, /* 0 */ -7, /* 1 */ -8, /* 2 */ -9, /* 3 */ -10, /* 4 */ -11, /* 5 */ -12, /* 6 */ -13, /* 7 */ -14, /* 8 */ -15, /* 9 */ UINT8_MAX, -16, /* SEMICOLON */ UINT8_MAX, -17, /* EQUAL */ UINT8_MAX, UINT8_MAX, UINT8_MAX, -18, /* A */ -19, /* B */ -20, /* C */ -21, /* D */ -22, /* E */ -23, /* F */ -24, /* G */ -25, /* H */ -26, /* I */ -27, /* J */ -28, /* K */ -29, /* L */ -30, /* M */ -31, /* N */ -32, /* O */ -33, /* P */ -34, /* Q */ -35, /* R */ -36, /* S */ -37, /* T */ -38, /* U */ -39, /* V */ -40, /* W */ -41, /* X */ -42, /* Y */ -43, /* Z */ -44, /* LEFT_BRACKET */ -45, /* BACKSLASH */ -46, /* RIGHT_BRACKET */ UINT8_MAX, UINT8_MAX, -47, /* GRAVE_ACCENT */ UINT8_MAX, UINT8_MAX, UINT8_MAX, @@ -154,10 +167,13 @@ 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, @@ -167,10 +183,6 @@ UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX, -48, /* WORLD_1 */ -49, /* WORLD_2 */ -50, /* PLUS */ -51, /* UNDERSCORE */ UINT8_MAX, UINT8_MAX, UINT8_MAX, @@ -180,27 +192,90 @@ 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, @@ -211,155 +286,88 @@ 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, -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, -52, /* ESCAPE */ -53, /* ENTER */ -54, /* TAB */ -55, /* BACKSPACE */ -56, /* INSERT */ -57, /* DELETE */ -58, /* RIGHT */ -59, /* LEFT */ -60, /* DOWN */ -61, /* UP */ -62, /* PAGE_UP */ -63, /* PAGE_DOWN */ -64, /* HOME */ -65, /* END */ -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -66, /* CAPS_LOCK */ -67, /* SCROLL_LOCK */ -68, /* NUM_LOCK */ -69, /* PRINT_SCREEN */ -70, /* PAUSE */ -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -71, /* F1 */ -72, /* F2 */ -73, /* F3 */ -74, /* F4 */ -75, /* F5 */ -76, /* F6 */ -77, /* F7 */ -78, /* F8 */ -79, /* F9 */ -80, /* F10 */ -81, /* F11 */ -82, /* F12 */ -83, /* F13 */ -84, /* F14 */ -85, /* F15 */ -86, /* F16 */ -87, /* F17 */ -88, /* F18 */ -89, /* F19 */ -90, /* F20 */ -91, /* F21 */ -92, /* F22 */ -93, /* F23 */ -94, /* F24 */ -95, /* F25 */ -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -96, /* KP_0 */ -97, /* KP_1 */ -98, /* KP_2 */ -99, /* KP_3 */ -100, /* KP_4 */ -101, /* KP_5 */ -102, /* KP_6 */ -103, /* KP_7 */ -104, /* KP_8 */ -105, /* KP_9 */ -106, /* KP_DECIMAL */ -107, /* KP_DIVIDE */ -108, /* KP_MULTIPLY */ -109, /* KP_SUBTRACT */ -110, /* KP_ADD */ -111, /* KP_ENTER */ -112, /* KP_EQUAL */ -UINT8_MAX, -UINT8_MAX, -UINT8_MAX, -113, /* LEFT_SHIFT */ -114, /* LEFT_CONTROL */ -115, /* LEFT_ALT */ -116, /* LEFT_SUPER */ -117, /* RIGHT_SHIFT */ -118, /* RIGHT_CONTROL */ -119, /* RIGHT_ALT */ -120, /* RIGHT_SUPER */ -121, /* MENU */ +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"; @@ -374,8 +382,12 @@ 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"; @@ -405,11 +417,60 @@ 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 163: return "PLUS"; -case 164: return "UNDERSCORE"; +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"; @@ -495,1663 +556,1663 @@ key_lookup(uint8_t key, KeyboardMode mode, uint8_t mods, uint8_t action) { case 1: // PRESS switch (mods & 0xf) { case 0x0: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x1: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x03\x1b\x5b\x5a"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x32\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x32\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x32\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x32\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x32\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x32\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x32\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x32\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x32\x7e"; } // end switch(key) case 0x2: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x01\x00"; - case 1: // APOSTROPHE + case 6: // APOSTROPHE return "\x01\x27"; - case 2: // COMMA + case 10: // COMMA return "\x01\x2c"; - case 3: // MINUS + case 11: // MINUS return "\x01\x2d"; - case 4: // PERIOD + case 12: // PERIOD return "\x01\x2e"; - case 5: // SLASH + case 13: // SLASH return "\x01\x1f"; - case 6: // 0 + case 14: // 0 return "\x01\x30"; - case 7: // 1 + case 15: // 1 return "\x01\x31"; - case 8: // 2 + case 16: // 2 return "\x01\x00"; - case 9: // 3 + case 17: // 3 return "\x01\x1b"; - case 10: // 4 + case 18: // 4 return "\x01\x1c"; - case 11: // 5 + case 19: // 5 return "\x01\x1d"; - case 12: // 6 + case 20: // 6 return "\x01\x1e"; - case 13: // 7 + case 21: // 7 return "\x01\x1f"; - case 14: // 8 + case 22: // 8 return "\x01\x7f"; - case 15: // 9 + case 23: // 9 return "\x01\x39"; - case 16: // SEMICOLON + case 25: // SEMICOLON return "\x01\x3b"; - case 17: // EQUAL + case 27: // EQUAL return "\x01\x3d"; - case 18: // A + case 30: // A return "\x01\x01"; - case 19: // B + case 31: // B return "\x01\x02"; - case 20: // C + case 32: // C return "\x01\x03"; - case 21: // D + case 33: // D return "\x01\x04"; - case 22: // E + case 34: // E return "\x01\x05"; - case 23: // F + case 35: // F return "\x01\x06"; - case 24: // G + case 36: // G return "\x01\x07"; - case 25: // H + case 37: // H return "\x01\x08"; - case 26: // I + case 38: // I return "\x01\x09"; - case 27: // J + case 39: // J return "\x01\x0a"; - case 28: // K + case 40: // K return "\x01\x0b"; - case 29: // L + case 41: // L return "\x01\x0c"; - case 30: // M + case 42: // M return "\x01\x0d"; - case 31: // N + case 43: // N return "\x01\x0e"; - case 32: // O + case 44: // O return "\x01\x0f"; - case 33: // P + case 45: // P return "\x01\x10"; - case 34: // Q + case 46: // Q return "\x01\x11"; - case 35: // R + case 47: // R return "\x01\x12"; - case 36: // S + case 48: // S return "\x01\x13"; - case 37: // T + case 49: // T return "\x01\x14"; - case 38: // U + case 50: // U return "\x01\x15"; - case 39: // V + case 51: // V return "\x01\x16"; - case 40: // W + case 52: // W return "\x01\x17"; - case 41: // X + case 53: // X return "\x01\x18"; - case 42: // Y + case 54: // Y return "\x01\x19"; - case 43: // Z + case 55: // Z return "\x01\x1a"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x01\x1b"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x01\x1c"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x01\x1d"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE return "\x01\x00"; - case 51: // UNDERSCORE + case 60: // GRAVE_ACCENT return "\x01\x00"; - case 52: // ESCAPE + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x08"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x35\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x35\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x35\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x35\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x35\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x35\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x35\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x35\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x35\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x35\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x35\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x35\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x35\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x35\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x35\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x35\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x35\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x35\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x35\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x35\x7e"; } // end switch(key) case 0x3: - switch(key & 0x7f) { default: return NULL; - case 3: // MINUS + switch(key & 0xff) { default: return NULL; + case 11: // MINUS return "\x01\x1f"; - case 5: // SLASH + case 13: // SLASH return "\x01\x7f"; - case 8: // 2 + case 16: // 2 return "\x01\x00"; - case 12: // 6 + case 20: // 6 return "\x01\x1e"; - case 52: // ESCAPE + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x36\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x36\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x36\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x36\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x36\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x36\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x36\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x36\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x36\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x36\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x36\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x36\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x36\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x36\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x36\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x36\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x36\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x36\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x36\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x36\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x36\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x36\x7e"; } // end switch(key) case 0x4: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; - case 1: // APOSTROPHE + case 6: // APOSTROPHE return "\x02\x1b\x27"; - case 2: // COMMA + case 10: // COMMA return "\x02\x1b\x2c"; - case 3: // MINUS + case 11: // MINUS return "\x02\x1b\x2d"; - case 4: // PERIOD + case 12: // PERIOD return "\x02\x1b\x2e"; - case 5: // SLASH + case 13: // SLASH return "\x02\x1b\x2f"; - case 6: // 0 + case 14: // 0 return "\x02\x1b\x30"; - case 7: // 1 + case 15: // 1 return "\x02\x1b\x31"; - case 8: // 2 + case 16: // 2 return "\x02\x1b\x32"; - case 9: // 3 + case 17: // 3 return "\x02\x1b\x33"; - case 10: // 4 + case 18: // 4 return "\x02\x1b\x34"; - case 11: // 5 + case 19: // 5 return "\x02\x1b\x35"; - case 12: // 6 + case 20: // 6 return "\x02\x1b\x36"; - case 13: // 7 + case 21: // 7 return "\x02\x1b\x37"; - case 14: // 8 + case 22: // 8 return "\x02\x1b\x38"; - case 15: // 9 + case 23: // 9 return "\x02\x1b\x39"; - case 16: // SEMICOLON + case 25: // SEMICOLON return "\x02\x1b\x3b"; - case 17: // EQUAL + case 27: // EQUAL return "\x02\x1b\x3d"; - case 18: // A + case 30: // A return "\x02\x1b\x61"; - case 19: // B + case 31: // B return "\x02\x1b\x62"; - case 20: // C + case 32: // C return "\x02\x1b\x63"; - case 21: // D + case 33: // D return "\x02\x1b\x64"; - case 22: // E + case 34: // E return "\x02\x1b\x65"; - case 23: // F + case 35: // F return "\x02\x1b\x66"; - case 24: // G + case 36: // G return "\x02\x1b\x67"; - case 25: // H + case 37: // H return "\x02\x1b\x68"; - case 26: // I + case 38: // I return "\x02\x1b\x69"; - case 27: // J + case 39: // J return "\x02\x1b\x6a"; - case 28: // K + case 40: // K return "\x02\x1b\x6b"; - case 29: // L + case 41: // L return "\x02\x1b\x6c"; - case 30: // M + case 42: // M return "\x02\x1b\x6d"; - case 31: // N + case 43: // N return "\x02\x1b\x6e"; - case 32: // O + case 44: // O return "\x02\x1b\x6f"; - case 33: // P + case 45: // P return "\x02\x1b\x70"; - case 34: // Q + case 46: // Q return "\x02\x1b\x71"; - case 35: // R + case 47: // R return "\x02\x1b\x72"; - case 36: // S + case 48: // S return "\x02\x1b\x73"; - case 37: // T + case 49: // T return "\x02\x1b\x74"; - case 38: // U + case 50: // U return "\x02\x1b\x75"; - case 39: // V + case 51: // V return "\x02\x1b\x76"; - case 40: // W + case 52: // W return "\x02\x1b\x77"; - case 41: // X + case 53: // X return "\x02\x1b\x78"; - case 42: // Y + case 54: // Y return "\x02\x1b\x79"; - case 43: // Z + case 55: // Z return "\x02\x1b\x7a"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x02\x1b\x5b"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x02\x1b\x5c"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x02\x1b\x5d"; - case 47: // GRAVE_ACCENT - return "\x02\x1b\x60"; - case 51: // UNDERSCORE + case 59: // UNDERSCORE return "\x02\x1b\x5f"; - case 52: // ESCAPE + case 60: // GRAVE_ACCENT + return "\x02\x1b\x60"; + case 113: // ESCAPE return "\x02\x1b\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x02\x1b\x0d"; - case 54: // TAB + case 115: // TAB return "\x02\x1b\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x02\x1b\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x33\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x33\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x33\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x33\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x33\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x33\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x33\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x33\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x33\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x33\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x33\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x33\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x33\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x33\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x33\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x33\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x33\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x33\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x33\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x33\x7e"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x33\x7e"; } // end switch(key) case 0x5: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; - case 1: // APOSTROPHE + case 6: // APOSTROPHE return "\x02\x1b\x22"; - case 2: // COMMA + case 10: // COMMA return "\x02\x1b\x3c"; - case 3: // MINUS + case 11: // MINUS return "\x02\x1b\x5f"; - case 4: // PERIOD + case 12: // PERIOD return "\x02\x1b\x3e"; - case 5: // SLASH + case 13: // SLASH return "\x02\x1b\x3f"; - case 6: // 0 + case 14: // 0 return "\x02\x1b\x29"; - case 7: // 1 + case 15: // 1 return "\x02\x1b\x21"; - case 8: // 2 + case 16: // 2 return "\x02\x1b\x40"; - case 9: // 3 + case 17: // 3 return "\x02\x1b\x23"; - case 10: // 4 + case 18: // 4 return "\x02\x1b\x24"; - case 11: // 5 + case 19: // 5 return "\x02\x1b\x25"; - case 12: // 6 + case 20: // 6 return "\x02\x1b\x5e"; - case 13: // 7 + case 21: // 7 return "\x02\x1b\x26"; - case 14: // 8 + case 22: // 8 return "\x02\x1b\x2a"; - case 15: // 9 + case 23: // 9 return "\x02\x1b\x28"; - case 16: // SEMICOLON + case 25: // SEMICOLON return "\x02\x1b\x3a"; - case 17: // EQUAL + case 27: // EQUAL return "\x02\x1b\x2b"; - case 18: // A + case 30: // A return "\x02\x1b\x41"; - case 19: // B + case 31: // B return "\x02\x1b\x42"; - case 20: // C + case 32: // C return "\x02\x1b\x43"; - case 21: // D + case 33: // D return "\x02\x1b\x44"; - case 22: // E + case 34: // E return "\x02\x1b\x45"; - case 23: // F + case 35: // F return "\x02\x1b\x46"; - case 24: // G + case 36: // G return "\x02\x1b\x47"; - case 25: // H + case 37: // H return "\x02\x1b\x48"; - case 26: // I + case 38: // I return "\x02\x1b\x49"; - case 27: // J + case 39: // J return "\x02\x1b\x4a"; - case 28: // K + case 40: // K return "\x02\x1b\x4b"; - case 29: // L + case 41: // L return "\x02\x1b\x4c"; - case 30: // M + case 42: // M return "\x02\x1b\x4d"; - case 31: // N + case 43: // N return "\x02\x1b\x4e"; - case 32: // O + case 44: // O return "\x02\x1b\x4f"; - case 33: // P + case 45: // P return "\x02\x1b\x50"; - case 34: // Q + case 46: // Q return "\x02\x1b\x51"; - case 35: // R + case 47: // R return "\x02\x1b\x52"; - case 36: // S + case 48: // S return "\x02\x1b\x53"; - case 37: // T + case 49: // T return "\x02\x1b\x54"; - case 38: // U + case 50: // U return "\x02\x1b\x55"; - case 39: // V + case 51: // V return "\x02\x1b\x56"; - case 40: // W + case 52: // W return "\x02\x1b\x57"; - case 41: // X + case 53: // X return "\x02\x1b\x58"; - case 42: // Y + case 54: // Y return "\x02\x1b\x59"; - case 43: // Z + case 55: // Z return "\x02\x1b\x5a"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x02\x1b\x7b"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x02\x1b\x7c"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x02\x1b\x7d"; - case 47: // GRAVE_ACCENT - return "\x02\x1b\x7e"; - case 51: // UNDERSCORE + case 59: // UNDERSCORE return "\x02\x1b\x5f"; - case 52: // ESCAPE + case 60: // GRAVE_ACCENT + return "\x02\x1b\x7e"; + case 113: // ESCAPE return "\x02\x1b\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x02\x1b\x0d"; - case 54: // TAB + case 115: // TAB return "\x03\x1b\x5b\x5a"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x02\x1b\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x34\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x34\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x34\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x34\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x34\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x34\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x34\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x34\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x34\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x34\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x34\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x34\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x34\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x34\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x34\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x34\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x34\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x34\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x34\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x34\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x34\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x34\x7e"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x34\x7e"; } // end switch(key) case 0x6: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x00"; - case 18: // A + case 30: // A return "\x02\x1b\x01"; - case 19: // B + case 31: // B return "\x02\x1b\x02"; - case 20: // C + case 32: // C return "\x02\x1b\x03"; - case 21: // D + case 33: // D return "\x02\x1b\x04"; - case 22: // E + case 34: // E return "\x02\x1b\x05"; - case 23: // F + case 35: // F return "\x02\x1b\x06"; - case 24: // G + case 36: // G return "\x02\x1b\x07"; - case 25: // H + case 37: // H return "\x02\x1b\x08"; - case 26: // I + case 38: // I return "\x02\x1b\x09"; - case 27: // J + case 39: // J return "\x02\x1b\x0a"; - case 28: // K + case 40: // K return "\x02\x1b\x0b"; - case 29: // L + case 41: // L return "\x02\x1b\x0c"; - case 30: // M + case 42: // M return "\x02\x1b\x0d"; - case 31: // N + case 43: // N return "\x02\x1b\x0e"; - case 32: // O + case 44: // O return "\x02\x1b\x0f"; - case 33: // P + case 45: // P return "\x02\x1b\x10"; - case 34: // Q + case 46: // Q return "\x02\x1b\x11"; - case 35: // R + case 47: // R return "\x02\x1b\x12"; - case 36: // S + case 48: // S return "\x02\x1b\x13"; - case 37: // T + case 49: // T return "\x02\x1b\x14"; - case 38: // U + case 50: // U return "\x02\x1b\x15"; - case 39: // V + case 51: // V return "\x02\x1b\x16"; - case 40: // W + case 52: // W return "\x02\x1b\x17"; - case 41: // X + case 53: // X return "\x02\x1b\x18"; - case 42: // Y + case 54: // Y return "\x02\x1b\x19"; - case 43: // Z + case 55: // Z return "\x02\x1b\x1a"; - case 52: // ESCAPE + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x37\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x37\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x37\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x37\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x37\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x37\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x37\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x37\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x37\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x37\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x37\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x37\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x37\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x37\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x37\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x37\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x37\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x37\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x37\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x37\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x37\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x37\x7e"; } // end switch(key) case 0x7: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x38\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x38\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x38\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x38\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x38\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x38\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x38\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x38\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x38\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x38\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x38\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x38\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x38\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x38\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x38\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x38\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x38\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x38\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x38\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x38\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x38\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x38\x7e"; } // end switch(key) case 0x8: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x9: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xa: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xb: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xc: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xd: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xe: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xf: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) } // end switch(mods) @@ -2160,1663 +2221,1663 @@ key_lookup(uint8_t key, KeyboardMode mode, uint8_t mods, uint8_t action) { case 2: // REPEAT switch (mods & 0xf) { case 0x0: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x1: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x03\x1b\x5b\x5a"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x32\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x32\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x32\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x32\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x32\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x32\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x32\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x32\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x32\x7e"; } // end switch(key) case 0x2: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x01\x00"; - case 1: // APOSTROPHE + case 6: // APOSTROPHE return "\x01\x27"; - case 2: // COMMA + case 10: // COMMA return "\x01\x2c"; - case 3: // MINUS + case 11: // MINUS return "\x01\x2d"; - case 4: // PERIOD + case 12: // PERIOD return "\x01\x2e"; - case 5: // SLASH + case 13: // SLASH return "\x01\x1f"; - case 6: // 0 + case 14: // 0 return "\x01\x30"; - case 7: // 1 + case 15: // 1 return "\x01\x31"; - case 8: // 2 + case 16: // 2 return "\x01\x00"; - case 9: // 3 + case 17: // 3 return "\x01\x1b"; - case 10: // 4 + case 18: // 4 return "\x01\x1c"; - case 11: // 5 + case 19: // 5 return "\x01\x1d"; - case 12: // 6 + case 20: // 6 return "\x01\x1e"; - case 13: // 7 + case 21: // 7 return "\x01\x1f"; - case 14: // 8 + case 22: // 8 return "\x01\x7f"; - case 15: // 9 + case 23: // 9 return "\x01\x39"; - case 16: // SEMICOLON + case 25: // SEMICOLON return "\x01\x3b"; - case 17: // EQUAL + case 27: // EQUAL return "\x01\x3d"; - case 18: // A + case 30: // A return "\x01\x01"; - case 19: // B + case 31: // B return "\x01\x02"; - case 20: // C + case 32: // C return "\x01\x03"; - case 21: // D + case 33: // D return "\x01\x04"; - case 22: // E + case 34: // E return "\x01\x05"; - case 23: // F + case 35: // F return "\x01\x06"; - case 24: // G + case 36: // G return "\x01\x07"; - case 25: // H + case 37: // H return "\x01\x08"; - case 26: // I + case 38: // I return "\x01\x09"; - case 27: // J + case 39: // J return "\x01\x0a"; - case 28: // K + case 40: // K return "\x01\x0b"; - case 29: // L + case 41: // L return "\x01\x0c"; - case 30: // M + case 42: // M return "\x01\x0d"; - case 31: // N + case 43: // N return "\x01\x0e"; - case 32: // O + case 44: // O return "\x01\x0f"; - case 33: // P + case 45: // P return "\x01\x10"; - case 34: // Q + case 46: // Q return "\x01\x11"; - case 35: // R + case 47: // R return "\x01\x12"; - case 36: // S + case 48: // S return "\x01\x13"; - case 37: // T + case 49: // T return "\x01\x14"; - case 38: // U + case 50: // U return "\x01\x15"; - case 39: // V + case 51: // V return "\x01\x16"; - case 40: // W + case 52: // W return "\x01\x17"; - case 41: // X + case 53: // X return "\x01\x18"; - case 42: // Y + case 54: // Y return "\x01\x19"; - case 43: // Z + case 55: // Z return "\x01\x1a"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x01\x1b"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x01\x1c"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x01\x1d"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE return "\x01\x00"; - case 51: // UNDERSCORE + case 60: // GRAVE_ACCENT return "\x01\x00"; - case 52: // ESCAPE + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x08"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x35\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x35\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x35\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x35\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x35\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x35\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x35\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x35\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x35\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x35\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x35\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x35\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x35\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x35\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x35\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x35\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x35\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x35\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x35\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x35\x7e"; } // end switch(key) case 0x3: - switch(key & 0x7f) { default: return NULL; - case 3: // MINUS + switch(key & 0xff) { default: return NULL; + case 11: // MINUS return "\x01\x1f"; - case 5: // SLASH + case 13: // SLASH return "\x01\x7f"; - case 8: // 2 + case 16: // 2 return "\x01\x00"; - case 12: // 6 + case 20: // 6 return "\x01\x1e"; - case 52: // ESCAPE + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x36\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x36\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x36\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x36\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x36\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x36\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x36\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x36\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x36\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x36\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x36\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x36\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x36\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x36\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x36\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x36\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x36\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x36\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x36\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x36\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x36\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x36\x7e"; } // end switch(key) case 0x4: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; - case 1: // APOSTROPHE + case 6: // APOSTROPHE return "\x02\x1b\x27"; - case 2: // COMMA + case 10: // COMMA return "\x02\x1b\x2c"; - case 3: // MINUS + case 11: // MINUS return "\x02\x1b\x2d"; - case 4: // PERIOD + case 12: // PERIOD return "\x02\x1b\x2e"; - case 5: // SLASH + case 13: // SLASH return "\x02\x1b\x2f"; - case 6: // 0 + case 14: // 0 return "\x02\x1b\x30"; - case 7: // 1 + case 15: // 1 return "\x02\x1b\x31"; - case 8: // 2 + case 16: // 2 return "\x02\x1b\x32"; - case 9: // 3 + case 17: // 3 return "\x02\x1b\x33"; - case 10: // 4 + case 18: // 4 return "\x02\x1b\x34"; - case 11: // 5 + case 19: // 5 return "\x02\x1b\x35"; - case 12: // 6 + case 20: // 6 return "\x02\x1b\x36"; - case 13: // 7 + case 21: // 7 return "\x02\x1b\x37"; - case 14: // 8 + case 22: // 8 return "\x02\x1b\x38"; - case 15: // 9 + case 23: // 9 return "\x02\x1b\x39"; - case 16: // SEMICOLON + case 25: // SEMICOLON return "\x02\x1b\x3b"; - case 17: // EQUAL + case 27: // EQUAL return "\x02\x1b\x3d"; - case 18: // A + case 30: // A return "\x02\x1b\x61"; - case 19: // B + case 31: // B return "\x02\x1b\x62"; - case 20: // C + case 32: // C return "\x02\x1b\x63"; - case 21: // D + case 33: // D return "\x02\x1b\x64"; - case 22: // E + case 34: // E return "\x02\x1b\x65"; - case 23: // F + case 35: // F return "\x02\x1b\x66"; - case 24: // G + case 36: // G return "\x02\x1b\x67"; - case 25: // H + case 37: // H return "\x02\x1b\x68"; - case 26: // I + case 38: // I return "\x02\x1b\x69"; - case 27: // J + case 39: // J return "\x02\x1b\x6a"; - case 28: // K + case 40: // K return "\x02\x1b\x6b"; - case 29: // L + case 41: // L return "\x02\x1b\x6c"; - case 30: // M + case 42: // M return "\x02\x1b\x6d"; - case 31: // N + case 43: // N return "\x02\x1b\x6e"; - case 32: // O + case 44: // O return "\x02\x1b\x6f"; - case 33: // P + case 45: // P return "\x02\x1b\x70"; - case 34: // Q + case 46: // Q return "\x02\x1b\x71"; - case 35: // R + case 47: // R return "\x02\x1b\x72"; - case 36: // S + case 48: // S return "\x02\x1b\x73"; - case 37: // T + case 49: // T return "\x02\x1b\x74"; - case 38: // U + case 50: // U return "\x02\x1b\x75"; - case 39: // V + case 51: // V return "\x02\x1b\x76"; - case 40: // W + case 52: // W return "\x02\x1b\x77"; - case 41: // X + case 53: // X return "\x02\x1b\x78"; - case 42: // Y + case 54: // Y return "\x02\x1b\x79"; - case 43: // Z + case 55: // Z return "\x02\x1b\x7a"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x02\x1b\x5b"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x02\x1b\x5c"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x02\x1b\x5d"; - case 47: // GRAVE_ACCENT - return "\x02\x1b\x60"; - case 51: // UNDERSCORE + case 59: // UNDERSCORE return "\x02\x1b\x5f"; - case 52: // ESCAPE + case 60: // GRAVE_ACCENT + return "\x02\x1b\x60"; + case 113: // ESCAPE return "\x02\x1b\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x02\x1b\x0d"; - case 54: // TAB + case 115: // TAB return "\x02\x1b\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x02\x1b\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x33\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x33\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x33\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x33\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x33\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x33\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x33\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x33\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x33\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x33\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x33\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x33\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x33\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x33\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x33\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x33\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x33\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x33\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x33\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x33\x7e"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x33\x7e"; } // end switch(key) case 0x5: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; - case 1: // APOSTROPHE + case 6: // APOSTROPHE return "\x02\x1b\x22"; - case 2: // COMMA + case 10: // COMMA return "\x02\x1b\x3c"; - case 3: // MINUS + case 11: // MINUS return "\x02\x1b\x5f"; - case 4: // PERIOD + case 12: // PERIOD return "\x02\x1b\x3e"; - case 5: // SLASH + case 13: // SLASH return "\x02\x1b\x3f"; - case 6: // 0 + case 14: // 0 return "\x02\x1b\x29"; - case 7: // 1 + case 15: // 1 return "\x02\x1b\x21"; - case 8: // 2 + case 16: // 2 return "\x02\x1b\x40"; - case 9: // 3 + case 17: // 3 return "\x02\x1b\x23"; - case 10: // 4 + case 18: // 4 return "\x02\x1b\x24"; - case 11: // 5 + case 19: // 5 return "\x02\x1b\x25"; - case 12: // 6 + case 20: // 6 return "\x02\x1b\x5e"; - case 13: // 7 + case 21: // 7 return "\x02\x1b\x26"; - case 14: // 8 + case 22: // 8 return "\x02\x1b\x2a"; - case 15: // 9 + case 23: // 9 return "\x02\x1b\x28"; - case 16: // SEMICOLON + case 25: // SEMICOLON return "\x02\x1b\x3a"; - case 17: // EQUAL + case 27: // EQUAL return "\x02\x1b\x2b"; - case 18: // A + case 30: // A return "\x02\x1b\x41"; - case 19: // B + case 31: // B return "\x02\x1b\x42"; - case 20: // C + case 32: // C return "\x02\x1b\x43"; - case 21: // D + case 33: // D return "\x02\x1b\x44"; - case 22: // E + case 34: // E return "\x02\x1b\x45"; - case 23: // F + case 35: // F return "\x02\x1b\x46"; - case 24: // G + case 36: // G return "\x02\x1b\x47"; - case 25: // H + case 37: // H return "\x02\x1b\x48"; - case 26: // I + case 38: // I return "\x02\x1b\x49"; - case 27: // J + case 39: // J return "\x02\x1b\x4a"; - case 28: // K + case 40: // K return "\x02\x1b\x4b"; - case 29: // L + case 41: // L return "\x02\x1b\x4c"; - case 30: // M + case 42: // M return "\x02\x1b\x4d"; - case 31: // N + case 43: // N return "\x02\x1b\x4e"; - case 32: // O + case 44: // O return "\x02\x1b\x4f"; - case 33: // P + case 45: // P return "\x02\x1b\x50"; - case 34: // Q + case 46: // Q return "\x02\x1b\x51"; - case 35: // R + case 47: // R return "\x02\x1b\x52"; - case 36: // S + case 48: // S return "\x02\x1b\x53"; - case 37: // T + case 49: // T return "\x02\x1b\x54"; - case 38: // U + case 50: // U return "\x02\x1b\x55"; - case 39: // V + case 51: // V return "\x02\x1b\x56"; - case 40: // W + case 52: // W return "\x02\x1b\x57"; - case 41: // X + case 53: // X return "\x02\x1b\x58"; - case 42: // Y + case 54: // Y return "\x02\x1b\x59"; - case 43: // Z + case 55: // Z return "\x02\x1b\x5a"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x02\x1b\x7b"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x02\x1b\x7c"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x02\x1b\x7d"; - case 47: // GRAVE_ACCENT - return "\x02\x1b\x7e"; - case 51: // UNDERSCORE + case 59: // UNDERSCORE return "\x02\x1b\x5f"; - case 52: // ESCAPE + case 60: // GRAVE_ACCENT + return "\x02\x1b\x7e"; + case 113: // ESCAPE return "\x02\x1b\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x02\x1b\x0d"; - case 54: // TAB + case 115: // TAB return "\x03\x1b\x5b\x5a"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x02\x1b\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x34\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x34\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x34\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x34\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x34\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x34\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x34\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x34\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x34\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x34\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x34\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x34\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x34\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x34\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x34\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x34\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x34\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x34\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x34\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x34\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x34\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x34\x7e"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x34\x7e"; } // end switch(key) case 0x6: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x00"; - case 18: // A + case 30: // A return "\x02\x1b\x01"; - case 19: // B + case 31: // B return "\x02\x1b\x02"; - case 20: // C + case 32: // C return "\x02\x1b\x03"; - case 21: // D + case 33: // D return "\x02\x1b\x04"; - case 22: // E + case 34: // E return "\x02\x1b\x05"; - case 23: // F + case 35: // F return "\x02\x1b\x06"; - case 24: // G + case 36: // G return "\x02\x1b\x07"; - case 25: // H + case 37: // H return "\x02\x1b\x08"; - case 26: // I + case 38: // I return "\x02\x1b\x09"; - case 27: // J + case 39: // J return "\x02\x1b\x0a"; - case 28: // K + case 40: // K return "\x02\x1b\x0b"; - case 29: // L + case 41: // L return "\x02\x1b\x0c"; - case 30: // M + case 42: // M return "\x02\x1b\x0d"; - case 31: // N + case 43: // N return "\x02\x1b\x0e"; - case 32: // O + case 44: // O return "\x02\x1b\x0f"; - case 33: // P + case 45: // P return "\x02\x1b\x10"; - case 34: // Q + case 46: // Q return "\x02\x1b\x11"; - case 35: // R + case 47: // R return "\x02\x1b\x12"; - case 36: // S + case 48: // S return "\x02\x1b\x13"; - case 37: // T + case 49: // T return "\x02\x1b\x14"; - case 38: // U + case 50: // U return "\x02\x1b\x15"; - case 39: // V + case 51: // V return "\x02\x1b\x16"; - case 40: // W + case 52: // W return "\x02\x1b\x17"; - case 41: // X + case 53: // X return "\x02\x1b\x18"; - case 42: // Y + case 54: // Y return "\x02\x1b\x19"; - case 43: // Z + case 55: // Z return "\x02\x1b\x1a"; - case 52: // ESCAPE + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x37\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x37\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x37\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x37\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x37\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x37\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x37\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x37\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x37\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x37\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x37\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x37\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x37\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x37\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x37\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x37\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x37\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x37\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x37\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x37\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x37\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x37\x7e"; } // end switch(key) case 0x7: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x38\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x38\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x38\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x38\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x38\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x38\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x38\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x38\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x38\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x38\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x38\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x38\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x38\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x38\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x38\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x38\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x38\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x38\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x38\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x38\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x38\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x38\x7e"; } // end switch(key) case 0x8: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x9: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xa: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xb: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xc: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xd: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xe: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xf: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x5b\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x5b\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x5b\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x5b\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x5b\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x5b\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) } // end switch(mods) @@ -3834,1663 +3895,1663 @@ key_lookup(uint8_t key, KeyboardMode mode, uint8_t mods, uint8_t action) { case 1: // PRESS switch (mods & 0xf) { case 0x0: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x1: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x03\x1b\x5b\x5a"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x32\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x32\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x32\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x32\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x32\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x32\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x32\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x32\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x32\x7e"; } // end switch(key) case 0x2: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x01\x00"; - case 1: // APOSTROPHE + case 6: // APOSTROPHE return "\x01\x27"; - case 2: // COMMA + case 10: // COMMA return "\x01\x2c"; - case 3: // MINUS + case 11: // MINUS return "\x01\x2d"; - case 4: // PERIOD + case 12: // PERIOD return "\x01\x2e"; - case 5: // SLASH + case 13: // SLASH return "\x01\x1f"; - case 6: // 0 + case 14: // 0 return "\x01\x30"; - case 7: // 1 + case 15: // 1 return "\x01\x31"; - case 8: // 2 + case 16: // 2 return "\x01\x00"; - case 9: // 3 + case 17: // 3 return "\x01\x1b"; - case 10: // 4 + case 18: // 4 return "\x01\x1c"; - case 11: // 5 + case 19: // 5 return "\x01\x1d"; - case 12: // 6 + case 20: // 6 return "\x01\x1e"; - case 13: // 7 + case 21: // 7 return "\x01\x1f"; - case 14: // 8 + case 22: // 8 return "\x01\x7f"; - case 15: // 9 + case 23: // 9 return "\x01\x39"; - case 16: // SEMICOLON + case 25: // SEMICOLON return "\x01\x3b"; - case 17: // EQUAL + case 27: // EQUAL return "\x01\x3d"; - case 18: // A + case 30: // A return "\x01\x01"; - case 19: // B + case 31: // B return "\x01\x02"; - case 20: // C + case 32: // C return "\x01\x03"; - case 21: // D + case 33: // D return "\x01\x04"; - case 22: // E + case 34: // E return "\x01\x05"; - case 23: // F + case 35: // F return "\x01\x06"; - case 24: // G + case 36: // G return "\x01\x07"; - case 25: // H + case 37: // H return "\x01\x08"; - case 26: // I + case 38: // I return "\x01\x09"; - case 27: // J + case 39: // J return "\x01\x0a"; - case 28: // K + case 40: // K return "\x01\x0b"; - case 29: // L + case 41: // L return "\x01\x0c"; - case 30: // M + case 42: // M return "\x01\x0d"; - case 31: // N + case 43: // N return "\x01\x0e"; - case 32: // O + case 44: // O return "\x01\x0f"; - case 33: // P + case 45: // P return "\x01\x10"; - case 34: // Q + case 46: // Q return "\x01\x11"; - case 35: // R + case 47: // R return "\x01\x12"; - case 36: // S + case 48: // S return "\x01\x13"; - case 37: // T + case 49: // T return "\x01\x14"; - case 38: // U + case 50: // U return "\x01\x15"; - case 39: // V + case 51: // V return "\x01\x16"; - case 40: // W + case 52: // W return "\x01\x17"; - case 41: // X + case 53: // X return "\x01\x18"; - case 42: // Y + case 54: // Y return "\x01\x19"; - case 43: // Z + case 55: // Z return "\x01\x1a"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x01\x1b"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x01\x1c"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x01\x1d"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE return "\x01\x00"; - case 51: // UNDERSCORE + case 60: // GRAVE_ACCENT return "\x01\x00"; - case 52: // ESCAPE + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x08"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x35\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x35\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x35\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x35\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x35\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x35\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x35\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x35\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x35\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x35\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x35\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x35\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x35\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x35\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x35\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x35\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x35\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x35\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x35\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x35\x7e"; } // end switch(key) case 0x3: - switch(key & 0x7f) { default: return NULL; - case 3: // MINUS + switch(key & 0xff) { default: return NULL; + case 11: // MINUS return "\x01\x1f"; - case 5: // SLASH + case 13: // SLASH return "\x01\x7f"; - case 8: // 2 + case 16: // 2 return "\x01\x00"; - case 12: // 6 + case 20: // 6 return "\x01\x1e"; - case 52: // ESCAPE + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x36\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x36\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x36\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x36\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x36\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x36\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x36\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x36\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x36\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x36\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x36\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x36\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x36\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x36\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x36\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x36\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x36\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x36\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x36\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x36\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x36\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x36\x7e"; } // end switch(key) case 0x4: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; - case 1: // APOSTROPHE + case 6: // APOSTROPHE return "\x02\x1b\x27"; - case 2: // COMMA + case 10: // COMMA return "\x02\x1b\x2c"; - case 3: // MINUS + case 11: // MINUS return "\x02\x1b\x2d"; - case 4: // PERIOD + case 12: // PERIOD return "\x02\x1b\x2e"; - case 5: // SLASH + case 13: // SLASH return "\x02\x1b\x2f"; - case 6: // 0 + case 14: // 0 return "\x02\x1b\x30"; - case 7: // 1 + case 15: // 1 return "\x02\x1b\x31"; - case 8: // 2 + case 16: // 2 return "\x02\x1b\x32"; - case 9: // 3 + case 17: // 3 return "\x02\x1b\x33"; - case 10: // 4 + case 18: // 4 return "\x02\x1b\x34"; - case 11: // 5 + case 19: // 5 return "\x02\x1b\x35"; - case 12: // 6 + case 20: // 6 return "\x02\x1b\x36"; - case 13: // 7 + case 21: // 7 return "\x02\x1b\x37"; - case 14: // 8 + case 22: // 8 return "\x02\x1b\x38"; - case 15: // 9 + case 23: // 9 return "\x02\x1b\x39"; - case 16: // SEMICOLON + case 25: // SEMICOLON return "\x02\x1b\x3b"; - case 17: // EQUAL + case 27: // EQUAL return "\x02\x1b\x3d"; - case 18: // A + case 30: // A return "\x02\x1b\x61"; - case 19: // B + case 31: // B return "\x02\x1b\x62"; - case 20: // C + case 32: // C return "\x02\x1b\x63"; - case 21: // D + case 33: // D return "\x02\x1b\x64"; - case 22: // E + case 34: // E return "\x02\x1b\x65"; - case 23: // F + case 35: // F return "\x02\x1b\x66"; - case 24: // G + case 36: // G return "\x02\x1b\x67"; - case 25: // H + case 37: // H return "\x02\x1b\x68"; - case 26: // I + case 38: // I return "\x02\x1b\x69"; - case 27: // J + case 39: // J return "\x02\x1b\x6a"; - case 28: // K + case 40: // K return "\x02\x1b\x6b"; - case 29: // L + case 41: // L return "\x02\x1b\x6c"; - case 30: // M + case 42: // M return "\x02\x1b\x6d"; - case 31: // N + case 43: // N return "\x02\x1b\x6e"; - case 32: // O + case 44: // O return "\x02\x1b\x6f"; - case 33: // P + case 45: // P return "\x02\x1b\x70"; - case 34: // Q + case 46: // Q return "\x02\x1b\x71"; - case 35: // R + case 47: // R return "\x02\x1b\x72"; - case 36: // S + case 48: // S return "\x02\x1b\x73"; - case 37: // T + case 49: // T return "\x02\x1b\x74"; - case 38: // U + case 50: // U return "\x02\x1b\x75"; - case 39: // V + case 51: // V return "\x02\x1b\x76"; - case 40: // W + case 52: // W return "\x02\x1b\x77"; - case 41: // X + case 53: // X return "\x02\x1b\x78"; - case 42: // Y + case 54: // Y return "\x02\x1b\x79"; - case 43: // Z + case 55: // Z return "\x02\x1b\x7a"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x02\x1b\x5b"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x02\x1b\x5c"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x02\x1b\x5d"; - case 47: // GRAVE_ACCENT - return "\x02\x1b\x60"; - case 51: // UNDERSCORE + case 59: // UNDERSCORE return "\x02\x1b\x5f"; - case 52: // ESCAPE + case 60: // GRAVE_ACCENT + return "\x02\x1b\x60"; + case 113: // ESCAPE return "\x02\x1b\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x02\x1b\x0d"; - case 54: // TAB + case 115: // TAB return "\x02\x1b\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x02\x1b\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x33\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x33\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x33\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x33\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x33\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x33\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x33\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x33\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x33\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x33\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x33\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x33\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x33\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x33\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x33\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x33\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x33\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x33\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x33\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x33\x7e"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x33\x7e"; } // end switch(key) case 0x5: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; - case 1: // APOSTROPHE + case 6: // APOSTROPHE return "\x02\x1b\x22"; - case 2: // COMMA + case 10: // COMMA return "\x02\x1b\x3c"; - case 3: // MINUS + case 11: // MINUS return "\x02\x1b\x5f"; - case 4: // PERIOD + case 12: // PERIOD return "\x02\x1b\x3e"; - case 5: // SLASH + case 13: // SLASH return "\x02\x1b\x3f"; - case 6: // 0 + case 14: // 0 return "\x02\x1b\x29"; - case 7: // 1 + case 15: // 1 return "\x02\x1b\x21"; - case 8: // 2 + case 16: // 2 return "\x02\x1b\x40"; - case 9: // 3 + case 17: // 3 return "\x02\x1b\x23"; - case 10: // 4 + case 18: // 4 return "\x02\x1b\x24"; - case 11: // 5 + case 19: // 5 return "\x02\x1b\x25"; - case 12: // 6 + case 20: // 6 return "\x02\x1b\x5e"; - case 13: // 7 + case 21: // 7 return "\x02\x1b\x26"; - case 14: // 8 + case 22: // 8 return "\x02\x1b\x2a"; - case 15: // 9 + case 23: // 9 return "\x02\x1b\x28"; - case 16: // SEMICOLON + case 25: // SEMICOLON return "\x02\x1b\x3a"; - case 17: // EQUAL + case 27: // EQUAL return "\x02\x1b\x2b"; - case 18: // A + case 30: // A return "\x02\x1b\x41"; - case 19: // B + case 31: // B return "\x02\x1b\x42"; - case 20: // C + case 32: // C return "\x02\x1b\x43"; - case 21: // D + case 33: // D return "\x02\x1b\x44"; - case 22: // E + case 34: // E return "\x02\x1b\x45"; - case 23: // F + case 35: // F return "\x02\x1b\x46"; - case 24: // G + case 36: // G return "\x02\x1b\x47"; - case 25: // H + case 37: // H return "\x02\x1b\x48"; - case 26: // I + case 38: // I return "\x02\x1b\x49"; - case 27: // J + case 39: // J return "\x02\x1b\x4a"; - case 28: // K + case 40: // K return "\x02\x1b\x4b"; - case 29: // L + case 41: // L return "\x02\x1b\x4c"; - case 30: // M + case 42: // M return "\x02\x1b\x4d"; - case 31: // N + case 43: // N return "\x02\x1b\x4e"; - case 32: // O + case 44: // O return "\x02\x1b\x4f"; - case 33: // P + case 45: // P return "\x02\x1b\x50"; - case 34: // Q + case 46: // Q return "\x02\x1b\x51"; - case 35: // R + case 47: // R return "\x02\x1b\x52"; - case 36: // S + case 48: // S return "\x02\x1b\x53"; - case 37: // T + case 49: // T return "\x02\x1b\x54"; - case 38: // U + case 50: // U return "\x02\x1b\x55"; - case 39: // V + case 51: // V return "\x02\x1b\x56"; - case 40: // W + case 52: // W return "\x02\x1b\x57"; - case 41: // X + case 53: // X return "\x02\x1b\x58"; - case 42: // Y + case 54: // Y return "\x02\x1b\x59"; - case 43: // Z + case 55: // Z return "\x02\x1b\x5a"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x02\x1b\x7b"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x02\x1b\x7c"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x02\x1b\x7d"; - case 47: // GRAVE_ACCENT - return "\x02\x1b\x7e"; - case 51: // UNDERSCORE + case 59: // UNDERSCORE return "\x02\x1b\x5f"; - case 52: // ESCAPE + case 60: // GRAVE_ACCENT + return "\x02\x1b\x7e"; + case 113: // ESCAPE return "\x02\x1b\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x02\x1b\x0d"; - case 54: // TAB + case 115: // TAB return "\x03\x1b\x5b\x5a"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x02\x1b\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x34\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x34\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x34\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x34\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x34\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x34\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x34\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x34\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x34\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x34\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x34\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x34\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x34\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x34\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x34\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x34\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x34\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x34\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x34\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x34\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x34\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x34\x7e"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x34\x7e"; } // end switch(key) case 0x6: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x00"; - case 18: // A + case 30: // A return "\x02\x1b\x01"; - case 19: // B + case 31: // B return "\x02\x1b\x02"; - case 20: // C + case 32: // C return "\x02\x1b\x03"; - case 21: // D + case 33: // D return "\x02\x1b\x04"; - case 22: // E + case 34: // E return "\x02\x1b\x05"; - case 23: // F + case 35: // F return "\x02\x1b\x06"; - case 24: // G + case 36: // G return "\x02\x1b\x07"; - case 25: // H + case 37: // H return "\x02\x1b\x08"; - case 26: // I + case 38: // I return "\x02\x1b\x09"; - case 27: // J + case 39: // J return "\x02\x1b\x0a"; - case 28: // K + case 40: // K return "\x02\x1b\x0b"; - case 29: // L + case 41: // L return "\x02\x1b\x0c"; - case 30: // M + case 42: // M return "\x02\x1b\x0d"; - case 31: // N + case 43: // N return "\x02\x1b\x0e"; - case 32: // O + case 44: // O return "\x02\x1b\x0f"; - case 33: // P + case 45: // P return "\x02\x1b\x10"; - case 34: // Q + case 46: // Q return "\x02\x1b\x11"; - case 35: // R + case 47: // R return "\x02\x1b\x12"; - case 36: // S + case 48: // S return "\x02\x1b\x13"; - case 37: // T + case 49: // T return "\x02\x1b\x14"; - case 38: // U + case 50: // U return "\x02\x1b\x15"; - case 39: // V + case 51: // V return "\x02\x1b\x16"; - case 40: // W + case 52: // W return "\x02\x1b\x17"; - case 41: // X + case 53: // X return "\x02\x1b\x18"; - case 42: // Y + case 54: // Y return "\x02\x1b\x19"; - case 43: // Z + case 55: // Z return "\x02\x1b\x1a"; - case 52: // ESCAPE + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x37\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x37\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x37\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x37\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x37\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x37\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x37\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x37\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x37\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x37\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x37\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x37\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x37\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x37\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x37\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x37\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x37\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x37\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x37\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x37\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x37\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x37\x7e"; } // end switch(key) case 0x7: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x38\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x38\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x38\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x38\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x38\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x38\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x38\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x38\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x38\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x38\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x38\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x38\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x38\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x38\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x38\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x38\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x38\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x38\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x38\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x38\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x38\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x38\x7e"; } // end switch(key) case 0x8: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x9: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xa: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xb: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xc: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xd: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xe: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xf: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) } // end switch(mods) @@ -5499,1663 +5560,1663 @@ key_lookup(uint8_t key, KeyboardMode mode, uint8_t mods, uint8_t action) { case 2: // REPEAT switch (mods & 0xf) { case 0x0: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x1: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x03\x1b\x5b\x5a"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x32\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x32\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x32\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x32\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x32\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x32\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x32\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x32\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x32\x7e"; } // end switch(key) case 0x2: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x01\x00"; - case 1: // APOSTROPHE + case 6: // APOSTROPHE return "\x01\x27"; - case 2: // COMMA + case 10: // COMMA return "\x01\x2c"; - case 3: // MINUS + case 11: // MINUS return "\x01\x2d"; - case 4: // PERIOD + case 12: // PERIOD return "\x01\x2e"; - case 5: // SLASH + case 13: // SLASH return "\x01\x1f"; - case 6: // 0 + case 14: // 0 return "\x01\x30"; - case 7: // 1 + case 15: // 1 return "\x01\x31"; - case 8: // 2 + case 16: // 2 return "\x01\x00"; - case 9: // 3 + case 17: // 3 return "\x01\x1b"; - case 10: // 4 + case 18: // 4 return "\x01\x1c"; - case 11: // 5 + case 19: // 5 return "\x01\x1d"; - case 12: // 6 + case 20: // 6 return "\x01\x1e"; - case 13: // 7 + case 21: // 7 return "\x01\x1f"; - case 14: // 8 + case 22: // 8 return "\x01\x7f"; - case 15: // 9 + case 23: // 9 return "\x01\x39"; - case 16: // SEMICOLON + case 25: // SEMICOLON return "\x01\x3b"; - case 17: // EQUAL + case 27: // EQUAL return "\x01\x3d"; - case 18: // A + case 30: // A return "\x01\x01"; - case 19: // B + case 31: // B return "\x01\x02"; - case 20: // C + case 32: // C return "\x01\x03"; - case 21: // D + case 33: // D return "\x01\x04"; - case 22: // E + case 34: // E return "\x01\x05"; - case 23: // F + case 35: // F return "\x01\x06"; - case 24: // G + case 36: // G return "\x01\x07"; - case 25: // H + case 37: // H return "\x01\x08"; - case 26: // I + case 38: // I return "\x01\x09"; - case 27: // J + case 39: // J return "\x01\x0a"; - case 28: // K + case 40: // K return "\x01\x0b"; - case 29: // L + case 41: // L return "\x01\x0c"; - case 30: // M + case 42: // M return "\x01\x0d"; - case 31: // N + case 43: // N return "\x01\x0e"; - case 32: // O + case 44: // O return "\x01\x0f"; - case 33: // P + case 45: // P return "\x01\x10"; - case 34: // Q + case 46: // Q return "\x01\x11"; - case 35: // R + case 47: // R return "\x01\x12"; - case 36: // S + case 48: // S return "\x01\x13"; - case 37: // T + case 49: // T return "\x01\x14"; - case 38: // U + case 50: // U return "\x01\x15"; - case 39: // V + case 51: // V return "\x01\x16"; - case 40: // W + case 52: // W return "\x01\x17"; - case 41: // X + case 53: // X return "\x01\x18"; - case 42: // Y + case 54: // Y return "\x01\x19"; - case 43: // Z + case 55: // Z return "\x01\x1a"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x01\x1b"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x01\x1c"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x01\x1d"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE return "\x01\x00"; - case 51: // UNDERSCORE + case 60: // GRAVE_ACCENT return "\x01\x00"; - case 52: // ESCAPE + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x08"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x35\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x35\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x35\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x35\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x35\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x35\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x35\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x35\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x35\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x35\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x35\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x35\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x35\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x35\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x35\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x35\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x35\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x35\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x35\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x35\x7e"; } // end switch(key) case 0x3: - switch(key & 0x7f) { default: return NULL; - case 3: // MINUS + switch(key & 0xff) { default: return NULL; + case 11: // MINUS return "\x01\x1f"; - case 5: // SLASH + case 13: // SLASH return "\x01\x7f"; - case 8: // 2 + case 16: // 2 return "\x01\x00"; - case 12: // 6 + case 20: // 6 return "\x01\x1e"; - case 52: // ESCAPE + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x36\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x36\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x36\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x36\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x36\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x36\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x36\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x36\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x36\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x36\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x36\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x36\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x36\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x36\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x36\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x36\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x36\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x36\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x36\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x36\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x36\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x36\x7e"; } // end switch(key) case 0x4: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; - case 1: // APOSTROPHE + case 6: // APOSTROPHE return "\x02\x1b\x27"; - case 2: // COMMA + case 10: // COMMA return "\x02\x1b\x2c"; - case 3: // MINUS + case 11: // MINUS return "\x02\x1b\x2d"; - case 4: // PERIOD + case 12: // PERIOD return "\x02\x1b\x2e"; - case 5: // SLASH + case 13: // SLASH return "\x02\x1b\x2f"; - case 6: // 0 + case 14: // 0 return "\x02\x1b\x30"; - case 7: // 1 + case 15: // 1 return "\x02\x1b\x31"; - case 8: // 2 + case 16: // 2 return "\x02\x1b\x32"; - case 9: // 3 + case 17: // 3 return "\x02\x1b\x33"; - case 10: // 4 + case 18: // 4 return "\x02\x1b\x34"; - case 11: // 5 + case 19: // 5 return "\x02\x1b\x35"; - case 12: // 6 + case 20: // 6 return "\x02\x1b\x36"; - case 13: // 7 + case 21: // 7 return "\x02\x1b\x37"; - case 14: // 8 + case 22: // 8 return "\x02\x1b\x38"; - case 15: // 9 + case 23: // 9 return "\x02\x1b\x39"; - case 16: // SEMICOLON + case 25: // SEMICOLON return "\x02\x1b\x3b"; - case 17: // EQUAL + case 27: // EQUAL return "\x02\x1b\x3d"; - case 18: // A + case 30: // A return "\x02\x1b\x61"; - case 19: // B + case 31: // B return "\x02\x1b\x62"; - case 20: // C + case 32: // C return "\x02\x1b\x63"; - case 21: // D + case 33: // D return "\x02\x1b\x64"; - case 22: // E + case 34: // E return "\x02\x1b\x65"; - case 23: // F + case 35: // F return "\x02\x1b\x66"; - case 24: // G + case 36: // G return "\x02\x1b\x67"; - case 25: // H + case 37: // H return "\x02\x1b\x68"; - case 26: // I + case 38: // I return "\x02\x1b\x69"; - case 27: // J + case 39: // J return "\x02\x1b\x6a"; - case 28: // K + case 40: // K return "\x02\x1b\x6b"; - case 29: // L + case 41: // L return "\x02\x1b\x6c"; - case 30: // M + case 42: // M return "\x02\x1b\x6d"; - case 31: // N + case 43: // N return "\x02\x1b\x6e"; - case 32: // O + case 44: // O return "\x02\x1b\x6f"; - case 33: // P + case 45: // P return "\x02\x1b\x70"; - case 34: // Q + case 46: // Q return "\x02\x1b\x71"; - case 35: // R + case 47: // R return "\x02\x1b\x72"; - case 36: // S + case 48: // S return "\x02\x1b\x73"; - case 37: // T + case 49: // T return "\x02\x1b\x74"; - case 38: // U + case 50: // U return "\x02\x1b\x75"; - case 39: // V + case 51: // V return "\x02\x1b\x76"; - case 40: // W + case 52: // W return "\x02\x1b\x77"; - case 41: // X + case 53: // X return "\x02\x1b\x78"; - case 42: // Y + case 54: // Y return "\x02\x1b\x79"; - case 43: // Z + case 55: // Z return "\x02\x1b\x7a"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x02\x1b\x5b"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x02\x1b\x5c"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x02\x1b\x5d"; - case 47: // GRAVE_ACCENT - return "\x02\x1b\x60"; - case 51: // UNDERSCORE + case 59: // UNDERSCORE return "\x02\x1b\x5f"; - case 52: // ESCAPE + case 60: // GRAVE_ACCENT + return "\x02\x1b\x60"; + case 113: // ESCAPE return "\x02\x1b\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x02\x1b\x0d"; - case 54: // TAB + case 115: // TAB return "\x02\x1b\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x02\x1b\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x33\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x33\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x33\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x33\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x33\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x33\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x33\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x33\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x33\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x33\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x33\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x33\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x33\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x33\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x33\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x33\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x33\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x33\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x33\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x33\x7e"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x33\x7e"; } // end switch(key) case 0x5: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x20"; - case 1: // APOSTROPHE + case 6: // APOSTROPHE return "\x02\x1b\x22"; - case 2: // COMMA + case 10: // COMMA return "\x02\x1b\x3c"; - case 3: // MINUS + case 11: // MINUS return "\x02\x1b\x5f"; - case 4: // PERIOD + case 12: // PERIOD return "\x02\x1b\x3e"; - case 5: // SLASH + case 13: // SLASH return "\x02\x1b\x3f"; - case 6: // 0 + case 14: // 0 return "\x02\x1b\x29"; - case 7: // 1 + case 15: // 1 return "\x02\x1b\x21"; - case 8: // 2 + case 16: // 2 return "\x02\x1b\x40"; - case 9: // 3 + case 17: // 3 return "\x02\x1b\x23"; - case 10: // 4 + case 18: // 4 return "\x02\x1b\x24"; - case 11: // 5 + case 19: // 5 return "\x02\x1b\x25"; - case 12: // 6 + case 20: // 6 return "\x02\x1b\x5e"; - case 13: // 7 + case 21: // 7 return "\x02\x1b\x26"; - case 14: // 8 + case 22: // 8 return "\x02\x1b\x2a"; - case 15: // 9 + case 23: // 9 return "\x02\x1b\x28"; - case 16: // SEMICOLON + case 25: // SEMICOLON return "\x02\x1b\x3a"; - case 17: // EQUAL + case 27: // EQUAL return "\x02\x1b\x2b"; - case 18: // A + case 30: // A return "\x02\x1b\x41"; - case 19: // B + case 31: // B return "\x02\x1b\x42"; - case 20: // C + case 32: // C return "\x02\x1b\x43"; - case 21: // D + case 33: // D return "\x02\x1b\x44"; - case 22: // E + case 34: // E return "\x02\x1b\x45"; - case 23: // F + case 35: // F return "\x02\x1b\x46"; - case 24: // G + case 36: // G return "\x02\x1b\x47"; - case 25: // H + case 37: // H return "\x02\x1b\x48"; - case 26: // I + case 38: // I return "\x02\x1b\x49"; - case 27: // J + case 39: // J return "\x02\x1b\x4a"; - case 28: // K + case 40: // K return "\x02\x1b\x4b"; - case 29: // L + case 41: // L return "\x02\x1b\x4c"; - case 30: // M + case 42: // M return "\x02\x1b\x4d"; - case 31: // N + case 43: // N return "\x02\x1b\x4e"; - case 32: // O + case 44: // O return "\x02\x1b\x4f"; - case 33: // P + case 45: // P return "\x02\x1b\x50"; - case 34: // Q + case 46: // Q return "\x02\x1b\x51"; - case 35: // R + case 47: // R return "\x02\x1b\x52"; - case 36: // S + case 48: // S return "\x02\x1b\x53"; - case 37: // T + case 49: // T return "\x02\x1b\x54"; - case 38: // U + case 50: // U return "\x02\x1b\x55"; - case 39: // V + case 51: // V return "\x02\x1b\x56"; - case 40: // W + case 52: // W return "\x02\x1b\x57"; - case 41: // X + case 53: // X return "\x02\x1b\x58"; - case 42: // Y + case 54: // Y return "\x02\x1b\x59"; - case 43: // Z + case 55: // Z return "\x02\x1b\x5a"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x02\x1b\x7b"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x02\x1b\x7c"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x02\x1b\x7d"; - case 47: // GRAVE_ACCENT - return "\x02\x1b\x7e"; - case 51: // UNDERSCORE + case 59: // UNDERSCORE return "\x02\x1b\x5f"; - case 52: // ESCAPE + case 60: // GRAVE_ACCENT + return "\x02\x1b\x7e"; + case 113: // ESCAPE return "\x02\x1b\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x02\x1b\x0d"; - case 54: // TAB + case 115: // TAB return "\x03\x1b\x5b\x5a"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x02\x1b\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x34\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x34\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x34\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x34\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x34\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x34\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x34\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x34\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x34\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x34\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x34\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x34\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x34\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x34\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x34\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x34\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x34\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x34\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x34\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x34\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x34\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x34\x7e"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x34\x7e"; } // end switch(key) case 0x6: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x02\x1b\x00"; - case 18: // A + case 30: // A return "\x02\x1b\x01"; - case 19: // B + case 31: // B return "\x02\x1b\x02"; - case 20: // C + case 32: // C return "\x02\x1b\x03"; - case 21: // D + case 33: // D return "\x02\x1b\x04"; - case 22: // E + case 34: // E return "\x02\x1b\x05"; - case 23: // F + case 35: // F return "\x02\x1b\x06"; - case 24: // G + case 36: // G return "\x02\x1b\x07"; - case 25: // H + case 37: // H return "\x02\x1b\x08"; - case 26: // I + case 38: // I return "\x02\x1b\x09"; - case 27: // J + case 39: // J return "\x02\x1b\x0a"; - case 28: // K + case 40: // K return "\x02\x1b\x0b"; - case 29: // L + case 41: // L return "\x02\x1b\x0c"; - case 30: // M + case 42: // M return "\x02\x1b\x0d"; - case 31: // N + case 43: // N return "\x02\x1b\x0e"; - case 32: // O + case 44: // O return "\x02\x1b\x0f"; - case 33: // P + case 45: // P return "\x02\x1b\x10"; - case 34: // Q + case 46: // Q return "\x02\x1b\x11"; - case 35: // R + case 47: // R return "\x02\x1b\x12"; - case 36: // S + case 48: // S return "\x02\x1b\x13"; - case 37: // T + case 49: // T return "\x02\x1b\x14"; - case 38: // U + case 50: // U return "\x02\x1b\x15"; - case 39: // V + case 51: // V return "\x02\x1b\x16"; - case 40: // W + case 52: // W return "\x02\x1b\x17"; - case 41: // X + case 53: // X return "\x02\x1b\x18"; - case 42: // Y + case 54: // Y return "\x02\x1b\x19"; - case 43: // Z + case 55: // Z return "\x02\x1b\x1a"; - case 52: // ESCAPE + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x37\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x37\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x37\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x37\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x37\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x37\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x37\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x37\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x37\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x37\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x37\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x37\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x37\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x37\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x37\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x37\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x37\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x37\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x37\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x37\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x37\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x37\x7e"; } // end switch(key) case 0x7: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x06\x1b\x5b\x32\x3b\x38\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x06\x1b\x5b\x33\x3b\x38\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x06\x1b\x5b\x31\x3b\x38\x43"; - case 59: // LEFT + case 120: // LEFT return "\x06\x1b\x5b\x31\x3b\x38\x44"; - case 60: // DOWN + case 121: // DOWN return "\x06\x1b\x5b\x31\x3b\x38\x42"; - case 61: // UP + case 122: // UP return "\x06\x1b\x5b\x31\x3b\x38\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x06\x1b\x5b\x35\x3b\x38\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x06\x1b\x5b\x36\x3b\x38\x7e"; - case 64: // HOME + case 125: // HOME return "\x06\x1b\x5b\x31\x3b\x38\x48"; - case 65: // END + case 126: // END return "\x06\x1b\x5b\x31\x3b\x38\x46"; - case 71: // F1 + case 132: // F1 return "\x06\x1b\x5b\x31\x3b\x38\x50"; - case 72: // F2 + case 133: // F2 return "\x06\x1b\x5b\x31\x3b\x38\x51"; - case 73: // F3 + case 134: // F3 return "\x06\x1b\x5b\x31\x3b\x38\x52"; - case 74: // F4 + case 135: // F4 return "\x06\x1b\x5b\x31\x3b\x38\x53"; - case 75: // F5 + case 136: // F5 return "\x07\x1b\x5b\x31\x35\x3b\x38\x7e"; - case 76: // F6 + case 137: // F6 return "\x07\x1b\x5b\x31\x37\x3b\x38\x7e"; - case 77: // F7 + case 138: // F7 return "\x07\x1b\x5b\x31\x38\x3b\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x07\x1b\x5b\x31\x39\x3b\x38\x7e"; - case 79: // F9 + case 140: // F9 return "\x07\x1b\x5b\x32\x30\x3b\x38\x7e"; - case 80: // F10 + case 141: // F10 return "\x07\x1b\x5b\x32\x31\x3b\x38\x7e"; - case 81: // F11 + case 142: // F11 return "\x07\x1b\x5b\x32\x33\x3b\x38\x7e"; - case 82: // F12 + case 143: // F12 return "\x07\x1b\x5b\x32\x34\x3b\x38\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x07\x1b\x5b\x32\x39\x3b\x38\x7e"; } // end switch(key) case 0x8: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0x9: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xa: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xb: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xc: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xd: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xe: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) case 0xf: - switch(key & 0x7f) { default: return NULL; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x01\x1b"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x01\x09"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x1b\x5b\x32\x7e"; - case 57: // DELETE + case 118: // DELETE return "\x04\x1b\x5b\x33\x7e"; - case 58: // RIGHT + case 119: // RIGHT return "\x03\x1b\x4f\x43"; - case 59: // LEFT + case 120: // LEFT return "\x03\x1b\x4f\x44"; - case 60: // DOWN + case 121: // DOWN return "\x03\x1b\x4f\x42"; - case 61: // UP + case 122: // UP return "\x03\x1b\x4f\x41"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x1b\x5b\x35\x7e"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x1b\x5b\x36\x7e"; - case 64: // HOME + case 125: // HOME return "\x03\x1b\x4f\x48"; - case 65: // END + case 126: // END return "\x03\x1b\x4f\x46"; - case 71: // F1 + case 132: // F1 return "\x03\x1b\x4f\x50"; - case 72: // F2 + case 133: // F2 return "\x03\x1b\x4f\x51"; - case 73: // F3 + case 134: // F3 return "\x03\x1b\x4f\x52"; - case 74: // F4 + case 135: // F4 return "\x03\x1b\x4f\x53"; - case 75: // F5 + case 136: // F5 return "\x05\x1b\x5b\x31\x35\x7e"; - case 76: // F6 + case 137: // F6 return "\x05\x1b\x5b\x31\x37\x7e"; - case 77: // F7 + case 138: // F7 return "\x05\x1b\x5b\x31\x38\x7e"; - case 78: // F8 + case 139: // F8 return "\x05\x1b\x5b\x31\x39\x7e"; - case 79: // F9 + case 140: // F9 return "\x05\x1b\x5b\x32\x30\x7e"; - case 80: // F10 + case 141: // F10 return "\x05\x1b\x5b\x32\x31\x7e"; - case 81: // F11 + case 142: // F11 return "\x05\x1b\x5b\x32\x33\x7e"; - case 82: // F12 + case 143: // F12 return "\x05\x1b\x5b\x32\x34\x7e"; - case 83: // F13 + case 144: // F13 return "\x06\x1b\x5b\x31\x3b\x32\x50"; - case 84: // F14 + case 145: // F14 return "\x06\x1b\x5b\x31\x3b\x32\x51"; - case 85: // F15 + case 146: // F15 return "\x06\x1b\x5b\x31\x3b\x32\x52"; - case 86: // F16 + case 147: // F16 return "\x06\x1b\x5b\x31\x3b\x32\x53"; - case 87: // F17 + case 148: // F17 return "\x07\x1b\x5b\x31\x35\x3b\x32\x7e"; - case 88: // F18 + case 149: // F18 return "\x07\x1b\x5b\x31\x37\x3b\x32\x7e"; - case 89: // F19 + case 150: // F19 return "\x07\x1b\x5b\x31\x38\x3b\x32\x7e"; - case 90: // F20 + case 151: // F20 return "\x07\x1b\x5b\x31\x39\x3b\x32\x7e"; - case 91: // F21 + case 152: // F21 return "\x07\x1b\x5b\x32\x30\x3b\x32\x7e"; - case 92: // F22 + case 153: // F22 return "\x07\x1b\x5b\x32\x31\x3b\x32\x7e"; - case 93: // F23 + case 154: // F23 return "\x07\x1b\x5b\x32\x33\x3b\x32\x7e"; - case 94: // F24 + case 155: // F24 return "\x07\x1b\x5b\x32\x34\x3b\x32\x7e"; - case 95: // F25 + case 156: // F25 return "\x06\x1b\x5b\x31\x3b\x35\x50"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x01\x0d"; - case 121: // MENU + case 182: // MENU return "\x05\x1b\x5b\x32\x39\x7e"; } // end switch(key) } // end switch(mods) @@ -7170,3663 +7231,5355 @@ key_lookup(uint8_t key, KeyboardMode mode, uint8_t mods, uint8_t action) { case 0: // RELEASE switch (mods & 0xf) { case 0x0: - switch(key & 0x7f) { default: return NULL; - case 48: // WORLD_1 - return "\x04\x4b\x72\x41\x77"; - case 49: // WORLD_2 - return "\x04\x4b\x72\x41\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x41\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x41\x42\x6a"; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x04\x4b\x72\x41\x79"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x41\x30"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x41\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x41\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x41\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x41\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x41\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x41\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x41\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x41\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x41\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x41\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x41\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x41\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x41\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x41\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x41\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x41\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x41\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x41\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x41\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x41\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x41\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x41\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x41\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x41\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x41\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x41\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x41\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x41\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x41\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x41\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x41\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x41\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x41\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x41\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x41\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x41\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x41\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x41\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x41\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x41\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x41\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x41\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x41\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x41\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x41\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x41\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x41\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x41\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x41\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x41\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x41\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x41\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x41\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x41\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x41\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x41\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x41\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x41\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x41\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x41\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x41\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x41\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x41\x42\x68"; } // end switch(key) case 0x1: - switch(key & 0x7f) { default: return NULL; - case 48: // WORLD_1 - return "\x04\x4b\x72\x42\x77"; - case 49: // WORLD_2 - return "\x04\x4b\x72\x42\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x42\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x42\x42\x6a"; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x04\x4b\x72\x42\x79"; - case 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x42\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x42\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x42\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x42\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x42\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x42\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x42\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x42\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x42\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x42\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x42\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x42\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x42\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x42\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x42\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x42\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x42\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x42\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x42\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x42\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x42\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x42\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x42\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x42\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x42\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x42\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x42\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x42\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x42\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x42\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x42\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x42\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x42\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x42\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x42\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x42\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x42\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x42\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x42\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x42\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x42\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x42\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x42\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x42\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x42\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x42\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x42\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x42\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x42\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x42\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x42\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x42\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x42\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x42\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x42\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x42\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x42\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x42\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x42\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x42\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x42\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x42\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x42\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x42\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x42\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x42\x42\x68"; } // end switch(key) case 0x2: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x45\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x45\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x45\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x45\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x45\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x45\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x45\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x45\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x45\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x45\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x45\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x45\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x45\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x45\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x45\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x45\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x45\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x45\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x45\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x45\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x45\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x45\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x45\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x45\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x45\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x45\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x45\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x45\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x45\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x45\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x45\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x45\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x45\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x45\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x45\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x45\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x45\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x45\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x45\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x45\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x45\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x45\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x45\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x45\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x45\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x45\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x45\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x45\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x45\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x45\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x45\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x45\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x45\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x45\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x45\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x45\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x45\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x45\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x45\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x45\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x45\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x45\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x45\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x45\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x45\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x45\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x45\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x45\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x45\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x45\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x45\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x45\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x45\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x45\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x45\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x45\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x45\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x45\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x45\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x45\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x45\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x45\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x45\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x45\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x45\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x45\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x45\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x45\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x45\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x45\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x45\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x45\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x45\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x45\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x45\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x45\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x45\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x45\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x45\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x45\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x45\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x45\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x45\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x45\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x45\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x45\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x45\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x45\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x45\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x45\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x45\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x45\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x45\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x45\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x45\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x45\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x45\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x45\x42\x68"; } // end switch(key) case 0x3: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x46\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x46\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x46\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x46\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x46\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x46\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x46\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x46\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x46\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x46\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x46\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x46\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x46\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x46\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x46\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x46\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x46\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x46\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x46\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x46\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x46\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x46\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x46\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x46\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x46\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x46\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x46\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x46\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x46\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x46\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x46\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x46\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x46\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x46\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x46\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x46\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x46\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x46\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x46\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x46\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x46\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x46\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x46\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x46\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x46\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x46\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x46\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x46\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x46\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x46\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x46\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x46\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x46\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x46\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x46\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x46\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x46\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x46\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x46\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x46\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x46\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x46\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x46\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x46\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x46\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x46\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x46\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x46\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x46\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x46\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x46\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x46\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x46\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x46\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x46\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x46\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x46\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x46\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x46\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x46\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x46\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x46\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x46\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x46\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x46\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x46\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x46\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x46\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x46\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x46\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x46\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x46\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x46\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x46\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x46\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x46\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x46\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x46\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x46\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x46\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x46\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x46\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x46\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x46\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x46\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x46\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x46\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x46\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x46\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x46\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x46\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x46\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x46\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x46\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x46\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x46\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x46\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x46\x42\x68"; } // end switch(key) case 0x4: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x43\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x43\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x43\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x43\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x43\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x43\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x43\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x43\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x43\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x43\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x43\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x43\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x43\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x43\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x43\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x43\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x43\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x43\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x43\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x43\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x43\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x43\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x43\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x43\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x43\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x43\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x43\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x43\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x43\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x43\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x43\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x43\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x43\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x43\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x43\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x43\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x43\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x43\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x43\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x43\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x43\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x43\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x43\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x43\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x43\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x43\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x43\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x43\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x43\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x43\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x43\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x43\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x43\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x43\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x43\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x43\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x43\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x43\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x43\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x43\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x43\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x43\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x43\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x43\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x43\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x43\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x43\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x43\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x43\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x43\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x43\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x43\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x43\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x43\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x43\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x43\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x43\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x43\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x43\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x43\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x43\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x43\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x43\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x43\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x43\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x43\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x43\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x43\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x43\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x43\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x43\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x43\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x43\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x43\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x43\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x43\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x43\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x43\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x43\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x43\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x43\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x43\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x43\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x43\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x43\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x43\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x43\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x43\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x43\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x43\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x43\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x43\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x43\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x43\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x43\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x43\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x43\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x43\x42\x68"; } // end switch(key) case 0x5: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x44\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x44\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x44\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x44\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x44\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x44\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x44\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x44\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x44\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x44\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x44\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x44\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x44\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x44\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x44\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x44\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x44\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x44\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x44\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x44\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x44\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x44\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x44\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x44\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x44\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x44\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x44\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x44\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x44\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x44\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x44\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x44\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x44\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x44\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x44\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x44\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x44\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x44\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x44\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x44\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x44\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x44\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x44\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x44\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x44\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x44\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x44\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x44\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x44\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x44\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x44\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x44\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x44\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x44\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x44\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x44\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x44\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x44\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x44\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x44\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x44\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x44\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x44\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x44\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x44\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x44\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x44\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x44\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x44\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x44\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x44\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x44\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x44\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x44\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x44\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x44\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x44\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x44\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x44\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x44\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x44\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x44\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x44\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x44\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x44\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x44\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x44\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x44\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x44\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x44\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x44\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x44\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x44\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x44\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x44\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x44\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x44\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x44\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x44\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x44\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x44\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x44\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x44\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x44\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x44\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x44\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x44\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x44\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x44\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x44\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x44\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x44\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x44\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x44\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x44\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x44\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x44\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x44\x42\x68"; } // end switch(key) case 0x6: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x47\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x47\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x47\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x47\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x47\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x47\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x47\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x47\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x47\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x47\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x47\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x47\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x47\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x47\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x47\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x47\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x47\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x47\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x47\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x47\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x47\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x47\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x47\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x47\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x47\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x47\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x47\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x47\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x47\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x47\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x47\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x47\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x47\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x47\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x47\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x47\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x47\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x47\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x47\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x47\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x47\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x47\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x47\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x47\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x47\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x47\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x47\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x47\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x47\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x47\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x47\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x47\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x47\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x47\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x47\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x47\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x47\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x47\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x47\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x47\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x47\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x47\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x47\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x47\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x47\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x47\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x47\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x47\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x47\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x47\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x47\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x47\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x47\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x47\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x47\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x47\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x47\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x47\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x47\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x47\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x47\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x47\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x47\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x47\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x47\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x47\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x47\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x47\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x47\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x47\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x47\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x47\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x47\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x47\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x47\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x47\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x47\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x47\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x47\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x47\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x47\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x47\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x47\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x47\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x47\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x47\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x47\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x47\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x47\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x47\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x47\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x47\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x47\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x47\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x47\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x47\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x47\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x47\x42\x68"; } // end switch(key) case 0x7: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x48\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x48\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x48\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x48\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x48\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x48\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x48\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x48\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x48\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x48\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x48\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x48\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x48\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x48\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x48\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x48\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x48\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x48\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x48\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x48\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x48\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x48\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x48\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x48\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x48\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x48\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x48\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x48\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x48\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x48\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x48\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x48\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x48\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x48\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x48\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x48\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x48\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x48\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x48\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x48\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x48\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x48\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x48\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x48\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x48\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x48\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x48\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x48\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x48\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x48\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x48\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x48\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x48\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x48\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x48\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x48\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x48\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x48\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x48\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x48\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x48\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x48\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x48\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x48\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x48\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x48\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x48\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x48\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x48\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x48\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x48\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x48\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x48\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x48\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x48\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x48\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x48\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x48\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x48\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x48\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x48\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x48\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x48\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x48\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x48\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x48\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x48\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x48\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x48\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x48\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x48\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x48\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x48\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x48\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x48\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x48\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x48\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x48\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x48\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x48\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x48\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x48\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x48\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x48\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x48\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x48\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x48\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x48\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x48\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x48\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x48\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x48\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x48\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x48\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x48\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x48\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x48\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x48\x42\x68"; } // end switch(key) case 0x8: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x49\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x49\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x49\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x49\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x49\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x49\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x49\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x49\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x49\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x49\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x49\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x49\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x49\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x49\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x49\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x49\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x49\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x49\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x49\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x49\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x49\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x49\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x49\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x49\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x49\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x49\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x49\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x49\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x49\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x49\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x49\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x49\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x49\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x49\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x49\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x49\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x49\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x49\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x49\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x49\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x49\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x49\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x49\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x49\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x49\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x49\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x49\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x49\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x49\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x49\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x49\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x49\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x49\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x49\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x49\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x49\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x49\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x49\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x49\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x49\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x49\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x49\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x49\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x49\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x49\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x49\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x49\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x49\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x49\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x49\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x49\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x49\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x49\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x49\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x49\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x49\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x49\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x49\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x49\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x49\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x49\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x49\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x49\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x49\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x49\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x49\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x49\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x49\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x49\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x49\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x49\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x49\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x49\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x49\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x49\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x49\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x49\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x49\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x49\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x49\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x49\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x49\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x49\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x49\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x49\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x49\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x49\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x49\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x49\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x49\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x49\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x49\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x49\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x49\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x49\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x49\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x49\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x49\x42\x68"; } // end switch(key) case 0x9: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4a\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x4a\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x4a\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x4a\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x4a\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x4a\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x4a\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x4a\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x4a\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x4a\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x4a\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x4a\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x4a\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x4a\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x4a\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x4a\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x4a\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x4a\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x4a\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x4a\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x4a\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x4a\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x4a\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x4a\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x4a\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x4a\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x4a\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x4a\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x4a\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x4a\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x4a\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x4a\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x4a\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x4a\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x4a\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x4a\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x4a\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x4a\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x4a\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x4a\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x4a\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x4a\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x4a\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4a\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x4a\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4a\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x4a\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4a\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x4a\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x4a\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x4a\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x4a\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x4a\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x4a\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x4a\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x4a\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x4a\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x4a\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x4a\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x4a\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x4a\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x4a\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x4a\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x4a\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x4a\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x4a\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4a\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x4a\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4a\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x4a\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x4a\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x4a\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x4a\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x4a\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x4a\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x4a\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x4a\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x4a\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x4a\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x4a\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x4a\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x4a\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x4a\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x4a\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x4a\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x4a\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x4a\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x4a\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x4a\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x4a\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x4a\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x4a\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x4a\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x4a\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x4a\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x4a\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x4a\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x4a\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x4a\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x4a\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x4a\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x4a\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x4a\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x4a\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x4a\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x4a\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x4a\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4a\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4a\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x4a\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x4a\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x4a\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4a\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x4a\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x4a\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4a\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x4a\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4a\x42\x68"; } // end switch(key) case 0xa: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4d\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x4d\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x4d\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x4d\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x4d\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x4d\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x4d\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x4d\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x4d\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x4d\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x4d\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x4d\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x4d\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x4d\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x4d\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x4d\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x4d\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x4d\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x4d\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x4d\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x4d\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x4d\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x4d\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x4d\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x4d\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x4d\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x4d\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x4d\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x4d\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x4d\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x4d\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x4d\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x4d\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x4d\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x4d\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x4d\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x4d\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x4d\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x4d\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x4d\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x4d\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x4d\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x4d\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4d\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x4d\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4d\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x4d\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4d\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x4d\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x4d\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x4d\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x4d\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x4d\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x4d\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x4d\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x4d\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x4d\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x4d\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x4d\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x4d\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x4d\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x4d\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x4d\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x4d\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x4d\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x4d\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4d\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x4d\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4d\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x4d\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x4d\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x4d\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x4d\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x4d\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x4d\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x4d\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x4d\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x4d\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x4d\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x4d\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x4d\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x4d\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x4d\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x4d\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x4d\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x4d\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x4d\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x4d\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x4d\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x4d\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x4d\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x4d\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x4d\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x4d\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x4d\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x4d\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x4d\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x4d\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x4d\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x4d\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x4d\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x4d\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x4d\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x4d\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x4d\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x4d\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x4d\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4d\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4d\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x4d\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x4d\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x4d\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4d\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x4d\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x4d\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4d\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x4d\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4d\x42\x68"; } // end switch(key) case 0xb: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4e\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x4e\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x4e\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x4e\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x4e\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x4e\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x4e\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x4e\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x4e\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x4e\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x4e\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x4e\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x4e\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x4e\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x4e\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x4e\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x4e\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x4e\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x4e\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x4e\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x4e\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x4e\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x4e\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x4e\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x4e\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x4e\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x4e\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x4e\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x4e\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x4e\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x4e\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x4e\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x4e\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x4e\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x4e\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x4e\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x4e\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x4e\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x4e\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x4e\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x4e\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x4e\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x4e\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4e\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x4e\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4e\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x4e\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4e\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x4e\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x4e\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x4e\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x4e\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x4e\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x4e\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x4e\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x4e\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x4e\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x4e\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x4e\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x4e\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x4e\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x4e\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x4e\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x4e\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x4e\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x4e\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4e\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x4e\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4e\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x4e\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x4e\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x4e\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x4e\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x4e\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x4e\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x4e\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x4e\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x4e\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x4e\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x4e\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x4e\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x4e\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x4e\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x4e\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x4e\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x4e\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x4e\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x4e\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x4e\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x4e\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x4e\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x4e\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x4e\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x4e\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x4e\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x4e\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x4e\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x4e\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x4e\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x4e\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x4e\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x4e\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x4e\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x4e\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x4e\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x4e\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x4e\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4e\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4e\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x4e\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x4e\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x4e\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4e\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x4e\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x4e\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4e\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x4e\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4e\x42\x68"; } // end switch(key) case 0xc: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4b\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x4b\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x4b\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x4b\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x4b\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x4b\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x4b\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x4b\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x4b\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x4b\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x4b\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x4b\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x4b\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x4b\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x4b\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x4b\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x4b\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x4b\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x4b\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x4b\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x4b\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x4b\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x4b\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x4b\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x4b\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x4b\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x4b\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x4b\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x4b\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x4b\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x4b\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x4b\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x4b\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x4b\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x4b\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x4b\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x4b\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x4b\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x4b\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x4b\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x4b\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x4b\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x4b\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4b\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x4b\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4b\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x4b\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4b\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x4b\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x4b\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x4b\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x4b\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x4b\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x4b\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x4b\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x4b\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x4b\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x4b\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x4b\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x4b\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x4b\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x4b\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x4b\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x4b\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x4b\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x4b\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4b\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x4b\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4b\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x4b\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x4b\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x4b\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x4b\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x4b\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x4b\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x4b\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x4b\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x4b\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x4b\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x4b\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x4b\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x4b\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x4b\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x4b\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x4b\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x4b\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x4b\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x4b\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x4b\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x4b\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x4b\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x4b\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x4b\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x4b\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x4b\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x4b\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x4b\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x4b\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x4b\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x4b\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x4b\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x4b\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x4b\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x4b\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x4b\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x4b\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x4b\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4b\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4b\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x4b\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x4b\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x4b\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4b\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x4b\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x4b\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4b\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x4b\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4b\x42\x68"; } // end switch(key) case 0xd: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4c\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x4c\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x4c\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x4c\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x4c\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x4c\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x4c\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x4c\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x4c\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x4c\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x4c\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x4c\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x4c\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x4c\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x4c\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x4c\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x4c\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x4c\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x4c\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x4c\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x4c\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x4c\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x4c\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x4c\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x4c\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x4c\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x4c\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x4c\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x4c\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x4c\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x4c\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x4c\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x4c\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x4c\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x4c\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x4c\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x4c\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x4c\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x4c\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x4c\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x4c\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x4c\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x4c\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4c\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x4c\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4c\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x4c\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4c\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x4c\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x4c\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x4c\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x4c\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x4c\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x4c\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x4c\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x4c\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x4c\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x4c\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x4c\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x4c\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x4c\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x4c\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x4c\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x4c\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x4c\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x4c\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4c\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x4c\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4c\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x4c\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x4c\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x4c\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x4c\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x4c\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x4c\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x4c\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x4c\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x4c\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x4c\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x4c\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x4c\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x4c\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x4c\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x4c\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x4c\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x4c\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x4c\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x4c\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x4c\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x4c\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x4c\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x4c\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x4c\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x4c\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x4c\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x4c\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x4c\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x4c\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x4c\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x4c\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x4c\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x4c\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x4c\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x4c\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x4c\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x4c\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x4c\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4c\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4c\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x4c\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x4c\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x4c\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4c\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x4c\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x4c\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4c\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x4c\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4c\x42\x68"; } // end switch(key) case 0xe: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x4f\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x4f\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x4f\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x4f\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x4f\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x4f\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x4f\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x4f\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x4f\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x4f\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x4f\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x4f\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x4f\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x4f\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x4f\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x4f\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x4f\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x4f\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x4f\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x4f\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x4f\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x4f\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x4f\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x4f\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x4f\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x4f\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x4f\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x4f\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x4f\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x4f\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x4f\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x4f\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x4f\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x4f\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x4f\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x4f\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x4f\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x4f\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x4f\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x4f\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x4f\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x4f\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x4f\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x4f\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x4f\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x4f\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x4f\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x4f\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x4f\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x4f\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x4f\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x4f\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x4f\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x4f\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x4f\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x4f\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x4f\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x4f\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x4f\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x4f\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x4f\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x4f\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x4f\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x4f\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x4f\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x4f\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x4f\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x4f\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x4f\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x4f\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x4f\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x4f\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x4f\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x4f\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x4f\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x4f\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x4f\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x4f\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x4f\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x4f\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x4f\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x4f\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x4f\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x4f\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x4f\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x4f\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x4f\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x4f\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x4f\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x4f\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x4f\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x4f\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x4f\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x4f\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x4f\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x4f\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x4f\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x4f\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x4f\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x4f\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x4f\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x4f\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x4f\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x4f\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x4f\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x4f\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x4f\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x4f\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x4f\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x4f\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x4f\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x4f\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x4f\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x4f\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x4f\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x4f\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x4f\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x4f\x42\x68"; } // end switch(key) case 0xf: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x72\x50\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x72\x50\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x72\x50\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x72\x50\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x72\x50\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x72\x50\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x72\x50\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x72\x50\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x72\x50\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x72\x50\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x72\x50\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x72\x50\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x72\x50\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x72\x50\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x72\x50\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x72\x50\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x72\x50\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x72\x50\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x72\x50\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x72\x50\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x72\x50\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x72\x50\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x72\x50\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x72\x50\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x72\x50\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x72\x50\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x72\x50\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x72\x50\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x72\x50\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x72\x50\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x72\x50\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x72\x50\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x72\x50\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x72\x50\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x72\x50\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x72\x50\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x72\x50\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x72\x50\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x72\x50\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x72\x50\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x72\x50\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x72\x50\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x72\x50\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x72\x50\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x72\x50\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x72\x50\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x72\x50\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x72\x50\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x72\x50\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x72\x50\x78"; - case 50: // PLUS - return "\x05\x4b\x72\x50\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x72\x50\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x72\x50\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x72\x50\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x72\x50\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x72\x50\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x72\x50\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x72\x50\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x72\x50\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x72\x50\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x72\x50\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x72\x50\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x72\x50\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x72\x50\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x72\x50\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x72\x50\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x72\x50\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x72\x50\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x72\x50\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x72\x50\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x72\x50\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x72\x50\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x72\x50\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x72\x50\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x72\x50\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x72\x50\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x72\x50\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x72\x50\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x72\x50\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x72\x50\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x72\x50\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x72\x50\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x72\x50\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x72\x50\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x72\x50\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x72\x50\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x72\x50\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x72\x50\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x72\x50\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x72\x50\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x72\x50\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x72\x50\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x72\x50\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x72\x50\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x72\x50\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x72\x50\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x72\x50\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x72\x50\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x72\x50\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x72\x50\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x72\x50\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x72\x50\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x72\x50\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x72\x50\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x72\x50\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x72\x50\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x72\x50\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x72\x50\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x72\x50\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x72\x50\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x72\x50\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x72\x50\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x72\x50\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x72\x50\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x72\x50\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x72\x50\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x72\x50\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x72\x50\x42\x68"; } // end switch(key) } // end switch(mods) @@ -10835,3667 +12588,5359 @@ key_lookup(uint8_t key, KeyboardMode mode, uint8_t mods, uint8_t action) { case 1: // PRESS switch (mods & 0xf) { case 0x0: - switch(key & 0x7f) { default: return NULL; - case 48: // WORLD_1 - return "\x04\x4b\x70\x41\x77"; - case 49: // WORLD_2 - return "\x04\x4b\x70\x41\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x41\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x41\x42\x6a"; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x04\x4b\x70\x41\x79"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x41\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x41\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x41\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x41\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x41\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x41\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x41\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x41\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x41\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x41\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x41\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x41\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x41\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x41\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x41\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x41\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x41\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x41\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x41\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x41\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x41\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x41\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x41\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x41\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x41\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x41\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x41\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x41\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x41\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x41\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x41\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x41\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x41\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x41\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x41\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x41\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x41\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x41\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x41\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x41\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x41\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x41\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x41\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x41\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x41\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x41\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x41\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x41\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x41\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x41\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x41\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x41\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x41\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x41\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x41\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x41\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x41\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x41\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x41\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x41\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x41\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x41\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x41\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x41\x42\x68"; } // end switch(key) case 0x1: - switch(key & 0x7f) { default: return NULL; - case 48: // WORLD_1 - return "\x04\x4b\x70\x42\x77"; - case 49: // WORLD_2 - return "\x04\x4b\x70\x42\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x42\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x42\x42\x6a"; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x04\x4b\x70\x42\x79"; - case 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x42\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x42\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x42\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x42\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x42\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x42\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x42\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x42\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x42\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x42\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x42\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x42\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x42\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x42\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x42\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x42\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x42\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x42\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x42\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x42\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x42\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x42\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x42\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x42\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x42\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x42\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x42\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x42\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x42\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x42\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x42\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x42\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x42\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x42\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x42\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x42\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x42\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x42\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x42\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x42\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x42\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x42\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x42\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x42\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x42\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x42\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x42\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x42\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x42\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x42\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x42\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x42\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x42\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x42\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x42\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x42\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x42\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x42\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x42\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x42\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x42\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x42\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x42\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x42\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x42\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x42\x42\x68"; } // end switch(key) case 0x2: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x45\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x45\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x45\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x45\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x45\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x45\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x45\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x45\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x45\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x45\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x45\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x45\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x45\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x45\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x45\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x45\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x45\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x45\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x45\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x45\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x45\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x45\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x45\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x45\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x45\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x45\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x45\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x45\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x45\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x45\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x45\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x45\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x45\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x45\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x45\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x45\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x45\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x45\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x45\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x45\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x45\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x45\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x45\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x45\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x45\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x45\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x45\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x45\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x45\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x45\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x45\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x45\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x45\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x45\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x45\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x45\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x45\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x45\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x45\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x45\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x45\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x45\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x45\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x45\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x45\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x45\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x45\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x45\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x45\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x45\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x45\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x45\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x45\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x45\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x45\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x45\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x45\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x45\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x45\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x45\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x45\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x45\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x45\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x45\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x45\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x45\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x45\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x45\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x45\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x45\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x45\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x45\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x45\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x45\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x45\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x45\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x45\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x45\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x45\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x45\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x45\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x45\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x45\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x45\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x45\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x45\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x45\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x45\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x45\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x45\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x45\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x45\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x45\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x45\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x45\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x45\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x45\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x45\x42\x68"; } // end switch(key) case 0x3: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x46\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x46\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x46\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x46\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x46\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x46\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x46\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x46\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x46\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x46\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x46\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x46\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x46\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x46\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x46\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x46\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x46\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x46\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x46\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x46\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x46\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x46\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x46\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x46\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x46\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x46\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x46\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x46\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x46\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x46\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x46\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x46\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x46\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x46\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x46\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x46\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x46\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x46\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x46\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x46\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x46\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x46\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x46\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x46\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x46\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x46\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x46\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x46\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x46\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x46\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x46\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x46\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x46\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x46\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x46\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x46\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x46\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x46\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x46\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x46\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x46\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x46\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x46\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x46\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x46\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x46\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x46\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x46\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x46\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x46\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x46\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x46\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x46\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x46\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x46\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x46\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x46\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x46\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x46\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x46\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x46\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x46\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x46\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x46\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x46\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x46\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x46\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x46\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x46\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x46\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x46\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x46\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x46\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x46\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x46\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x46\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x46\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x46\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x46\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x46\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x46\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x46\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x46\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x46\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x46\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x46\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x46\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x46\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x46\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x46\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x46\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x46\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x46\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x46\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x46\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x46\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x46\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x46\x42\x68"; } // end switch(key) case 0x4: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x43\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x43\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x43\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x43\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x43\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x43\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x43\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x43\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x43\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x43\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x43\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x43\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x43\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x43\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x43\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x43\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x43\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x43\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x43\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x43\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x43\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x43\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x43\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x43\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x43\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x43\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x43\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x43\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x43\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x43\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x43\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x43\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x43\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x43\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x43\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x43\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x43\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x43\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x43\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x43\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x43\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x43\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x43\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x43\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x43\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x43\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x43\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x43\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x43\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x43\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x43\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x43\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x43\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x43\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x43\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x43\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x43\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x43\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x43\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x43\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x43\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x43\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x43\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x43\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x43\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x43\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x43\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x43\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x43\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x43\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x43\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x43\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x43\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x43\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x43\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x43\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x43\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x43\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x43\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x43\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x43\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x43\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x43\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x43\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x43\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x43\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x43\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x43\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x43\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x43\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x43\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x43\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x43\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x43\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x43\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x43\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x43\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x43\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x43\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x43\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x43\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x43\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x43\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x43\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x43\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x43\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x43\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x43\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x43\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x43\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x43\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x43\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x43\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x43\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x43\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x43\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x43\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x43\x42\x68"; } // end switch(key) case 0x5: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x44\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x44\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x44\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x44\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x44\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x44\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x44\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x44\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x44\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x44\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x44\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x44\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x44\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x44\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x44\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x44\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x44\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x44\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x44\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x44\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x44\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x44\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x44\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x44\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x44\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x44\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x44\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x44\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x44\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x44\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x44\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x44\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x44\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x44\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x44\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x44\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x44\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x44\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x44\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x44\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x44\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x44\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x44\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x44\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x44\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x44\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x44\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x44\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x44\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x44\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x44\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x44\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x44\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x44\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x44\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x44\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x44\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x44\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x44\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x44\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x44\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x44\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x44\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x44\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x44\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x44\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x44\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x44\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x44\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x44\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x44\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x44\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x44\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x44\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x44\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x44\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x44\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x44\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x44\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x44\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x44\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x44\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x44\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x44\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x44\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x44\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x44\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x44\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x44\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x44\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x44\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x44\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x44\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x44\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x44\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x44\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x44\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x44\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x44\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x44\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x44\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x44\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x44\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x44\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x44\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x44\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x44\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x44\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x44\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x44\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x44\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x44\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x44\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x44\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x44\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x44\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x44\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x44\x42\x68"; } // end switch(key) case 0x6: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x47\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x47\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x47\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x47\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x47\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x47\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x47\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x47\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x47\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x47\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x47\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x47\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x47\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x47\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x47\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x47\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x47\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x47\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x47\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x47\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x47\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x47\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x47\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x47\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x47\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x47\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x47\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x47\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x47\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x47\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x47\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x47\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x47\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x47\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x47\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x47\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x47\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x47\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x47\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x47\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x47\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x47\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x47\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x47\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x47\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x47\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x47\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x47\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x47\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x47\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x47\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x47\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x47\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x47\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x47\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x47\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x47\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x47\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x47\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x47\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x47\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x47\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x47\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x47\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x47\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x47\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x47\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x47\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x47\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x47\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x47\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x47\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x47\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x47\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x47\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x47\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x47\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x47\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x47\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x47\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x47\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x47\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x47\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x47\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x47\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x47\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x47\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x47\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x47\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x47\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x47\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x47\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x47\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x47\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x47\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x47\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x47\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x47\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x47\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x47\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x47\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x47\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x47\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x47\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x47\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x47\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x47\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x47\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x47\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x47\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x47\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x47\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x47\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x47\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x47\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x47\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x47\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x47\x42\x68"; } // end switch(key) case 0x7: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x48\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x48\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x48\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x48\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x48\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x48\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x48\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x48\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x48\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x48\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x48\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x48\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x48\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x48\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x48\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x48\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x48\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x48\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x48\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x48\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x48\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x48\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x48\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x48\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x48\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x48\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x48\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x48\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x48\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x48\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x48\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x48\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x48\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x48\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x48\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x48\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x48\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x48\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x48\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x48\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x48\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x48\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x48\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x48\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x48\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x48\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x48\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x48\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x48\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x48\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x48\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x48\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x48\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x48\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x48\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x48\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x48\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x48\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x48\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x48\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x48\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x48\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x48\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x48\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x48\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x48\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x48\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x48\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x48\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x48\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x48\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x48\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x48\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x48\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x48\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x48\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x48\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x48\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x48\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x48\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x48\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x48\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x48\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x48\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x48\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x48\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x48\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x48\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x48\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x48\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x48\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x48\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x48\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x48\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x48\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x48\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x48\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x48\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x48\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x48\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x48\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x48\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x48\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x48\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x48\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x48\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x48\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x48\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x48\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x48\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x48\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x48\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x48\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x48\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x48\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x48\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x48\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x48\x42\x68"; } // end switch(key) case 0x8: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x49\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x49\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x49\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x49\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x49\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x49\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x49\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x49\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x49\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x49\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x49\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x49\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x49\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x49\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x49\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x49\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x49\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x49\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x49\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x49\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x49\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x49\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x49\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x49\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x49\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x49\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x49\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x49\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x49\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x49\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x49\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x49\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x49\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x49\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x49\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x49\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x49\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x49\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x49\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x49\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x49\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x49\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x49\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x49\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x49\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x49\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x49\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x49\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x49\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x49\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x49\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x49\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x49\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x49\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x49\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x49\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x49\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x49\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x49\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x49\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x49\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x49\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x49\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x49\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x49\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x49\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x49\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x49\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x49\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x49\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x49\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x49\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x49\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x49\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x49\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x49\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x49\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x49\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x49\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x49\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x49\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x49\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x49\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x49\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x49\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x49\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x49\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x49\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x49\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x49\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x49\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x49\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x49\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x49\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x49\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x49\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x49\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x49\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x49\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x49\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x49\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x49\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x49\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x49\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x49\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x49\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x49\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x49\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x49\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x49\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x49\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x49\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x49\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x49\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x49\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x49\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x49\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x49\x42\x68"; } // end switch(key) case 0x9: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4a\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x4a\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x4a\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x4a\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x4a\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x4a\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x4a\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x4a\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x4a\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x4a\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x4a\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x4a\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x4a\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x4a\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x4a\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x4a\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x4a\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x4a\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x4a\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x4a\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x4a\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x4a\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x4a\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x4a\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x4a\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x4a\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x4a\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x4a\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x4a\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x4a\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x4a\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x4a\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x4a\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x4a\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x4a\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x4a\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x4a\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x4a\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x4a\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x4a\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x4a\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x4a\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x4a\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4a\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x4a\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4a\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x4a\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4a\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x4a\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x4a\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x4a\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x4a\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x4a\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x4a\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x4a\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x4a\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x4a\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x4a\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x4a\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x4a\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x4a\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x4a\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x4a\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x4a\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x4a\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x4a\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4a\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x4a\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4a\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x4a\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x4a\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x4a\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x4a\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x4a\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x4a\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x4a\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x4a\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x4a\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x4a\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x4a\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x4a\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x4a\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x4a\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x4a\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x4a\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x4a\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x4a\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x4a\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x4a\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x4a\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x4a\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x4a\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x4a\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x4a\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x4a\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x4a\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x4a\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x4a\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x4a\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x4a\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x4a\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x4a\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x4a\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x4a\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x4a\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x4a\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x4a\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4a\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4a\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x4a\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x4a\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x4a\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4a\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x4a\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x4a\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4a\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x4a\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4a\x42\x68"; } // end switch(key) case 0xa: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4d\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x4d\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x4d\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x4d\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x4d\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x4d\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x4d\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x4d\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x4d\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x4d\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x4d\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x4d\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x4d\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x4d\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x4d\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x4d\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x4d\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x4d\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x4d\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x4d\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x4d\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x4d\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x4d\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x4d\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x4d\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x4d\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x4d\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x4d\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x4d\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x4d\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x4d\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x4d\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x4d\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x4d\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x4d\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x4d\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x4d\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x4d\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x4d\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x4d\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x4d\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x4d\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x4d\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4d\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x4d\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4d\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x4d\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4d\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x4d\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x4d\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x4d\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x4d\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x4d\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x4d\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x4d\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x4d\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x4d\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x4d\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x4d\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x4d\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x4d\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x4d\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x4d\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x4d\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x4d\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x4d\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4d\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x4d\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4d\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x4d\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x4d\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x4d\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x4d\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x4d\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x4d\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x4d\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x4d\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x4d\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x4d\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x4d\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x4d\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x4d\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x4d\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x4d\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x4d\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x4d\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x4d\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x4d\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x4d\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x4d\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x4d\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x4d\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x4d\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x4d\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x4d\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x4d\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x4d\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x4d\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x4d\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x4d\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x4d\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x4d\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x4d\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x4d\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x4d\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x4d\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x4d\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4d\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4d\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x4d\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x4d\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x4d\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4d\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x4d\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x4d\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4d\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x4d\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4d\x42\x68"; } // end switch(key) case 0xb: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4e\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x4e\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x4e\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x4e\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x4e\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x4e\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x4e\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x4e\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x4e\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x4e\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x4e\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x4e\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x4e\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x4e\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x4e\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x4e\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x4e\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x4e\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x4e\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x4e\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x4e\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x4e\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x4e\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x4e\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x4e\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x4e\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x4e\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x4e\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x4e\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x4e\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x4e\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x4e\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x4e\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x4e\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x4e\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x4e\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x4e\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x4e\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x4e\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x4e\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x4e\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x4e\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x4e\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4e\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x4e\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4e\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x4e\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4e\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x4e\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x4e\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x4e\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x4e\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x4e\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x4e\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x4e\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x4e\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x4e\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x4e\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x4e\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x4e\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x4e\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x4e\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x4e\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x4e\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x4e\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x4e\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4e\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x4e\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4e\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x4e\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x4e\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x4e\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x4e\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x4e\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x4e\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x4e\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x4e\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x4e\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x4e\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x4e\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x4e\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x4e\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x4e\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x4e\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x4e\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x4e\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x4e\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x4e\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x4e\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x4e\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x4e\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x4e\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x4e\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x4e\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x4e\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x4e\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x4e\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x4e\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x4e\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x4e\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x4e\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x4e\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x4e\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x4e\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x4e\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x4e\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x4e\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4e\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4e\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x4e\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x4e\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x4e\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4e\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x4e\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x4e\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4e\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x4e\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4e\x42\x68"; } // end switch(key) case 0xc: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4b\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x4b\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x4b\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x4b\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x4b\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x4b\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x4b\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x4b\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x4b\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x4b\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x4b\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x4b\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x4b\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x4b\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x4b\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x4b\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x4b\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x4b\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x4b\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x4b\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x4b\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x4b\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x4b\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x4b\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x4b\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x4b\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x4b\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x4b\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x4b\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x4b\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x4b\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x4b\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x4b\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x4b\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x4b\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x4b\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x4b\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x4b\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x4b\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x4b\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x4b\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x4b\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x4b\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4b\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x4b\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4b\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x4b\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4b\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x4b\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x4b\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x4b\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x4b\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x4b\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x4b\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x4b\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x4b\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x4b\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x4b\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x4b\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x4b\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x4b\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x4b\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x4b\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x4b\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x4b\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x4b\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4b\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x4b\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4b\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x4b\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x4b\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x4b\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x4b\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x4b\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x4b\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x4b\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x4b\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x4b\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x4b\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x4b\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x4b\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x4b\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x4b\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x4b\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x4b\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x4b\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x4b\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x4b\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x4b\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x4b\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x4b\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x4b\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x4b\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x4b\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x4b\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x4b\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x4b\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x4b\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x4b\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x4b\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x4b\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x4b\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x4b\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x4b\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x4b\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x4b\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x4b\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4b\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4b\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x4b\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x4b\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x4b\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4b\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x4b\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x4b\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4b\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x4b\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4b\x42\x68"; } // end switch(key) case 0xd: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4c\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x4c\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x4c\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x4c\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x4c\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x4c\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x4c\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x4c\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x4c\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x4c\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x4c\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x4c\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x4c\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x4c\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x4c\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x4c\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x4c\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x4c\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x4c\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x4c\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x4c\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x4c\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x4c\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x4c\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x4c\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x4c\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x4c\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x4c\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x4c\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x4c\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x4c\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x4c\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x4c\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x4c\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x4c\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x4c\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x4c\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x4c\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x4c\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x4c\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x4c\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x4c\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x4c\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4c\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x4c\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4c\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x4c\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4c\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x4c\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x4c\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x4c\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x4c\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x4c\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x4c\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x4c\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x4c\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x4c\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x4c\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x4c\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x4c\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x4c\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x4c\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x4c\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x4c\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x4c\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x4c\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4c\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x4c\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4c\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x4c\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x4c\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x4c\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x4c\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x4c\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x4c\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x4c\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x4c\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x4c\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x4c\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x4c\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x4c\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x4c\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x4c\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x4c\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x4c\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x4c\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x4c\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x4c\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x4c\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x4c\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x4c\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x4c\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x4c\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x4c\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x4c\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x4c\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x4c\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x4c\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x4c\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x4c\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x4c\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x4c\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x4c\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x4c\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x4c\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x4c\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x4c\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4c\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4c\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x4c\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x4c\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x4c\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4c\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x4c\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x4c\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4c\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x4c\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4c\x42\x68"; } // end switch(key) case 0xe: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x4f\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x4f\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x4f\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x4f\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x4f\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x4f\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x4f\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x4f\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x4f\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x4f\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x4f\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x4f\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x4f\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x4f\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x4f\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x4f\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x4f\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x4f\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x4f\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x4f\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x4f\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x4f\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x4f\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x4f\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x4f\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x4f\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x4f\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x4f\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x4f\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x4f\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x4f\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x4f\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x4f\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x4f\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x4f\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x4f\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x4f\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x4f\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x4f\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x4f\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x4f\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x4f\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x4f\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x4f\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x4f\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x4f\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x4f\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x4f\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x4f\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x4f\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x4f\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x4f\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x4f\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x4f\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x4f\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x4f\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x4f\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x4f\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x4f\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x4f\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x4f\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x4f\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x4f\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x4f\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x4f\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x4f\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x4f\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x4f\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x4f\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x4f\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x4f\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x4f\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x4f\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x4f\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x4f\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x4f\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x4f\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x4f\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x4f\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x4f\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x4f\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x4f\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x4f\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x4f\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x4f\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x4f\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x4f\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x4f\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x4f\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x4f\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x4f\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x4f\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x4f\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x4f\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x4f\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x4f\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x4f\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x4f\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x4f\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x4f\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x4f\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x4f\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x4f\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x4f\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x4f\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x4f\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x4f\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x4f\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x4f\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x4f\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x4f\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x4f\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x4f\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x4f\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x4f\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x4f\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x4f\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x4f\x42\x68"; } // end switch(key) case 0xf: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x70\x50\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x70\x50\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x70\x50\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x70\x50\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x70\x50\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x70\x50\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x70\x50\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x70\x50\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x70\x50\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x70\x50\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x70\x50\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x70\x50\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x70\x50\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x70\x50\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x70\x50\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x70\x50\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x70\x50\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x70\x50\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x70\x50\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x70\x50\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x70\x50\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x70\x50\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x70\x50\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x70\x50\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x70\x50\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x70\x50\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x70\x50\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x70\x50\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x70\x50\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x70\x50\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x70\x50\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x70\x50\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x70\x50\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x70\x50\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x70\x50\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x70\x50\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x70\x50\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x70\x50\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x70\x50\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x70\x50\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x70\x50\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x70\x50\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x70\x50\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x70\x50\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x70\x50\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x70\x50\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x70\x50\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x70\x50\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x70\x50\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x70\x50\x78"; - case 50: // PLUS - return "\x05\x4b\x70\x50\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x70\x50\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x70\x50\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x70\x50\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x70\x50\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x70\x50\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x70\x50\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x70\x50\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x70\x50\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x70\x50\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x70\x50\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x70\x50\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x70\x50\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x70\x50\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x70\x50\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x70\x50\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x70\x50\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x70\x50\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x70\x50\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x70\x50\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x70\x50\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x70\x50\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x70\x50\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x70\x50\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x70\x50\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x70\x50\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x70\x50\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x70\x50\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x70\x50\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x70\x50\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x70\x50\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x70\x50\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x70\x50\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x70\x50\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x70\x50\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x70\x50\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x70\x50\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x70\x50\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x70\x50\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x70\x50\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x70\x50\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x70\x50\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x70\x50\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x70\x50\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x70\x50\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x70\x50\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x70\x50\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x70\x50\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x70\x50\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x70\x50\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x70\x50\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x70\x50\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x70\x50\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x70\x50\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x70\x50\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x70\x50\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x70\x50\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x70\x50\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x70\x50\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x70\x50\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x70\x50\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x70\x50\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x70\x50\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x70\x50\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x70\x50\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x70\x50\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x70\x50\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x70\x50\x42\x68"; } // end switch(key) } // end switch(mods) @@ -14504,3667 +17949,5359 @@ key_lookup(uint8_t key, KeyboardMode mode, uint8_t mods, uint8_t action) { case 2: // REPEAT switch (mods & 0xf) { case 0x0: - switch(key & 0x7f) { default: return NULL; - case 48: // WORLD_1 - return "\x04\x4b\x74\x41\x77"; - case 49: // WORLD_2 - return "\x04\x4b\x74\x41\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x41\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x41\x42\x6a"; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x04\x4b\x74\x41\x79"; - case 53: // ENTER + case 114: // ENTER return "\x01\x0d"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x41\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x01\x7f"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x41\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x41\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x41\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x41\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x41\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x41\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x41\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x41\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x41\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x41\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x41\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x41\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x41\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x41\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x41\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x41\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x41\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x41\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x41\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x41\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x41\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x41\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x41\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x41\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x41\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x41\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x41\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x41\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x41\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x41\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x41\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x41\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x41\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x41\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x41\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x41\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x41\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x41\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x41\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x41\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x41\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x41\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x41\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x41\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x41\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x41\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x41\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x41\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x41\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x41\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x41\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x41\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x41\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x41\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x41\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x41\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x41\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x41\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x41\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x41\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x41\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x41\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x41\x42\x68"; } // end switch(key) case 0x1: - switch(key & 0x7f) { default: return NULL; - case 48: // WORLD_1 - return "\x04\x4b\x74\x42\x77"; - case 49: // WORLD_2 - return "\x04\x4b\x74\x42\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x42\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x42\x42\x6a"; - case 52: // ESCAPE + switch(key & 0xff) { default: return NULL; + case 113: // ESCAPE return "\x04\x4b\x74\x42\x79"; - case 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x42\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x42\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x42\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x42\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x42\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x42\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x42\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x42\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x42\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x42\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x42\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x42\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x42\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x42\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x42\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x42\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x42\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x42\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x42\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x42\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x42\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x42\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x42\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x42\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x42\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x42\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x42\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x42\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x42\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x42\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x42\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x42\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x42\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x42\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x42\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x42\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x42\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x42\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x42\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x42\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x42\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x42\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x42\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x42\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x42\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x42\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x42\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x42\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x42\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x42\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x42\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x42\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x42\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x42\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x42\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x42\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x42\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x42\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x42\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x42\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x42\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x42\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x42\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x42\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x42\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x42\x42\x68"; } // end switch(key) case 0x2: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x45\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x45\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x45\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x45\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x45\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x45\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x45\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x45\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x45\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x45\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x45\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x45\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x45\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x45\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x45\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x45\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x45\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x45\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x45\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x45\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x45\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x45\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x45\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x45\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x45\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x45\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x45\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x45\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x45\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x45\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x45\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x45\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x45\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x45\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x45\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x45\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x45\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x45\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x45\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x45\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x45\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x45\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x45\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x45\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x45\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x45\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x45\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x45\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x45\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x45\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x45\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x45\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x45\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x45\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x45\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x45\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x45\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x45\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x45\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x45\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x45\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x45\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x45\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x45\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x45\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x45\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x45\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x45\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x45\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x45\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x45\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x45\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x45\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x45\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x45\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x45\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x45\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x45\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x45\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x45\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x45\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x45\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x45\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x45\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x45\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x45\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x45\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x45\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x45\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x45\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x45\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x45\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x45\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x45\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x45\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x45\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x45\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x45\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x45\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x45\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x45\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x45\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x45\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x45\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x45\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x45\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x45\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x45\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x45\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x45\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x45\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x45\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x45\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x45\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x45\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x45\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x45\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x45\x42\x68"; } // end switch(key) case 0x3: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x46\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x46\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x46\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x46\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x46\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x46\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x46\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x46\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x46\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x46\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x46\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x46\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x46\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x46\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x46\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x46\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x46\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x46\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x46\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x46\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x46\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x46\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x46\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x46\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x46\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x46\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x46\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x46\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x46\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x46\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x46\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x46\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x46\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x46\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x46\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x46\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x46\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x46\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x46\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x46\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x46\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x46\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x46\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x46\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x46\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x46\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x46\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x46\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x46\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x46\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x46\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x46\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x46\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x46\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x46\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x46\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x46\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x46\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x46\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x46\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x46\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x46\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x46\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x46\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x46\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x46\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x46\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x46\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x46\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x46\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x46\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x46\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x46\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x46\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x46\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x46\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x46\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x46\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x46\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x46\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x46\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x46\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x46\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x46\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x46\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x46\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x46\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x46\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x46\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x46\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x46\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x46\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x46\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x46\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x46\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x46\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x46\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x46\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x46\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x46\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x46\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x46\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x46\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x46\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x46\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x46\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x46\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x46\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x46\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x46\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x46\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x46\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x46\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x46\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x46\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x46\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x46\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x46\x42\x68"; } // end switch(key) case 0x4: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x43\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x43\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x43\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x43\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x43\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x43\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x43\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x43\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x43\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x43\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x43\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x43\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x43\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x43\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x43\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x43\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x43\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x43\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x43\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x43\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x43\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x43\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x43\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x43\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x43\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x43\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x43\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x43\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x43\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x43\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x43\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x43\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x43\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x43\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x43\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x43\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x43\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x43\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x43\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x43\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x43\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x43\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x43\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x43\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x43\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x43\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x43\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x43\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x43\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x43\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x43\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x43\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x43\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x43\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x43\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x43\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x43\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x43\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x43\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x43\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x43\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x43\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x43\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x43\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x43\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x43\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x43\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x43\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x43\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x43\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x43\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x43\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x43\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x43\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x43\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x43\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x43\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x43\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x43\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x43\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x43\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x43\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x43\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x43\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x43\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x43\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x43\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x43\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x43\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x43\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x43\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x43\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x43\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x43\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x43\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x43\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x43\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x43\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x43\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x43\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x43\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x43\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x43\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x43\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x43\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x43\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x43\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x43\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x43\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x43\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x43\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x43\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x43\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x43\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x43\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x43\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x43\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x43\x42\x68"; } // end switch(key) case 0x5: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x44\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x44\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x44\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x44\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x44\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x44\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x44\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x44\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x44\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x44\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x44\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x44\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x44\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x44\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x44\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x44\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x44\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x44\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x44\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x44\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x44\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x44\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x44\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x44\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x44\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x44\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x44\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x44\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x44\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x44\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x44\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x44\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x44\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x44\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x44\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x44\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x44\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x44\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x44\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x44\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x44\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x44\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x44\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x44\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x44\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x44\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x44\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x44\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x44\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x44\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x44\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x44\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x44\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x44\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x44\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x44\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x44\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x44\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x44\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x44\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x44\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x44\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x44\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x44\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x44\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x44\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x44\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x44\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x44\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x44\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x44\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x44\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x44\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x44\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x44\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x44\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x44\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x44\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x44\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x44\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x44\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x44\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x44\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x44\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x44\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x44\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x44\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x44\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x44\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x44\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x44\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x44\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x44\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x44\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x44\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x44\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x44\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x44\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x44\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x44\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x44\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x44\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x44\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x44\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x44\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x44\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x44\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x44\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x44\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x44\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x44\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x44\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x44\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x44\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x44\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x44\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x44\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x44\x42\x68"; } // end switch(key) case 0x6: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x47\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x47\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x47\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x47\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x47\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x47\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x47\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x47\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x47\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x47\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x47\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x47\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x47\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x47\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x47\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x47\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x47\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x47\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x47\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x47\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x47\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x47\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x47\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x47\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x47\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x47\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x47\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x47\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x47\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x47\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x47\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x47\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x47\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x47\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x47\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x47\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x47\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x47\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x47\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x47\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x47\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x47\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x47\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x47\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x47\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x47\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x47\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x47\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x47\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x47\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x47\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x47\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x47\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x47\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x47\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x47\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x47\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x47\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x47\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x47\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x47\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x47\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x47\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x47\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x47\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x47\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x47\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x47\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x47\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x47\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x47\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x47\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x47\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x47\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x47\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x47\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x47\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x47\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x47\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x47\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x47\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x47\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x47\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x47\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x47\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x47\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x47\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x47\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x47\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x47\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x47\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x47\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x47\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x47\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x47\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x47\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x47\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x47\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x47\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x47\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x47\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x47\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x47\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x47\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x47\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x47\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x47\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x47\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x47\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x47\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x47\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x47\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x47\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x47\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x47\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x47\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x47\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x47\x42\x68"; } // end switch(key) case 0x7: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x48\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x48\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x48\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x48\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x48\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x48\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x48\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x48\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x48\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x48\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x48\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x48\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x48\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x48\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x48\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x48\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x48\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x48\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x48\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x48\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x48\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x48\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x48\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x48\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x48\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x48\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x48\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x48\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x48\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x48\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x48\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x48\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x48\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x48\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x48\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x48\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x48\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x48\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x48\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x48\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x48\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x48\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x48\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x48\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x48\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x48\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x48\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x48\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x48\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x48\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x48\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x48\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x48\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x48\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x48\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x48\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x48\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x48\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x48\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x48\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x48\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x48\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x48\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x48\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x48\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x48\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x48\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x48\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x48\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x48\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x48\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x48\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x48\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x48\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x48\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x48\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x48\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x48\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x48\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x48\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x48\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x48\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x48\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x48\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x48\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x48\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x48\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x48\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x48\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x48\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x48\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x48\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x48\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x48\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x48\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x48\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x48\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x48\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x48\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x48\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x48\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x48\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x48\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x48\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x48\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x48\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x48\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x48\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x48\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x48\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x48\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x48\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x48\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x48\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x48\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x48\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x48\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x48\x42\x68"; } // end switch(key) case 0x8: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x49\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x49\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x49\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x49\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x49\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x49\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x49\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x49\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x49\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x49\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x49\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x49\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x49\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x49\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x49\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x49\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x49\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x49\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x49\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x49\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x49\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x49\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x49\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x49\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x49\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x49\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x49\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x49\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x49\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x49\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x49\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x49\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x49\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x49\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x49\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x49\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x49\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x49\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x49\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x49\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x49\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x49\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x49\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x49\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x49\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x49\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x49\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x49\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x49\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x49\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x49\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x49\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x49\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x49\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x49\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x49\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x49\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x49\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x49\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x49\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x49\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x49\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x49\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x49\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x49\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x49\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x49\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x49\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x49\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x49\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x49\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x49\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x49\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x49\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x49\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x49\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x49\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x49\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x49\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x49\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x49\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x49\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x49\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x49\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x49\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x49\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x49\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x49\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x49\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x49\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x49\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x49\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x49\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x49\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x49\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x49\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x49\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x49\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x49\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x49\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x49\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x49\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x49\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x49\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x49\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x49\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x49\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x49\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x49\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x49\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x49\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x49\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x49\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x49\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x49\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x49\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x49\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x49\x42\x68"; } // end switch(key) case 0x9: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4a\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x4a\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x4a\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x4a\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x4a\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x4a\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x4a\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x4a\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x4a\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x4a\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x4a\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x4a\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x4a\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x4a\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x4a\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x4a\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x4a\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x4a\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x4a\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x4a\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x4a\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x4a\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x4a\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x4a\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x4a\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x4a\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x4a\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x4a\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x4a\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x4a\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x4a\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x4a\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x4a\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x4a\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x4a\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x4a\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x4a\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x4a\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x4a\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x4a\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x4a\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x4a\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x4a\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4a\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x4a\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4a\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x4a\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4a\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x4a\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x4a\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x4a\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x4a\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x4a\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x4a\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x4a\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x4a\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x4a\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x4a\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x4a\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x4a\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x4a\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x4a\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x4a\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x4a\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x4a\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x4a\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4a\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x4a\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4a\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x4a\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x4a\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x4a\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x4a\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x4a\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x4a\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x4a\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x4a\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x4a\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x4a\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x4a\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x4a\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x4a\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x4a\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x4a\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x4a\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x4a\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x4a\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x4a\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x4a\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x4a\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x4a\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x4a\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x4a\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x4a\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x4a\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x4a\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x4a\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x4a\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x4a\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x4a\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x4a\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x4a\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x4a\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x4a\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x4a\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x4a\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x4a\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4a\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4a\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x4a\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x4a\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x4a\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4a\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x4a\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x4a\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4a\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x4a\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4a\x42\x68"; } // end switch(key) case 0xa: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4d\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x4d\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x4d\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x4d\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x4d\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x4d\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x4d\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x4d\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x4d\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x4d\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x4d\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x4d\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x4d\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x4d\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x4d\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x4d\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x4d\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x4d\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x4d\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x4d\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x4d\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x4d\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x4d\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x4d\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x4d\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x4d\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x4d\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x4d\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x4d\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x4d\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x4d\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x4d\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x4d\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x4d\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x4d\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x4d\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x4d\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x4d\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x4d\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x4d\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x4d\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x4d\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x4d\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4d\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x4d\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4d\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x4d\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4d\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x4d\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x4d\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x4d\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x4d\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x4d\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x4d\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x4d\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x4d\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x4d\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x4d\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x4d\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x4d\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x4d\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x4d\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x4d\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x4d\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x4d\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x4d\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4d\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x4d\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4d\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x4d\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x4d\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x4d\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x4d\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x4d\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x4d\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x4d\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x4d\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x4d\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x4d\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x4d\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x4d\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x4d\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x4d\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x4d\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x4d\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x4d\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x4d\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x4d\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x4d\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x4d\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x4d\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x4d\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x4d\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x4d\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x4d\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x4d\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x4d\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x4d\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x4d\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x4d\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x4d\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x4d\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x4d\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x4d\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x4d\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x4d\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x4d\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4d\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4d\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x4d\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x4d\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x4d\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4d\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x4d\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x4d\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4d\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x4d\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4d\x42\x68"; } // end switch(key) case 0xb: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4e\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x4e\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x4e\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x4e\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x4e\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x4e\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x4e\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x4e\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x4e\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x4e\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x4e\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x4e\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x4e\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x4e\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x4e\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x4e\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x4e\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x4e\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x4e\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x4e\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x4e\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x4e\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x4e\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x4e\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x4e\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x4e\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x4e\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x4e\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x4e\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x4e\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x4e\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x4e\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x4e\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x4e\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x4e\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x4e\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x4e\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x4e\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x4e\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x4e\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x4e\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x4e\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x4e\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4e\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x4e\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4e\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x4e\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4e\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x4e\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x4e\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x4e\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x4e\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x4e\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x4e\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x4e\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x4e\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x4e\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x4e\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x4e\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x4e\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x4e\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x4e\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x4e\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x4e\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x4e\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x4e\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4e\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x4e\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4e\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x4e\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x4e\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x4e\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x4e\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x4e\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x4e\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x4e\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x4e\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x4e\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x4e\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x4e\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x4e\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x4e\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x4e\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x4e\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x4e\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x4e\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x4e\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x4e\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x4e\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x4e\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x4e\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x4e\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x4e\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x4e\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x4e\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x4e\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x4e\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x4e\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x4e\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x4e\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x4e\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x4e\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x4e\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x4e\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x4e\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x4e\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x4e\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4e\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4e\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x4e\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x4e\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x4e\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4e\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x4e\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x4e\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4e\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x4e\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4e\x42\x68"; } // end switch(key) case 0xc: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4b\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x4b\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x4b\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x4b\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x4b\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x4b\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x4b\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x4b\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x4b\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x4b\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x4b\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x4b\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x4b\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x4b\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x4b\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x4b\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x4b\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x4b\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x4b\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x4b\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x4b\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x4b\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x4b\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x4b\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x4b\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x4b\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x4b\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x4b\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x4b\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x4b\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x4b\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x4b\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x4b\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x4b\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x4b\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x4b\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x4b\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x4b\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x4b\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x4b\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x4b\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x4b\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x4b\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4b\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x4b\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4b\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x4b\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4b\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x4b\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x4b\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x4b\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x4b\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x4b\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x4b\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x4b\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x4b\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x4b\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x4b\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x4b\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x4b\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x4b\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x4b\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x4b\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x4b\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x4b\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x4b\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4b\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x4b\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4b\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x4b\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x4b\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x4b\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x4b\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x4b\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x4b\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x4b\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x4b\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x4b\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x4b\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x4b\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x4b\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x4b\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x4b\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x4b\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x4b\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x4b\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x4b\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x4b\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x4b\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x4b\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x4b\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x4b\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x4b\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x4b\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x4b\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x4b\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x4b\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x4b\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x4b\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x4b\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x4b\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x4b\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x4b\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x4b\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x4b\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x4b\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x4b\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4b\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4b\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x4b\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x4b\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x4b\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4b\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x4b\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x4b\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4b\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x4b\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4b\x42\x68"; } // end switch(key) case 0xd: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4c\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x4c\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x4c\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x4c\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x4c\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x4c\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x4c\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x4c\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x4c\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x4c\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x4c\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x4c\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x4c\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x4c\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x4c\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x4c\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x4c\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x4c\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x4c\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x4c\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x4c\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x4c\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x4c\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x4c\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x4c\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x4c\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x4c\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x4c\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x4c\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x4c\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x4c\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x4c\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x4c\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x4c\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x4c\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x4c\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x4c\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x4c\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x4c\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x4c\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x4c\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x4c\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x4c\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4c\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x4c\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4c\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x4c\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4c\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x4c\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x4c\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x4c\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x4c\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x4c\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x4c\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x4c\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x4c\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x4c\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x4c\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x4c\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x4c\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x4c\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x4c\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x4c\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x4c\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x4c\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x4c\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4c\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x4c\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4c\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x4c\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x4c\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x4c\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x4c\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x4c\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x4c\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x4c\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x4c\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x4c\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x4c\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x4c\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x4c\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x4c\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x4c\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x4c\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x4c\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x4c\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x4c\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x4c\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x4c\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x4c\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x4c\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x4c\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x4c\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x4c\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x4c\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x4c\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x4c\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x4c\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x4c\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x4c\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x4c\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x4c\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x4c\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x4c\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x4c\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x4c\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x4c\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4c\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4c\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x4c\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x4c\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x4c\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4c\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x4c\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x4c\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4c\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x4c\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4c\x42\x68"; } // end switch(key) case 0xe: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x4f\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x4f\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x4f\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x4f\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x4f\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x4f\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x4f\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x4f\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x4f\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x4f\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x4f\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x4f\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x4f\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x4f\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x4f\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x4f\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x4f\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x4f\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x4f\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x4f\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x4f\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x4f\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x4f\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x4f\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x4f\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x4f\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x4f\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x4f\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x4f\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x4f\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x4f\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x4f\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x4f\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x4f\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x4f\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x4f\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x4f\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x4f\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x4f\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x4f\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x4f\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x4f\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x4f\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x4f\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x4f\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x4f\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x4f\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x4f\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x4f\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x4f\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x4f\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x4f\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x4f\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x4f\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x4f\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x4f\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x4f\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x4f\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x4f\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x4f\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x4f\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x4f\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x4f\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x4f\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x4f\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x4f\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x4f\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x4f\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x4f\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x4f\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x4f\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x4f\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x4f\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x4f\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x4f\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x4f\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x4f\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x4f\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x4f\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x4f\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x4f\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x4f\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x4f\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x4f\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x4f\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x4f\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x4f\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x4f\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x4f\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x4f\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x4f\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x4f\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x4f\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x4f\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x4f\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x4f\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x4f\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x4f\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x4f\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x4f\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x4f\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x4f\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x4f\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x4f\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x4f\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x4f\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x4f\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x4f\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x4f\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x4f\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x4f\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x4f\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x4f\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x4f\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x4f\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x4f\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x4f\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x4f\x42\x68"; } // end switch(key) case 0xf: - switch(key & 0x7f) { default: return NULL; + switch(key & 0xff) { default: return NULL; case 0: // SPACE return "\x04\x4b\x74\x50\x41"; - case 1: // APOSTROPHE + 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 2: // COMMA + 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 3: // MINUS + case 11: // MINUS return "\x04\x4b\x74\x50\x44"; - case 4: // PERIOD + case 12: // PERIOD return "\x04\x4b\x74\x50\x45"; - case 5: // SLASH + case 13: // SLASH return "\x04\x4b\x74\x50\x46"; - case 6: // 0 + case 14: // 0 return "\x04\x4b\x74\x50\x47"; - case 7: // 1 + case 15: // 1 return "\x04\x4b\x74\x50\x48"; - case 8: // 2 + case 16: // 2 return "\x04\x4b\x74\x50\x49"; - case 9: // 3 + case 17: // 3 return "\x04\x4b\x74\x50\x4a"; - case 10: // 4 + case 18: // 4 return "\x04\x4b\x74\x50\x4b"; - case 11: // 5 + case 19: // 5 return "\x04\x4b\x74\x50\x4c"; - case 12: // 6 + case 20: // 6 return "\x04\x4b\x74\x50\x4d"; - case 13: // 7 + case 21: // 7 return "\x04\x4b\x74\x50\x4e"; - case 14: // 8 + case 22: // 8 return "\x04\x4b\x74\x50\x4f"; - case 15: // 9 + case 23: // 9 return "\x04\x4b\x74\x50\x50"; - case 16: // SEMICOLON + case 24: // COLON + return "\x05\x4b\x74\x50\x42\x73"; + case 25: // SEMICOLON return "\x04\x4b\x74\x50\x51"; - case 17: // EQUAL + case 26: // LESS + return "\x05\x4b\x74\x50\x42\x74"; + case 27: // EQUAL return "\x04\x4b\x74\x50\x52"; - case 18: // A + 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 19: // B + case 31: // B return "\x04\x4b\x74\x50\x54"; - case 20: // C + case 32: // C return "\x04\x4b\x74\x50\x55"; - case 21: // D + case 33: // D return "\x04\x4b\x74\x50\x56"; - case 22: // E + case 34: // E return "\x04\x4b\x74\x50\x57"; - case 23: // F + case 35: // F return "\x04\x4b\x74\x50\x58"; - case 24: // G + case 36: // G return "\x04\x4b\x74\x50\x59"; - case 25: // H + case 37: // H return "\x04\x4b\x74\x50\x5a"; - case 26: // I + case 38: // I return "\x04\x4b\x74\x50\x61"; - case 27: // J + case 39: // J return "\x04\x4b\x74\x50\x62"; - case 28: // K + case 40: // K return "\x04\x4b\x74\x50\x63"; - case 29: // L + case 41: // L return "\x04\x4b\x74\x50\x64"; - case 30: // M + case 42: // M return "\x04\x4b\x74\x50\x65"; - case 31: // N + case 43: // N return "\x04\x4b\x74\x50\x66"; - case 32: // O + case 44: // O return "\x04\x4b\x74\x50\x67"; - case 33: // P + case 45: // P return "\x04\x4b\x74\x50\x68"; - case 34: // Q + case 46: // Q return "\x04\x4b\x74\x50\x69"; - case 35: // R + case 47: // R return "\x04\x4b\x74\x50\x6a"; - case 36: // S + case 48: // S return "\x04\x4b\x74\x50\x6b"; - case 37: // T + case 49: // T return "\x04\x4b\x74\x50\x6c"; - case 38: // U + case 50: // U return "\x04\x4b\x74\x50\x6d"; - case 39: // V + case 51: // V return "\x04\x4b\x74\x50\x6e"; - case 40: // W + case 52: // W return "\x04\x4b\x74\x50\x6f"; - case 41: // X + case 53: // X return "\x04\x4b\x74\x50\x70"; - case 42: // Y + case 54: // Y return "\x04\x4b\x74\x50\x71"; - case 43: // Z + case 55: // Z return "\x04\x4b\x74\x50\x72"; - case 44: // LEFT_BRACKET + case 56: // LEFT_BRACKET return "\x04\x4b\x74\x50\x73"; - case 45: // BACKSLASH + case 57: // BACKSLASH return "\x04\x4b\x74\x50\x74"; - case 46: // RIGHT_BRACKET + case 58: // RIGHT_BRACKET return "\x04\x4b\x74\x50\x75"; - case 47: // GRAVE_ACCENT + case 59: // UNDERSCORE + return "\x05\x4b\x74\x50\x42\x6a"; + case 60: // GRAVE_ACCENT return "\x04\x4b\x74\x50\x76"; - case 48: // WORLD_1 + case 61: // WORLD_1 return "\x04\x4b\x74\x50\x77"; - case 49: // WORLD_2 + case 62: // WORLD_2 return "\x04\x4b\x74\x50\x78"; - case 50: // PLUS - return "\x05\x4b\x74\x50\x42\x69"; - case 51: // UNDERSCORE - return "\x05\x4b\x74\x50\x42\x6a"; - case 52: // ESCAPE + 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 53: // ENTER + case 114: // ENTER return "\x04\x4b\x74\x50\x7a"; - case 54: // TAB + case 115: // TAB return "\x04\x4b\x74\x50\x30"; - case 55: // BACKSPACE + case 116: // BACKSPACE return "\x04\x4b\x74\x50\x31"; - case 56: // INSERT + case 117: // INSERT return "\x04\x4b\x74\x50\x32"; - case 57: // DELETE + case 118: // DELETE return "\x04\x4b\x74\x50\x33"; - case 58: // RIGHT + case 119: // RIGHT return "\x04\x4b\x74\x50\x34"; - case 59: // LEFT + case 120: // LEFT return "\x04\x4b\x74\x50\x35"; - case 60: // DOWN + case 121: // DOWN return "\x04\x4b\x74\x50\x36"; - case 61: // UP + case 122: // UP return "\x04\x4b\x74\x50\x37"; - case 62: // PAGE_UP + case 123: // PAGE_UP return "\x04\x4b\x74\x50\x38"; - case 63: // PAGE_DOWN + case 124: // PAGE_DOWN return "\x04\x4b\x74\x50\x39"; - case 64: // HOME + case 125: // HOME return "\x04\x4b\x74\x50\x2e"; - case 65: // END + case 126: // END return "\x04\x4b\x74\x50\x2d"; - case 66: // CAPS_LOCK + case 127: // CAPS_LOCK return "\x04\x4b\x74\x50\x3a"; - case 67: // SCROLL_LOCK + case 128: // SCROLL_LOCK return "\x04\x4b\x74\x50\x2b"; - case 68: // NUM_LOCK + case 129: // NUM_LOCK return "\x04\x4b\x74\x50\x3d"; - case 69: // PRINT_SCREEN + case 130: // PRINT_SCREEN return "\x04\x4b\x74\x50\x5e"; - case 70: // PAUSE + case 131: // PAUSE return "\x04\x4b\x74\x50\x21"; - case 71: // F1 + case 132: // F1 return "\x04\x4b\x74\x50\x2f"; - case 72: // F2 + case 133: // F2 return "\x04\x4b\x74\x50\x2a"; - case 73: // F3 + case 134: // F3 return "\x04\x4b\x74\x50\x3f"; - case 74: // F4 + case 135: // F4 return "\x04\x4b\x74\x50\x26"; - case 75: // F5 + case 136: // F5 return "\x04\x4b\x74\x50\x3c"; - case 76: // F6 + case 137: // F6 return "\x04\x4b\x74\x50\x3e"; - case 77: // F7 + case 138: // F7 return "\x04\x4b\x74\x50\x28"; - case 78: // F8 + case 139: // F8 return "\x04\x4b\x74\x50\x29"; - case 79: // F9 + case 140: // F9 return "\x04\x4b\x74\x50\x5b"; - case 80: // F10 + case 141: // F10 return "\x04\x4b\x74\x50\x5d"; - case 81: // F11 + case 142: // F11 return "\x04\x4b\x74\x50\x7b"; - case 82: // F12 + case 143: // F12 return "\x04\x4b\x74\x50\x7d"; - case 83: // F13 + case 144: // F13 return "\x04\x4b\x74\x50\x40"; - case 84: // F14 + case 145: // F14 return "\x04\x4b\x74\x50\x25"; - case 85: // F15 + case 146: // F15 return "\x04\x4b\x74\x50\x24"; - case 86: // F16 + case 147: // F16 return "\x04\x4b\x74\x50\x23"; - case 87: // F17 + case 148: // F17 return "\x05\x4b\x74\x50\x42\x41"; - case 88: // F18 + case 149: // F18 return "\x05\x4b\x74\x50\x42\x42"; - case 89: // F19 + case 150: // F19 return "\x05\x4b\x74\x50\x42\x43"; - case 90: // F20 + case 151: // F20 return "\x05\x4b\x74\x50\x42\x44"; - case 91: // F21 + case 152: // F21 return "\x05\x4b\x74\x50\x42\x45"; - case 92: // F22 + case 153: // F22 return "\x05\x4b\x74\x50\x42\x46"; - case 93: // F23 + case 154: // F23 return "\x05\x4b\x74\x50\x42\x47"; - case 94: // F24 + case 155: // F24 return "\x05\x4b\x74\x50\x42\x48"; - case 95: // F25 + case 156: // F25 return "\x05\x4b\x74\x50\x42\x49"; - case 96: // KP_0 + case 157: // KP_0 return "\x05\x4b\x74\x50\x42\x4a"; - case 97: // KP_1 + case 158: // KP_1 return "\x05\x4b\x74\x50\x42\x4b"; - case 98: // KP_2 + case 159: // KP_2 return "\x05\x4b\x74\x50\x42\x4c"; - case 99: // KP_3 + case 160: // KP_3 return "\x05\x4b\x74\x50\x42\x4d"; - case 100: // KP_4 + case 161: // KP_4 return "\x05\x4b\x74\x50\x42\x4e"; - case 101: // KP_5 + case 162: // KP_5 return "\x05\x4b\x74\x50\x42\x4f"; - case 102: // KP_6 + case 163: // KP_6 return "\x05\x4b\x74\x50\x42\x50"; - case 103: // KP_7 + case 164: // KP_7 return "\x05\x4b\x74\x50\x42\x51"; - case 104: // KP_8 + case 165: // KP_8 return "\x05\x4b\x74\x50\x42\x52"; - case 105: // KP_9 + case 166: // KP_9 return "\x05\x4b\x74\x50\x42\x53"; - case 106: // KP_DECIMAL + case 167: // KP_DECIMAL return "\x05\x4b\x74\x50\x42\x54"; - case 107: // KP_DIVIDE + case 168: // KP_DIVIDE return "\x05\x4b\x74\x50\x42\x55"; - case 108: // KP_MULTIPLY + case 169: // KP_MULTIPLY return "\x05\x4b\x74\x50\x42\x56"; - case 109: // KP_SUBTRACT + case 170: // KP_SUBTRACT return "\x05\x4b\x74\x50\x42\x57"; - case 110: // KP_ADD + case 171: // KP_ADD return "\x05\x4b\x74\x50\x42\x58"; - case 111: // KP_ENTER + case 172: // KP_ENTER return "\x05\x4b\x74\x50\x42\x59"; - case 112: // KP_EQUAL + case 173: // KP_EQUAL return "\x05\x4b\x74\x50\x42\x5a"; - case 114: // LEFT_CONTROL + case 175: // LEFT_CONTROL return "\x05\x4b\x74\x50\x42\x62"; - case 115: // LEFT_ALT + case 176: // LEFT_ALT return "\x05\x4b\x74\x50\x42\x63"; - case 116: // LEFT_SUPER + case 177: // LEFT_SUPER return "\x05\x4b\x74\x50\x42\x64"; - case 118: // RIGHT_CONTROL + case 179: // RIGHT_CONTROL return "\x05\x4b\x74\x50\x42\x66"; - case 119: // RIGHT_ALT + case 180: // RIGHT_ALT return "\x05\x4b\x74\x50\x42\x67"; - case 120: // RIGHT_SUPER + case 181: // RIGHT_SUPER return "\x05\x4b\x74\x50\x42\x68"; } // end switch(key) } // end switch(mods)