- 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
This commit is contained in:
Gé van Geldorp 2005-09-19 21:11:41 +00:00
parent 047952c5a1
commit f5ffc6c672
10 changed files with 236 additions and 268 deletions

View 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 
{ 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, '\\'} },

View 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 }
};

View 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 */} },

View 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€
{ 'E', CAPS, {'e', 'E', 0x05, 0x20AC} }, // eE€
{ VK_OEM_PLUS, NOCAPS, {'+', '*', WCH_NONE, 0x005d} }, // +*]
{ VK_OEM_2, NOCAPS, {0x00e7, 0x00c7, WCH_NONE, '}'} }, // çÇ}

View 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, '' /* euro */} },
{ 'E' , 1, {'e', 'E', 0x05, '' /* euro */} },
{ VK_OEM_1, 0, {'$', '£', WCH_NONE, '¤'} },
{ VK_OEM_4, 0, {')', '°', WCH_NONE, ']'} },
{ 0, 0 }

View file

@ -177,35 +177,6 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
{ '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} },
{ VK_OEM_7, CAPS, {0xe4,0xc4} },
@ -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 }
};

View 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 }
};

View 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 */} },

View 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;

View 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 <