From f5ffc6c672578da5d39db630c9aa24f9e1119334 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9=20van=20Geldorp?= Date: Mon, 19 Sep 2005 21:11:41 +0000 Subject: [PATCH] - Add ctrl support to (most) keyboard layouts. Only tested for kbdus, added to a few other I was confident about. Still to do: kbddv, kbdgr, kbdru, kbdsg - Prevent access outside array in TryToTranslateChar - Revert r17830, it handles ctrl keys at the wrong location This fixes bug 763. svn path=/trunk/; revision=17936 --- reactos/lib/keyboard/kbdbe/kbdbe.c | 61 ++++++++++++------------- reactos/lib/keyboard/kbdda/kbdda.c | 60 ++++++++++++------------ reactos/lib/keyboard/kbddv/kbddv.c | 58 +++++++++++------------ reactos/lib/keyboard/kbdes/kbdes.c | 59 ++++++++++++------------ reactos/lib/keyboard/kbdfr/kbdfr.c | 59 ++++++++++++------------ reactos/lib/keyboard/kbdse/kbdse.c | 60 ++++++++++++------------ reactos/lib/keyboard/kbduk/kbduk.c | 59 ++++++++++++------------ reactos/lib/keyboard/kbdus/kbdus.c | 58 +++++++++++------------ reactos/subsys/win32k/ntuser/input.c | 28 +----------- reactos/subsys/win32k/ntuser/keyboard.c | 2 +- 10 files changed, 236 insertions(+), 268 deletions(-) diff --git a/reactos/lib/keyboard/kbdbe/kbdbe.c b/reactos/lib/keyboard/kbdbe/kbdbe.c index c804b183e41..fba68e8c528 100644 --- a/reactos/lib/keyboard/kbdbe/kbdbe.c +++ b/reactos/lib/keyboard/kbdbe/kbdbe.c @@ -180,37 +180,6 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { { '8', NOCAPS, {'!', '8'} }, { VK_OEM_2, NOCAPS, {')', 0xB0} }, - /* First letter row */ - { 'A', CAPS, {'a', 'A'} }, - { 'Z', CAPS, {'z', 'Z'} }, - { 'R', CAPS, {'r', 'R'} }, - { 'T', CAPS, {'t', 'T'} }, - { 'Y', CAPS, {'y', 'Y'} }, - { 'U', CAPS, {'u', 'U'} }, - { 'I', CAPS, {'i', 'I'} }, - { 'O', CAPS, {'o', 'O'} }, - { 'P', CAPS, {'p', 'P'} }, - - /* Second letter row */ - { 'Q', CAPS, {'q', 'Q'} }, - { 'S', CAPS, {'s', 'S'} }, - { 'D', CAPS, {'d', 'D'} }, - { 'F', CAPS, {'f', 'F'} }, - { 'G', CAPS, {'g', 'G'} }, - { 'H', CAPS, {'h', 'H'} }, - { 'J', CAPS, {'j', 'J'} }, - { 'K', CAPS, {'k', 'K'} }, - { 'L', CAPS, {'l', 'L'} }, - { 'M', CAPS, {'m', 'M'} }, - - /* Third letter row */ - { 'W', CAPS, {'w', 'W'} }, - { 'X', CAPS, {'x', 'X'} }, - { 'C', CAPS, {'c', 'C'} }, - { 'V', CAPS, {'v', 'V'} }, - { 'B', CAPS, {'b', 'B'} }, - { 'N', CAPS, {'n', 'N'} }, - /* Specials */ { VK_OEM_COMMA, CAPS, {',', '?'} }, { VK_OEM_PERIOD, CAPS, {';', '.'} }, @@ -228,6 +197,33 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = { /* Normal, Shifted, Ctrl */ + + /* The alphabet */ + { 'A', CAPS, {'a', 'A', 0x01} }, + { 'B', CAPS, {'b', 'B', 0x02} }, + { 'C', CAPS, {'c', 'C', 0x03} }, + { 'D', CAPS, {'d', 'D', 0x04} }, + { 'F', CAPS, {'f', 'F', 0x06} }, + { 'G', CAPS, {'g', 'G', 0x07} }, + { 'H', CAPS, {'h', 'H', 0x08} }, + { 'I', CAPS, {'i', 'I', 0x09} }, + { 'J', CAPS, {'j', 'J', 0x0a} }, + { 'K', CAPS, {'k', 'K', 0x0b} }, + { 'L', CAPS, {'l', 'L', 0x0c} }, + { 'M', CAPS, {'m', 'M', 0x0d} }, + { 'N', CAPS, {'n', 'N', 0x0e} }, + { 'O', CAPS, {'o', 'O', 0x0f} }, + { 'P', CAPS, {'p', 'P', 0x10} }, + { 'Q', CAPS, {'q', 'Q', 0x11} }, + { 'R', CAPS, {'r', 'R', 0x12} }, + { 'S', CAPS, {'s', 'S', 0x13} }, + { 'T', CAPS, {'t', 'T', 0x14} }, + { 'U', CAPS, {'u', 'U', 0x15} }, + { 'V', CAPS, {'v', 'V', 0x16} }, + { 'W', CAPS, {'w', 'W', 0x17} }, + { 'X', CAPS, {'x', 'X', 0x18} }, + { 'Y', CAPS, {'y', 'Y', 0x19} }, + { 'Z', CAPS, {'z', 'Z', 0x1a} }, /* Legacy (telnet-style) ascii escapes */ { VK_OEM_MINUS, NOCAPS, {'-', '_', 0x1f} }, //0x1f unit separator  { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} }, @@ -242,6 +238,7 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = { ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { /* Normal, Shifted, Ctrl, Ctrl-Alt */ + /* Legacy Ascii generators */ { '1', NOCAPS, {'&', '1', WCH_NONE, '|' } }, { '2', NOCAPS, {0xE9, '2', WCH_NONE, '@' } }, @@ -257,7 +254,7 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { { VK_OEM_7, NOCAPS, {0xF9, '%', WCH_NONE, WCH_DEAD} }, { VK_EMPTY , NOCAPS, {0xb4, '`', '|', WCH_NONE} }, - { 'E', CAPS, {'e', 'E', WCH_NONE, 0x20ac} }, + { 'E', CAPS, {'e', 'E', 0x05, 0x20ac} }, { VK_EMPTY , NOCAPS, {0xa8, '^', WCH_NONE, '~'} }, { VK_OEM_102, NOCAPS, {'<', '>', 0x001c, '\\'} }, diff --git a/reactos/lib/keyboard/kbdda/kbdda.c b/reactos/lib/keyboard/kbdda/kbdda.c index 53b9522a03b..409f7f38830 100644 --- a/reactos/lib/keyboard/kbdda/kbdda.c +++ b/reactos/lib/keyboard/kbdda/kbdda.c @@ -173,35 +173,7 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { { '1', NOCAPS, {'1', '!'} }, /* Ctrl-2 generates NUL */ { VK_OEM_PLUS, NOCAPS, {'+', '?'} }, - /* First letter row */ - { 'Q', CAPS, {'q', 'Q'} }, - { 'W', CAPS, {'w', 'W'} }, - { 'R', CAPS, {'r', 'R'} }, - { 'T', CAPS, {'t', 'T'} }, - { 'Y', CAPS, {'y', 'Y'} }, - { 'U', CAPS, {'u', 'U'} }, - { 'I', CAPS, {'i', 'I'} }, - { 'O', CAPS, {'o', 'O'} }, - { 'P', CAPS, {'p', 'P'} }, { VK_OEM_6, CAPS, {0xe5, 0xc5} }, /* Å */ - /* Second letter row */ - { 'A', CAPS, {'a', 'A'} }, - { 'S', CAPS, {'s', 'S'} }, - { 'D', CAPS, {'d', 'D'} }, - { 'F', CAPS, {'f', 'F'} }, - { 'G', CAPS, {'g', 'G'} }, - { 'H', CAPS, {'h', 'H'} }, - { 'J', CAPS, {'j', 'J'} }, - { 'K', CAPS, {'k', 'K'} }, - { 'L', CAPS, {'l', 'L'} }, - - /* Third letter row */ - { 'Z', CAPS, {'z', 'Z'} }, - { 'X', CAPS, {'x', 'X'} }, - { 'C', CAPS, {'c', 'C'} }, - { 'V', CAPS, {'v', 'V'} }, - { 'B', CAPS, {'b', 'B'} }, - { 'N', CAPS, {'n', 'N'} }, /* Specials */ { VK_OEM_7, CAPS, {0xf8, 0xd8} }, /* Ø */ @@ -222,6 +194,34 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = { /* Normal, Shifted, Ctrl */ + + /* The alphabet */ + { 'A', CAPS, {'a', 'A', 0x01} }, + { 'B', CAPS, {'b', 'B', 0x02} }, + { 'C', CAPS, {'c', 'C', 0x03} }, + { 'D', CAPS, {'d', 'D', 0x04} }, + { 'F', CAPS, {'f', 'F', 0x06} }, + { 'G', CAPS, {'g', 'G', 0x07} }, + { 'H', CAPS, {'h', 'H', 0x08} }, + { 'I', CAPS, {'i', 'I', 0x09} }, + { 'J', CAPS, {'j', 'J', 0x0a} }, + { 'K', CAPS, {'k', 'K', 0x0b} }, + { 'L', CAPS, {'l', 'L', 0x0c} }, + { 'M', CAPS, {'m', 'M', 0x0d} }, + { 'N', CAPS, {'n', 'N', 0x0e} }, + { 'O', CAPS, {'o', 'O', 0x0f} }, + { 'P', CAPS, {'p', 'P', 0x10} }, + { 'Q', CAPS, {'q', 'Q', 0x11} }, + { 'R', CAPS, {'r', 'R', 0x12} }, + { 'S', CAPS, {'s', 'S', 0x13} }, + { 'T', CAPS, {'t', 'T', 0x14} }, + { 'U', CAPS, {'u', 'U', 0x15} }, + { 'V', CAPS, {'v', 'V', 0x16} }, + { 'W', CAPS, {'w', 'W', 0x17} }, + { 'X', CAPS, {'x', 'X', 0x18} }, + { 'Y', CAPS, {'y', 'Y', 0x19} }, + { 'Z', CAPS, {'z', 'Z', 0x1a} }, + /* Legacy (telnet-style) ascii escapes */ { VK_OEM_MINUS, NOCAPS, {'-', '_', 0x1f /* US */} }, { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} }, @@ -248,11 +248,11 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { { VK_OEM_4, NOCAPS, {WCH_DEAD, WCH_DEAD, WCH_DEAD, '|'} }, { VK_EMPTY , NOCAPS, {0xb4, '`', '|', WCH_NONE} }, - { 'E', CAPS, {'e', 'E', WCH_NONE, 0x20ac} }, + { 'E', CAPS, {'e', 'E', 0x05, 0x20ac} }, { VK_OEM_1, NOCAPS, {WCH_DEAD, WCH_DEAD, WCH_NONE, WCH_DEAD} }, { VK_EMPTY , NOCAPS, {0xa8, '^', WCH_NONE, '~'} }, - { 'M', CAPS, {'m', 'M', WCH_NONE, 0x00b5} }, + { 'M', CAPS, {'m', 'M', 0x0d, 0x00b5} }, { VK_OEM_102, NOCAPS, {'<', '>', 0x001c, '\\'} }, { 0, 0 } }; diff --git a/reactos/lib/keyboard/kbddv/kbddv.c b/reactos/lib/keyboard/kbddv/kbddv.c index e9fe4c4c8a8..017b0502b57 100644 --- a/reactos/lib/keyboard/kbddv/kbddv.c +++ b/reactos/lib/keyboard/kbddv/kbddv.c @@ -143,35 +143,6 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { { '8', NOCAPS, {'8', '*'} }, { '9', NOCAPS, {'9', '('} }, { '0', NOCAPS, {'0', ')'} }, - /* First letter row */ - { 'P', CAPS, {'p', 'P'} }, - { 'Y', CAPS, {'y', 'Y'} }, - { 'F', CAPS, {'f', 'F'} }, - { 'G', CAPS, {'g', 'G'} }, - { 'C', CAPS, {'c', 'C'} }, - { 'R', CAPS, {'r', 'R'} }, - { 'L', CAPS, {'l', 'L'} }, - /* Second letter row */ - { 'A', CAPS, {'a', 'A'} }, - { 'O', CAPS, {'o', 'O'} }, - { 'E', CAPS, {'e', 'E'} }, - { 'U', CAPS, {'u', 'U'} }, - { 'I', CAPS, {'i', 'I'} }, - { 'D', CAPS, {'d', 'D'} }, - { 'H', CAPS, {'h', 'H'} }, - { 'T', CAPS, {'t', 'T'} }, - { 'N', CAPS, {'n', 'N'} }, - { 'S', CAPS, {'s', 'S'} }, - /* Third letter row */ - { 'Q', CAPS, {'q', 'Q'} }, - { 'J', CAPS, {'j', 'J'} }, - { 'K', CAPS, {'k', 'K'} }, - { 'X', CAPS, {'x', 'X'} }, - { 'B', CAPS, {'b', 'B'} }, - { 'M', CAPS, {'m', 'M'} }, - { 'W', CAPS, {'w', 'W'} }, - { 'V', CAPS, {'v', 'V'} }, - { 'Z', CAPS, {'z', 'Z'} }, /* Specials */ /* Ctrl-_ generates US */ @@ -205,6 +176,35 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = { ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { /* Normal, Shifted, Ctrl, C-S-x */ + + /* The alphabet */ + { 'A', CAPS, {'a', 'A', 0x01, 0x01} }, + { 'B', CAPS, {'b', 'B', 0x02, 0x02} }, + { 'C', CAPS, {'c', 'C', 0x03, 0x03} }, + { 'D', CAPS, {'d', 'D', 0x04, 0x04} }, + { 'E', CAPS, {'e', 'E', 0x05, 0x05} }, + { 'F', CAPS, {'f', 'F', 0x06, 0x06} }, + { 'G', CAPS, {'g', 'G', 0x07, 0x07} }, + { 'H', CAPS, {'h', 'H', 0x08, 0x08} }, + { 'I', CAPS, {'i', 'I', 0x09, 0x09} }, + { 'J', CAPS, {'j', 'J', 0x0a, 0x0a} }, + { 'K', CAPS, {'k', 'K', 0x0b, 0x0b} }, + { 'L', CAPS, {'l', 'L', 0x0c, 0x0c} }, + { 'M', CAPS, {'m', 'M', 0x0d, 0x0d} }, + { 'N', CAPS, {'n', 'N', 0x0e, 0x0e} }, + { 'O', CAPS, {'o', 'O', 0x0f, 0x0f} }, + { 'P', CAPS, {'p', 'P', 0x10, 0x10} }, + { 'Q', CAPS, {'q', 'Q', 0x11, 0x11} }, + { 'R', CAPS, {'r', 'R', 0x12, 0x12} }, + { 'S', CAPS, {'s', 'S', 0x13, 0x13} }, + { 'T', CAPS, {'t', 'T', 0x14, 0x14} }, + { 'U', CAPS, {'u', 'U', 0x15, 0x15} }, + { 'V', CAPS, {'v', 'V', 0x16, 0x16} }, + { 'W', CAPS, {'w', 'W', 0x17, 0x17} }, + { 'X', CAPS, {'x', 'X', 0x18, 0x18} }, + { 'Y', CAPS, {'y', 'Y', 0x19, 0x19} }, + { 'Z', CAPS, {'z', 'Z', 0x1a, 0x1a} }, + /* Legacy Ascii generators */ { '2', NOCAPS, {'2', '@', WCH_NONE, 0} }, { '6', NOCAPS, {'6', '^', WCH_NONE, 0x1e /* RS */} }, diff --git a/reactos/lib/keyboard/kbdes/kbdes.c b/reactos/lib/keyboard/kbdes/kbdes.c index 7849f417e60..464d5422704 100644 --- a/reactos/lib/keyboard/kbdes/kbdes.c +++ b/reactos/lib/keyboard/kbdes/kbdes.c @@ -249,36 +249,7 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { { '8', NOCAPS, {'8', '('} }, { '9', NOCAPS, {'9', ')'} }, { '0', NOCAPS, {'0', '='} }, - /* First letter row */ - { 'Q', CAPS, {'q', 'Q'} }, - { 'W', CAPS, {'w', 'W'} }, - //La E tiene 3 estados - { 'R', CAPS, {'r', 'R'} }, - { 'T', CAPS, {'t', 'T'} }, - { 'Y', CAPS, {'y', 'Y'} }, - { 'U', CAPS, {'u', 'U'} }, - { 'I', CAPS, {'i', 'I'} }, - { 'O', CAPS, {'o', 'O'} }, - { 'P', CAPS, {'p', 'P'} }, - /* Second letter row */ - { 'A', CAPS, {'a', 'A'} }, - { 'S', CAPS, {'s', 'S'} }, - { 'D', CAPS, {'d', 'D'} }, - { 'F', CAPS, {'f', 'F'} }, - { 'G', CAPS, {'g', 'G'} }, - { 'H', CAPS, {'h', 'H'} }, - { 'J', CAPS, {'j', 'J'} }, - { 'K', CAPS, {'k', 'K'} }, - { 'L', CAPS, {'l', 'L'} }, { VK_OEM_3, CAPS, {0x00F1, 0x00D1} }, // ñÑ - /* Third letter row */ - { 'Z', CAPS, {'z', 'Z'} }, - { 'X', CAPS, {'x', 'X'} }, - { 'C', CAPS, {'c', 'C'} }, - { 'V', CAPS, {'v', 'V'} }, - { 'B', CAPS, {'b', 'B'} }, - { 'N', CAPS, {'n', 'N'} }, - { 'M', CAPS, {'m', 'M'} }, /* Specials */ /* Ctrl-_ generates ES */ @@ -303,6 +274,34 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = { /* Normal, Shifted, Ctrl */ + + /* The alphabet */ + { 'A', CAPS, {'a', 'A', 0x01} }, + { 'B', CAPS, {'b', 'B', 0x02} }, + { 'C', CAPS, {'c', 'C', 0x03} }, + { 'D', CAPS, {'d', 'D', 0x04} }, + { 'F', CAPS, {'f', 'F', 0x06} }, + { 'G', CAPS, {'g', 'G', 0x07} }, + { 'H', CAPS, {'h', 'H', 0x08} }, + { 'I', CAPS, {'i', 'I', 0x09} }, + { 'J', CAPS, {'j', 'J', 0x0a} }, + { 'K', CAPS, {'k', 'K', 0x0b} }, + { 'L', CAPS, {'l', 'L', 0x0c} }, + { 'M', CAPS, {'m', 'M', 0x0d} }, + { 'N', CAPS, {'n', 'N', 0x0e} }, + { 'O', CAPS, {'o', 'O', 0x0f} }, + { 'P', CAPS, {'p', 'P', 0x10} }, + { 'Q', CAPS, {'q', 'Q', 0x11} }, + { 'R', CAPS, {'r', 'R', 0x12} }, + { 'S', CAPS, {'s', 'S', 0x13} }, + { 'T', CAPS, {'t', 'T', 0x14} }, + { 'U', CAPS, {'u', 'U', 0x15} }, + { 'V', CAPS, {'v', 'V', 0x16} }, + { 'W', CAPS, {'w', 'W', 0x17} }, + { 'X', CAPS, {'x', 'X', 0x18} }, + { 'Y', CAPS, {'y', 'Y', 0x19} }, + { 'Z', CAPS, {'z', 'Z', 0x1a} }, + /* Legacy (telnet-style) ascii escapes */ { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} }, { 0,0 } @@ -315,7 +314,7 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { { '2', NOCAPS, {'2', '"', WCH_NONE, '@'} }, // 2"@ { '3', NOCAPS, {'3', 0x00B7, WCH_NONE, '#'} }, // 3·# { '6', NOCAPS, {'6', '&', WCH_NONE, 0x00AC} }, // 6&¬ - { 'E', CAPS, {'e', 'E', WCH_NONE, 0x20AC} }, // eE€ + { 'E', CAPS, {'e', 'E', 0x05, 0x20AC} }, // eE€ { VK_OEM_PLUS, NOCAPS, {'+', '*', WCH_NONE, 0x005d} }, // +*] { VK_OEM_2, NOCAPS, {0x00e7, 0x00c7, WCH_NONE, '}'} }, // çÇ} diff --git a/reactos/lib/keyboard/kbdfr/kbdfr.c b/reactos/lib/keyboard/kbdfr/kbdfr.c index 2d8b9afea2b..0a7d478dc4a 100644 --- a/reactos/lib/keyboard/kbdfr/kbdfr.c +++ b/reactos/lib/keyboard/kbdfr/kbdfr.c @@ -162,35 +162,6 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { //{ '8', NOCAPS, {'_', '8'} }, //{ '9', NOCAPS, {'ç', '9'} }, //{ '0', NOCAPS, {'à', '0'} }, - /* First letter row */ - { 'A', CAPS, {'a', 'A'} }, - { 'Z', CAPS, {'z', 'Z'} }, - //{ 'E', CAPS, {'e', 'E'} }, - { 'R', CAPS, {'r', 'R'} }, - { 'T', CAPS, {'t', 'T'} }, - { 'Y', CAPS, {'y', 'Y'} }, - { 'U', CAPS, {'u', 'U'} }, - { 'I', CAPS, {'i', 'I'} }, - { 'O', CAPS, {'o', 'O'} }, - { 'P', CAPS, {'p', 'P'} }, - /* Second letter row */ - { 'Q', CAPS, {'q', 'Q'} }, - { 'S', CAPS, {'s', 'S'} }, - { 'D', CAPS, {'d', 'D'} }, - { 'F', CAPS, {'f', 'F'} }, - { 'G', CAPS, {'g', 'G'} }, - { 'H', CAPS, {'h', 'H'} }, - { 'J', CAPS, {'j', 'J'} }, - { 'K', CAPS, {'k', 'K'} }, - { 'L', CAPS, {'l', 'L'} }, - { 'M', CAPS, {'m', 'M'} }, - /* Third letter row */ - { 'W', CAPS, {'w', 'W'} }, - { 'X', CAPS, {'x', 'X'} }, - { 'C', CAPS, {'c', 'C'} }, - { 'V', CAPS, {'v', 'V'} }, - { 'B', CAPS, {'b', 'B'} }, - { 'N', CAPS, {'n', 'N'} }, /* Specials */ /* Ctrl-_ generates US */ @@ -214,6 +185,34 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = { /* Normal, Shifted, Ctrl */ + + /* The alphabet */ + { 'A', CAPS, {'a', 'A', 0x01} }, + { 'B', CAPS, {'b', 'B', 0x02} }, + { 'C', CAPS, {'c', 'C', 0x03} }, + { 'D', CAPS, {'d', 'D', 0x04} }, + { 'F', CAPS, {'f', 'F', 0x06} }, + { 'G', CAPS, {'g', 'G', 0x07} }, + { 'H', CAPS, {'h', 'H', 0x08} }, + { 'I', CAPS, {'i', 'I', 0x09} }, + { 'J', CAPS, {'j', 'J', 0x0a} }, + { 'K', CAPS, {'k', 'K', 0x0b} }, + { 'L', CAPS, {'l', 'L', 0x0c} }, + { 'M', CAPS, {'m', 'M', 0x0d} }, + { 'N', CAPS, {'n', 'N', 0x0e} }, + { 'O', CAPS, {'o', 'O', 0x0f} }, + { 'P', CAPS, {'p', 'P', 0x10} }, + { 'Q', CAPS, {'q', 'Q', 0x11} }, + { 'R', CAPS, {'r', 'R', 0x12} }, + { 'S', CAPS, {'s', 'S', 0x13} }, + { 'T', CAPS, {'t', 'T', 0x14} }, + { 'U', CAPS, {'u', 'U', 0x15} }, + { 'V', CAPS, {'v', 'V', 0x16} }, + { 'W', CAPS, {'w', 'W', 0x17} }, + { 'X', CAPS, {'x', 'X', 0x18} }, + { 'Y', CAPS, {'y', 'Y', 0x19} }, + { 'Z', CAPS, {'z', 'Z', 0x1a} }, + /* Legacy (telnet-style) ascii escapes */ { VK_OEM_102, 0, {'<', '>', 0x1c /* FS */} }, { VK_OEM_6, 0, {WCH_DEAD, WCH_DEAD, WCH_NONE} }, @@ -234,7 +233,7 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { { '9' , 1, {'ç', '9', WCH_NONE, '^'} }, { '0' , 1, {'à', '0', WCH_NONE, '@'} }, { VK_OEM_PLUS,0, {'=', '+', WCH_NONE, '}'} }, - { 'E' , 1, {'e', 'E', WCH_NONE, '€' /* euro */} }, + { 'E' , 1, {'e', 'E', 0x05, '€' /* euro */} }, { VK_OEM_1, 0, {'$', '£', WCH_NONE, '¤'} }, { VK_OEM_4, 0, {')', '°', WCH_NONE, ']'} }, { 0, 0 } diff --git a/reactos/lib/keyboard/kbdse/kbdse.c b/reactos/lib/keyboard/kbdse/kbdse.c index e11f9655ccd..293bd4b8018 100644 --- a/reactos/lib/keyboard/kbdse/kbdse.c +++ b/reactos/lib/keyboard/kbdse/kbdse.c @@ -176,35 +176,6 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { /* The numbers */ { '1', NOCAPS, {'1', '!'} }, /* Ctrl-2 generates NUL */ - - /* First letter row */ - { 'Q', CAPS, {'q', 'Q'} }, - { 'W', CAPS, {'w', 'W'} }, - { 'R', CAPS, {'r', 'R'} }, - { 'T', CAPS, {'t', 'T'} }, - { 'Y', CAPS, {'y', 'Y'} }, - { 'U', CAPS, {'u', 'U'} }, - { 'I', CAPS, {'i', 'I'} }, - { 'O', CAPS, {'o', 'O'} }, - { 'P', CAPS, {'p', 'P'} }, - /* Second letter row */ - { 'A', CAPS, {'a', 'A'} }, - { 'S', CAPS, {'s', 'S'} }, - { 'D', CAPS, {'d', 'D'} }, - { 'F', CAPS, {'f', 'F'} }, - { 'G', CAPS, {'g', 'G'} }, - { 'H', CAPS, {'h', 'H'} }, - { 'J', CAPS, {'j', 'J'} }, - { 'K', CAPS, {'k', 'K'} }, - { 'L', CAPS, {'l', 'L'} }, - - /* Third letter row */ - { 'Z', CAPS, {'z', 'Z'} }, - { 'X', CAPS, {'x', 'X'} }, - { 'C', CAPS, {'c', 'C'} }, - { 'V', CAPS, {'v', 'V'} }, - { 'B', CAPS, {'b', 'B'} }, - { 'N', CAPS, {'n', 'N'} }, /* Specials */ { VK_OEM_4, NOCAPS, {WCH_DEAD, WCH_DEAD} }, @@ -226,6 +197,33 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = { /* Normal, Shifted, Ctrl */ + + /* The alphabet */ + { 'A', CAPS, {'a', 'A', 0x01} }, + { 'B', CAPS, {'b', 'B', 0x02} }, + { 'C', CAPS, {'c', 'C', 0x03} }, + { 'D', CAPS, {'d', 'D', 0x04} }, + { 'F', CAPS, {'f', 'F', 0x06} }, + { 'G', CAPS, {'g', 'G', 0x07} }, + { 'H', CAPS, {'h', 'H', 0x08} }, + { 'I', CAPS, {'i', 'I', 0x09} }, + { 'J', CAPS, {'j', 'J', 0x0a} }, + { 'K', CAPS, {'k', 'K', 0x0b} }, + { 'L', CAPS, {'l', 'L', 0x0c} }, + { 'N', CAPS, {'n', 'N', 0x0e} }, + { 'O', CAPS, {'o', 'O', 0x0f} }, + { 'P', CAPS, {'p', 'P', 0x10} }, + { 'Q', CAPS, {'q', 'Q', 0x11} }, + { 'R', CAPS, {'r', 'R', 0x12} }, + { 'S', CAPS, {'s', 'S', 0x13} }, + { 'T', CAPS, {'t', 'T', 0x14} }, + { 'U', CAPS, {'u', 'U', 0x15} }, + { 'V', CAPS, {'v', 'V', 0x16} }, + { 'W', CAPS, {'w', 'W', 0x17} }, + { 'X', CAPS, {'x', 'X', 0x18} }, + { 'Y', CAPS, {'y', 'Y', 0x19} }, + { 'Z', CAPS, {'z', 'Z', 0x1a} }, + /* Legacy (telnet-style) ascii escapes */ {VK_OEM_6, CAPS, {0xe5,0xc5, 0x1d /* GS */} }, { VK_OEM_5, NOCAPS, {0xa7,0xbd, 0x1c /* FS */} }, @@ -253,9 +251,9 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { { '9', NOCAPS, {'9', ')', WCH_NONE, ']'} }, { '0', NOCAPS, {'0', '=', WCH_NONE, '}'} }, { VK_OEM_PLUS ,NOCAPS, {'+', '?', WCH_NONE, '\\'} }, - { 'E', CAPS, {'e', 'E' , WCH_NONE, 0x00ac} }, + { 'E', CAPS, {'e', 'E' , 0x05, 0x00ac} }, { VK_OEM_1 ,NOCAPS, {0xa8, '^', 0x001d, '~'} }, - { 'M', CAPS, {'m', 'M', WCH_NONE, 0x00b5} }, + { 'M', CAPS, {'m', 'M', 0x0d, 0x00b5} }, {VK_OEM_102, NOCAPS, {'<', '>' ,0x001c,'|'} }, { 0, 0 } }; diff --git a/reactos/lib/keyboard/kbduk/kbduk.c b/reactos/lib/keyboard/kbduk/kbduk.c index 7a9f05abb76..51fd8d60fdd 100644 --- a/reactos/lib/keyboard/kbduk/kbduk.c +++ b/reactos/lib/keyboard/kbduk/kbduk.c @@ -146,32 +146,7 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { { '9', NOCAPS, {'9', '('} }, { '0', NOCAPS, {'0', ')'} }, { VK_OEM_PLUS ,NOCAPS, {'=', '+'} }, - /* First letter row */ - { 'Q', CAPS, {'q', 'Q'} }, - { 'W', CAPS, {'w', 'W'} }, - { 'R', CAPS, {'r', 'R'} }, - { 'T', CAPS, {'t', 'T'} }, - { 'Y', CAPS, {'y', 'Y'} }, - { 'P', CAPS, {'p', 'P'} }, - /* Second letter row */ - { 'S', CAPS, {'s', 'S'} }, - { 'D', CAPS, {'d', 'D'} }, - { 'F', CAPS, {'f', 'F'} }, - { 'G', CAPS, {'g', 'G'} }, - { 'H', CAPS, {'h', 'H'} }, - { 'J', CAPS, {'j', 'J'} }, - { 'K', CAPS, {'k', 'K'} }, - { 'L', CAPS, {'l', 'L'} }, { VK_OEM_1 ,NOCAPS, {';', ':'} }, - - /* Third letter row */ - { 'Z', CAPS, {'z', 'Z'} }, - { 'X', CAPS, {'x', 'X'} }, - { 'C', CAPS, {'c', 'C'} }, - { 'V', CAPS, {'v', 'V'} }, - { 'B', CAPS, {'b', 'B'} }, - { 'N', CAPS, {'n', 'N'} }, - { 'M', CAPS, {'m', 'M'} }, { VK_OEM_COMMA, NOCAPS, {',', '<'} }, { VK_OEM_PERIOD, NOCAPS, {'.', '>'} }, { VK_OEM_2, NOCAPS, {'/', '?'} }, @@ -201,6 +176,30 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = { ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { /* Normal, Shifted, Ctrl, C-Shift */ + + /* The alphabet */ + { 'B', CAPS, {'b', 'B', 0x02, 0x02} }, + { 'C', CAPS, {'c', 'C', 0x03, 0x03} }, + { 'D', CAPS, {'d', 'D', 0x04, 0x04} }, + { 'F', CAPS, {'f', 'F', 0x06, 0x06} }, + { 'G', CAPS, {'g', 'G', 0x07, 0x07} }, + { 'H', CAPS, {'h', 'H', 0x08, 0x08} }, + { 'J', CAPS, {'j', 'J', 0x0a, 0x0a} }, + { 'K', CAPS, {'k', 'K', 0x0b, 0x0b} }, + { 'L', CAPS, {'l', 'L', 0x0c, 0x0c} }, + { 'M', CAPS, {'m', 'M', 0x0d, 0x0d} }, + { 'N', CAPS, {'n', 'N', 0x0e, 0x0e} }, + { 'P', CAPS, {'p', 'P', 0x10, 0x10} }, + { 'Q', CAPS, {'q', 'Q', 0x11, 0x11} }, + { 'R', CAPS, {'r', 'R', 0x12, 0x12} }, + { 'S', CAPS, {'s', 'S', 0x13, 0x13} }, + { 'T', CAPS, {'t', 'T', 0x14, 0x14} }, + { 'V', CAPS, {'v', 'V', 0x16, 0x16} }, + { 'W', CAPS, {'w', 'W', 0x17, 0x17} }, + { 'X', CAPS, {'x', 'X', 0x18, 0x18} }, + { 'Y', CAPS, {'y', 'Y', 0x19, 0x19} }, + { 'Z', CAPS, {'z', 'Z', 0x1a, 0x1a} }, + /* Legacy Ascii generators */ { '6', NOCAPS, {'6', '^', WCH_NONE, 0x1e} }, @@ -220,11 +219,11 @@ ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = { ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = { /* Normal, Shifted, Ctrl, Sh-Ctrl,Sh-Alt,Ctl-Alt,Ctl-Sh-Alt */ - { 'E', CAPS, {'e', 'E', WCH_NONE, WCH_NONE, 0x00e9, 0x00c9} }, - { 'U', CAPS, {'u', 'U', WCH_NONE, WCH_NONE, 0x00fa, 0x00da} }, - { 'I', CAPS, {'i', 'I', WCH_NONE, WCH_NONE, 0x00ed, 0x00cd} }, - { 'O', CAPS, {'o', 'O', WCH_NONE, WCH_NONE, 0x00f3, 0x00d3} }, - { 'A', CAPS, {'a', 'A', WCH_NONE, WCH_NONE, 0x00e1, 0x00c1} }, + { 'E', CAPS, {'e', 'E', 0x05, 0x05, 0x00e9, 0x00c9} }, + { 'U', CAPS, {'u', 'U', 0x15, 0x15, 0x00fa, 0x00da} }, + { 'I', CAPS, {'i', 'I', 0x09, 0x09, 0x00ed, 0x00cd} }, + { 'O', CAPS, {'o', 'O', 0x0f, 0x0f, 0x00f3, 0x00d3} }, + { 'A', CAPS, {'a', 'A', 0x01, 0x01, 0x00e1, 0x00c1} }, { 0, 0 } }; diff --git a/reactos/lib/keyboard/kbdus/kbdus.c b/reactos/lib/keyboard/kbdus/kbdus.c index 6176cf4a502..9750d73f1a2 100644 --- a/reactos/lib/keyboard/kbdus/kbdus.c +++ b/reactos/lib/keyboard/kbdus/kbdus.c @@ -143,35 +143,6 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { { '8', NOCAPS, {'8', '*'} }, { '9', NOCAPS, {'9', '('} }, { '0', NOCAPS, {'0', ')'} }, - /* First letter row */ - { 'Q', CAPS, {'q', 'Q'} }, - { 'W', CAPS, {'w', 'W'} }, - { 'E', CAPS, {'e', 'E'} }, - { 'R', CAPS, {'r', 'R'} }, - { 'T', CAPS, {'t', 'T'} }, - { 'Y', CAPS, {'y', 'Y'} }, - { 'U', CAPS, {'u', 'U'} }, - { 'I', CAPS, {'i', 'I'} }, - { 'O', CAPS, {'o', 'O'} }, - { 'P', CAPS, {'p', 'P'} }, - /* Second letter row */ - { 'A', CAPS, {'a', 'A'} }, - { 'S', CAPS, {'s', 'S'} }, - { 'D', CAPS, {'d', 'D'} }, - { 'F', CAPS, {'f', 'F'} }, - { 'G', CAPS, {'g', 'G'} }, - { 'H', CAPS, {'h', 'H'} }, - { 'J', CAPS, {'j', 'J'} }, - { 'K', CAPS, {'k', 'K'} }, - { 'L', CAPS, {'l', 'L'} }, - /* Third letter row */ - { 'Z', CAPS, {'z', 'Z'} }, - { 'X', CAPS, {'x', 'X'} }, - { 'C', CAPS, {'c', 'C'} }, - { 'V', CAPS, {'v', 'V'} }, - { 'B', CAPS, {'b', 'B'} }, - { 'N', CAPS, {'n', 'N'} }, - { 'M', CAPS, {'m', 'M'} }, /* Specials */ /* Ctrl-_ generates US */ @@ -205,6 +176,35 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = { ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { /* Normal, Shifted, Ctrl, C-S-x */ + + /* The alphabet */ + { 'A', CAPS, {'a', 'A', 0x01, 0x01} }, + { 'B', CAPS, {'b', 'B', 0x02, 0x02} }, + { 'C', CAPS, {'c', 'C', 0x03, 0x03} }, + { 'D', CAPS, {'d', 'D', 0x04, 0x04} }, + { 'E', CAPS, {'e', 'E', 0x05, 0x05} }, + { 'F', CAPS, {'f', 'F', 0x06, 0x06} }, + { 'G', CAPS, {'g', 'G', 0x07, 0x07} }, + { 'H', CAPS, {'h', 'H', 0x08, 0x08} }, + { 'I', CAPS, {'i', 'I', 0x09, 0x09} }, + { 'J', CAPS, {'j', 'J', 0x0a, 0x0a} }, + { 'K', CAPS, {'k', 'K', 0x0b, 0x0b} }, + { 'L', CAPS, {'l', 'L', 0x0c, 0x0c} }, + { 'M', CAPS, {'m', 'M', 0x0d, 0x0d} }, + { 'N', CAPS, {'n', 'N', 0x0e, 0x0e} }, + { 'O', CAPS, {'o', 'O', 0x0f, 0x0f} }, + { 'P', CAPS, {'p', 'P', 0x10, 0x10} }, + { 'Q', CAPS, {'q', 'Q', 0x11, 0x11} }, + { 'R', CAPS, {'r', 'R', 0x12, 0x12} }, + { 'S', CAPS, {'s', 'S', 0x13, 0x13} }, + { 'T', CAPS, {'t', 'T', 0x14, 0x14} }, + { 'U', CAPS, {'u', 'U', 0x15, 0x15} }, + { 'V', CAPS, {'v', 'V', 0x16, 0x16} }, + { 'W', CAPS, {'w', 'W', 0x17, 0x17} }, + { 'X', CAPS, {'x', 'X', 0x18, 0x18} }, + { 'Y', CAPS, {'y', 'Y', 0x19, 0x19} }, + { 'Z', CAPS, {'z', 'Z', 0x1a, 0x1a} }, + /* Legacy Ascii generators */ { '2', NOCAPS, {'2', '@', WCH_NONE, 0} }, { '6', NOCAPS, {'6', '^', WCH_NONE, 0x1e /* RS */} }, diff --git a/reactos/subsys/win32k/ntuser/input.c b/reactos/subsys/win32k/ntuser/input.c index e020ff288fb..de84b197ea5 100644 --- a/reactos/subsys/win32k/ntuser/input.c +++ b/reactos/subsys/win32k/ntuser/input.c @@ -516,7 +516,7 @@ KeyboardThreadMain(PVOID StartContext) ModifierState |= fsModifiers; if (ModifierState == fsModifiers && - (fsModifiers == MOD_ALT || fsModifiers == MOD_WIN || fsModifiers == MOD_CONTROL)) + (fsModifiers == MOD_ALT || fsModifiers == MOD_WIN)) { /* First send out special notifications * (For alt, the message that turns on accelerator @@ -637,31 +637,7 @@ KeyboardThreadMain(PVOID StartContext) else msg.message = WM_SYSKEYUP; } - else if (ModifierState & MOD_CONTROL) - { - if(NextKeyInput.MakeCode == 0x2E)/* Ctrl-C */ - { - DPRINT1("Ctrl-C pressed\n"); - /* FIXME: this seems wrong! this bypass hotkeys and all and the winhellos CRTL+C hotkey test - dont work (anymore) */ - co_MsqPostKeyboardMessage(WM_COPY,0,0); - continue; - } - else if(NextKeyInput.MakeCode == 0x2F) /* Ctrl-V */ - { - DPRINT1("Ctrl-V pressed\n"); - co_MsqPostKeyboardMessage(WM_PASTE,0,0); - continue; - } - else - { - DPRINT1("Ctrl with unknown combination %04x\n",NextKeyInput.MakeCode); - if (!(KeyInput.Flags & KEY_BREAK)) - msg.message = WM_KEYDOWN; - else - msg.message = WM_KEYUP; - } - }else + else { if (!(KeyInput.Flags & KEY_BREAK)) msg.message = WM_KEYDOWN; diff --git a/reactos/subsys/win32k/ntuser/keyboard.c b/reactos/subsys/win32k/ntuser/keyboard.c index 431a49cd128..4b84525764e 100644 --- a/reactos/subsys/win32k/ntuser/keyboard.c +++ b/reactos/subsys/win32k/ntuser/keyboard.c @@ -261,7 +261,7 @@ static BOOL TryToTranslateChar(WORD wVirtKey, [ModBits ^ ((CapsState & CAPITAL_BIT) ? vkPtr->Attributes : 0)]; - if( CapsMod > keyLayout->pVkToWcharTable[nMod].nModifications ) + if( CapsMod >= keyLayout->pVkToWcharTable[nMod].nModifications ) { DWORD MaxBit = 1; while( MaxBit <