- Add ctrl support to (most) keyboard layouts. Only tested for kbdus, added
authorGé van Geldorp <ge@gse.nl>
Mon, 19 Sep 2005 21:11:41 +0000 (21:11 +0000)
committerGé van Geldorp <ge@gse.nl>
Mon, 19 Sep 2005 21:11:41 +0000 (21:11 +0000)
  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
reactos/lib/keyboard/kbdda/kbdda.c
reactos/lib/keyboard/kbddv/kbddv.c
reactos/lib/keyboard/kbdes/kbdes.c
reactos/lib/keyboard/kbdfr/kbdfr.c
reactos/lib/keyboard/kbdse/kbdse.c
reactos/lib/keyboard/kbduk/kbduk.c
reactos/lib/keyboard/kbdus/kbdus.c
reactos/subsys/win32k/ntuser/input.c
reactos/subsys/win32k/ntuser/keyboard.c

index c804b18..fba68e8 100644 (file)
@@ -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 \1f
   { 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,   '\\'} },
index 53b9522..409f7f3 100644 (file)
@@ -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 }
 };
index e9fe4c4..017b050 100644 (file)
@@ -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 */} },
index 7849f41..464d542 100644 (file)
@@ -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\80
+  { 'E',               CAPS,   {'e',   'E',      0x05,  0x20AC}  }, // eE\80
   { VK_OEM_PLUS,  NOCAPS, {'+',      '*',          WCH_NONE,  0x005d}  }, // +*]
   { VK_OEM_2,          NOCAPS, {0x00e7,   0x00c7,   WCH_NONE,  '}'}     }, // çÇ} 
   
index 2d8b9af..0a7d478 100644 (file)
@@ -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, '\80' /* euro */} },
+  { 'E' ,       1, {'e',       'E',      0x05, '\80' /* euro */} },
   { VK_OEM_1,   0, {'$',       '£',  WCH_NONE, '¤'} },
   { VK_OEM_4,   0, {')',       '°',   WCH_NONE, ']'} },
   { 0, 0 }
index e11f965..293bd4b 100644 (file)
@@ -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 }
 };
index 7a9f05a..51fd8d6 100644 (file)
@@ -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 }
 };
 
index 6176cf4..9750d73 100644 (file)
@@ -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 */} },
index e020ff2..de84b19 100644 (file)
@@ -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;
index 431a49c..4b84525 100644 (file)
@@ -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 <