*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {0x0630, 0x0651 } },
- { '5', NOCAPS, {'5', '%' } },
- { '7', NOCAPS, {'7', '&' } },
- { '8', NOCAPS, {'8', '*' } },
- { '9', NOCAPS, {'9', ')' } },
- { '0', NOCAPS, {'0', '(' } },
- { VK_OEM_PLUS, NOCAPS, {'=', '+' } },
- { 'Q', NOCAPS, {0x0636, 0x064e } },
- { 'W', NOCAPS, {0x0635, 0x064b } },
- { 'E', NOCAPS, {0x062b, 0x064f } },
- { 'R', NOCAPS, {0x0642, 0x064c } },
- { 'T', NOCAPS, {0x0641, WCH_LGTR} },
- { 'Y', NOCAPS, {0x063a, 0x0625 } },
- { 'U', NOCAPS, {0x0639, 0x2018 } },
- { 'I', NOCAPS, {0x0647, 0x00f7 } },
- { 'O', NOCAPS, {0x062e, 0x00d7 } },
- { 'P', NOCAPS, {0x062d, 0x061b } },
- { 'A', NOCAPS, {0x0634, 0x0650 } },
- { 'S', NOCAPS, {0x0633, 0x064d } },
- { 'D', NOCAPS, {0x064a, ']' } },
- { 'F', NOCAPS, {0x0628, '[' } },
- { 'G', NOCAPS, {0x0644, WCH_LGTR} },
- { 'H', NOCAPS, {0x0627, 0x0623 } },
- { 'J', NOCAPS, {0x062a, 0x0640 } },
- { 'K', NOCAPS, {0x0646, 0x060c } },
- { 'L', NOCAPS, {0x0645, '/' } },
- { VK_OEM_1, NOCAPS, {0x0643, ':' } },
- { 'Z', NOCAPS, {0x0626, '~' } },
- { 'X', NOCAPS, {0x0621, 0x0652 } },
- { 'C', NOCAPS, {0x0624, '}' } },
- { 'V', NOCAPS, {0x0631, '{' } },
- { 'B', NOCAPS, {WCH_LGTR, WCH_LGTR} },
- { 'N', NOCAPS, {0x0649, 0x0622 } },
- { 'M', NOCAPS, {0x0629, 0x2019 } },
- { VK_OEM_COMMA, NOCAPS, {0x0648, ',' } },
- { VK_OEM_PERIOD,NOCAPS, {0x0632, '.' } },
- { VK_OEM_2, NOCAPS, {0x0638, 0x061f } },
- { VK_OEM_102, NOCAPS, {'\\', '|' } },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {0x0630, 0x0651 } },
+ { '5', 0, {'5', '%' } },
+ { '7', 0, {'7', '&' } },
+ { '8', 0, {'8', '*' } },
+ { '9', 0, {'9', ')' } },
+ { '0', 0, {'0', '(' } },
+ { VK_OEM_PLUS, 0, {'=', '+' } },
+ { 'Q', 0, {0x0636, 0x064e } },
+ { 'W', 0, {0x0635, 0x064b } },
+ { 'E', 0, {0x062b, 0x064f } },
+ { 'R', 0, {0x0642, 0x064c } },
+ { 'T', 0, {0x0641, WCH_LGTR} },
+ { 'Y', 0, {0x063a, 0x0625 } },
+ { 'U', 0, {0x0639, 0x2018 } },
+ { 'I', 0, {0x0647, 0x00f7 } },
+ { 'O', 0, {0x062e, 0x00d7 } },
+ { 'P', 0, {0x062d, 0x061b } },
+ { 'A', 0, {0x0634, 0x0650 } },
+ { 'S', 0, {0x0633, 0x064d } },
+ { 'D', 0, {0x064a, ']' } },
+ { 'F', 0, {0x0628, '[' } },
+ { 'G', 0, {0x0644, WCH_LGTR} },
+ { 'H', 0, {0x0627, 0x0623 } },
+ { 'J', 0, {0x062a, 0x0640 } },
+ { 'K', 0, {0x0646, 0x060c } },
+ { 'L', 0, {0x0645, '/' } },
+ { VK_OEM_1, 0, {0x0643, ':' } },
+ { 'Z', 0, {0x0626, '~' } },
+ { 'X', 0, {0x0621, 0x0652 } },
+ { 'C', 0, {0x0624, '}' } },
+ { 'V', 0, {0x0631, '{' } },
+ { 'B', 0, {WCH_LGTR, WCH_LGTR} },
+ { 'N', 0, {0x0649, 0x0622 } },
+ { 'M', 0, {0x0629, 0x2019 } },
+ { VK_OEM_COMMA, 0, {0x0648, ',' } },
+ { VK_OEM_PERIOD,0, {0x0632, '.' } },
+ { VK_OEM_2, 0, {0x0638, 0x061f } },
+ { VK_OEM_102, 0, {'\\', '|' } },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_4, NOCAPS, {0x062c, '<', 0x001b} },
- { VK_OEM_6, NOCAPS, {0x062f, '>', 0x001d} },
- { VK_OEM_5, NOCAPS, {'\\', '|', 0x001c} },
- { VK_OEM_7, NOCAPS, {0x0637, '\"', 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_OEM_4, 0, {0x062c, '<', 0x001b} },
+ { VK_OEM_6, 0, {0x062f, '>', 0x001d} },
+ { VK_OEM_5, 0, {'\\', '|', 0x001c} },
+ { VK_OEM_7, 0, {0x0637, '\"', 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '1', NOCAPS, {'1', '!', WCH_NONE, 0x200d} },
- { '2', NOCAPS, {'2', '@', WCH_NONE, 0x200c} },
- { '3', NOCAPS, {'3', '#', WCH_NONE, 0x200e} },
- { '4', NOCAPS, {'4', '$', WCH_NONE, 0x200f} },
- { '6', NOCAPS, {'6', '^', WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x001f} },
+ { '1', 0, {'1', '!', WCH_NONE, 0x200d} },
+ { '2', 0, {'2', '@', WCH_NONE, 0x200c} },
+ { '3', 0, {'3', '#', WCH_NONE, 0x200e} },
+ { '4', 0, {'4', '$', WCH_NONE, 0x200f} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures */
2,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 4, 5, SHFT_INVALID, SHFT_INVALID, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {'>', '<' } },
- { '5', NOCAPS, {'5', '%' } },
- { '7', NOCAPS, {'7', '&' } },
- { '8', NOCAPS, {'8', '*' } },
- { '9', NOCAPS, {'9', ')' } },
- { '0', NOCAPS, {'0', '(' } },
- { VK_OEM_PLUS, NOCAPS, {'=', '+' } },
- { 'T', NOCAPS, {0x0641, WCH_LGTR} },
- { 'Y', NOCAPS, {0x063a, 0x0625 } },
- { 'U', NOCAPS, {0x0639, 0x2018 } },
- { 'I', NOCAPS, {0x0647, 0x00f7 } },
- { 'O', NOCAPS, {0x062e, 0x00d7 } },
- { 'P', NOCAPS, {0x062d, 0x061b } },
- { 'A', NOCAPS, {0x0634, '\\' } },
- { 'S', NOCAPS, {0x0633, 0x0000 } },
- { 'D', NOCAPS, {0x064a, ']' } },
- { 'F', NOCAPS, {0x0628, '[' } },
- { 'G', NOCAPS, {0x0644, WCH_LGTR} },
- { 'H', NOCAPS, {0x0627, 0x0623 } },
- { 'J', NOCAPS, {0x062a, 0x0640 } },
- { 'K', NOCAPS, {0x0646, 0x060c } },
- { 'L', NOCAPS, {0x0645, '/' } },
- { VK_OEM_1, NOCAPS, {0x0643, ':' } },
- { 'Z', NOCAPS, {0x0626, '~' } },
- { 'X', NOCAPS, {0x0621, 0x0652 } },
- { 'B', NOCAPS, {WCH_LGTR, WCH_LGTR} },
- { 'N', NOCAPS, {0x0649, 0x0622 } },
- { 'M', NOCAPS, {0x0629, 0x2019 } },
- { VK_OEM_COMMA, NOCAPS, {0x0648, ',' } },
- { VK_OEM_PERIOD,NOCAPS, {0x0632, '.' } },
- { VK_OEM_2, NOCAPS, {0x0638, 0x061f } },
- { VK_OEM_102, NOCAPS, {0x0640, '|' } },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {'>', '<' } },
+ { '5', 0, {'5', '%' } },
+ { '7', 0, {'7', '&' } },
+ { '8', 0, {'8', '*' } },
+ { '9', 0, {'9', ')' } },
+ { '0', 0, {'0', '(' } },
+ { VK_OEM_PLUS, 0, {'=', '+' } },
+ { 'T', 0, {0x0641, WCH_LGTR} },
+ { 'Y', 0, {0x063a, 0x0625 } },
+ { 'U', 0, {0x0639, 0x2018 } },
+ { 'I', 0, {0x0647, 0x00f7 } },
+ { 'O', 0, {0x062e, 0x00d7 } },
+ { 'P', 0, {0x062d, 0x061b } },
+ { 'A', 0, {0x0634, '\\' } },
+ { 'S', 0, {0x0633, 0x0000 } },
+ { 'D', 0, {0x064a, ']' } },
+ { 'F', 0, {0x0628, '[' } },
+ { 'G', 0, {0x0644, WCH_LGTR} },
+ { 'H', 0, {0x0627, 0x0623 } },
+ { 'J', 0, {0x062a, 0x0640 } },
+ { 'K', 0, {0x0646, 0x060c } },
+ { 'L', 0, {0x0645, '/' } },
+ { VK_OEM_1, 0, {0x0643, ':' } },
+ { 'Z', 0, {0x0626, '~' } },
+ { 'X', 0, {0x0621, 0x0652 } },
+ { 'B', 0, {WCH_LGTR, WCH_LGTR} },
+ { 'N', 0, {0x0649, 0x0622 } },
+ { 'M', 0, {0x0629, 0x2019 } },
+ { VK_OEM_COMMA, 0, {0x0648, ',' } },
+ { VK_OEM_PERIOD,0, {0x0632, '.' } },
+ { VK_OEM_2, 0, {0x0638, 0x061f } },
+ { VK_OEM_102, 0, {0x0640, '|' } },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { 'Q', NOCAPS, {0x0636, 0x064e, WCH_LGTR, WCH_LGTR} },
- { 'W', NOCAPS, {0x0635, 0x064b, WCH_LGTR, WCH_LGTR} },
- { 'E', NOCAPS, {0x062b, 0x064f, WCH_LGTR, WCH_LGTR} },
- { 'R', NOCAPS, {0x0642, 0x064c, WCH_LGTR, WCH_LGTR} },
- { 'C', NOCAPS, {0x0624, 0x0650, WCH_LGTR, WCH_LGTR} },
- { 'V', NOCAPS, {0x0631, 0x064d, WCH_LGTR, WCH_LGTR} },
+ { 'Q', 0, {0x0636, 0x064e, WCH_LGTR, WCH_LGTR} },
+ { 'W', 0, {0x0635, 0x064b, WCH_LGTR, WCH_LGTR} },
+ { 'E', 0, {0x062b, 0x064f, WCH_LGTR, WCH_LGTR} },
+ { 'R', 0, {0x0642, 0x064c, WCH_LGTR, WCH_LGTR} },
+ { 'C', 0, {0x0624, 0x0650, WCH_LGTR, WCH_LGTR} },
+ { 'V', 0, {0x0631, 0x064d, WCH_LGTR, WCH_LGTR} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_4, NOCAPS, {0x062c, '}', WCH_NONE, WCH_NONE, 0x001b} },
- { VK_OEM_6, NOCAPS, {0x062f, '{', WCH_NONE, WCH_NONE, 0x001d} },
- { VK_OEM_5, NOCAPS, {0x0630, 0x0651, WCH_NONE, WCH_NONE, 0x001c} },
- { VK_OEM_7, NOCAPS, {0x0637, '\"', WCH_NONE, WCH_NONE, 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
+ { VK_OEM_4, 0, {0x062c, '}', WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_OEM_6, 0, {0x062f, '{', WCH_NONE, WCH_NONE, 0x001d} },
+ { VK_OEM_5, 0, {0x0630, 0x0651, WCH_NONE, WCH_NONE, 0x001c} },
+ { VK_OEM_7, 0, {0x0637, '\"', WCH_NONE, WCH_NONE, 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { '1', NOCAPS, {'1', '!', WCH_NONE, WCH_NONE, WCH_NONE, 0x200d} },
- { '2', NOCAPS, {'2', '@', WCH_NONE, WCH_NONE, WCH_NONE, 0x200c} },
- { '3', NOCAPS, {'3', '#', WCH_NONE, WCH_NONE, WCH_NONE, 0x200e} },
- { '4', NOCAPS, {'4', '$', 0x00a4, 0x00a4, WCH_NONE, 0x200f} },
- { '6', NOCAPS, {'6', '^', WCH_NONE, WCH_NONE, WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, WCH_NONE, WCH_NONE, 0x001f} },
+ { '1', 0, {'1', '!', WCH_NONE, WCH_NONE, WCH_NONE, 0x200d} },
+ { '2', 0, {'2', '@', WCH_NONE, WCH_NONE, WCH_NONE, 0x200c} },
+ { '3', 0, {'3', '#', WCH_NONE, WCH_NONE, WCH_NONE, 0x200e} },
+ { '4', 0, {'4', '$', 0x00a4, 0x00a4, WCH_NONE, 0x200f} },
+ { '6', 0, {'6', '^', WCH_NONE, WCH_NONE, WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, WCH_NONE, WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
2,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 4, 5, SHFT_INVALID, SHFT_INVALID, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {'>', '<' } },
- { '5', NOCAPS, {'(', '5' } },
- { '7', NOCAPS, {0x00e8, '7' } },
- { '8', NOCAPS, {'_', '8' } },
- { '9', NOCAPS, {0x00e7, '9' } },
- { '0', NOCAPS, {0x00e0, '0' } },
- { VK_OEM_PLUS, NOCAPS, {'=', '+' } },
- { 'T', NOCAPS, {0x0641, WCH_LGTR} },
- { 'Y', NOCAPS, {0x063a, 0x0625 } },
- { 'U', NOCAPS, {0x0639, 0x2018 } },
- { 'I', NOCAPS, {0x0647, 0x00f7 } },
- { 'O', NOCAPS, {0x062e, 0x00d7 } },
- { 'P', NOCAPS, {0x062d, 0x061b } },
- { 'A', NOCAPS, {0x0634, '\\' } },
- { 'S', NOCAPS, {0x0633, 0x0000 } },
- { 'D', NOCAPS, {0x064a, ']' } },
- { 'F', NOCAPS, {0x0628, '[' } },
- { 'G', NOCAPS, {0x0644, WCH_LGTR} },
- { 'H', NOCAPS, {0x0627, 0x0623 } },
- { 'J', NOCAPS, {0x062a, 0x0640 } },
- { 'K', NOCAPS, {0x0646, 0x060c } },
- { 'L', NOCAPS, {0x0645, '/' } },
- { VK_OEM_1, NOCAPS, {0x0643, ':' } },
- { 'Z', NOCAPS, {0x0626, '~' } },
- { 'X', NOCAPS, {0x0621, 0x0652 } },
- { 'B', NOCAPS, {WCH_LGTR, WCH_LGTR} },
- { 'N', NOCAPS, {0x0649, 0x0622 } },
- { 'M', NOCAPS, {0x0629, 0x2019 } },
- { VK_OEM_COMMA, NOCAPS, {0x0648, ',' } },
- { VK_OEM_PERIOD,NOCAPS, {0x0632, '.' } },
- { VK_OEM_2, NOCAPS, {0x0638, 0x061f } },
- { VK_OEM_102, NOCAPS, {'\\', '|' } },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {'>', '<' } },
+ { '5', 0, {'(', '5' } },
+ { '7', 0, {0x00e8, '7' } },
+ { '8', 0, {'_', '8' } },
+ { '9', 0, {0x00e7, '9' } },
+ { '0', 0, {0x00e0, '0' } },
+ { VK_OEM_PLUS, 0, {'=', '+' } },
+ { 'T', 0, {0x0641, WCH_LGTR} },
+ { 'Y', 0, {0x063a, 0x0625 } },
+ { 'U', 0, {0x0639, 0x2018 } },
+ { 'I', 0, {0x0647, 0x00f7 } },
+ { 'O', 0, {0x062e, 0x00d7 } },
+ { 'P', 0, {0x062d, 0x061b } },
+ { 'A', 0, {0x0634, '\\' } },
+ { 'S', 0, {0x0633, 0x0000 } },
+ { 'D', 0, {0x064a, ']' } },
+ { 'F', 0, {0x0628, '[' } },
+ { 'G', 0, {0x0644, WCH_LGTR} },
+ { 'H', 0, {0x0627, 0x0623 } },
+ { 'J', 0, {0x062a, 0x0640 } },
+ { 'K', 0, {0x0646, 0x060c } },
+ { 'L', 0, {0x0645, '/' } },
+ { VK_OEM_1, 0, {0x0643, ':' } },
+ { 'Z', 0, {0x0626, '~' } },
+ { 'X', 0, {0x0621, 0x0652 } },
+ { 'B', 0, {WCH_LGTR, WCH_LGTR} },
+ { 'N', 0, {0x0649, 0x0622 } },
+ { 'M', 0, {0x0629, 0x2019 } },
+ { VK_OEM_COMMA, 0, {0x0648, ',' } },
+ { VK_OEM_PERIOD,0, {0x0632, '.' } },
+ { VK_OEM_2, 0, {0x0638, 0x061f } },
+ { VK_OEM_102, 0, {'\\', '|' } },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { 'Q', NOCAPS, {0x0636, 0x064e, WCH_LGTR, WCH_LGTR} },
- { 'W', NOCAPS, {0x0635, 0x064b, WCH_LGTR, WCH_LGTR} },
- { 'E', NOCAPS, {0x062b, 0x064f, WCH_LGTR, WCH_LGTR} },
- { 'R', NOCAPS, {0x0642, 0x064c, WCH_LGTR, WCH_LGTR} },
- { 'C', NOCAPS, {0x0624, 0x0650, WCH_LGTR, WCH_LGTR} },
- { 'V', NOCAPS, {0x0631, 0x064d, WCH_LGTR, WCH_LGTR} },
+ { 'Q', 0, {0x0636, 0x064e, WCH_LGTR, WCH_LGTR} },
+ { 'W', 0, {0x0635, 0x064b, WCH_LGTR, WCH_LGTR} },
+ { 'E', 0, {0x062b, 0x064f, WCH_LGTR, WCH_LGTR} },
+ { 'R', 0, {0x0642, 0x064c, WCH_LGTR, WCH_LGTR} },
+ { 'C', 0, {0x0624, 0x0650, WCH_LGTR, WCH_LGTR} },
+ { 'V', 0, {0x0631, 0x064d, WCH_LGTR, WCH_LGTR} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_4, NOCAPS, {0x062c, '}', WCH_NONE, WCH_NONE, 0x001b} },
- { VK_OEM_6, NOCAPS, {0x062f, '{', WCH_NONE, WCH_NONE, 0x001d} },
- { VK_OEM_5, NOCAPS, {0x0630, 0x0651, WCH_NONE, WCH_NONE, 0x001c} },
- { VK_OEM_7, NOCAPS, {0x0637, '\"', WCH_NONE, WCH_NONE, 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
+ { VK_OEM_4, 0, {0x062c, '}', WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_OEM_6, 0, {0x062f, '{', WCH_NONE, WCH_NONE, 0x001d} },
+ { VK_OEM_5, 0, {0x0630, 0x0651, WCH_NONE, WCH_NONE, 0x001c} },
+ { VK_OEM_7, 0, {0x0637, '\"', WCH_NONE, WCH_NONE, 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { '1', NOCAPS, {'&', '1', WCH_NONE, WCH_NONE, WCH_NONE, 0x200d} },
- { '2', NOCAPS, {0x00e9, '2', WCH_NONE, WCH_NONE, WCH_NONE, 0x200c} },
- { '3', NOCAPS, {'\"', '3', WCH_NONE, WCH_NONE, WCH_NONE, 0x200e} },
- { '4', NOCAPS, {'\'', '4', 0x00a4, 0x00a4, WCH_NONE, 0x200f} },
- { '6', NOCAPS, {'-', '6', WCH_NONE, WCH_NONE, WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {')', 0x00b0, WCH_NONE, WCH_NONE, WCH_NONE, 0x001f} },
+ { '1', 0, {'&', '1', WCH_NONE, WCH_NONE, WCH_NONE, 0x200d} },
+ { '2', 0, {0x00e9, '2', WCH_NONE, WCH_NONE, WCH_NONE, 0x200c} },
+ { '3', 0, {'\"', '3', WCH_NONE, WCH_NONE, WCH_NONE, 0x200e} },
+ { '4', 0, {'\'', '4', 0x00a4, 0x00a4, WCH_NONE, 0x200f} },
+ { '6', 0, {'-', '6', WCH_NONE, WCH_NONE, WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {')', 0x00b0, WCH_NONE, WCH_NONE, WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
2,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {'\\', '|'} },
- { 'E', CAPS, {'e', 'E'} },
- { 'R', CAPS, {'r', 'R'} },
- { 'T', CAPS, {'t', 'T'} },
- { 'Z', CAPS, {'z', 'Z'} },
- { 'U', CAPS, {'u', 'U'} },
- { 'I', CAPS, {'i', 'I'} },
- { 'O', CAPS, {'o', 'O'} },
- { 'P', CAPS, {'p', 'P'} },
- { 'A', CAPS, {'a', 'A'} },
- { 'H', CAPS, {'h', 'H'} },
- { 'J', CAPS, {'j', 'J'} },
- { 'Y', CAPS, {'y', 'Y'} },
- { 'X', CAPS, {'x', 'X'} },
- { 'C', CAPS, {'c', 'C'} },
- { VK_OEM_2, NOCAPS, {'/', '?'} },
- { VK_DECIMAL, NOCAPS, {',', ','} },
- { VK_TAB, NOCAPS, {'\t', '\t'}},
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_3, 0, {'\\', '|'} },
+ { 'E', CAPLOK, {'e', 'E'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { VK_OEM_2, 0, {'/', '?'} },
+ { VK_DECIMAL, 0, {',', ','} },
+ { VK_TAB, 0, {'\t', '\t'}},
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { '1', NOCAPS, {'1', '!', '~' } },
- { '2', NOCAPS, {'2', '\"', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02c7 } },
- { '3', NOCAPS, {'3', '#', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, '^' } },
- { '4', NOCAPS, {'4', '$', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02d8 } },
- { '5', NOCAPS, {'5', '%', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b0 } },
- { '7', NOCAPS, {'7', '&', '`' } },
- { '8', NOCAPS, {'8', '*', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02d9 } },
- { '9', NOCAPS, {'9', '(', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b4 } },
- { '0', NOCAPS, {'0', ')', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02dd } },
- { VK_OEM_PLUS, NOCAPS, {'=', '+', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b8 } },
- { 'Q', CAPS, {'q', 'Q', '\\' } },
- { 'W', CAPS, {'w', 'W', '|' } },
- { VK_OEM_4, CAPS, {0x00e7, 0x00c7, 0x00f7 } },
- { 'S', CAPS, {'s', 'S', 0x0111 } },
- { 'D', CAPS, {'d', 'D', 0x0110 } },
- { 'F', CAPS, {'f', 'F', '[' } },
- { 'G', CAPS, {'g', 'G', ']' } },
- { 'K', CAPS, {'k', 'K', 0x0142 } },
- { 'L', CAPS, {'l', 'L', 0x0141 } },
- { VK_OEM_7, NOCAPS, {'[', '{', 0x00df } },
- { 'V', CAPS, {'v', 'V', '@' } },
- { 'B', CAPS, {'b', 'B', '{' } },
- { 'N', CAPS, {'n', 'N', '}' } },
- { 'M', CAPS, {'m', 'M', 0x00a7 } },
- { VK_OEM_COMMA, NOCAPS, {',', ';', '<' } },
- { VK_OEM_PERIOD, NOCAPS, {'.', ':', '>' } },
+ { '1', 0, {'1', '!', '~' } },
+ { '2', 0, {'2', '\"', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02c7 } },
+ { '3', 0, {'3', '#', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, '^' } },
+ { '4', 0, {'4', '$', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02d8 } },
+ { '5', 0, {'5', '%', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b0 } },
+ { '7', 0, {'7', '&', '`' } },
+ { '8', 0, {'8', '*', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02d9 } },
+ { '9', 0, {'9', '(', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b4 } },
+ { '0', 0, {'0', ')', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02dd } },
+ { VK_OEM_PLUS, 0, {'=', '+', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b8 } },
+ { 'Q', CAPLOK, {'q', 'Q', '\\' } },
+ { 'W', CAPLOK, {'w', 'W', '|' } },
+ { VK_OEM_4, CAPLOK, {0x00e7, 0x00c7, 0x00f7 } },
+ { 'S', CAPLOK, {'s', 'S', 0x0111 } },
+ { 'D', CAPLOK, {'d', 'D', 0x0110 } },
+ { 'F', CAPLOK, {'f', 'F', '[' } },
+ { 'G', CAPLOK, {'g', 'G', ']' } },
+ { 'K', CAPLOK, {'k', 'K', 0x0142 } },
+ { 'L', CAPLOK, {'l', 'L', 0x0141 } },
+ { VK_OEM_7, 0, {'[', '{', 0x00df } },
+ { 'V', CAPLOK, {'v', 'V', '@' } },
+ { 'B', CAPLOK, {'b', 'B', '{' } },
+ { 'N', CAPLOK, {'n', 'N', '}' } },
+ { 'M', CAPLOK, {'m', 'M', 0x00a7 } },
+ { VK_OEM_COMMA, 0, {',', ';', '<' } },
+ { VK_OEM_PERIOD, 0, {'.', ':', '>' } },
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl-Alt, Ctrl */
/* Legacy Ascii generators */
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_DEAD, 0x001f } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00a8, WCH_NONE} },
- { VK_OEM_6, NOCAPS, {'@', '\'', 0x00d7, 0x001b } },
- { VK_OEM_5, NOCAPS, {']', '}', 0x00a4, 0x001c } },
- { VK_OEM_1, CAPS, {0x00eb, 0x00cb, '$', 0x001d } },
- { VK_OEM_102, NOCAPS, {'<', '>', WCH_NONE, 0x001c } },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x007f } },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, 0x001b } },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, 0x0003 } },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_DEAD, 0x001f } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00a8, WCH_NONE} },
+ { VK_OEM_6, 0, {'@', '\'', 0x00d7, 0x001b } },
+ { VK_OEM_5, 0, {']', '}', 0x00a4, 0x001c } },
+ { VK_OEM_1, CAPLOK, {0x00eb, 0x00cb, '$', 0x001d } },
+ { VK_OEM_102, 0, {'<', '>', WCH_NONE, 0x001c } },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x007f } },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b } },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003 } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl-Alt, Ctrl, S+Ctrl */
/* Legacy Ascii generators */
- { '6', NOCAPS, {'6', '^', WCH_DEAD, WCH_NONE, 0x001e } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02db, WCH_NONE, WCH_NONE} },
+ { '6', 0, {'6', '^', WCH_DEAD, WCH_NONE, 0x001e } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02db, WCH_NONE, WCH_NONE} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Albanian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_7, NOCAPS, {0x055d, 0x055c} },
- { '1', NOCAPS, {':', '1' } },
- { '2', CAPS, {0x0571, 0x0541} },
- { '3', CAPS, {0x0575, 0x0545} },
- { '4', NOCAPS, {0x055b, '3' } },
- { '5', NOCAPS, {',', '4' } },
- { '6', NOCAPS, {'-', '9' } },
- { '7', NOCAPS, {'.', 0x0587} },
- { '8', NOCAPS, {0x00ab, '(' } },
- { '9', NOCAPS, {0x00bb, ')' } },
- { '0', CAPS, {0x0585, 0x0555} },
- { VK_OEM_4, CAPS, {0x057c, 0x054c} },
- { VK_OEM_2, CAPS, {0x056a, 0x053a} },
- { 'Q', CAPS, {0x056d, 0x053d} },
- { 'W', CAPS, {0x0552, 0x0582} },
- { 'E', CAPS, {0x0567, 0x0537} },
- { 'R', CAPS, {0x0580, 0x0550} },
- { 'T', CAPS, {0x057f, 0x054f} },
- { 'Y', CAPS, {0x0565, 0x0535} },
- { 'U', CAPS, {0x0568, 0x0538} },
- { 'I', CAPS, {0x056b, 0x053b} },
- { 'O', CAPS, {0x0578, 0x0548} },
- { 'P', CAPS, {0x057a, 0x054a} },
- { VK_OEM_6, CAPS, {0x0579, 0x0549} },
- { VK_OEM_1, CAPS, {0x057b, 0x054b} },
- { VK_OEM_5, NOCAPS, {'\'', 0x055e} },
- { 'A', CAPS, {0x0561, 0x0531} },
- { 'S', CAPS, {0x057d, 0x054d} },
- { 'D', CAPS, {0x0564, 0x0534} },
- { 'F', CAPS, {0x0586, 0x0556} },
- { 'G', CAPS, {0x0584, 0x0554} },
- { 'H', CAPS, {0x0570, 0x0540} },
- { 'J', CAPS, {0x0573, 0x0543} },
- { 'K', CAPS, {0x056f, 0x053f} },
- { 'L', CAPS, {0x056c, 0x056c} },
- { VK_OEM_PLUS, CAPS, {0x0569, 0x0539} },
- { VK_OEM_3, CAPS, {0x0583, 0x0553} },
- { 'Z', CAPS, {0x0566, 0x0536} },
- { 'X', CAPS, {0x0581, 0x0551} },
- { 'C', CAPS, {0x0563, 0x0533} },
- { 'V', CAPS, {0x057e, 0x054e} },
- { 'B', CAPS, {0x0562, 0x0532} },
- { 'N', CAPS, {0x0576, 0x0546} },
- { 'M', CAPS, {0x0574, 0x0544} },
- { VK_OEM_COMMA, CAPS, {0x0577, 0x0547} },
- { VK_OEM_PERIOD,CAPS, {0x0572, 0x0542} },
- { VK_OEM_MINUS, CAPS, {0x056e, 0x053e} },
- { VK_OEM_102, NOCAPS, {'\'', 0x055e} },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_7, 0, {0x055d, 0x055c} },
+ { '1', 0, {':', '1' } },
+ { '2', CAPLOK, {0x0571, 0x0541} },
+ { '3', CAPLOK, {0x0575, 0x0545} },
+ { '4', 0, {0x055b, '3' } },
+ { '5', 0, {',', '4' } },
+ { '6', 0, {'-', '9' } },
+ { '7', 0, {'.', 0x0587} },
+ { '8', 0, {0x00ab, '(' } },
+ { '9', 0, {0x00bb, ')' } },
+ { '0', CAPLOK, {0x0585, 0x0555} },
+ { VK_OEM_4, CAPLOK, {0x057c, 0x054c} },
+ { VK_OEM_2, CAPLOK, {0x056a, 0x053a} },
+ { 'Q', CAPLOK, {0x056d, 0x053d} },
+ { 'W', CAPLOK, {0x0552, 0x0582} },
+ { 'E', CAPLOK, {0x0567, 0x0537} },
+ { 'R', CAPLOK, {0x0580, 0x0550} },
+ { 'T', CAPLOK, {0x057f, 0x054f} },
+ { 'Y', CAPLOK, {0x0565, 0x0535} },
+ { 'U', CAPLOK, {0x0568, 0x0538} },
+ { 'I', CAPLOK, {0x056b, 0x053b} },
+ { 'O', CAPLOK, {0x0578, 0x0548} },
+ { 'P', CAPLOK, {0x057a, 0x054a} },
+ { VK_OEM_6, CAPLOK, {0x0579, 0x0549} },
+ { VK_OEM_1, CAPLOK, {0x057b, 0x054b} },
+ { VK_OEM_5, 0, {'\'', 0x055e} },
+ { 'A', CAPLOK, {0x0561, 0x0531} },
+ { 'S', CAPLOK, {0x057d, 0x054d} },
+ { 'D', CAPLOK, {0x0564, 0x0534} },
+ { 'F', CAPLOK, {0x0586, 0x0556} },
+ { 'G', CAPLOK, {0x0584, 0x0554} },
+ { 'H', CAPLOK, {0x0570, 0x0540} },
+ { 'J', CAPLOK, {0x0573, 0x0543} },
+ { 'K', CAPLOK, {0x056f, 0x053f} },
+ { 'L', CAPLOK, {0x056c, 0x056c} },
+ { VK_OEM_PLUS, CAPLOK, {0x0569, 0x0539} },
+ { VK_OEM_3, CAPLOK, {0x0583, 0x0553} },
+ { 'Z', CAPLOK, {0x0566, 0x0536} },
+ { 'X', CAPLOK, {0x0581, 0x0551} },
+ { 'C', CAPLOK, {0x0563, 0x0533} },
+ { 'V', CAPLOK, {0x057e, 0x054e} },
+ { 'B', CAPLOK, {0x0562, 0x0532} },
+ { 'N', CAPLOK, {0x0576, 0x0546} },
+ { 'M', CAPLOK, {0x0574, 0x0544} },
+ { VK_OEM_COMMA, CAPLOK, {0x0577, 0x0547} },
+ { VK_OEM_PERIOD,CAPLOK, {0x0572, 0x0542} },
+ { VK_OEM_MINUS, CAPLOK, {0x056e, 0x053e} },
+ { VK_OEM_102, 0, {'\'', 0x055e} },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Armenian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_7, NOCAPS, {0x055d, 0x055c} },
- { '1', NOCAPS, {':', '1' } },
- { '2', CAPS, {0x0571, 0x0541} },
- { '3', CAPS, {0x0575, 0x0545} },
- { '4', NOCAPS, {0x055b, '3' } },
- { '5', NOCAPS, {',', '4' } },
- { '6', NOCAPS, {'-', '9' } },
- { '7', NOCAPS, {'.', 0x0587} },
- { '8', NOCAPS, {0x00ab, '(' } },
- { '9', NOCAPS, {0x00bb, ')' } },
- { '0', CAPS, {0x0585, 0x0555} },
- { VK_OEM_4, CAPS, {0x057c, 0x054c} },
- { VK_OEM_2, CAPS, {0x056a, 0x053a} },
- { 'Q', CAPS, {0x056d, 0x053d} },
- { 'W', CAPS, {0x057e, 0x054e} },
- { 'E', CAPS, {0x0567, 0x0537} },
- { 'R', CAPS, {0x0580, 0x0550} },
- { 'T', CAPS, {0x0564, 0x0534} },
- { 'Y', CAPS, {0x0565, 0x0535} },
- { 'U', CAPS, {0x0568, 0x0538} },
- { 'I', CAPS, {0x056b, 0x053b} },
- { 'O', CAPS, {0x0578, 0x0548} },
- { 'P', CAPS, {0x0562, 0x0532} },
- { VK_OEM_6, CAPS, {0x0579, 0x0549} },
- { VK_OEM_1, CAPS, {0x057b, 0x054b} },
- { VK_OEM_5, NOCAPS, {'\'', 0x055e} },
- { 'A', CAPS, {0x0561, 0x0531} },
- { 'S', CAPS, {0x057d, 0x054d} },
- { 'D', CAPS, {0x057f, 0x054f} },
- { 'F', CAPS, {0x0586, 0x0556} },
- { 'G', CAPS, {0x056f, 0x053f} },
- { 'H', CAPS, {0x0570, 0x0540} },
- { 'J', CAPS, {0x0573, 0x0543} },
- { 'K', CAPS, {0x0584, 0x0554} },
- { 'L', CAPS, {0x056c, 0x056c} },
- { VK_OEM_PLUS, CAPS, {0x0569, 0x0539} },
- { VK_OEM_3, CAPS, {0x0583, 0x0553} },
- { 'Z', CAPS, {0x0566, 0x0536} },
- { 'X', CAPS, {0x0581, 0x0551} },
- { 'C', CAPS, {0x0563, 0x0533} },
- { 'V', CAPS, {0x0582, 0x0552} },
- { 'B', CAPS, {0x057a, 0x054a} },
- { 'N', CAPS, {0x0576, 0x0546} },
- { 'M', CAPS, {0x0574, 0x0544} },
- { VK_OEM_COMMA, CAPS, {0x0577, 0x0547} },
- { VK_OEM_PERIOD,CAPS, {0x0572, 0x0542} },
- { VK_OEM_MINUS, CAPS, {0x056e, 0x053e} },
- { VK_OEM_102, NOCAPS, {'\'', 0x055e} },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_7, 0, {0x055d, 0x055c} },
+ { '1', 0, {':', '1' } },
+ { '2', CAPLOK, {0x0571, 0x0541} },
+ { '3', CAPLOK, {0x0575, 0x0545} },
+ { '4', 0, {0x055b, '3' } },
+ { '5', 0, {',', '4' } },
+ { '6', 0, {'-', '9' } },
+ { '7', 0, {'.', 0x0587} },
+ { '8', 0, {0x00ab, '(' } },
+ { '9', 0, {0x00bb, ')' } },
+ { '0', CAPLOK, {0x0585, 0x0555} },
+ { VK_OEM_4, CAPLOK, {0x057c, 0x054c} },
+ { VK_OEM_2, CAPLOK, {0x056a, 0x053a} },
+ { 'Q', CAPLOK, {0x056d, 0x053d} },
+ { 'W', CAPLOK, {0x057e, 0x054e} },
+ { 'E', CAPLOK, {0x0567, 0x0537} },
+ { 'R', CAPLOK, {0x0580, 0x0550} },
+ { 'T', CAPLOK, {0x0564, 0x0534} },
+ { 'Y', CAPLOK, {0x0565, 0x0535} },
+ { 'U', CAPLOK, {0x0568, 0x0538} },
+ { 'I', CAPLOK, {0x056b, 0x053b} },
+ { 'O', CAPLOK, {0x0578, 0x0548} },
+ { 'P', CAPLOK, {0x0562, 0x0532} },
+ { VK_OEM_6, CAPLOK, {0x0579, 0x0549} },
+ { VK_OEM_1, CAPLOK, {0x057b, 0x054b} },
+ { VK_OEM_5, 0, {'\'', 0x055e} },
+ { 'A', CAPLOK, {0x0561, 0x0531} },
+ { 'S', CAPLOK, {0x057d, 0x054d} },
+ { 'D', CAPLOK, {0x057f, 0x054f} },
+ { 'F', CAPLOK, {0x0586, 0x0556} },
+ { 'G', CAPLOK, {0x056f, 0x053f} },
+ { 'H', CAPLOK, {0x0570, 0x0540} },
+ { 'J', CAPLOK, {0x0573, 0x0543} },
+ { 'K', CAPLOK, {0x0584, 0x0554} },
+ { 'L', CAPLOK, {0x056c, 0x056c} },
+ { VK_OEM_PLUS, CAPLOK, {0x0569, 0x0539} },
+ { VK_OEM_3, CAPLOK, {0x0583, 0x0553} },
+ { 'Z', CAPLOK, {0x0566, 0x0536} },
+ { 'X', CAPLOK, {0x0581, 0x0551} },
+ { 'C', CAPLOK, {0x0563, 0x0533} },
+ { 'V', CAPLOK, {0x0582, 0x0552} },
+ { 'B', CAPLOK, {0x057a, 0x054a} },
+ { 'N', CAPLOK, {0x0576, 0x0546} },
+ { 'M', CAPLOK, {0x0574, 0x0544} },
+ { VK_OEM_COMMA, CAPLOK, {0x0577, 0x0547} },
+ { VK_OEM_PERIOD,CAPLOK, {0x0572, 0x0542} },
+ { VK_OEM_MINUS, CAPLOK, {0x056e, 0x053e} },
+ { VK_OEM_102, 0, {'\'', 0x055e} },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Armenian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {'`' , '~' } },
- { '1', NOCAPS, {'1' , '!' } },
- { '3', NOCAPS, {'3' , 0x2116} },
- { '4', NOCAPS, {'4' , ';' } },
- { '5', NOCAPS, {'5' , '%' } },
- { '7', NOCAPS, {'7' , '?' } },
- { '8', NOCAPS, {'8' , '*' } },
- { '9', NOCAPS, {'9' , '(' } },
- { '0', NOCAPS, {'0' , ')' } },
- { VK_OEM_PLUS, NOCAPS, {'=' , '+' } },
- { 'Q', CAPS, {0x0458, 0x0408} },
- { 'W', CAPS, {0x04af, 0x04ae} },
- { 'E', CAPS, {0x0443, 0x0423} },
- { 'R', CAPS, {0x043a, 0x041a} },
- { 'T', CAPS, {0x0435, 0x0415} },
- { 'Y', CAPS, {0x043d, 0x041d} },
- { 'U', CAPS, {0x0433, 0x0413} },
- { 'I', CAPS, {0x0448, 0x0428} },
- { 'O', CAPS, {0x04bb, 0x04ba} },
- { 'P', CAPS, {0x0437, 0x0417} },
- { VK_OEM_4, CAPS, {0x0445, 0x0425} },
- { 'A', CAPS, {0x0444, 0x0424} },
- { 'S', CAPS, {0x044b, 0x042b} },
- { 'D', CAPS, {0x0432, 0x0412} },
- { 'F', CAPS, {0x0430, 0x0410} },
- { 'G', CAPS, {0x043f, 0x041f} },
- { 'H', CAPS, {0x0440, 0x0420} },
- { 'J', CAPS, {0x043e, 0x041e} },
- { 'K', CAPS, {0x043b, 0x041b} },
- { 'L', CAPS, {0x0434, 0x0414} },
- { VK_OEM_7, CAPS, {0x049d, 0x049c} },
- { 'Z', CAPS, {0x04d9, 0x04d8} },
- { 'X', CAPS, {0x0447, 0x0427} },
- { 'C', CAPS, {0x0441, 0x0421} },
- { 'V', CAPS, {0x043c, 0x041c} },
- { 'B', CAPS, {0x0438, 0x0418} },
- { 'N', CAPS, {0x0442, 0x0422} },
- { 'M', CAPS, {0x0493, 0x0492} },
- { VK_OEM_COMMA, CAPS, {0x0431, 0x0411} },
- { VK_OEM_PERIOD, CAPS, {0x04e9, 0x04e8} },
- { VK_OEM_2, NOCAPS, {'.', ',' } },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {'`' , '~' } },
+ { '1', 0, {'1' , '!' } },
+ { '3', 0, {'3' , 0x2116} },
+ { '4', 0, {'4' , ';' } },
+ { '5', 0, {'5' , '%' } },
+ { '7', 0, {'7' , '?' } },
+ { '8', 0, {'8' , '*' } },
+ { '9', 0, {'9' , '(' } },
+ { '0', 0, {'0' , ')' } },
+ { VK_OEM_PLUS, 0, {'=' , '+' } },
+ { 'Q', CAPLOK, {0x0458, 0x0408} },
+ { 'W', CAPLOK, {0x04af, 0x04ae} },
+ { 'E', CAPLOK, {0x0443, 0x0423} },
+ { 'R', CAPLOK, {0x043a, 0x041a} },
+ { 'T', CAPLOK, {0x0435, 0x0415} },
+ { 'Y', CAPLOK, {0x043d, 0x041d} },
+ { 'U', CAPLOK, {0x0433, 0x0413} },
+ { 'I', CAPLOK, {0x0448, 0x0428} },
+ { 'O', CAPLOK, {0x04bb, 0x04ba} },
+ { 'P', CAPLOK, {0x0437, 0x0417} },
+ { VK_OEM_4, CAPLOK, {0x0445, 0x0425} },
+ { 'A', CAPLOK, {0x0444, 0x0424} },
+ { 'S', CAPLOK, {0x044b, 0x042b} },
+ { 'D', CAPLOK, {0x0432, 0x0412} },
+ { 'F', CAPLOK, {0x0430, 0x0410} },
+ { 'G', CAPLOK, {0x043f, 0x041f} },
+ { 'H', CAPLOK, {0x0440, 0x0420} },
+ { 'J', CAPLOK, {0x043e, 0x041e} },
+ { 'K', CAPLOK, {0x043b, 0x041b} },
+ { 'L', CAPLOK, {0x0434, 0x0414} },
+ { VK_OEM_7, CAPLOK, {0x049d, 0x049c} },
+ { 'Z', CAPLOK, {0x04d9, 0x04d8} },
+ { 'X', CAPLOK, {0x0447, 0x0427} },
+ { 'C', CAPLOK, {0x0441, 0x0421} },
+ { 'V', CAPLOK, {0x043c, 0x041c} },
+ { 'B', CAPLOK, {0x0438, 0x0418} },
+ { 'N', CAPLOK, {0x0442, 0x0422} },
+ { 'M', CAPLOK, {0x0493, 0x0492} },
+ { VK_OEM_COMMA, CAPLOK, {0x0431, 0x0411} },
+ { VK_OEM_PERIOD, CAPLOK, {0x04e9, 0x04e8} },
+ { VK_OEM_2, 0, {'.', ',' } },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_6, CAPS, {0x04b9, 0x04b8, 0x001b} },
- { VK_OEM_5, NOCAPS, {'\\', '/', 0x001c} },
- { VK_OEM_1, CAPS, {0x0436, 0x0416, 0x001d} },
- { VK_OEM_102, NOCAPS, {'\\', '|', 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_OEM_6, CAPLOK, {0x04b9, 0x04b8, 0x001b} },
+ { VK_OEM_5, 0, {'\\', '/', 0x001c} },
+ { VK_OEM_1, CAPLOK, {0x0436, 0x0416, 0x001d} },
+ { VK_OEM_102, 0, {'\\', '|', 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '2', NOCAPS, {'2', '\"', WCH_NONE, 0x0000} },
- { '6', NOCAPS, {'6', ':', WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x001f} },
+ { '2', 0, {'2', '\"', WCH_NONE, 0x0000} },
+ { '6', 0, {'6', ':', WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 2 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_8, NOCAPS, {'`', '~' } },
- { '1', NOCAPS, {'1', '!' } },
- { '2', NOCAPS, {'2', '\"' } },
- { '3', NOCAPS, {'3', 0x2166} },
- { '4', NOCAPS, {'4', ';' } },
- { '5', NOCAPS, {'5', '%' } },
- { '6', NOCAPS, {'6', ':' } },
- { '7', NOCAPS, {'7', '?' } },
- { '8', NOCAPS, {'8', '*' } },
- { '9', NOCAPS, {'9', '(' } },
- { '0', NOCAPS, {'0', ')' } },
- { VK_OEM_MINUS, NOCAPS, {'-', '_' } },
- { VK_OEM_PLUS, NOCAPS, {'=', '+' } },
- { 'Q', CAPS, {'q', 'Q' } },
- { 'W', CAPS, {0x00fc, 0x00dc} },
- { 'E', CAPS, {'e', 'E' } },
- { 'R', CAPS, {'r', 'R' } },
- { 'T', CAPS, {'t', 'T' } },
- { 'Y', CAPS, {'y', 'Y' } },
- { 'U', CAPS, {'u', 'U' } },
- { 'I', CAPS, {'i', 0x0130} },
- { 'O', CAPS, {'o', 'O' } },
- { 'P', CAPS, {'p', 'P' } },
- { VK_OEM_4, CAPS, {0x00f6, 0x00d6} },
- { VK_OEM_6, CAPS, {0x011f, 0x011e} },
- { VK_OEM_7, NOCAPS, {'\\', '/' } },
- { '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_1, CAPS, {0x0131, 'I' } },
- { VK_OEM_3, CAPS, {0x0259, 0x018f} },
- { '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, CAPS, {0x00e7, 0x00c7} },
- { VK_OEM_PERIOD,CAPS, {0x015f, 0x015e} },
- { VK_OEM_2, NOCAPS, {'.', ',' } },
- { VK_OEM_5, NOCAPS, {'\\', '/' } },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_8, 0, {'`', '~' } },
+ { '1', 0, {'1', '!' } },
+ { '2', 0, {'2', '\"' } },
+ { '3', 0, {'3', 0x2166} },
+ { '4', 0, {'4', ';' } },
+ { '5', 0, {'5', '%' } },
+ { '6', 0, {'6', ':' } },
+ { '7', 0, {'7', '?' } },
+ { '8', 0, {'8', '*' } },
+ { '9', 0, {'9', '(' } },
+ { '0', 0, {'0', ')' } },
+ { VK_OEM_MINUS, 0, {'-', '_' } },
+ { VK_OEM_PLUS, 0, {'=', '+' } },
+ { 'Q', CAPLOK, {'q', 'Q' } },
+ { 'W', CAPLOK, {0x00fc, 0x00dc} },
+ { 'E', CAPLOK, {'e', 'E' } },
+ { 'R', CAPLOK, {'r', 'R' } },
+ { 'T', CAPLOK, {'t', 'T' } },
+ { 'Y', CAPLOK, {'y', 'Y' } },
+ { 'U', CAPLOK, {'u', 'U' } },
+ { 'I', CAPLOK, {'i', 0x0130} },
+ { 'O', CAPLOK, {'o', 'O' } },
+ { 'P', CAPLOK, {'p', 'P' } },
+ { VK_OEM_4, CAPLOK, {0x00f6, 0x00d6} },
+ { VK_OEM_6, CAPLOK, {0x011f, 0x011e} },
+ { VK_OEM_7, 0, {'\\', '/' } },
+ { 'A', CAPLOK, {'a', 'A' } },
+ { 'S', CAPLOK, {'s', 'S' } },
+ { 'D', CAPLOK, {'d', 'D' } },
+ { 'F', CAPLOK, {'f', 'F' } },
+ { 'G', CAPLOK, {'g', 'G' } },
+ { 'H', CAPLOK, {'h', 'H' } },
+ { 'J', CAPLOK, {'j', 'J' } },
+ { 'K', CAPLOK, {'k', 'K' } },
+ { 'L', CAPLOK, {'l', 'L' } },
+ { VK_OEM_1, CAPLOK, {0x0131, 'I' } },
+ { VK_OEM_3, CAPLOK, {0x0259, 0x018f} },
+ { 'Z', CAPLOK, {'z', 'Z' } },
+ { 'X', CAPLOK, {'x', 'X' } },
+ { 'C', CAPLOK, {'c', 'C' } },
+ { 'V', CAPLOK, {'v', 'V' } },
+ { 'B', CAPLOK, {'b', 'B' } },
+ { 'N', CAPLOK, {'n', 'N' } },
+ { 'M', CAPLOK, {'m', 'M' } },
+ { VK_OEM_COMMA, CAPLOK, {0x00e7, 0x00c7} },
+ { VK_OEM_PERIOD,CAPLOK, {0x015f, 0x015e} },
+ { VK_OEM_2, 0, {'.', ',' } },
+ { VK_OEM_5, 0, {'\\', '/' } },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, 0x0003} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, CTRL + MENU */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
/* The numbers */
- { '4', NOCAPS, {0x27, '4'} },
- { '5', NOCAPS, {'(', '5'} },
- { '7', NOCAPS, {0xE8, '7'} },
- { '8', NOCAPS, {'!', '8'} },
- { VK_OEM_2, NOCAPS, {')', 0xB0} },
+ { '4', 0, {0x27, '4'} },
+ { '5', 0, {'(', '5'} },
+ { '7', 0, {0xE8, '7'} },
+ { '8', 0, {'!', '8'} },
+ { VK_OEM_2, 0, {')', 0xB0} },
/* Specials */
- { VK_OEM_COMMA, CAPS, {',', '?'} },
- { VK_OEM_PERIOD, CAPS, {';', '.'} },
-
- { VK_OEM_1, CAPS, {':', '/'} },
- { VK_OEM_3, NOCAPS, {0xB2, 0xB3 } },
- { VK_DECIMAL, NOCAPS, {'.', '.'} },
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_COMMA, CAPLOK, {',', '?'} },
+ { VK_OEM_PERIOD, CAPLOK, {';', '.'} },
+
+ { VK_OEM_1, CAPLOK, {':', '/'} },
+ { VK_OEM_3, 0, {0xB2, 0xB3 } },
+ { VK_DECIMAL, 0, {'.', '.'} },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
/* 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} },
+ { 'A', CAPLOK, {'a', 'A', 0x01} },
+ { 'B', CAPLOK, {'b', 'B', 0x02} },
+ { 'C', CAPLOK, {'c', 'C', 0x03} },
+ { 'D', CAPLOK, {'d', 'D', 0x04} },
+ { 'F', CAPLOK, {'f', 'F', 0x06} },
+ { 'G', CAPLOK, {'g', 'G', 0x07} },
+ { 'H', CAPLOK, {'h', 'H', 0x08} },
+ { 'I', CAPLOK, {'i', 'I', 0x09} },
+ { 'J', CAPLOK, {'j', 'J', 0x0a} },
+ { 'K', CAPLOK, {'k', 'K', 0x0b} },
+ { 'L', CAPLOK, {'l', 'L', 0x0c} },
+ { 'M', CAPLOK, {'m', 'M', 0x0d} },
+ { 'N', CAPLOK, {'n', 'N', 0x0e} },
+ { 'O', CAPLOK, {'o', 'O', 0x0f} },
+ { 'P', CAPLOK, {'p', 'P', 0x10} },
+ { 'Q', CAPLOK, {'q', 'Q', 0x11} },
+ { 'R', CAPLOK, {'r', 'R', 0x12} },
+ { 'S', CAPLOK, {'s', 'S', 0x13} },
+ { 'T', CAPLOK, {'t', 'T', 0x14} },
+ { 'U', CAPLOK, {'u', 'U', 0x15} },
+ { 'V', CAPLOK, {'v', 'V', 0x16} },
+ { 'W', CAPLOK, {'w', 'W', 0x17} },
+ { 'X', CAPLOK, {'x', 'X', 0x18} },
+ { 'Y', CAPLOK, {'y', 'Y', 0x19} },
+ { 'Z', CAPLOK, {'z', 'Z', 0x1a} },
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_MINUS, NOCAPS, {'-', '_', 0x1f} }, //0x1f unit separator \1f
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
+ { VK_OEM_MINUS, 0, {'-', '_', 0x1f} }, //0x1f unit separator \1f
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, 0x1b} },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, 0x03} },
+ { VK_BACK, 0, {'\b', '\b', 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, 0x1b} },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x03, 0x03, 0x03} },
{ 0,0 }
};
-
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, '@' } },
- { '3', NOCAPS, {'"', '3', WCH_NONE, '#' } },
- { '6', NOCAPS, {0xA7, '6', WCH_NONE, WCH_DEAD} },
- { '9', NOCAPS, {0xE7, '9', WCH_NONE, '{' } },
- { '0', NOCAPS, {0xE0, '0', WCH_NONE, '}' } },
- { VK_OEM_PLUS, NOCAPS, {'=', '+', WCH_NONE, WCH_DEAD} },
-
- { VK_OEM_4, NOCAPS, {WCH_DEAD, WCH_DEAD,WCH_NONE, '[' } },
- { VK_OEM_5, CAPS, {0xB5, 0xA3, WCH_NONE, WCH_DEAD} },
- { VK_OEM_6, NOCAPS, {'$', '*', WCH_NONE, ']' } },
- { VK_OEM_7, NOCAPS, {0xF9, '%', WCH_NONE, WCH_DEAD} },
- { VK_EMPTY , NOCAPS, {0xb4, '`', '|', WCH_NONE} },
-
- { 'E', CAPS, {'e', 'E', 0x05, 0x20ac} },
- { VK_EMPTY , NOCAPS, {0xa8, '^', WCH_NONE, '~'} },
-
- { VK_OEM_102, NOCAPS, {'<', '>', 0x001c, '\\'} },
+ { '1', 0, {'&', '1', WCH_NONE, '|' } },
+ { '2', 0, {0xE9, '2', WCH_NONE, '@' } },
+ { '3', 0, {'"', '3', WCH_NONE, '#' } },
+ { '6', 0, {0xA7, '6', WCH_NONE, WCH_DEAD} },
+ { '9', 0, {0xE7, '9', WCH_NONE, '{' } },
+ { '0', 0, {0xE0, '0', WCH_NONE, '}' } },
+ { VK_OEM_PLUS, 0, {'=', '+', WCH_NONE, WCH_DEAD} },
+
+ { VK_OEM_4, 0, {WCH_DEAD, WCH_DEAD,WCH_NONE, '[' } },
+ { VK_OEM_5, CAPLOK, {0xB5, 0xA3, WCH_NONE, WCH_DEAD} },
+ { VK_OEM_6, 0, {'$', '*', WCH_NONE, ']' } },
+ { VK_OEM_7, 0, {0xF9, '%', WCH_NONE, WCH_DEAD} },
+ { VK_EMPTY , 0, {0xb4, '`', '|', WCH_NONE} },
+
+ { 'E', CAPLOK, {'e', 'E', 0x05, 0x20ac} },
+ { VK_EMPTY , 0, {0xa8, '^', WCH_NONE, '~'} },
+
+ { VK_OEM_102, 0, {'<', '>', 0x001c, '\\'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt, C-S-x */
- { '6', NOCAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x1e /* RS */} },
+ { '6', 0, {'6', '&', WCH_NONE, WCH_NONE, 0x1e /* RS */} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Spatie" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- None in Dutch */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row Öèôðîâ ðåä*/
/* Third letters row Òðåòè áóêâåí ðåä*/
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad Öèôðîâà ïîäëîæêà */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
-
/* Öèôðîâ ðåä */
/* VK_OEM_3 = ÷× */
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- {VK_OEM_3, CAPS, {0x44e, 0x42e} }, //þÞ
- { '1', NOCAPS, {'1', '!'} },
- { '2', NOCAPS, {'2', '@'} },
- { '3', NOCAPS, {'3', 0x2116} }, //3¹
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
- { '6', NOCAPS, {'6', 0x20AC} }, //6\88
- { '7', NOCAPS, {'7', 0xA7} }, //7
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
- { VK_OEM_PLUS, NOCAPS, {'=', '+'} },
+ {VK_OEM_3, CAPLOK, {0x44e, 0x42e} }, //þÞ
+ { '1', 0, {'1', '!'} },
+ { '2', 0, {'2', '@'} },
+ { '3', 0, {'3', 0x2116} }, //3¹
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
+ { '6', 0, {'6', 0x20AC} }, //6\88
+ { '7', 0, {'7', 0xA7} }, //7
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
+ { VK_OEM_PLUS, 0, {'=', '+'} },
/* First letter row Ïúðâè ðåä áóêâè ÿâåðòúóèîïøù*/
- { 'Q', CAPS, {0x447, 0x427} }, //÷×
- { 'W', CAPS, {0x448, 0x428} }, //øØ
- { 'E', CAPS, {0x435, 0x415} }, //åÅ
- { 'R', CAPS, {0x440, 0x420} }, //ðÐ
- { 'T', CAPS, {0x442, 0x422} }, //òÒ
- { 'Y', CAPS, {0x44a, 0x42a} }, //úÚ
- { 'U', CAPS, {0x443, 0x423} }, //óÓ
- { 'I', CAPS, {0x438, 0x418} }, //èÈ
- { 'O', CAPS, {0x43e, 0x41e} }, //îÎ
- { 'P', CAPS, {0x43f, 0x41f} }, //ïÏ
- { VK_OEM_4, CAPS, {0x44f, 0x42f} }, //ÿß
- { VK_OEM_6, CAPS, {0x449, 0x429} }, //ùÙ
+ { 'Q', CAPLOK, {0x447, 0x427} }, //÷×
+ { 'W', CAPLOK, {0x448, 0x428} }, //øØ
+ { 'E', CAPLOK, {0x435, 0x415} }, //åÅ
+ { 'R', CAPLOK, {0x440, 0x420} }, //ðÐ
+ { 'T', CAPLOK, {0x442, 0x422} }, //òÒ
+ { 'Y', CAPLOK, {0x44a, 0x42a} }, //úÚ
+ { 'U', CAPLOK, {0x443, 0x423} }, //óÓ
+ { 'I', CAPLOK, {0x438, 0x418} }, //èÈ
+ { 'O', CAPLOK, {0x43e, 0x41e} }, //îÎ
+ { 'P', CAPLOK, {0x43f, 0x41f} }, //ïÏ
+ { VK_OEM_4, CAPLOK, {0x44f, 0x42f} }, //ÿß
+ { VK_OEM_6, CAPLOK, {0x449, 0x429} }, //ùÙ
/* Second letter row Âòîðè ðåä áóêâè àñäôãõéêë ;:'" */
- { 'A', CAPS, {0x430, 0x410} }, //àÀ
- { 'S', CAPS, {0x441, 0x421} }, //ñÑ
- { 'D', CAPS, {0x434, 0x414} }, //äÄ
- { 'F', CAPS, {0x444, 0x424} }, //ôÔ
- { 'G', CAPS, {0x433, 0x413} }, //ãÃ
- { 'H', CAPS, {0x445, 0x425} }, //õÕ
- { 'J', CAPS, {0x439, 0x419} }, //éÉ
- { 'K', CAPS, {0x43a, 0x41a} }, //êÊ
- { 'L', CAPS, {0x43b, 0x41b} }, //ëË
- { VK_OEM_1, NOCAPS, {';', ':'} },
- { VK_OEM_7, NOCAPS, {'\'','\"'} },
-
+ { 'A', CAPLOK, {0x430, 0x410} }, //àÀ
+ { 'S', CAPLOK, {0x441, 0x421} }, //ñÑ
+ { 'D', CAPLOK, {0x434, 0x414} }, //äÄ
+ { 'F', CAPLOK, {0x444, 0x424} }, //ôÔ
+ { 'G', CAPLOK, {0x433, 0x413} }, //ãÃ
+ { 'H', CAPLOK, {0x445, 0x425} }, //õÕ
+ { 'J', CAPLOK, {0x439, 0x419} }, //éÉ
+ { 'K', CAPLOK, {0x43a, 0x41a} }, //êÊ
+ { 'L', CAPLOK, {0x43b, 0x41b} }, //ëË
+ { VK_OEM_1, 0, {';', ':'} },
+ { VK_OEM_7, 0, {'\'','\"'} },
/* Third letter row Òðåòè ðåä áóêâè */
- { 'Z', CAPS, {0x437, 0x417} }, //çÇ
- { 'X', CAPS, {0x436, 0x416} }, //æÆ
- { 'C', CAPS, {0x446, 0x426} }, //öÖ
- { 'V', CAPS, {0x432, 0x412} }, //âÂ
- { 'B', CAPS, {0x431, 0x411} }, //áÁ
- { 'N', CAPS, {0x43d, 0x41d} }, //íÍ
- { 'M', CAPS, {0x43c, 0x41c} }, //ìÌ
-/* { VK_OEM_COMMA,CAPS, {0x431, 0x411} }, */
- { VK_OEM_COMMA, NOCAPS, {',', 0x84} }, //,\84
-/* { VK_OEM_PERIOD,CAPS, {0x44e, 0x42e} }, */
- { VK_OEM_PERIOD, NOCAPS, {'.', 0x94} }, //.\94
-/* { VK_OEM_2, NOCAPS, {'.', ','} }, */
- { VK_OEM_2, NOCAPS, {'/', '?'} },
+ { 'Z', CAPLOK, {0x437, 0x417} }, //çÇ
+ { 'X', CAPLOK, {0x436, 0x416} }, //æÆ
+ { 'C', CAPLOK, {0x446, 0x426} }, //öÖ
+ { 'V', CAPLOK, {0x432, 0x412} }, //âÂ
+ { 'B', CAPLOK, {0x431, 0x411} }, //áÁ
+ { 'N', CAPLOK, {0x43d, 0x41d} }, //íÍ
+ { 'M', CAPLOK, {0x43c, 0x41c} }, //ìÌ
+/* { VK_OEM_COMMA,CAPLOK, {0x431, 0x411} }, */
+ { VK_OEM_COMMA, 0, {',', 0x84} }, //,\84
+/* { VK_OEM_PERIOD,CAPLOK, {0x44e, 0x42e} }, */
+ { VK_OEM_PERIOD, 0, {'.', 0x94} }, //.\94
+/* { VK_OEM_2, 0, {'.', ','} }, */
+ { VK_OEM_2, 0, {'/', '?'} },
/* Specials */
- { 0x6e, NOCAPS, {',', ','} },
- { VK_TAB, NOCAPS, {9, 9} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { 0x6e, 0, {',', ','} },
+ { VK_TAB, 0, {9, 9} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
-/* { VK_OEM_5, NOCAPS, {0x5c, 0x2f, 0x1c} }, */
- { VK_OEM_5, CAPS, {0x44c, 0x42c} }, //üÜ
- { VK_OEM_102, NOCAPS, {0x5c, 0x7c} },
- { VK_BACK, NOCAPS, {0x8, 0x8, 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, 0x1b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
- { VK_SPACE, NOCAPS, {' ', ' ', ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, 0x03} },
+/* { VK_OEM_5, 0, {0x5c, 0x2f, 0x1c} }, */
+ { VK_OEM_5, CAPLOK, {0x44c, 0x42c} }, //üÜ
+ { VK_OEM_102, 0, {0x5c, 0x7c} },
+ { VK_BACK, 0, {0x8, 0x8, 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, 0x1b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
+ { VK_SPACE, 0, {' ', ' ', ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, 0x03} },
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt */
/* Legacy Ascii generators */
- /* { '2', NOCAPS, {'2', '\"', WCH_NONE, 0} }, */
-/* { '6', NOCAPS, {'6', ':', WCH_NONE, 0x001e} }, */
-/* { VK_OEM_MINUS, NOCAPS, {0x2d, '_', WCH_NONE, 0x001f} }, // different '-' */
- { VK_OEM_MINUS, NOCAPS, {'-', '_'} },
+ /* { '2', 0, {'2', '\"', WCH_NONE, 0} }, */
+/* { '6', 0, {'6', ':', WCH_NONE, 0x001e} }, */
+/* { VK_OEM_MINUS, 0, {0x2d, '_', WCH_NONE, 0x001f} }, // different '-' */
+ { VK_OEM_MINUS, 0, {'-', '_'} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Bulgarian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row Öèôðîâ ðåä*/
/* Third letters row Òðåòè áóêâåí ðåä*/
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad Öèôðîâà ïîäëîæêà */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
-
/* Öèôðîâ ðåä */
/* VK_OEM_3 = ÷× */
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- {VK_OEM_3, CAPS, {0x60, 0x7e} }, /* `~ */
- { '1', NOCAPS, {'1', '!'} },
- { '2', NOCAPS, {'2', '?'} },
- { '3', NOCAPS, {'3', '+'} },
- { '4', NOCAPS, {'4', '"'} },
- { '5', NOCAPS, {'5', '%'} },
- { '6', NOCAPS, {'6', '='} },
- { '7', NOCAPS, {'7', ':'} },
- { '8', NOCAPS, {'8', '/'} },
- { '9', NOCAPS, {'9', '_'} },
- { '0', NOCAPS, {'0', 0x2116} }, /* ¹ */
+ {VK_OEM_3, CAPLOK, {0x60, 0x7e} }, /* `~ */
+ { '1', 0, {'1', '!'} },
+ { '2', 0, {'2', '?'} },
+ { '3', 0, {'3', '+'} },
+ { '4', 0, {'4', '"'} },
+ { '5', 0, {'5', '%'} },
+ { '6', 0, {'6', '='} },
+ { '7', 0, {'7', ':'} },
+ { '8', 0, {'8', '/'} },
+ { '9', 0, {'9', '_'} },
+ { '0', 0, {'0', 0x2116} }, /* ¹ */
/* Çà ñëåäâàùîòî êîï÷å òúðñè (-|) òúðñè VK_OEM_MINUS */
- { VK_OEM_PLUS, NOCAPS, {'=', '+'} },
+ { VK_OEM_PLUS, 0, {'=', '+'} },
/* First letter row Ïúðâè ðåä áóêâè ,ûóÓåÅèÈøØùÙêÊñÑäÄçÇöÖ;§ íåäîâúðøåí*/
- { 'Q', NOCAPS, {0x2c, 0x44b} },
- { 'W', CAPS, {0x443, 0x423} },
- { 'E', CAPS, {0x435, 0x415} },
- { 'R', CAPS, {0x438, 0x418} },
- { 'T', CAPS, {0x448, 0x428} },
- { 'Y', CAPS, {0x449, 0x429} },
- { 'U', CAPS, {0x43a, 0x41a} },
- { 'I', CAPS, {0x441, 0x421} },
- { 'O', CAPS, {0x434, 0x414} },
- { 'P', CAPS, {0x437, 0x417} },
- { VK_OEM_4, CAPS, {0x446, 0x426} },
- { VK_OEM_6, CAPS, {0x3b, 0xa7} },
+ { 'Q', 0, {0x2c, 0x44b} },
+ { 'W', CAPLOK, {0x443, 0x423} },
+ { 'E', CAPLOK, {0x435, 0x415} },
+ { 'R', CAPLOK, {0x438, 0x418} },
+ { 'T', CAPLOK, {0x448, 0x428} },
+ { 'Y', CAPLOK, {0x449, 0x429} },
+ { 'U', CAPLOK, {0x43a, 0x41a} },
+ { 'I', CAPLOK, {0x441, 0x421} },
+ { 'O', CAPLOK, {0x434, 0x414} },
+ { 'P', CAPLOK, {0x437, 0x417} },
+ { VK_OEM_4, CAPLOK, {0x446, 0x426} },
+ { VK_OEM_6, CAPLOK, {0x3b, 0xa7} },
/* Second letter row Âòîðè ðåä áóêâè üÜÿßàÀîÎæÆãÃòÒíÍâÂìÌ÷× */
- { 'A', CAPS, {0x44c, 0x42c} },
- { 'S', CAPS, {0x44f, 0x42f} },
- { 'D', CAPS, {0x430, 0x410} },
- { 'F', CAPS, {0x43e, 0x41e} },
- { 'G', CAPS, {0x436, 0x416} },
- { 'H', CAPS, {0x433, 0x413} },
- { 'J', CAPS, {0x442, 0x422} },
- { 'K', CAPS, {0x43d, 0x41d} },
- { 'L', CAPS, {0x432, 0x412} },
- { VK_OEM_1, NOCAPS, {0x43c, 0x41c} },
- { VK_OEM_7, NOCAPS, {0x447, 0x427} },
-
+ { 'A', CAPLOK, {0x44c, 0x42c} },
+ { 'S', CAPLOK, {0x44f, 0x42f} },
+ { 'D', CAPLOK, {0x430, 0x410} },
+ { 'F', CAPLOK, {0x43e, 0x41e} },
+ { 'G', CAPLOK, {0x436, 0x416} },
+ { 'H', CAPLOK, {0x433, 0x413} },
+ { 'J', CAPLOK, {0x442, 0x422} },
+ { 'K', CAPLOK, {0x43d, 0x41d} },
+ { 'L', CAPLOK, {0x432, 0x412} },
+ { VK_OEM_1, 0, {0x43c, 0x41c} },
+ { VK_OEM_7, 0, {0x447, 0x427} },
/* Third letter row Òðåòè ðåä áóêâè þÞéÉúÚýÝôÔõÕïÏðÐëË */
- { 'Z', CAPS, {0x44e, 0x42e} },
- { 'X', CAPS, {0x439, 0x419} },
- { 'C', CAPS, {0x44a, 0x42a} },
- { 'V', CAPS, {0x436, 0x416} },
- { 'B', CAPS, {0x44d, 0x42d} },
- { 'N', CAPS, {0x444, 0x424} },
- { 'M', CAPS, {0x445, 0x425} },
-/* { VK_OEM_COMMA,CAPS, {0x431, 0x411} }, */
- { VK_OEM_COMMA, NOCAPS, {0x43f, 0x41f} },
-/* { VK_OEM_PERIOD,CAPS, {0x44e, 0x42e} }, */
- { VK_OEM_PERIOD, NOCAPS, {0x440, 0x420} },
-/* { VK_OEM_2, NOCAPS, {'.', ','} }, */
- { VK_OEM_2, NOCAPS, {0x43b, 0x41b} },
+ { 'Z', CAPLOK, {0x44e, 0x42e} },
+ { 'X', CAPLOK, {0x439, 0x419} },
+ { 'C', CAPLOK, {0x44a, 0x42a} },
+ { 'V', CAPLOK, {0x436, 0x416} },
+ { 'B', CAPLOK, {0x44d, 0x42d} },
+ { 'N', CAPLOK, {0x444, 0x424} },
+ { 'M', CAPLOK, {0x445, 0x425} },
+/* { VK_OEM_COMMA,CAPLOK, {0x431, 0x411} }, */
+ { VK_OEM_COMMA, 0, {0x43f, 0x41f} },
+/* { VK_OEM_PERIOD,CAPLOK, {0x44e, 0x42e} }, */
+ { VK_OEM_PERIOD, 0, {0x440, 0x420} },
+/* { VK_OEM_2, 0, {'.', ','} }, */
+ { VK_OEM_2, 0, {0x43b, 0x41b} },
/* Specials */
- { 0x6e, NOCAPS, {',', ','} },
- { VK_TAB, NOCAPS, {9, 9} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { 0x6e, 0, {',', ','} },
+ { VK_TAB, 0, {9, 9} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
-/* { VK_OEM_5, NOCAPS, {0x5c, 0x2f, 0x1c} }, Ñòàðàòà ñòîéíîñò, íàäÿâàì ñå òóê äà å áÁ */
- { VK_OEM_5, CAPS, {0x431, 0x411} },
- { VK_OEM_102, NOCAPS, {0x5c, 0x2f, 0x1c} }, /* Òóê îñâåí äà å äîïúëíèòåëíîòî êîï÷å äî ëÿâàòà ñìÿíà */
- { VK_BACK, NOCAPS, {0x8, 0x8, 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, 0x1b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
- { VK_SPACE, NOCAPS, {' ', ' ', ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, 0x03} },
+/* { VK_OEM_5, 0, {0x5c, 0x2f, 0x1c} }, Ñòàðàòà ñòîéíîñò, íàäÿâàì ñå òóê äà å áÁ */
+ { VK_OEM_5, CAPLOK, {0x431, 0x411} },
+ { VK_OEM_102, 0, {0x5c, 0x2f, 0x1c} }, /* Òóê îñâåí äà å äîïúëíèòåëíîòî êîï÷å äî ëÿâàòà ñìÿíà */
+ { VK_BACK, 0, {0x8, 0x8, 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, 0x1b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
+ { VK_SPACE, 0, {' ', ' ', ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, 0x03} },
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt */
/* Legacy Ascii generators */
- /* { '2', NOCAPS, {'2', '\"', WCH_NONE, 0} }, */
-/* { '6', NOCAPS, {'6', ':', WCH_NONE, 0x001e} }, */
-/* { VK_OEM_MINUS, NOCAPS, {0x2d, '_', WCH_NONE, 0x001f} }, // different '-' */
- { VK_OEM_MINUS, NOCAPS, {'-', '|'} },
+ /* { '2', 0, {'2', '\"', WCH_NONE, 0} }, */
+/* { '6', 0, {'6', ':', WCH_NONE, 0x001e} }, */
+/* { VK_OEM_MINUS, 0, {0x2d, '_', WCH_NONE, 0x001f} }, // different '-' */
+ { VK_OEM_MINUS, 0, {'-', '|'} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Bulgarian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row Öèôðîâ ðåä*/
/* Third letters row Òðåòè áóêâåí ðåä*/
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad Öèôðîâà ïîäëîæêà */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
-
ROSDATA MODIFIERS modifier_bits = {
modifier_keys,
6,
{ 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3 }
};
-
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
-
/* Öèôðîâ ðåä */
/* VK_OEM_3 = ÷× */
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- {VK_OEM_3, CAPS, {0x447, 0x427} },
- { '1', NOCAPS, {'1', '!'} },
- { '2', NOCAPS, {'2', '@'} },
-// { '3', NOCAPS, {'3', '#'} },
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
-// { '6', NOCAPS, {'6', '^'} },
-// { '7', NOCAPS, {'7', '&'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
- { VK_OEM_PLUS, NOCAPS, {'=', '+'} },
+ {VK_OEM_3, CAPLOK, {0x447, 0x427} },
+ { '1', 0, {'1', '!'} },
+ { '2', 0, {'2', '@'} },
+// { '3', 0, {'3', '#'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
+// { '6', 0, {'6', '^'} },
+// { '7', 0, {'7', '&'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
+ { VK_OEM_PLUS, 0, {'=', '+'} },
/* First letter row Ïúðâè ðåä áóêâè ÿâåðòúóèîïøù*/
- { 'Q', CAPS, {0x44f, 0x42f} },
- { 'W', CAPS, {0x432, 0x412} },
-// { 'E', CAPS, {0x435, 0x415} },
- { 'R', CAPS, {0x440, 0x420} },
- { 'T', CAPS, {0x442, 0x422} },
- { 'Y', CAPS, {0x44a, 0x42a} },
- { 'U', CAPS, {0x443, 0x423} },
-// { 'I', CAPS, {0x438, 0x418} },
-// { 'O', CAPS, {0x43e, 0x41e} },
- { 'P', CAPS, {0x43f, 0x41f} },
- { VK_OEM_4, CAPS, {0x448, 0x428} },
- { VK_OEM_6, CAPS, {0x449, 0x429} },
+ { 'Q', CAPLOK, {0x44f, 0x42f} },
+ { 'W', CAPLOK, {0x432, 0x412} },
+// { 'E', CAPLOK, {0x435, 0x415} },
+ { 'R', CAPLOK, {0x440, 0x420} },
+ { 'T', CAPLOK, {0x442, 0x422} },
+ { 'Y', CAPLOK, {0x44a, 0x42a} },
+ { 'U', CAPLOK, {0x443, 0x423} },
+// { 'I', CAPLOK, {0x438, 0x418} },
+// { 'O', CAPLOK, {0x43e, 0x41e} },
+ { 'P', CAPLOK, {0x43f, 0x41f} },
+ { VK_OEM_4, CAPLOK, {0x448, 0x428} },
+ { VK_OEM_6, CAPLOK, {0x449, 0x429} },
/* Second letter row Âòîðè ðåä áóêâè àñäôãõéêë ;:'" */
- { 'A', CAPS, {0x430, 0x410} },
- { 'S', CAPS, {0x441, 0x421} },
- { 'D', CAPS, {0x434, 0x414} },
- { 'F', CAPS, {0x444, 0x424} },
- { 'G', CAPS, {0x433, 0x413} },
- { 'H', CAPS, {0x445, 0x425} },
-// { 'J', CAPS, {0x439, 0x419} },
- { 'K', CAPS, {0x43a, 0x41a} },
- { 'L', CAPS, {0x43b, 0x41b} },
- { VK_OEM_1, NOCAPS, {';', ':'} },
-// { VK_OEM_7, NOCAPS, {'\'','\"'} },
-
+ { 'A', CAPLOK, {0x430, 0x410} },
+ { 'S', CAPLOK, {0x441, 0x421} },
+ { 'D', CAPLOK, {0x434, 0x414} },
+ { 'F', CAPLOK, {0x444, 0x424} },
+ { 'G', CAPLOK, {0x433, 0x413} },
+ { 'H', CAPLOK, {0x445, 0x425} },
+// { 'J', CAPLOK, {0x439, 0x419} },
+ { 'K', CAPLOK, {0x43a, 0x41a} },
+ { 'L', CAPLOK, {0x43b, 0x41b} },
+ { VK_OEM_1, 0, {';', ':'} },
+// { VK_OEM_7, 0, {'\'','\"'} },
/* Third letter row Òðåòè ðåä áóêâè */
- { 'Z', CAPS, {0x437, 0x417} },
- { 'X', CAPS, {0x44c, 0x42c} },
- { 'C', CAPS, {0x446, 0x426} },
- { 'V', CAPS, {0x436, 0x416} },
- { 'B', CAPS, {0x431, 0x411} },
- { 'N', CAPS, {0x43d, 0x41d} },
- { 'M', CAPS, {0x43c, 0x41c} },
-/* { VK_OEM_COMMA,CAPS, {0x431, 0x411} }, */
- { VK_OEM_COMMA, NOCAPS, {',', '<'} },
-/* { VK_OEM_PERIOD,CAPS, {0x44e, 0x42e} }, */
- { VK_OEM_PERIOD, NOCAPS, {'.', '>'} },
-/* { VK_OEM_2, NOCAPS, {'.', ','} }, */
- { VK_OEM_2, NOCAPS, {'/', '?'} },
+ { 'Z', CAPLOK, {0x437, 0x417} },
+ { 'X', CAPLOK, {0x44c, 0x42c} },
+ { 'C', CAPLOK, {0x446, 0x426} },
+ { 'V', CAPLOK, {0x436, 0x416} },
+ { 'B', CAPLOK, {0x431, 0x411} },
+ { 'N', CAPLOK, {0x43d, 0x41d} },
+ { 'M', CAPLOK, {0x43c, 0x41c} },
+/* { VK_OEM_COMMA,CAPLOK, {0x431, 0x411} }, */
+ { VK_OEM_COMMA, 0, {',', '<'} },
+/* { VK_OEM_PERIOD,CAPLOK, {0x44e, 0x42e} }, */
+ { VK_OEM_PERIOD, 0, {'.', '>'} },
+/* { VK_OEM_2, 0, {'.', ','} }, */
+ { VK_OEM_2, 0, {'/', '?'} },
/* Specials */
- { 0x6e, NOCAPS, {',', ','} },
- { VK_TAB, NOCAPS, {9, 9} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { 0x6e, 0, {',', ','} },
+ { VK_TAB, 0, {9, 9} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_5, CAPS, {0x44e, 0x42e} }, //þÞ
- { VK_OEM_102, NOCAPS, {0x5c, 0x7c} }, // \| Òîçè êëàâèø ëèïñâà íà ìíîãî êëàâèàòóðè
- { VK_BACK, NOCAPS, {0x8, 0x8, 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, 0x1b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
- { VK_SPACE, NOCAPS, {' ', ' ', ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, 0x03} },
+ { VK_OEM_5, CAPLOK, {0x44e, 0x42e} }, //þÞ
+ { VK_OEM_102, 0, {0x5c, 0x7c} }, // \| Òîçè êëàâèø ëèïñâà íà ìíîãî êëàâèàòóðè
+ { VK_BACK, 0, {0x8, 0x8, 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, 0x1b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
+ { VK_SPACE, 0, {' ', ' ', ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, 0x03} },
{ 0,0 }
};
/* Normal, Shifted, Ctrl, Ctrl-Alt */
/*×èñò, Øèôò, Êòðë, Êòðë+ Øèôò */
/* Legacy Ascii generators */
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x2014} }, //-_\97
-// { '3', NOCAPS, {'3', '#', WCH_NONE, 0x2116} },
-// { '6', NOCAPS, {'6', '^', WCH_NONE, 0x20AC} },
-// { '7', NOCAPS, {'7', '&', WCH_NONE, 0xA7} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x2014} }, //-_\97
+// { '3', 0, {'3', '#', WCH_NONE, 0x2116} },
+// { '6', 0, {'6', '^', WCH_NONE, 0x20AC} },
+// { '7', 0, {'7', '&', WCH_NONE, 0xA7} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl, Ctrl+Alt, Ctrl+Shift */
- { 'E', CAPS, {0x435, 0x415, WCH_NONE, 0x44d, 0x42d} }, //eEýÝ
- { 'I', CAPS, {0x438, 0x418, WCH_NONE, 0x44b, 0x42b} }, //èÈûÛ
- { 'O', CAPS, {0x43e, 0x41e, WCH_NONE, 0x451, 0x401} }, //oO¸¨
- { 'J', CAPS, {0x439, 0x419, WCH_NONE, 0x45d, 0x40d} }, //éÉ ìàëêî è ãëàâíî \84è\94 ñ óäàðåíèå
+ { 'E', CAPLOK, {0x435, 0x415, WCH_NONE, 0x44d, 0x42d} }, //eEýÝ
+ { 'I', CAPLOK, {0x438, 0x418, WCH_NONE, 0x44b, 0x42b} }, //èÈûÛ
+ { 'O', CAPLOK, {0x43e, 0x41e, WCH_NONE, 0x451, 0x401} }, //oO¸¨
+ { 'J', CAPLOK, {0x439, 0x419, WCH_NONE, 0x45d, 0x40d} }, //éÉ ìàëêî è ãëàâíî \84è\94 ñ óäàðåíèå
//Ñëåäâàùèòå ðåäîâå ìîãàò äà ñà è â ROSDATA VK_TO_WCHARS4,
//êàòî ïîñëåäíîòî èì ïîïúëíåíèå òðÿáâà äà ñå ìàõíå
- { '3', NOCAPS, {'3', '#', WCH_NONE, 0x2116, 0x2116} }, //3#¹¹
- { '6', NOCAPS, {'6', '^', WCH_NONE, 0x20AC,0x20AC } }, //6^\88\88
- { '7', NOCAPS, {'7', '&', WCH_NONE, 0xA7, 0xA7} }, //7&§§
- { VK_OEM_7, NOCAPS, {'\'','\"', WCH_NONE, 0x201e, 0x201C } }, //'"\84\93
+ { '3', 0, {'3', '#', WCH_NONE, 0x2116, 0x2116} }, //3#¹¹
+ { '6', 0, {'6', '^', WCH_NONE, 0x20AC,0x20AC } }, //6^\88\88
+ { '7', 0, {'7', '&', WCH_NONE, 0xA7, 0xA7} }, //7&§§
+ { VK_OEM_7, 0, {'\'','\"', WCH_NONE, 0x201e, 0x201C } }, //'"\84\93
{ 0, 0 }
};
-
ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
{ VK_NUMPAD0, 0, {'0'} },
{ VK_NUMPAD1, 0, {'1'} },
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Bulgarian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, CAPS, {0x0451, 0x0401} },
- { '1', NOCAPS, {'1', '!' } },
- { '3', NOCAPS, {'3', 0x2116} },
- { '4', NOCAPS, {'4', ';' } },
- { '5', NOCAPS, {'5', '%' } },
- { '7', NOCAPS, {'7', '?' } },
- { '8', NOCAPS, {'8', '*' } },
- { '9', NOCAPS, {'9', '(' } },
- { '0', NOCAPS, {'0', ')' } },
- { VK_OEM_PLUS, NOCAPS, {'=', '+' } },
- { 'Q', CAPS, {0x0439, 0x0419} },
- { 'W', CAPS, {0x0446, 0x0426} },
- { 'E', CAPS, {0x0443, 0x0423} },
- { 'R', CAPS, {0x043a, 0x041a} },
- { 'T', CAPS, {0x0435, 0x0415} },
- { 'Y', CAPS, {0x043d, 0x041d} },
- { 'U', CAPS, {0x0433, 0x0413} },
- { 'I', CAPS, {0x0448, 0x0428} },
- { 'O', CAPS, {0x045e, 0x040e} },
- { 'P', CAPS, {0x0437, 0x0417} },
- { VK_OEM_4, CAPS, {0x0445, 0x0425} },
- { VK_OEM_6, CAPS, {'\'', '\'' } },
- { 'A', CAPS, {0x0444, 0x0424} },
- { 'S', CAPS, {0x044b, 0x042b} },
- { 'D', CAPS, {0x0432, 0x0412} },
- { 'F', CAPS, {0x0430, 0x0410} },
- { 'G', CAPS, {0x043f, 0x041f} },
- { 'H', CAPS, {0x0440, 0x0420} },
- { 'J', CAPS, {0x043e, 0x041e} },
- { 'K', CAPS, {0x043b, 0x041b} },
- { 'L', CAPS, {0x0434, 0x0414} },
- { VK_OEM_1, CAPS, {0x0436, 0x0416} },
- { VK_OEM_7, CAPS, {0x044d, 0x042d} },
- { 'Z', CAPS, {0x044f, 0x042f} },
- { 'X', CAPS, {0x0447, 0x0427} },
- { 'C', CAPS, {0x0441, 0x0421} },
- { 'V', CAPS, {0x043c, 0x041c} },
- { 'B', CAPS, {0x0456, 0x0406} },
- { 'N', CAPS, {0x0442, 0x0422} },
- { 'M', CAPS, {0x044c, 0x042c} },
- { VK_OEM_COMMA, CAPS, {0x0431, 0x0411} },
- { VK_OEM_PERIOD,CAPS, {0x044e, 0x042e} },
- { VK_OEM_2, NOCAPS, {'.', ',' } },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, CAPLOK, {0x0451, 0x0401} },
+ { '1', 0, {'1', '!' } },
+ { '3', 0, {'3', 0x2116} },
+ { '4', 0, {'4', ';' } },
+ { '5', 0, {'5', '%' } },
+ { '7', 0, {'7', '?' } },
+ { '8', 0, {'8', '*' } },
+ { '9', 0, {'9', '(' } },
+ { '0', 0, {'0', ')' } },
+ { VK_OEM_PLUS, 0, {'=', '+' } },
+ { 'Q', CAPLOK, {0x0439, 0x0419} },
+ { 'W', CAPLOK, {0x0446, 0x0426} },
+ { 'E', CAPLOK, {0x0443, 0x0423} },
+ { 'R', CAPLOK, {0x043a, 0x041a} },
+ { 'T', CAPLOK, {0x0435, 0x0415} },
+ { 'Y', CAPLOK, {0x043d, 0x041d} },
+ { 'U', CAPLOK, {0x0433, 0x0413} },
+ { 'I', CAPLOK, {0x0448, 0x0428} },
+ { 'O', CAPLOK, {0x045e, 0x040e} },
+ { 'P', CAPLOK, {0x0437, 0x0417} },
+ { VK_OEM_4, CAPLOK, {0x0445, 0x0425} },
+ { VK_OEM_6, CAPLOK, {'\'', '\'' } },
+ { 'A', CAPLOK, {0x0444, 0x0424} },
+ { 'S', CAPLOK, {0x044b, 0x042b} },
+ { 'D', CAPLOK, {0x0432, 0x0412} },
+ { 'F', CAPLOK, {0x0430, 0x0410} },
+ { 'G', CAPLOK, {0x043f, 0x041f} },
+ { 'H', CAPLOK, {0x0440, 0x0420} },
+ { 'J', CAPLOK, {0x043e, 0x041e} },
+ { 'K', CAPLOK, {0x043b, 0x041b} },
+ { 'L', CAPLOK, {0x0434, 0x0414} },
+ { VK_OEM_1, CAPLOK, {0x0436, 0x0416} },
+ { VK_OEM_7, CAPLOK, {0x044d, 0x042d} },
+ { 'Z', CAPLOK, {0x044f, 0x042f} },
+ { 'X', CAPLOK, {0x0447, 0x0427} },
+ { 'C', CAPLOK, {0x0441, 0x0421} },
+ { 'V', CAPLOK, {0x043c, 0x041c} },
+ { 'B', CAPLOK, {0x0456, 0x0406} },
+ { 'N', CAPLOK, {0x0442, 0x0422} },
+ { 'M', CAPLOK, {0x044c, 0x042c} },
+ { VK_OEM_COMMA, CAPLOK, {0x0431, 0x0411} },
+ { VK_OEM_PERIOD,CAPLOK, {0x044e, 0x042e} },
+ { VK_OEM_2, 0, {'.', ',' } },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_5, NOCAPS, {'\\', '/', 0x001c} },
- { VK_OEM_102, NOCAPS, {'\\', '/', 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_OEM_5, 0, {'\\', '/', 0x001c} },
+ { VK_OEM_102, 0, {'\\', '/', 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '2', NOCAPS, {'2', '\"', WCH_NONE, 0x0000} },
- { '6', NOCAPS, {'6', ':', WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x001f} },
+ { '2', 0, {'2', '\"', WCH_NONE, 0x0000} },
+ { '6', 0, {'6', ':', WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {'\'', '\"' } },
- { '7', NOCAPS, {'7', '&' } },
- { '8', NOCAPS, {'8', '*' } },
- { '9', NOCAPS, {'9', '(' } },
- { '0', NOCAPS, {'0', ')' } },
- { '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_4, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { 0xff, NOCAPS, {0x00b4, '`' } },
- { '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_7, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { 0xff, NOCAPS, {'~', '^' } },
- { 'Z', CAPS, {'z', 'Z' } },
- { 'X', CAPS, {'x', 'X' } },
- { '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, {';', ':' } },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_ABNT_C2, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {'\'', '\"' } },
+ { '7', 0, {'7', '&' } },
+ { '8', 0, {'8', '*' } },
+ { '9', 0, {'9', '(' } },
+ { '0', 0, {'0', ')' } },
+ { 'R', CAPLOK, {'r', 'R' } },
+ { 'T', CAPLOK, {'t', 'T' } },
+ { 'Y', CAPLOK, {'y', 'Y' } },
+ { 'U', CAPLOK, {'u', 'U' } },
+ { 'I', CAPLOK, {'i', 'I' } },
+ { 'O', CAPLOK, {'o', 'O' } },
+ { 'P', CAPLOK, {'p', 'P' } },
+ { VK_OEM_4, 0, {WCH_DEAD, WCH_DEAD} },
+ { 0xff, 0, {0x00b4, '`' } },
+ { 'A', CAPLOK, {'a', 'A' } },
+ { 'S', CAPLOK, {'s', 'S' } },
+ { 'D', CAPLOK, {'d', 'D' } },
+ { 'F', CAPLOK, {'f', 'F' } },
+ { 'G', CAPLOK, {'g', 'G' } },
+ { 'H', CAPLOK, {'h', 'H' } },
+ { 'J', CAPLOK, {'j', 'J' } },
+ { 'K', CAPLOK, {'k', 'K' } },
+ { 'L', CAPLOK, {'l', 'L' } },
+ { VK_OEM_7, 0, {WCH_DEAD, WCH_DEAD} },
+ { 0xff, 0, {'~', '^' } },
+ { 'Z', CAPLOK, {'z', 'Z' } },
+ { 'X', CAPLOK, {'x', 'X' } },
+ { 'V', CAPLOK, {'v', 'V' } },
+ { 'B', CAPLOK, {'b', 'B' } },
+ { 'N', CAPLOK, {'n', 'N' } },
+ { 'M', CAPLOK, {'m', 'M' } },
+ { VK_OEM_COMMA, 0, {',', '<' } },
+ { VK_OEM_PERIOD,0, {'.', '>' } },
+ { VK_OEM_2, 0, {';', ':' } },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_ABNT_C2, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { '1', NOCAPS, {'1', '!', 0x00b9} },
- { '3', NOCAPS, {'3', '#', 0x00b3} },
- { '4', NOCAPS, {'4', '$', 0x00a3} },
- { '5', NOCAPS, {'5', '%', 0x00a2} },
- { VK_OEM_PLUS, NOCAPS, {'=', '+', 0x00a7} },
- { 'Q', CAPS, {'q', 'Q', '/' } },
- { 'W', CAPS, {'w', 'W', '?' } },
- { 'E', CAPS, {'e', 'E', 0x00b0} },
- { 'C', CAPS, {'c', 'C', 0x20a2} },
- { VK_ABNT_C1, NOCAPS, {'/', '?', 0x00b0} },
+ { '1', 0, {'1', '!', 0x00b9} },
+ { '3', 0, {'3', '#', 0x00b3} },
+ { '4', 0, {'4', '$', 0x00a3} },
+ { '5', 0, {'5', '%', 0x00a2} },
+ { VK_OEM_PLUS, 0, {'=', '+', 0x00a7} },
+ { 'Q', CAPLOK, {'q', 'Q', '/' } },
+ { 'W', CAPLOK, {'w', 'W', '?' } },
+ { 'E', CAPLOK, {'e', 'E', 0x00b0} },
+ { 'C', CAPLOK, {'c', 'C', 0x20a2} },
+ { VK_ABNT_C1, 0, {'/', '?', 0x00b0} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_6, NOCAPS, {'[', '{', 0x00aa, 0x001b} },
- { VK_OEM_5, NOCAPS, {']', '}', 0x00ba, 0x001c} },
- { VK_OEM_1, CAPS, {0x00e7, 0x00c7, WCH_NONE, 0x001d} },
- { VK_OEM_102, NOCAPS, {'\\', '|', WCH_NONE, 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, 0x0003} },
+ { VK_OEM_6, 0, {'[', '{', 0x00aa, 0x001b} },
+ { VK_OEM_5, 0, {']', '}', 0x00ba, 0x001c} },
+ { VK_OEM_1, CAPLOK, {0x00e7, 0x00c7, WCH_NONE, 0x001d} },
+ { VK_OEM_102, 0, {'\\', '|', WCH_NONE, 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { '2', NOCAPS, {'2', '@', 0x00b2, WCH_NONE, 0x0000 } },
- { '6', NOCAPS, {'6', WCH_DEAD, 0x00ac, WCH_NONE, 0x001e } },
- { 0xff, NOCAPS, {WCH_NONE, 0x00a8, WCH_NONE, WCH_NONE, WCH_NONE} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x001f, 0x001f } },
+ { '2', 0, {'2', '@', 0x00b2, WCH_NONE, 0x0000 } },
+ { '6', 0, {'6', WCH_DEAD, 0x00ac, WCH_NONE, 0x001e } },
+ { 0xff, 0, {WCH_NONE, 0x00a8, WCH_NONE, WCH_NONE, WCH_NONE} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x001f, 0x001f } },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, SHFT_INVALID, SHFT_INVALID, SHFT_INVALID, 3, 4 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
{ '5', 0, {0x1045, '%' } },
{ '7', 0, {0x1047, 0x101b} },
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ VK_OEM_8, 8 },
{ 0, 0 }
};
{ 0, 1, 5, SHFT_INVALID, SHFT_INVALID, SHFT_INVALID, 4, SHFT_INVALID, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal Shifted */
- { VK_DECIMAL, NOCAPS, {'.', '.'} },
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY,NOCAPS, {'*', '*' } },
- { VK_SUBTRACT,NOCAPS, {'-', '-' } },
+ { VK_DECIMAL, 0, {'.', '.'} },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY,0, {'*', '*' } },
+ { VK_SUBTRACT,0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { '2', NOCAPS, {'2', '@', 0x00b2} },
- { 'K', CAPS, {'k', 'K', 0x0138} },
+ { '2', 0, {'2', '@', 0x00b2} },
+ { 'K', CAPLOK, {'k', 'K', 0x0138} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '1', NOCAPS, {'1', '!', 0x00b9, 0x00a1 } },
- { '3', NOCAPS, {'3', '#', 0x00b3, 0x00a3 } },
- { '4', NOCAPS, {'4', '$', 0x00bc, 0x00a4 } },
- { '5', NOCAPS, {'5', '%', 0x00bd, 0x215c } },
- { '6', NOCAPS, {'6', '?', 0x00be, 0x215d } },
- { VK_OEM_MINUS,NOCAPS, {'-', '_', WCH_NONE, 0x00bf } },
- { 'Q', CAPS, {'q', 'Q', WCH_NONE, 0x2126 } },
- { 'W', CAPS, {'w', 'W', 0x0142, 0x0141 } },
- { 'E', CAPS, {'e', 'E', 0x0153, 0x0152 } },
- { 'R', CAPS, {'r', 'R', 0x00b6, 0x00ae } },
- { 'T', CAPS, {'t', 'T', 0x0167, 0x0166 } },
- { 'Y', CAPS, {'y', 'Y', 0x2190, 0x00a5 } },
- { 'U', CAPS, {'u', 'U', 0x2193, 0x2191 } },
- { 'I', CAPS, {'i', 'I', 0x2192, 0x0131 } },
- { 'O', CAPS, {'o', 'O', 0x00f8, 0x00d8 } },
- { 'P', CAPS, {'p', 'P', 0x00fe, 0x00de } },
- { VK_OEM_5, CAPS, {0x00e0, 0x00c0, WCH_NONE, WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE,WCH_NONE, 0x02d8 } },
- { 'A', CAPS, {'a', 'A', 0x00e6, 0x00c6 } },
- { 'S', CAPS, {'s', 'S', 0x00df, 0x00a7 } },
- { 'D', CAPS, {'d', 'D', 0x00f0, 0x00d0 } },
- { 'F', CAPS, {'f', 'F', WCH_NONE, 0x00aa } },
- { 'G', CAPS, {'g', 'G', 0x014b, 0x014a } },
- { 'H', CAPS, {'h', 'H', 0x0127, 0x0126 } },
- { 'J', CAPS, {'j', 'J', 0x0133, 0x0132 } },
- { 'L', CAPS, {'l', 'L', 0x0140, 0x013f } },
- { VK_OEM_3, CAPS, {0x00e8, 0x00c8, WCH_NONE, WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE,WCH_NONE, 0x02c7 } },
- { 'C', CAPS, {'c', 'C', 0x00a2, 0x00a9 } },
- { 'V', CAPS, {'v', 'V', 0x201c, 0x2018 } },
- { 'B', CAPS, {'b', 'B', 0x201d, 0x2019 } },
- { 'N', CAPS, {'n', 'N', 0x0149, 0x266a } },
- { 'M', CAPS, {'m', 'M', 0x00b5, 0x00ba } },
- { VK_OEM_2, CAPS, {0x00e9, 0x00c9, WCH_NONE, WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE,WCH_NONE, 0x02d9 } },
- { VK_OEM_102, CAPS, {0x00f9, 0x00d9, WCH_NONE, 0x00a6 } },
+ { '1', 0, {'1', '!', 0x00b9, 0x00a1 } },
+ { '3', 0, {'3', '#', 0x00b3, 0x00a3 } },
+ { '4', 0, {'4', '$', 0x00bc, 0x00a4 } },
+ { '5', 0, {'5', '%', 0x00bd, 0x215c } },
+ { '6', 0, {'6', '?', 0x00be, 0x215d } },
+ { VK_OEM_MINUS,0, {'-', '_', WCH_NONE, 0x00bf } },
+ { 'Q', CAPLOK, {'q', 'Q', WCH_NONE, 0x2126 } },
+ { 'W', CAPLOK, {'w', 'W', 0x0142, 0x0141 } },
+ { 'E', CAPLOK, {'e', 'E', 0x0153, 0x0152 } },
+ { 'R', CAPLOK, {'r', 'R', 0x00b6, 0x00ae } },
+ { 'T', CAPLOK, {'t', 'T', 0x0167, 0x0166 } },
+ { 'Y', CAPLOK, {'y', 'Y', 0x2190, 0x00a5 } },
+ { 'U', CAPLOK, {'u', 'U', 0x2193, 0x2191 } },
+ { 'I', CAPLOK, {'i', 'I', 0x2192, 0x0131 } },
+ { 'O', CAPLOK, {'o', 'O', 0x00f8, 0x00d8 } },
+ { 'P', CAPLOK, {'p', 'P', 0x00fe, 0x00de } },
+ { VK_OEM_5, CAPLOK, {0x00e0, 0x00c0, WCH_NONE, WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE,WCH_NONE, 0x02d8 } },
+ { 'A', CAPLOK, {'a', 'A', 0x00e6, 0x00c6 } },
+ { 'S', CAPLOK, {'s', 'S', 0x00df, 0x00a7 } },
+ { 'D', CAPLOK, {'d', 'D', 0x00f0, 0x00d0 } },
+ { 'F', CAPLOK, {'f', 'F', WCH_NONE, 0x00aa } },
+ { 'G', CAPLOK, {'g', 'G', 0x014b, 0x014a } },
+ { 'H', CAPLOK, {'h', 'H', 0x0127, 0x0126 } },
+ { 'J', CAPLOK, {'j', 'J', 0x0133, 0x0132 } },
+ { 'L', CAPLOK, {'l', 'L', 0x0140, 0x013f } },
+ { VK_OEM_3, CAPLOK, {0x00e8, 0x00c8, WCH_NONE, WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE,WCH_NONE, 0x02c7 } },
+ { 'C', CAPLOK, {'c', 'C', 0x00a2, 0x00a9 } },
+ { 'V', CAPLOK, {'v', 'V', 0x201c, 0x2018 } },
+ { 'B', CAPLOK, {'b', 'B', 0x201d, 0x2019 } },
+ { 'N', CAPLOK, {'n', 'N', 0x0149, 0x266a } },
+ { 'M', CAPLOK, {'m', 'M', 0x00b5, 0x00ba } },
+ { VK_OEM_2, CAPLOK, {0x00e9, 0x00c9, WCH_NONE, WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE,WCH_NONE, 0x02d9 } },
+ { VK_OEM_102, CAPLOK, {0x00f9, 0x00d9, WCH_NONE, 0x00a6 } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_7, NOCAPS, {'/', '\\', WCH_NONE, 0x00ad, '|' } },
- { '7', NOCAPS, {'7', '&', WCH_NONE, 0x215e, '{' } },
- { '8', NOCAPS, {'8', '*', WCH_NONE, 0x2122, '}' } },
- { '9', NOCAPS, {'9', '(', WCH_NONE, 0x00b1, '[' } },
- { '0', NOCAPS, {'0', ')', WCH_NONE, WCH_NONE,']' } },
- { VK_OEM_PLUS, NOCAPS, {'=', '+', WCH_DEAD, WCH_DEAD,0x00ac } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b8, 0x02db, WCH_NONE} },
- { VK_OEM_4, NOCAPS, {WCH_DEAD, WCH_DEAD, WCH_NONE, WCH_DEAD,WCH_DEAD} },
- { 0xff, NOCAPS, {'^', 0x00a8, WCH_NONE, 0x02da, '`' } },
- { VK_OEM_6, CAPS, {0x00e7, 0x00c7, '~', WCH_DEAD,WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, WCH_NONE, 0x00af, '~' } },
- { VK_OEM_1, NOCAPS, {';', ':', WCH_DEAD, WCH_DEAD,0x00b0 } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b4, 0x02dd, WCH_NONE} },
- { 'Z', CAPS, {'z', 'Z', WCH_NONE, WCH_NONE,0x00ab } },
- { 'X', CAPS, {'x', 'X', WCH_NONE, WCH_NONE,0x00bb } },
- { VK_OEM_COMMA, NOCAPS, {',', '\'', 0x2015, 0x00d7, '<' } },
- { VK_OEM_PERIOD,NOCAPS, {'.', '\"', WCH_DEAD, 0x00f7, '>' } },
- { 0xff, NOCAPS, {WCH_NONE ,WCH_NONE, 0x02d9, WCH_NONE,WCH_NONE} },
+ { VK_OEM_7, 0, {'/', '\\', WCH_NONE, 0x00ad, '|' } },
+ { '7', 0, {'7', '&', WCH_NONE, 0x215e, '{' } },
+ { '8', 0, {'8', '*', WCH_NONE, 0x2122, '}' } },
+ { '9', 0, {'9', '(', WCH_NONE, 0x00b1, '[' } },
+ { '0', 0, {'0', ')', WCH_NONE, WCH_NONE,']' } },
+ { VK_OEM_PLUS, 0, {'=', '+', WCH_DEAD, WCH_DEAD,0x00ac } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b8, 0x02db, WCH_NONE} },
+ { VK_OEM_4, 0, {WCH_DEAD, WCH_DEAD, WCH_NONE, WCH_DEAD,WCH_DEAD} },
+ { 0xff, 0, {'^', 0x00a8, WCH_NONE, 0x02da, '`' } },
+ { VK_OEM_6, CAPLOK, {0x00e7, 0x00c7, '~', WCH_DEAD,WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x00af, '~' } },
+ { VK_OEM_1, 0, {';', ':', WCH_DEAD, WCH_DEAD,0x00b0 } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b4, 0x02dd, WCH_NONE} },
+ { 'Z', CAPLOK, {'z', 'Z', WCH_NONE, WCH_NONE,0x00ab } },
+ { 'X', CAPLOK, {'x', 'X', WCH_NONE, WCH_NONE,0x00bb } },
+ { VK_OEM_COMMA, 0, {',', '\'', 0x2015, 0x00d7, '<' } },
+ { VK_OEM_PERIOD,0, {'.', '\"', WCH_DEAD, 0x00f7, '>' } },
+ { 0xff, 0, {WCH_NONE ,WCH_NONE, 0x02d9, WCH_NONE,WCH_NONE} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { VK_SPACE, NOCAPS, {' ', ' ', ' ', ' ', 0x00a0, ' ' } },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, WCH_NONE, '\n' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, WCH_NONE, 0x0003} },
+ { VK_SPACE, 0, {' ', ' ', ' ', ' ', 0x00a0, ' ' } },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, WCH_NONE, '\n' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, WCH_NONE, 0x0003} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
0,
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { 0xff, NOCAPS, {0x00b8, 0x00a8 } },
- { 'R', CAPS, {'r', 'R' } },
- { 'T', CAPS, {'t', 'T' } },
- { 'Z', CAPS, {'z', 'Z' } },
- { 'U', CAPS, {'u', 'U' } },
- { 'I', CAPS, {'i', 'I' } },
- { 'O', CAPS, {'o', 'O' } },
- { 'P', CAPS, {'p', 'P' } },
- { 'A', CAPS, {'a', 'A' } },
- { 'S', CAPS, {'s', 'S' } },
- { 'D', CAPS, {'d', 'D' } },
- { 'H', CAPS, {'h', 'H' } },
- { 'J', CAPS, {'j', 'J' } },
- { 'Y', CAPS, {'y', 'Y' } },
- { 'X', CAPS, {'x', 'X' } },
- { 'C', CAPS, {'c', 'C' } },
- { VK_OEM_MINUS, NOCAPS, {'-', '_' } },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {WCH_DEAD, WCH_DEAD} },
+ { 0xff, 0, {0x00b8, 0x00a8 } },
+ { 'R', CAPLOK, {'r', 'R' } },
+ { 'T', CAPLOK, {'t', 'T' } },
+ { 'Z', CAPLOK, {'z', 'Z' } },
+ { 'U', CAPLOK, {'u', 'U' } },
+ { 'I', CAPLOK, {'i', 'I' } },
+ { 'O', CAPLOK, {'o', 'O' } },
+ { 'P', CAPLOK, {'p', 'P' } },
+ { 'A', CAPLOK, {'a', 'A' } },
+ { 'S', CAPLOK, {'s', 'S' } },
+ { 'D', CAPLOK, {'d', 'D' } },
+ { 'H', CAPLOK, {'h', 'H' } },
+ { 'J', CAPLOK, {'j', 'J' } },
+ { 'Y', CAPLOK, {'y', 'Y' } },
+ { 'X', CAPLOK, {'x', 'X' } },
+ { 'C', CAPLOK, {'c', 'C' } },
+ { VK_OEM_MINUS, 0, {'-', '_' } },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { '1', NOCAPS, {'1', '!', '~' } },
- { '3', NOCAPS, {'3', '#', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, '^' } },
- { '4', NOCAPS, {'4', '$', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02d8 } },
- { '5', NOCAPS, {'5', '%', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b0 } },
- { '7', NOCAPS, {'7', '/', '`' } },
- { '8', NOCAPS, {'8', '(', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02d9 } },
- { '9', NOCAPS, {'9', ')', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b4 } },
- { '0', NOCAPS, {'0', '=', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02dd } },
- { VK_OEM_PLUS, NOCAPS, {'+', '*', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b8 } },
- { 'Q', CAPS, {'q', 'Q', '\\' } },
- { 'W', CAPS, {'w', 'W', '|' } },
- { 'E', CAPS, {'e', 'E', 0x20ac } },
- { VK_OEM_4, CAPS, {0x0161, 0x0160, 0x00f7 } },
- { 'F', CAPS, {'f', 'F', '[' } },
- { 'G', CAPS, {'g', 'G', ']' } },
- { 'K', CAPS, {'k', 'K', 0x0142 } },
- { 'L', CAPS, {'l', 'L', 0x0141 } },
- { VK_OEM_7, CAPS, {0x0107, 0x0106, 0x00df } },
- { 'V', CAPS, {'v', 'V', '@' } },
- { 'B', CAPS, {'b', 'B', '{' } },
- { 'N', CAPS, {'n', 'N', '}' } },
- { 'M', CAPS, {'m', 'M', 0x00a7 } },
- { VK_OEM_COMMA, NOCAPS, {',', ';', '<' } },
- { VK_OEM_PERIOD,NOCAPS, {'.', ':', '>' } },
+ { '1', 0, {'1', '!', '~' } },
+ { '3', 0, {'3', '#', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, '^' } },
+ { '4', 0, {'4', '$', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02d8 } },
+ { '5', 0, {'5', '%', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b0 } },
+ { '7', 0, {'7', '/', '`' } },
+ { '8', 0, {'8', '(', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02d9 } },
+ { '9', 0, {'9', ')', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b4 } },
+ { '0', 0, {'0', '=', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02dd } },
+ { VK_OEM_PLUS, 0, {'+', '*', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b8 } },
+ { 'Q', CAPLOK, {'q', 'Q', '\\' } },
+ { 'W', CAPLOK, {'w', 'W', '|' } },
+ { 'E', CAPLOK, {'e', 'E', 0x20ac } },
+ { VK_OEM_4, CAPLOK, {0x0161, 0x0160, 0x00f7 } },
+ { 'F', CAPLOK, {'f', 'F', '[' } },
+ { 'G', CAPLOK, {'g', 'G', ']' } },
+ { 'K', CAPLOK, {'k', 'K', 0x0142 } },
+ { 'L', CAPLOK, {'l', 'L', 0x0141 } },
+ { VK_OEM_7, CAPLOK, {0x0107, 0x0106, 0x00df } },
+ { 'V', CAPLOK, {'v', 'V', '@' } },
+ { 'B', CAPLOK, {'b', 'B', '{' } },
+ { 'N', CAPLOK, {'n', 'N', '}' } },
+ { 'M', CAPLOK, {'m', 'M', 0x00a7 } },
+ { VK_OEM_COMMA, 0, {',', ';', '<' } },
+ { VK_OEM_PERIOD,0, {'.', ':', '>' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_6, CAPS, {0x0111, 0x0110, 0x00d7, 0x001b} },
- { VK_OEM_5, CAPS, {0x017e, 0x017d, 0x00a4, 0x001c} },
- { VK_OEM_1, CAPS, {0x010d, 0x010c, WCH_NONE, 0x001d} },
- { VK_OEM_102, NOCAPS, {'<', '>', WCH_NONE, 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, 0x0003} },
+ { VK_OEM_6, CAPLOK, {0x0111, 0x0110, 0x00d7, 0x001b} },
+ { VK_OEM_5, CAPLOK, {0x017e, 0x017d, 0x00a4, 0x001c} },
+ { VK_OEM_1, CAPLOK, {0x010d, 0x010c, WCH_NONE, 0x001d} },
+ { VK_OEM_102, 0, {'<', '>', WCH_NONE, 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { '2', NOCAPS, {'2', '\"', WCH_DEAD, WCH_NONE, 0x0000 } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02c7, WCH_NONE, WCH_NONE} },
- { '6', NOCAPS, {'6', '&', WCH_DEAD, WCH_NONE, 0x001e } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02db, WCH_NONE, WCH_NONE} },
- { VK_OEM_2, NOCAPS, {'\'', '?', WCH_DEAD, WCH_NONE, 0x001f } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00a8, WCH_NONE, WCH_NONE} },
+ { '2', 0, {'2', '\"', WCH_DEAD, WCH_NONE, 0x0000 } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02c7, WCH_NONE, WCH_NONE} },
+ { '6', 0, {'6', '&', WCH_DEAD, WCH_NONE, 0x001e } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02db, WCH_NONE, WCH_NONE} },
+ { VK_OEM_2, 0, {'\'', '?', WCH_DEAD, WCH_NONE, 0x001f } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00a8, WCH_NONE, WCH_NONE} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Croatian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
/* Modifier bit order: NONE, SHIFT, CTRL, SHIFT-CTRL, ALT (not used), SHIFT-ALT (not used), CTRL-ALT, SHIFT-CTRL-ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Keys that do not have shift states */
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_ESCAPE, NOCAPS, {'\x1b', '\x1b'} },
- { VK_SPACE, NOCAPS, {' ', ' ' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_ESCAPE, 0, {0x1b, 0x1b} },
+ { VK_SPACE, 0, {' ', ' ' } },
{ 0, 0 }
};
-
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* normal - shift - ctrl */
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_102, NOCAPS, {'\\', '|', 0x1c /*FS*/} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
+ { VK_OEM_102, 0, {'\\', '|', 0x1c /*FS*/} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, shifted, control, Alt+Gr */
/* The numbers */
- { '1', NOCAPS, { '+', '1', WCH_NONE, '~' } },
- { '2', NOCAPS, { 0x011b, '2', 0, WCH_DEAD } }, // e with caron
- { VK_EMPTY, NOCAPS, { WCH_NONE, WCH_NONE, WCH_NONE, 0x02c7 } }, // 2 dead letter
- { '3', NOCAPS, { 0x0161, '3', WCH_NONE, WCH_DEAD } }, // s with caron
- { VK_EMPTY, NOCAPS, { WCH_NONE, WCH_NONE, WCH_NONE, 0x005e } }, // 3 dead letter
- { '4', NOCAPS, { 0x010d, '4', WCH_NONE, WCH_DEAD } }, // c with caron
- { VK_EMPTY, NOCAPS, { WCH_NONE, WCH_NONE, WCH_NONE, 0x02d8 } }, // 4 dead letter
- { '5', NOCAPS, { 0x0159, '5', WCH_NONE, WCH_DEAD } }, // r with caron
- { VK_EMPTY, NOCAPS, { WCH_NONE, WCH_NONE, WCH_NONE, 0x00b0 } }, // 5 dead letter
- { '6', NOCAPS, { 0x017e, '6', 0x1e, WCH_DEAD } }, // z with caron
- { VK_EMPTY, NOCAPS, { WCH_NONE, WCH_NONE, WCH_NONE, 0x02db } }, // 6 dead letter
- { '7', NOCAPS, { 0x00fd, '7', WCH_NONE, WCH_DEAD } }, // y with acute
- { VK_EMPTY, NOCAPS, { WCH_NONE, WCH_NONE, WCH_NONE, '`' } }, // 7 dead letter
- { '8', NOCAPS, { 0x00e1, '8', WCH_NONE, WCH_DEAD } }, // a with acute
- { VK_EMPTY, NOCAPS, { WCH_NONE, WCH_NONE, WCH_NONE, 0x00b7 } }, // 8 dead letter
- { '9', NOCAPS, { 0x00ed, '9', WCH_NONE, WCH_DEAD } }, // i with acute
- { VK_EMPTY, NOCAPS, { WCH_NONE, WCH_NONE, WCH_NONE, 0x00b4 } }, // 9 dead letter
- { '0', NOCAPS, { 0x00e9, '0', WCH_NONE, WCH_DEAD } }, // e with acute
- { VK_EMPTY, NOCAPS, { WCH_NONE, WCH_NONE, WCH_NONE, 0x02dd } }, // 0 dead letter
+ { '1', 0, { '+', '1', WCH_NONE, '~' } },
+ { '2', 0, { 0x011b, '2', 0, WCH_DEAD } }, // e with caron
+ { VK_EMPTY, 0, { WCH_NONE, WCH_NONE, WCH_NONE, 0x02c7 } }, // 2 dead letter
+ { '3', 0, { 0x0161, '3', WCH_NONE, WCH_DEAD } }, // s with caron
+ { VK_EMPTY, 0, { WCH_NONE, WCH_NONE, WCH_NONE, 0x005e } }, // 3 dead letter
+ { '4', 0, { 0x010d, '4', WCH_NONE, WCH_DEAD } }, // c with caron
+ { VK_EMPTY, 0, { WCH_NONE, WCH_NONE, WCH_NONE, 0x02d8 } }, // 4 dead letter
+ { '5', 0, { 0x0159, '5', WCH_NONE, WCH_DEAD } }, // r with caron
+ { VK_EMPTY, 0, { WCH_NONE, WCH_NONE, WCH_NONE, 0x00b0 } }, // 5 dead letter
+ { '6', 0, { 0x017e, '6', 0x1e, WCH_DEAD } }, // z with caron
+ { VK_EMPTY, 0, { WCH_NONE, WCH_NONE, WCH_NONE, 0x02db } }, // 6 dead letter
+ { '7', 0, { 0x00fd, '7', WCH_NONE, WCH_DEAD } }, // y with acute
+ { VK_EMPTY, 0, { WCH_NONE, WCH_NONE, WCH_NONE, '`' } }, // 7 dead letter
+ { '8', 0, { 0x00e1, '8', WCH_NONE, WCH_DEAD } }, // a with acute
+ { VK_EMPTY, 0, { WCH_NONE, WCH_NONE, WCH_NONE, 0x00b7 } }, // 8 dead letter
+ { '9', 0, { 0x00ed, '9', WCH_NONE, WCH_DEAD } }, // i with acute
+ { VK_EMPTY, 0, { WCH_NONE, WCH_NONE, WCH_NONE, 0x00b4 } }, // 9 dead letter
+ { '0', 0, { 0x00e9, '0', WCH_NONE, WCH_DEAD } }, // e with acute
+ { VK_EMPTY, 0, { WCH_NONE, WCH_NONE, WCH_NONE, 0x02dd } }, // 0 dead letter
/* The misc */
- { VK_OEM_MINUS, NOCAPS, { '=', '%', WCH_NONE, WCH_DEAD } }, // diaeresis
- { VK_EMPTY, NOCAPS, { WCH_NONE, WCH_NONE, WCH_NONE, 0x00a8 } }, // VK_OEM_MINUS dead letter
- { VK_OEM_PLUS, NOCAPS, { WCH_DEAD, WCH_DEAD, WCH_NONE, 0x00b8 } }, // dead letters - acute, caron
- { VK_EMPTY, NOCAPS, { 0x00b4, 0x02c7, WCH_NONE, WCH_NONE } }, // VK_OEM_PLUS dead letter
- { VK_OEM_1, NOCAPS, { 0x016f, '\"', WCH_NONE, '$' } }, // u with ring
- { VK_OEM_7, NOCAPS, { '§', '!', WCH_NONE, 0x00df } }, // section sign
- { VK_OEM_4, NOCAPS, { 0x00fa, '/', WCH_NONE, 0x00f7 } }, // u with acute
- { VK_OEM_5, NOCAPS, { WCH_DEAD, 0x2018, WCH_NONE, 0x00a4 } }, // diaeresis, left single quotation mark
- { VK_EMPTY, NOCAPS, { 0x00a8, WCH_NONE, WCH_NONE, WCH_NONE } }, // VK_OEM_5 dead letter
- { VK_OEM_6, NOCAPS, { ')', '(', WCH_NONE, 0x00d7 } },
- { VK_OEM_3, NOCAPS, { ';', WCH_DEAD, WCH_NONE, WCH_NONE } }, // diacritic ring
- { VK_EMPTY, NOCAPS, { WCH_NONE, 0x00b0, WCH_NONE, WCH_NONE } }, // VK_OEM_3 dead letter
- { VK_OEM_COMMA, NOCAPS, { ',', '?', WCH_NONE, '<' } },
- { VK_OEM_PERIOD, NOCAPS, { '.', ':', WCH_NONE, '>' } },
- { VK_OEM_2, NOCAPS, { '-', '_', WCH_NONE, '*' } },
+ { VK_OEM_MINUS, 0, { '=', '%', WCH_NONE, WCH_DEAD } }, // diaeresis
+ { VK_EMPTY, 0, { WCH_NONE, WCH_NONE, WCH_NONE, 0x00a8 } }, // VK_OEM_MINUS dead letter
+ { VK_OEM_PLUS, 0, { WCH_DEAD, WCH_DEAD, WCH_NONE, 0x00b8 } }, // dead letters - acute, caron
+ { VK_EMPTY, 0, { 0x00b4, 0x02c7, WCH_NONE, WCH_NONE } }, // VK_OEM_PLUS dead letter
+ { VK_OEM_1, 0, { 0x016f, '\"', WCH_NONE, '$' } }, // u with ring
+ { VK_OEM_7, 0, { '§', '!', WCH_NONE, 0x00df } }, // section sign
+ { VK_OEM_4, 0, { 0x00fa, '/', WCH_NONE, 0x00f7 } }, // u with acute
+ { VK_OEM_5, 0, { WCH_DEAD, 0x2018, WCH_NONE, 0x00a4 } }, // diaeresis, left single quotation mark
+ { VK_EMPTY, 0, { 0x00a8, WCH_NONE, WCH_NONE, WCH_NONE } }, // VK_OEM_5 dead letter
+ { VK_OEM_6, 0, { ')', '(', WCH_NONE, 0x00d7 } },
+ { VK_OEM_3, 0, { ';', WCH_DEAD, WCH_NONE, WCH_NONE } }, // diacritic ring
+ { VK_EMPTY, 0, { WCH_NONE, 0x00b0, WCH_NONE, WCH_NONE } }, // VK_OEM_3 dead letter
+ { VK_OEM_COMMA, 0, { ',', '?', WCH_NONE, '<' } },
+ { VK_OEM_PERIOD, 0, { '.', ':', WCH_NONE, '>' } },
+ { VK_OEM_2, 0, { '-', '_', WCH_NONE, '*' } },
/* The alphabet */
- { 'A', CAPS, {'a', 'A', 0x01, WCH_NONE } },
- { 'B', CAPS, {'b', 'B', 0x02, '{' } },
- { 'C', CAPS, {'c', 'C', 0x03, '&' } },
- { 'D', CAPS, {'d', 'D', 0x04, 0x0110 } },
- { 'E', CAPS, {'e', 'E', 0x05, 0x20AC } },
- { 'F', CAPS, {'f', 'F', 0x06, '[' } },
- { 'G', CAPS, {'g', 'G', 0x07, ']' } },
- { 'H', CAPS, {'h', 'H', 0x08, WCH_NONE } },
- { 'I', CAPS, {'i', 'I', 0x09, WCH_NONE } },
- { 'J', CAPS, {'j', 'J', 0x0a, WCH_NONE } },
- { 'K', CAPS, {'k', 'K', 0x0b, 0x0142 } },
- { 'L', CAPS, {'l', 'L', 0x0c, 0x0141 } },
- { 'M', CAPS, {'m', 'M', 0x0d, WCH_NONE } },
- { 'N', CAPS, {'n', 'N', 0x0e, '}' } },
- { 'O', CAPS, {'o', 'O', 0x0f, WCH_NONE } },
- { 'P', CAPS, {'p', 'P', 0x10, WCH_NONE } },
- { 'Q', CAPS, {'q', 'Q', 0x11, '\\' } },
- { 'R', CAPS, {'r', 'R', 0x12, WCH_NONE } },
- { 'S', CAPS, {'s', 'S', 0x13, WCH_NONE } },
- { 'T', CAPS, {'t', 'T', 0x14, WCH_NONE } },
- { 'U', CAPS, {'u', 'U', 0x15, WCH_NONE } },
- { 'V', CAPS, {'v', 'V', 0x16, '@' } },
- { 'W', CAPS, {'w', 'W', 0x17, '|' } },
- { 'X', CAPS, {'x', 'X', 0x18, '#' } },
- { 'Y', CAPS, {'y', 'Y', 0x19, WCH_NONE } },
- { 'Z', CAPS, {'z', 'Z', 0x1a, WCH_NONE } },
+ { 'A', CAPLOK, {'a', 'A', 0x01, WCH_NONE } },
+ { 'B', CAPLOK, {'b', 'B', 0x02, '{' } },
+ { 'C', CAPLOK, {'c', 'C', 0x03, '&' } },
+ { 'D', CAPLOK, {'d', 'D', 0x04, 0x0110 } },
+ { 'E', CAPLOK, {'e', 'E', 0x05, 0x20AC } },
+ { 'F', CAPLOK, {'f', 'F', 0x06, '[' } },
+ { 'G', CAPLOK, {'g', 'G', 0x07, ']' } },
+ { 'H', CAPLOK, {'h', 'H', 0x08, WCH_NONE } },
+ { 'I', CAPLOK, {'i', 'I', 0x09, WCH_NONE } },
+ { 'J', CAPLOK, {'j', 'J', 0x0a, WCH_NONE } },
+ { 'K', CAPLOK, {'k', 'K', 0x0b, 0x0142 } },
+ { 'L', CAPLOK, {'l', 'L', 0x0c, 0x0141 } },
+ { 'M', CAPLOK, {'m', 'M', 0x0d, WCH_NONE } },
+ { 'N', CAPLOK, {'n', 'N', 0x0e, '}' } },
+ { 'O', CAPLOK, {'o', 'O', 0x0f, WCH_NONE } },
+ { 'P', CAPLOK, {'p', 'P', 0x10, WCH_NONE } },
+ { 'Q', CAPLOK, {'q', 'Q', 0x11, '\\' } },
+ { 'R', CAPLOK, {'r', 'R', 0x12, WCH_NONE } },
+ { 'S', CAPLOK, {'s', 'S', 0x13, WCH_NONE } },
+ { 'T', CAPLOK, {'t', 'T', 0x14, WCH_NONE } },
+ { 'U', CAPLOK, {'u', 'U', 0x15, WCH_NONE } },
+ { 'V', CAPLOK, {'v', 'V', 0x16, '@' } },
+ { 'W', CAPLOK, {'w', 'W', 0x17, '|' } },
+ { 'X', CAPLOK, {'x', 'X', 0x18, '#' } },
+ { 'Y', CAPLOK, {'y', 'Y', 0x19, WCH_NONE } },
+ { 'Z', CAPLOK, {'z', 'Z', 0x1a, WCH_NONE } },
{ 0, 0 }
};
-
ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
{ VK_NUMPAD0, 0, {'0'} },
{ VK_NUMPAD1, 0, {'1'} },
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
-
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Czech keyboard doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
/* Modifier bit order: NONE, SHIFT, CTRL, SHIFT-CTRL, ALT (not used), SHIFT-ALT (not used), CTRL-ALT, SHIFT-CTRL-ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Keys that do not have shift states */
- { VK_TAB, NOCAPS, {'\t','\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_OEM_2 ,NOCAPS, {'-', '_'} },
- { VK_ESCAPE, NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE, NOCAPS, {' ', ' '} },
+ { VK_TAB, 0, {'\t','\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_OEM_2 ,0, {'-', '_'} },
+ { VK_ESCAPE, 0, {0x1b,0x1b} },
+ { VK_SPACE, 0, {' ', ' '} },
{ 0, 0 }
};
-
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* normal - shift - 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} },
+ { 'A', CAPLOK, {'a', 'A', 0x01} },
+ { 'B', CAPLOK, {'b', 'B', 0x02} },
+ { 'C', CAPLOK, {'c', 'C', 0x03} },
+ { 'D', CAPLOK, {'d', 'D', 0x04} },
+ { 'F', CAPLOK, {'f', 'F', 0x06} },
+ { 'G', CAPLOK, {'g', 'G', 0x07} },
+ { 'H', CAPLOK, {'h', 'H', 0x08} },
+ { 'I', CAPLOK, {'i', 'I', 0x09} },
+ { 'J', CAPLOK, {'j', 'J', 0x0a} },
+ { 'K', CAPLOK, {'k', 'K', 0x0b} },
+ { 'L', CAPLOK, {'l', 'L', 0x0c} },
+ { 'M', CAPLOK, {'m', 'M', 0x0d} },
+ { 'N', CAPLOK, {'n', 'N', 0x0e} },
+ { 'O', CAPLOK, {'o', 'O', 0x0f} },
+ { 'P', CAPLOK, {'p', 'P', 0x10} },
+ { 'Q', CAPLOK, {'q', 'Q', 0x11} },
+ { 'R', CAPLOK, {'r', 'R', 0x12} },
+ { 'S', CAPLOK, {'s', 'S', 0x13} },
+ { 'T', CAPLOK, {'t', 'T', 0x14} },
+ { 'U', CAPLOK, {'u', 'U', 0x15} },
+ { 'V', CAPLOK, {'v', 'V', 0x16} },
+ { 'W', CAPLOK, {'w', 'W', 0x17} },
+ { 'X', CAPLOK, {'x', 'X', 0x18} },
+ { 'Y', CAPLOK, {'y', 'Y', 0x19} },
+ { 'Z', CAPLOK, {'z', 'Z', 0x1a} },
/* Legacy (telnet-style) ascii escapes */
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, shifted, control, Alt+Gr */
- { '1', NOCAPS, {'+', '1', WCH_NONE, '!' } },
- { '2', NOCAPS, {0x011b, '2', 0, '@' } }, // e with caron
- { '3', NOCAPS, {0x0161, '3', WCH_NONE, '#' } }, // s with caron
- { '4', NOCAPS, {0x010d, '4', WCH_NONE, '$' } }, // c with caron
- { '5', NOCAPS, {0x0159, '5', WCH_NONE, '%' } }, // r with caron
- { '6', NOCAPS, {0x017e, '6', 0x1e, '^' } }, // z with caron
- { '7', NOCAPS, {0x00fd, '7', WCH_NONE, '&' } }, // y with acute
- { '8', NOCAPS, {0x00e1, '8', WCH_NONE, '*' } }, // a with acute
- { '9', NOCAPS, {0x00ed, '9', WCH_NONE, '(' } }, // i with acute
- { '0', NOCAPS, {0x00e9, '0', WCH_NONE, ')' } }, // e with acute
- { VK_OEM_PLUS, NOCAPS, {WCH_DEAD, WCH_DEAD, WCH_NONE, '=' } }, // dead letters - acute, caron
+ { '1', 0, {'+', '1', WCH_NONE, '!' } },
+ { '2', 0, {0x011b, '2', 0, '@' } }, // e with caron
+ { '3', 0, {0x0161, '3', WCH_NONE, '#' } }, // s with caron
+ { '4', 0, {0x010d, '4', WCH_NONE, '$' } }, // c with caron
+ { '5', 0, {0x0159, '5', WCH_NONE, '%' } }, // r with caron
+ { '6', 0, {0x017e, '6', 0x1e, '^' } }, // z with caron
+ { '7', 0, {0x00fd, '7', WCH_NONE, '&' } }, // y with acute
+ { '8', 0, {0x00e1, '8', WCH_NONE, '*' } }, // a with acute
+ { '9', 0, {0x00ed, '9', WCH_NONE, '(' } }, // i with acute
+ { '0', 0, {0x00e9, '0', WCH_NONE, ')' } }, // e with acute
+ { VK_OEM_PLUS, 0, {WCH_DEAD, WCH_DEAD, WCH_NONE, '=' } }, // dead letters - acute, caron
{ VK_EMPTY, 0, {0x00b4, 0x02c7, WCH_NONE, WCH_NONE } }, // VK_OEM_PLUS death
- { VK_OEM_MINUS, NOCAPS, {'=', '%', 0x1f, '-' } },
- { VK_OEM_1, NOCAPS, {0x016f, '\"', WCH_NONE, ';' } }, // u with ring
- { VK_OEM_7, NOCAPS, {0x00a7, '!', WCH_NONE, 0x00a4 } }, // section sign
- { VK_OEM_4, NOCAPS, {0x00fa, '/', WCH_NONE, '[' } }, // u with acute
- { VK_OEM_5, NOCAPS, {WCH_DEAD, 0x2018, WCH_NONE, '\\' } }, // diaeresis, left single quotation mark
+ { VK_OEM_MINUS, 0, {'=', '%', 0x1f, '-' } },
+ { VK_OEM_1, 0, {0x016f, '\"', WCH_NONE, ';' } }, // u with ring
+ { VK_OEM_7, 0, {0x00a7, '!', WCH_NONE, 0x00a4 } }, // section sign
+ { VK_OEM_4, 0, {0x00fa, '/', WCH_NONE, '[' } }, // u with acute
+ { VK_OEM_5, 0, {WCH_DEAD, 0x2018, WCH_NONE, '\\' } }, // diaeresis, left single quotation mark
{ VK_EMPTY, 0, {0x00a8, WCH_NONE, WCH_NONE, WCH_NONE } }, // VK_OEM_5 death
- { VK_OEM_6, NOCAPS, {')', '(', WCH_NONE, ']' } },
- { VK_OEM_3, NOCAPS, {';', WCH_DEAD, WCH_NONE, '`' } }, // ring
+ { VK_OEM_6, 0, {')', '(', WCH_NONE, ']' } },
+ { VK_OEM_3, 0, {';', WCH_DEAD, WCH_NONE, '`' } }, // ring
{ VK_EMPTY, 0, {WCH_NONE, 0x00b0, WCH_NONE, WCH_NONE } }, // VK_OEM_3 death
- { VK_OEM_COMMA, NOCAPS, {',', '?', WCH_NONE, '<' } },
- { VK_OEM_PERIOD, NOCAPS, {'.', ':', WCH_NONE, '>' } },
- { 'E', CAPS, {'e', 'E', 0x05, 0x20AC } }, // symbol for euro (currency)
+ { VK_OEM_COMMA, 0, {',', '?', WCH_NONE, '<' } },
+ { VK_OEM_PERIOD, 0, {'.', ':', WCH_NONE, '>' } },
+ { 'E', CAPLOK, {'e', 'E', 0x05, 0x20AC } }, // symbol for euro (currency)
{ 0, 0 }
};
-
ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
{ VK_DECIMAL, 0, {','} },
{ VK_NUMPAD0, 0, {'0'} },
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
-
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Czech keyboard doesn't have any */
0,
* Copyright (C) 2004 ReactOS Development Team
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, CTRL + MENU */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
/* The numbers */
- { VK_OEM_5, NOCAPS, {0xbd, 0xa7} },
- { '1', NOCAPS, {'1', '!'} },
+ { VK_OEM_5, 0, {0xbd, 0xa7} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { VK_OEM_PLUS, NOCAPS, {'+', '?'} },
- { VK_OEM_6, CAPS, {0xe5, 0xc5} }, /* Å */
+ { VK_OEM_PLUS, 0, {'+', '?'} },
+ { VK_OEM_6, CAPLOK, {0xe5, 0xc5} }, /* Å */
/* Specials */
- { VK_OEM_7, CAPS, {0xf8, 0xd8} }, /* Ø */
- { VK_OEM_3, CAPS, {0xe6, 0xc6} }, /* Æ */
-
- { VK_OEM_COMMA, CAPS, {',', ';'} },
- { VK_OEM_PERIOD, CAPS, {'.', ':'} },
- { VK_OEM_2, NOCAPS, {'\'', '*'} },
-
- { VK_DECIMAL, NOCAPS, {',', ','} },
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_7, CAPLOK, {0xf8, 0xd8} }, /* Ø */
+ { VK_OEM_3, CAPLOK, {0xe6, 0xc6} }, /* Æ */
+
+ { VK_OEM_COMMA, CAPLOK, {',', ';'} },
+ { VK_OEM_PERIOD, CAPLOK, {'.', ':'} },
+ { VK_OEM_2, 0, {'\'', '*'} },
+
+ { VK_DECIMAL, 0, {',', ','} },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
/* 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} },
+ { 'A', CAPLOK, {'a', 'A', 0x01} },
+ { 'B', CAPLOK, {'b', 'B', 0x02} },
+ { 'C', CAPLOK, {'c', 'C', 0x03} },
+ { 'D', CAPLOK, {'d', 'D', 0x04} },
+ { 'F', CAPLOK, {'f', 'F', 0x06} },
+ { 'G', CAPLOK, {'g', 'G', 0x07} },
+ { 'H', CAPLOK, {'h', 'H', 0x08} },
+ { 'I', CAPLOK, {'i', 'I', 0x09} },
+ { 'J', CAPLOK, {'j', 'J', 0x0a} },
+ { 'K', CAPLOK, {'k', 'K', 0x0b} },
+ { 'L', CAPLOK, {'l', 'L', 0x0c} },
+ { 'M', CAPLOK, {'m', 'M', 0x0d} },
+ { 'N', CAPLOK, {'n', 'N', 0x0e} },
+ { 'O', CAPLOK, {'o', 'O', 0x0f} },
+ { 'P', CAPLOK, {'p', 'P', 0x10} },
+ { 'Q', CAPLOK, {'q', 'Q', 0x11} },
+ { 'R', CAPLOK, {'r', 'R', 0x12} },
+ { 'S', CAPLOK, {'s', 'S', 0x13} },
+ { 'T', CAPLOK, {'t', 'T', 0x14} },
+ { 'U', CAPLOK, {'u', 'U', 0x15} },
+ { 'V', CAPLOK, {'v', 'V', 0x16} },
+ { 'W', CAPLOK, {'w', 'W', 0x17} },
+ { 'X', CAPLOK, {'x', 'X', 0x18} },
+ { 'Y', CAPLOK, {'y', 'Y', 0x19} },
+ { 'Z', CAPLOK, {'z', 'Z', 0x1a} },
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_MINUS, NOCAPS, {'-', '_', 0x1f /* US */} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
+ { VK_OEM_MINUS, 0, {'-', '_', 0x1f /* US */} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, 0x1b} },
- { VK_SPACE, NOCAPS, {' ', ' ', ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, 0x03} },
+ { VK_BACK, 0, {'\b', '\b', 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, 0x1b} },
+ { VK_SPACE, 0, {' ', ' ', ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, 0x03} },
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt */
/* Legacy Ascii generators */
- { '2', NOCAPS, {'2', '\"', WCH_NONE, '@'} },
- { '3', NOCAPS, {'3', '#', WCH_NONE, 0x00a3} },
- { '4', NOCAPS, {'4', 0xa4, WCH_NONE, '$'} },
- { '5', NOCAPS, {'5', '%', WCH_NONE, 0x20ac} },
- { '7', NOCAPS, {'7', '/', WCH_NONE, '{'} },
- { '8', NOCAPS, {'8', '(', WCH_NONE, '['} },
- { '9', NOCAPS, {'9', ')', WCH_NONE, ']'} },
- { '0', NOCAPS, {'0', '=', WCH_NONE, '}'} },
- { VK_OEM_4, NOCAPS, {WCH_DEAD, WCH_DEAD, WCH_DEAD, '|'} },
- { VK_EMPTY , NOCAPS, {0xb4, '`', '|', WCH_NONE} },
-
- { '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', 0x0d, 0x00b5} },
- { VK_OEM_102, NOCAPS, {'<', '>', 0x001c, '\\'} },
+ { '2', 0, {'2', '\"', WCH_NONE, '@'} },
+ { '3', 0, {'3', '#', WCH_NONE, 0x00a3} },
+ { '4', 0, {'4', 0xa4, WCH_NONE, '$'} },
+ { '5', 0, {'5', '%', WCH_NONE, 0x20ac} },
+ { '7', 0, {'7', '/', WCH_NONE, '{'} },
+ { '8', 0, {'8', '(', WCH_NONE, '['} },
+ { '9', 0, {'9', ')', WCH_NONE, ']'} },
+ { '0', 0, {'0', '=', WCH_NONE, '}'} },
+ { VK_OEM_4, 0, {WCH_DEAD, WCH_DEAD, WCH_DEAD, '|'} },
+ { VK_EMPTY , 0, {0xb4, '`', '|', WCH_NONE} },
+
+ { 'E', CAPLOK, {'e', 'E', 0x05, 0x20ac} },
+ { VK_OEM_1, 0, {WCH_DEAD, WCH_DEAD, WCH_NONE, WCH_DEAD} },
+ { VK_EMPTY , 0, {0xa8, '^', WCH_NONE, '~'} },
+
+ { 'M', CAPLOK, {'m', 'M', 0x0d, 0x00b5} },
+ { VK_OEM_102, 0, {'<', '>', 0x001c, '\\'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt, C-S-x */
- { '6', NOCAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x1e /* RS */} },
+ { '6', 0, {'6', '&', WCH_NONE, WCH_NONE, 0x1e /* RS */} },
{ 0, 0 }
};
{ 0x37, L"NUM * (Numerisk del)" },
{ 0x38, L"ALT" },
{ 0x39, L"MELLEMRUM" },
- { 0x3a, L"CAPS LOCK" },
+ { 0x3a, L"CAPLOK LOCK" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Danish doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
+
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
+ /* The alphabet */
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'E', CAPLOK, {'e', 'E'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { '3', NOCAPS, {'3', '#'} },
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '3', 0, {'3', '#'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
/* Ctrl-6 generates RS */
- { '7', NOCAPS, {'7', '&'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
+ { '7', 0, {'7', '&'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
/* Specials */
/* Ctrl-_ generates US */
- { VK_OEM_7 ,NOCAPS, {'\'','\"'} },
- { VK_OEM_COMMA ,NOCAPS, {',', '<'} },
- { VK_OEM_PERIOD ,NOCAPS, {'.', '>'} },
- { VK_OEM_2 ,NOCAPS, {'/', '?'} },
- { VK_OEM_PLUS ,NOCAPS, {'=', '+'} },
- { VK_OEM_1 ,NOCAPS, {';', ':'} },
- { VK_OEM_3 ,NOCAPS, {'`', '~'} },
+ { VK_OEM_7 ,0, {'\'','\"'} },
+ { VK_OEM_COMMA ,0, {',', '<'} },
+ { VK_OEM_PERIOD ,0, {'.', '>'} },
+ { VK_OEM_2 ,0, {'/', '?'} },
+ { VK_OEM_PLUS ,0, {'=', '+'} },
+ { VK_OEM_1 ,0, {';', ':'} },
+ { VK_OEM_3 ,0, {'`', '~'} },
/* Keys that do not have shift states */
- { VK_TAB ,NOCAPS, {'\t','\t'} },
- { VK_ADD ,NOCAPS, {'+', '+'} },
- { VK_SUBTRACT,NOCAPS, {'-', '-'} },
- { VK_MULTIPLY,NOCAPS, {'*', '*'} },
- { VK_DIVIDE ,NOCAPS, {'/', '/'} },
- { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE ,NOCAPS, {' ', ' '} },
+ { VK_TAB ,0, {'\t','\t'} },
+ { VK_ADD ,0, {'+', '+'} },
+ { VK_SUBTRACT,0, {'-', '-'} },
+ { VK_MULTIPLY,0, {'*', '*'} },
+ { VK_DIVIDE ,0, {'/', '/'} },
+ { VK_ESCAPE ,0, {0x1b,0x1b} },
+ { VK_SPACE ,0, {' ', ' '} },
{ 0, 0 }
};
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 */} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x1f /* US */} },
+ { '2', 0, {'2', '@', WCH_NONE, 0} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x1e /* RS */} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x1f /* US */} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- English doesn't have any */
0,
* and http://win.tue.nl/~aeb/linux/kbd/scancodes-1.html
*/
-
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
-
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* 00 */ VK_EMPTY,
/* 43 */ VK_F9,
/* 44 */ VK_F10,
/* 45 */ VK_NUMLOCK | KMEXT,
-/* 46 */ VK_SCROLL | KMULTI,
+/* 46 */ VK_SCROLL | KBDMULTIVK,
/* 47 */ VK_HOME | KNUMS,
/* 48 */ VK_UP | KNUMS,
/* 49 */ VK_PRIOR | KNUMS,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT }, // Pista anterior, no puedo probarlo hasta que no se implemente el sonido
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT }, // Pista siguiente,
- { 0x1D, VK_RCONTROL | KEXT }, // Tecla control
- { 0x20, VK_VOLUME_MUTE | KEXT }, // Silenciar volumen
- { 0x21, VK_LAUNCH_APP2 | KEXT }, // Tecla calculadora
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT }, // Play/pause
- { 0x24, VK_MEDIA_STOP | KEXT }, // Stop
- { 0x2E, VK_VOLUME_DOWN | KEXT }, // Bajar volumen
- { 0x30, VK_VOLUME_UP | KEXT }, // Subir volumen
- { 0x32, VK_BROWSER_HOME | KEXT }, // Pagina de inicio del navegador de internet o abrirlo si no esta activolo
- { 0x35, VK_DIVIDE | KEXT }, // Tecla
- { 0x37, VK_SNAPSHOT | KEXT }, // La tecla de imprimir pantalla
- { 0x38, VK_RMENU | KEXT }, // Tecla alt
- { 0x47, VK_HOME | KEXT }, // Tecla inicio
- { 0x48, VK_UP | KEXT }, // Cursor arriba
- { 0x49, VK_PRIOR | KEXT }, // Tecla Re pag
- { 0x4B, VK_LEFT | KEXT }, // Cursor izquierda
- { 0x4D, VK_RIGHT | KEXT }, // Cursor derecha
- { 0x4F, VK_END | KEXT }, // Tecla Fin
- { 0x50, VK_DOWN | KEXT }, // Cursor abajo
- { 0x51, VK_NEXT | KEXT }, // Tecla Av pag
- { 0x52, VK_INSERT | KEXT }, // Tecla insertar
- { 0x53, VK_DELETE | KEXT }, // Tecla deletear
- { 0x5B, VK_LWIN | KEXT }, // Tecla windows izquierda
- { 0x5C, VK_RWIN | KEXT }, // Tecla windows derecha
- { 0x5D, VK_APPS | KEXT }, // Tecla menu aplicacion derecha
- { 0x5F, VK_SLEEP | KEXT }, // Tecla Sleep
- { 0x65, VK_BROWSER_SEARCH | KEXT }, // Pagina de búsqueda en el navegador de internet
- { 0x66, VK_BROWSER_FAVORITES | KEXT }, // Favoritos, tengo que esperar a que el tcp/ip
- { 0x67, VK_BROWSER_REFRESH | KEXT }, // Refrescar el navegador de internet
- { 0x68, VK_BROWSER_STOP | KEXT }, // Stop en el navegador de internet
- { 0x69, VK_BROWSER_FORWARD | KEXT }, // Adelante en el navegador de internet
- { 0x6A, VK_BROWSER_BACK | KEXT }, // Atrás en el navegador de internet
- { 0x6B, VK_LAUNCH_APP1 | KEXT }, // Tecla Mi pc
- { 0x6C, VK_LAUNCH_MAIL | KEXT }, // Abrir programa de e-mail
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT }, // Abrir reproductor multimedia
- { 0x1C, VK_RETURN | KEXT }, // La tecla de intro
- { 0x46, VK_CANCEL | KEXT }, // Tecla escape
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT }, // Pista anterior, no puedo probarlo hasta que no se implemente el sonido
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT }, // Pista siguiente,
+ { 0x1D, VK_RCONTROL | KBDEXT }, // Tecla control
+ { 0x20, VK_VOLUME_MUTE | KBDEXT }, // Silenciar volumen
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT }, // Tecla calculadora
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT }, // Play/pause
+ { 0x24, VK_MEDIA_STOP | KBDEXT }, // Stop
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT }, // Bajar volumen
+ { 0x30, VK_VOLUME_UP | KBDEXT }, // Subir volumen
+ { 0x32, VK_BROWSER_HOME | KBDEXT }, // Pagina de inicio del navegador de internet o abrirlo si no esta activolo
+ { 0x35, VK_DIVIDE | KBDEXT }, // Tecla
+ { 0x37, VK_SNAPSHOT | KBDEXT }, // La tecla de imprimir pantalla
+ { 0x38, VK_RMENU | KBDEXT }, // Tecla alt
+ { 0x47, VK_HOME | KBDEXT }, // Tecla inicio
+ { 0x48, VK_UP | KBDEXT }, // Cursor arriba
+ { 0x49, VK_PRIOR | KBDEXT }, // Tecla Re pag
+ { 0x4B, VK_LEFT | KBDEXT }, // Cursor izquierda
+ { 0x4D, VK_RIGHT | KBDEXT }, // Cursor derecha
+ { 0x4F, VK_END | KBDEXT }, // Tecla Fin
+ { 0x50, VK_DOWN | KBDEXT }, // Cursor abajo
+ { 0x51, VK_NEXT | KBDEXT }, // Tecla Av pag
+ { 0x52, VK_INSERT | KBDEXT }, // Tecla insertar
+ { 0x53, VK_DELETE | KBDEXT }, // Tecla deletear
+ { 0x5B, VK_LWIN | KBDEXT }, // Tecla windows izquierda
+ { 0x5C, VK_RWIN | KBDEXT }, // Tecla windows derecha
+ { 0x5D, VK_APPS | KBDEXT }, // Tecla menu aplicacion derecha
+ { 0x5F, VK_SLEEP | KBDEXT }, // Tecla Sleep
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT }, // Pagina de búsqueda en el navegador de internet
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT }, // Favoritos, tengo que esperar a que el tcp/ip
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT }, // Refrescar el navegador de internet
+ { 0x68, VK_BROWSER_STOP | KBDEXT }, // Stop en el navegador de internet
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT }, // Adelante en el navegador de internet
+ { 0x6A, VK_BROWSER_BACK | KBDEXT }, // Atrás en el navegador de internet
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT }, // Tecla Mi pc
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT }, // Abrir programa de e-mail
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT }, // Abrir reproductor multimedia
+ { 0x1C, VK_RETURN | KBDEXT }, // La tecla de intro
+ { 0x46, VK_CANCEL | KBDEXT }, // Tecla escape
{ 0, 0 },
};
-
ROSDATA VSC_VK extcode1_to_vk[] = {
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
/* NONE, SHIFT, CTRL, CTRL+SHIFT, ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
/* The numbers */
//Del 1 al 5 tienen tres estados
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
//El 6 tiene 3 estados
- { '7', NOCAPS, {'7', '/'} },
- { '8', NOCAPS, {'8', '('} },
- { '9', NOCAPS, {'9', ')'} },
- { '0', NOCAPS, {'0', '='} },
- { VK_OEM_3, CAPS, {0x00F1, 0x00D1} }, // ñÑ
+ { '7', 0, {'7', '/'} },
+ { '8', 0, {'8', '('} },
+ { '9', 0, {'9', ')'} },
+ { '0', 0, {'0', '='} },
+ { VK_OEM_3, CAPLOK, {0x00F1, 0x00D1} }, // ñÑ
/* Specials */
/* Ctrl-_ generates ES */
- { VK_OEM_6 ,NOCAPS, {0x00a1, 0x00bf} }, // ¡¿
- { VK_OEM_4 ,NOCAPS, {0x0027, '?'} }, //'?
- { VK_OEM_COMMA ,NOCAPS, {',', ';'} },
- { VK_OEM_PERIOD ,NOCAPS, {'.', ':'} },
- { VK_OEM_MINUS ,NOCAPS, {'-', '_'} },
- { VK_OEM_102 ,NOCAPS, {'<', '>'} },
+ { VK_OEM_6 ,0, {0x00a1, 0x00bf} }, // ¡¿
+ { VK_OEM_4 ,0, {0x0027, '?'} }, //'?
+ { VK_OEM_COMMA ,0, {',', ';'} },
+ { VK_OEM_PERIOD ,0, {'.', ':'} },
+ { VK_OEM_MINUS ,0, {'-', '_'} },
+ { VK_OEM_102 ,0, {'<', '>'} },
/* Keys that do not have shift states */
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_ESCAPE, NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE, NOCAPS, {' ', ' '} },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_ESCAPE, 0, {0x1b,0x1b} },
+ { VK_SPACE, 0, {' ', ' '} },
{ 0, 0 }
};
-
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} },
+ { 'A', CAPLOK, {'a', 'A', 0x01} },
+ { 'B', CAPLOK, {'b', 'B', 0x02} },
+ { 'C', CAPLOK, {'c', 'C', 0x03} },
+ { 'D', CAPLOK, {'d', 'D', 0x04} },
+ { 'F', CAPLOK, {'f', 'F', 0x06} },
+ { 'G', CAPLOK, {'g', 'G', 0x07} },
+ { 'H', CAPLOK, {'h', 'H', 0x08} },
+ { 'I', CAPLOK, {'i', 'I', 0x09} },
+ { 'J', CAPLOK, {'j', 'J', 0x0a} },
+ { 'K', CAPLOK, {'k', 'K', 0x0b} },
+ { 'L', CAPLOK, {'l', 'L', 0x0c} },
+ { 'M', CAPLOK, {'m', 'M', 0x0d} },
+ { 'N', CAPLOK, {'n', 'N', 0x0e} },
+ { 'O', CAPLOK, {'o', 'O', 0x0f} },
+ { 'P', CAPLOK, {'p', 'P', 0x10} },
+ { 'Q', CAPLOK, {'q', 'Q', 0x11} },
+ { 'R', CAPLOK, {'r', 'R', 0x12} },
+ { 'S', CAPLOK, {'s', 'S', 0x13} },
+ { 'T', CAPLOK, {'t', 'T', 0x14} },
+ { 'U', CAPLOK, {'u', 'U', 0x15} },
+ { 'V', CAPLOK, {'v', 'V', 0x16} },
+ { 'W', CAPLOK, {'w', 'W', 0x17} },
+ { 'X', CAPLOK, {'x', 'X', 0x18} },
+ { 'Y', CAPLOK, {'y', 'Y', 0x19} },
+ { 'Z', CAPLOK, {'z', 'Z', 0x1a} },
/* Legacy (telnet-style) ascii escapes */
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
{ 0,0 }
};
-
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, shifted, control, Alt+Gr */
- { '1', NOCAPS, {'1', '!', WCH_NONE, 0x00a6} }, // 1!|
- { '2', NOCAPS, {'2', '"', WCH_NONE, '@'} }, // 2"@
- { '3', NOCAPS, {'3', 0x00B7, WCH_NONE, '#'} }, // 3·#
- { '6', NOCAPS, {'6', '&', WCH_NONE, 0x00AC} }, // 6&¬
- { 'E', CAPS, {'e', 'E', 0x05, 0x20AC} }, // eE\80
- { VK_OEM_PLUS, NOCAPS, {'+', '*', WCH_NONE, 0x005d} }, // +*]
- { VK_OEM_2, NOCAPS, {0x00e7, 0x00c7, WCH_NONE, '}'} }, // çÇ}
+ { '1', 0, {'1', '!', WCH_NONE, 0x00a6} }, // 1!|
+ { '2', 0, {'2', '"', WCH_NONE, '@'} }, // 2"@
+ { '3', 0, {'3', 0x00B7, WCH_NONE, '#'} }, // 3·#
+ { '6', 0, {'6', '&', WCH_NONE, 0x00AC} }, // 6&¬
+ { 'E', CAPLOK, {'e', 'E', 0x05, 0x20AC} }, // eE\80
+ { VK_OEM_PLUS, 0, {'+', '*', WCH_NONE, 0x005d} }, // +*]
+ { VK_OEM_2, 0, {0x00e7, 0x00c7, WCH_NONE, '}'} }, // çÇ}
- { VK_OEM_7, NOCAPS, {WCH_DEAD, WCH_DEAD, WCH_NONE, '{'} }, // ´¨{
- { VK_EMPTY, NOCAPS, {0xB4, 0xA8, WCH_NONE, WCH_NONE} }, // ´¨{
+ { VK_OEM_7, 0, {WCH_DEAD, WCH_DEAD, WCH_NONE, '{'} }, // ´¨{
+ { VK_EMPTY, 0, {0xB4, 0xA8, WCH_NONE, WCH_NONE} }, // ´¨{
- { VK_OEM_1, NOCAPS, {WCH_DEAD, WCH_DEAD, WCH_NONE, 0x5B} }, // `^[
- { VK_EMPTY, NOCAPS, {0x60, 0x5e, WCH_NONE, WCH_NONE} }, // `^[
+ { VK_OEM_1, 0, {WCH_DEAD, WCH_DEAD, WCH_NONE, 0x5B} }, // `^[
+ { VK_EMPTY, 0, {0x60, 0x5e, WCH_NONE, WCH_NONE} }, // `^[
- { VK_OEM_5, NOCAPS, {0x00BA, 0x00AA, WCH_NONE, 0x005c} }, // çÇ}
+ { VK_OEM_5, 0, {0x00BA, 0x00AA, WCH_NONE, 0x005c} }, // çÇ}
{ 0, 0 }
};
-
-
ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
{ VK_NUMPAD0, 0, {'0'} },
{ VK_NUMPAD1, 0, {'1'} },
{ 0,0 }
};
-
#define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
-
ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
vk_master(1,keypad_numbers),
vk_master(2,key_to_chars_2mod),
NULL
};
-
/* Finally, the master table */
ROSDATA KBDTABLES keyboard_layout_table = {
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Spanish doesn't have any */
0,
NULL
};
-
PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
return &keyboard_layout_table;
}
/*
- * ReactOS Estonian Keyboard layout
- * Copyright (C) 2008 ReactOS
- * Author: Dmitry Chapyshev
+ * ReactOS USASCII Keyboard layout
+ * Copyright (C) 2003 ReactOS
* License: LGPL, see: LGPL.txt
*
* Thanks to: http://www.barcodeman.com/altek/mule/scandoc.php
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT,
/* - 37 - */
/* Bottom Row */
- 0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
+ VK_MULTIPLY, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 3b - */
/* F-Keys */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
/* Oddities, and the remaining standard F-Keys */
VK_EMPTY, VK_OEM_102, VK_F11, VK_F12,
/* - 59 - */
- VK_CLEAR, VK_OEM_WSCTRL,VK_OEM_FINISH,VK_OEM_JUMP, VK_EREOF, /* EREOF */
- VK_OEM_BACKTAB, VK_OEM_AUTO, VK_EMPTY, VK_ZOOM, /* ZOOM */
+ VK_CLEAR, VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY, /* EREOF */
+ VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY, /* ZOOM */
VK_HELP,
/* - 64 - */
/* Even more F-Keys (for example, NCR keyboards from the early 90's) */
VK_F21, VK_F22, VK_F23,
/* - 6f - */
/* Not sure who uses these codes */
- VK_OEM_PA3, VK_EMPTY, VK_OEM_RESET,
+ VK_EMPTY, VK_EMPTY, VK_EMPTY,
/* - 72 - */
- VK_EMPTY, 0xc1, VK_EMPTY, VK_EMPTY,
+ VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY,
/* - 76 - */
/* One more f-key */
VK_F24,
/* - 77 - */
VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY,
- VK_OEM_PA1, VK_TAB, 0xc2, 0, /* PA1 */
- 0,
+ VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY, /* PA1 */
+ VK_EMPTY,
/* - 80 - */
0
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
- { 0x1d, VK_PAUSE},
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
ROSDATA MODIFIERS modifier_bits = {
modifier_keys,
- 7,
- { 0, 1, 4, 5, SHFT_INVALID, SHFT_INVALID, 2, 3 }
+ 3,
+ { 0, 1, 2, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { '1', NOCAPS, {'1', '!' } },
- { VK_OEM_PLUS, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { 0xff, NOCAPS, {0x00b4, '`' } },
- { '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_3, CAPS, {0x00fc, 0x00dc } },
- { 'A', CAPS, {'a', 'A' } },
- { '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' } },
- { '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_DECIMAL, NOCAPS, {',', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ /* Normal vs Shifted */
+ /* The alphabet */
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'E', CAPLOK, {'e', 'E'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+
+ /* The numbers */
+ { '1', 0, {'1', '!'} },
+ /* Ctrl-2 generates NUL */
+ { '3', 0, {'3', '#'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
+ /* Ctrl-6 generates RS */
+ { '7', 0, {'7', '&'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
+
+ /* Specials */
+ /* Ctrl-_ generates US */
+ { VK_OEM_PLUS ,0, {'=', '+'} },
+ { VK_OEM_1 ,0, {';', ':'} },
+ { VK_OEM_7 ,0, {'\'','\"'} },
+ { VK_OEM_3 ,0, {'`', '~'} },
+ { VK_OEM_COMMA ,0, {',', '<'} },
+ { VK_OEM_PERIOD ,0, {'.', '>'} },
+ { VK_OEM_2 ,0, {'/', '?'} },
+ /* Keys that do not have shift states */
+ { VK_TAB ,0, {'\t','\t'} },
+ { VK_ADD ,0, {'+', '+'} },
+ { VK_SUBTRACT,0, {'-', '-'} },
+ { VK_MULTIPLY,0, {'*', '*'} },
+ { VK_DIVIDE ,0, {'/', '/'} },
+ { VK_ESCAPE ,0, {0x1b,0x1b} },
+ { VK_SPACE ,0, {' ', ' '} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { '5', NOCAPS, {'5', '%', 0x20ac} },
- { 'E', CAPS, {'e', 'E', 0x20ac} },
- { 0, 0 }
+ /* Normal, Shifted, Ctrl */
+ /* Legacy (telnet-style) ascii escapes */
+ { VK_OEM_4, 0, {'[', '{', 0x1b /* ESC */} },
+ { VK_OEM_6, 0, {']', '}', 0x1d /* GS */} },
+ { VK_OEM_5, 0, {'\\','|', 0x1c /* FS */} },
+ { VK_OEM_102,0,{'\\','|', 0x1c /* FS */} },
+ { VK_RETURN,0, {'\r', '\r', '\n'} },
+ { 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '2', NOCAPS, {'2', '\"', '@', '@' } },
- { '3', NOCAPS, {'3', '#', 0x00a3, 0x00a3} },
- { '4', NOCAPS, {'4', 0x00a4, '$', '$' } },
- { '7', NOCAPS, {'7', '/', '{', '{' } },
- { '8', NOCAPS, {'8', '(', '[', '[' } },
- { '9', NOCAPS, {'9', ')', ']', ']' } },
- { '0', NOCAPS, {'0', '=', '}', '}' } },
- { VK_OEM_MINUS, NOCAPS, {'+', '?', '\\', '\\' } },
- { VK_OEM_4, CAPS, {0x00f5, 0x00d5, 0x00a7, 0x00a7} },
- { VK_OEM_5, NOCAPS, {'\'', '*', 0x00bd, 0x00bd} },
- { 'S', CAPS, {'s', 'S', 0x0161, 0x0160} },
- { 'Z', CAPS, {'z', 'Z', 0x017e, 0x017d} },
- { 0, 0 }
-};
-
-ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_7, NOCAPS, {WCH_DEAD, WCH_DEAD, WCH_NONE, WCH_NONE, 0x001c } },
- { 0xff, NOCAPS, {0x02c7, '~', WCH_NONE, WCH_NONE, WCH_NONE} },
- { VK_OEM_1, CAPS, {0x00f6, 0x00d6, WCH_NONE, WCH_NONE, 0x001b } },
- { VK_OEM_2, CAPS, {0x00e4, 0x00c4, WCH_DEAD, '^', 0x001d } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, '^', WCH_NONE, WCH_NONE} },
- { VK_OEM_6, NOCAPS, {'-', '_', WCH_NONE, WCH_NONE, 0x001f } },
- { VK_OEM_102, NOCAPS, {'<', '>', '|', '|', 0x001c } },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f } },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b } },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003 } },
- { 0, 0 }
-};
-
-ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { '6', NOCAPS, {'6', '&', WCH_NONE, WCH_NONE, WCH_NONE, 0x001e} },
+ /* Normal, Shifted, Ctrl, C-S-x */
+ /* Legacy Ascii generators */
+ { '2', 0, {'2', '@', WCH_NONE, 0} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x1e /* RS */} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x1f /* US */} },
{ 0, 0 }
};
{ VK_NUMPAD7, 0, {'7'} },
{ VK_NUMPAD8, 0, {'8'} },
{ VK_NUMPAD9, 0, {'9'} },
- { 0, 0 }
+ { VK_DECIMAL, 0, {'.'} },
+ { VK_BACK, 0, {'\010'} },
+ { 0,0 }
};
#define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
+ vk_master(1,keypad_numbers),
+ vk_master(2,key_to_chars_2mod),
vk_master(3,key_to_chars_3mod),
vk_master(4,key_to_chars_4mod),
- vk_master(5,key_to_chars_5mod),
- vk_master(6,key_to_chars_6mod),
- vk_master(2,key_to_chars_2mod),
- vk_master(1,keypad_numbers),
{ 0,0,0 }
};
ROSDATA VSC_LPWSTR key_names[] = {
+ { 0x00, L"" },
{ 0x01, L"Esc" },
{ 0x0e, L"Backspace" },
{ 0x0f, L"Tab" },
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
{ 0x85, L"F22" },
{ 0x86, L"F23" },
{ 0x87, L"F24" },
- { 0, NULL }
+ { 0, NULL },
};
ROSDATA VSC_LPWSTR extended_key_names[] = {
{ 0x1c, L"Num Enter" },
- { 0x1d, L"Right Control" },
+ { 0x1d, L"Right Ctrl" },
{ 0x35, L"Num /" },
{ 0x37, L"Prnt Scrn" },
{ 0x38, L"Right Alt" },
{ 0x47, L"Home" },
{ 0x48, L"Up" },
{ 0x49, L"Page Up" },
- { 0x4b, L"Left" },
-//{ 0x4c, L"Center" },
+ { 0x4a, L"Left" },
+ { 0x4c, L"Center" },
{ 0x4d, L"Right" },
{ 0x4f, L"End" },
{ 0x50, L"Down" },
{ 0x52, L"Insert" },
{ 0x53, L"Delete" },
{ 0x54, L"<ReactOS>" },
- { 0x56, L"Help" },
- { 0x5b, L"Left <ReactOS>" },
- { 0x5c, L"Right <ReactOS>" },
- { 0x5d, L"Application" },
- { 0, NULL }
-};
-
-ROSDATA DEADKEY_LPWSTR dead_key_names[] = {
- L"`" L"GRAVE",
- L"\x00b4" L"ACUTE",
- L"^" L"CIRCUMFLEX",
- L"\x02c7" L"CARON",
- L"~" L"TILDE",
- NULL
-};
-
-#define DEADTRANS(ch, accent, comp, flags) MAKELONG(ch, accent), comp, flags
-
-ROSDATA DEADKEY dead_key[] = {
- { DEADTRANS(L'a', L'`', 0x00e0, 0x0000) },
- { DEADTRANS(L'o', L'`', 0x00f2, 0x0000) },
- { DEADTRANS(L'e', L'`', 0x00e8, 0x0000) },
- { DEADTRANS(L'u', L'`', 0x00f9, 0x0000) },
- { DEADTRANS(L'A', L'`', 0x00c0, 0x0000) },
- { DEADTRANS(L'O', L'`', 0x00d2, 0x0000) },
- { DEADTRANS(L'E', L'`', 0x00c8, 0x0000) },
- { DEADTRANS(L'U', L'`', 0x00d9, 0x0000) },
- { DEADTRANS(L' ', L'`', L'`', 0x0000) },
-
- { DEADTRANS(L'n', 0x00b4, 0x0144, 0x0000) },
- { DEADTRANS(L'N', 0x00b4, 0x0143, 0x0000) },
- { DEADTRANS(L'c', 0x00b4, 0x0107, 0x0000) },
- { DEADTRANS(L'C', 0x00b4, 0x0106, 0x0000) },
- { DEADTRANS(L'o', 0x00b4, 0x00f3, 0x0000) },
- { DEADTRANS(L'O', 0x00b4, 0x00d3, 0x0000) },
- { DEADTRANS(L'e', 0x00b4, 0x00e9, 0x0000) },
- { DEADTRANS(L'E', 0x00b4, 0x00c9, 0x0000) },
- { DEADTRANS(L's', 0x00b4, 0x015b, 0x0000) },
- { DEADTRANS(L'S', 0x00b4, 0x015a, 0x0000) },
- { DEADTRANS(L'z', 0x00b4, 0x017a, 0x0000) },
- { DEADTRANS(L'Z', 0x00b4, 0x0179, 0x0000) },
- { DEADTRANS(L' ', 0x00b4, 0x00b4, 0x0000) },
-
- { DEADTRANS(L'a', L'^', 0x00e2, 0x0000) },
- { DEADTRANS(L'i', L'^', 0x00ee, 0x0000) },
- { DEADTRANS(L'e', L'^', 0x00ea, 0x0000) },
- { DEADTRANS(L'u', L'^', 0x00fb, 0x0000) },
- { DEADTRANS(L'g', L'^', 0x011d, 0x0000) },
- { DEADTRANS(L'A', L'^', 0x00c2, 0x0000) },
- { DEADTRANS(L'I', L'^', 0x00ce, 0x0000) },
- { DEADTRANS(L'E', L'^', 0x00ca, 0x0000) },
- { DEADTRANS(L'U', L'^', 0x00db, 0x0000) },
- { DEADTRANS(L'G', L'^', 0x011c, 0x0000) },
- { DEADTRANS(L' ', L'^', L'^', 0x0000) },
-
- { DEADTRANS(L's', 0x02c7, 0x0161, 0x0000) },
- { DEADTRANS(L'S', 0x02c7, 0x0160, 0x0000) },
- { DEADTRANS(L'c', 0x02c7, 0x010d, 0x0000) },
- { DEADTRANS(L'C', 0x02c7, 0x010c, 0x0000) },
- { DEADTRANS(L'z', 0x02c7, 0x017e, 0x0000) },
- { DEADTRANS(L'Z', 0x02c7, 0x017d, 0x0000) },
- { DEADTRANS(L' ', 0x02c7, 0x02c7, 0x0000) },
-
- { DEADTRANS(L'o', L'~', 0x00f5, 0x0000) },
- { DEADTRANS(L'O', L'~', 0x00d5, 0x0000) },
- { DEADTRANS(L' ', L'~', L'~', 0x0000) },
-
- {0, 0}
+ { 0x55, L"Help" },
+ { 0x56, L"Left Windows" },
+ { 0x5b, L"Right Windows" },
+ { 0, NULL },
};
/* Finally, the master table */
/* character from vk tables */
vk_to_wchar_master_table,
- /* diacritical marks */
- dead_key,
+ /* diacritical marks -- currently implemented by wine code */
+ /* English doesn't have any, anyway */
+ NULL,
/* Key names */
(VSC_LPWSTR *)key_names,
(VSC_LPWSTR *)extended_key_names,
- dead_key_names, /* Dead key names */
+ NULL, /* Dead key names */
/* scan code to virtual key maps */
scancode_to_vk,
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
+ /* Ligatures -- English doesn't have any */
0,
0,
NULL
return &keyboard_layout_table;
}
-INT WINAPI
-DllMain(
- PVOID hinstDll,
- ULONG dwReason,
- PVOID reserved)
-{
- return 1;
-}
-
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 4, 5, SHFT_INVALID, SHFT_INVALID, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { 'Q', CAPS, {'q', 'Q' } },
- { 'W', CAPS, {'w', 'W' } },
- { 'E', CAPS, {'e', 'E' } },
- { 'T', CAPS, {'t', 'T' } },
- { 'U', CAPS, {'u', 'U' } },
- { 'I', CAPS, {'i', 'I' } },
- { 'G', CAPS, {'g', 'G' } },
- { 'H', CAPS, {'h', 'H' } },
- { 'J', CAPS, {'j', 'J' } },
- { 'K', CAPS, {'k', 'K' } },
- { 'L', CAPS, {'l', 'L' } },
- { VK_OEM_3, NOCAPS, {0x00e8, 0x00c8} },
- { 'V', CAPS, {'v', 'V' } },
- { 'B', CAPS, {'b', 'B' } },
- { 'N', CAPS, {'n', 'N' } },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { 'Q', CAPLOK, {'q', 'Q' } },
+ { 'W', CAPLOK, {'w', 'W' } },
+ { 'E', CAPLOK, {'e', 'E' } },
+ { 'T', CAPLOK, {'t', 'T' } },
+ { 'U', CAPLOK, {'u', 'U' } },
+ { 'I', CAPLOK, {'i', 'I' } },
+ { 'G', CAPLOK, {'g', 'G' } },
+ { 'H', CAPLOK, {'h', 'H' } },
+ { 'J', CAPLOK, {'j', 'J' } },
+ { 'K', CAPLOK, {'k', 'K' } },
+ { 'L', CAPLOK, {'l', 'L' } },
+ { VK_OEM_3, 0, {0x00e8, 0x00c8} },
+ { 'V', CAPLOK, {'v', 'V' } },
+ { 'B', CAPLOK, {'b', 'B' } },
+ { 'N', CAPLOK, {'n', 'N' } },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_7, NOCAPS, {0x00b0, 0x00b0, 0x00ac } },
- { '5', NOCAPS, {'5', '%', 0x00bd } },
- { '7', NOCAPS, {'7', '&', '{' } },
- { '8', NOCAPS, {'8', '*', '[' } },
- { '0', NOCAPS, {'0', ')', '}' } },
- { VK_OEM_PLUS, NOCAPS, {'=', '+', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b8 } },
- { 'Y', CAPS, {'y', 'Y', 0x00a5 } },
- { 'F', CAPS, {'f', 'F', 0x00aa } },
- { 'Z', CAPS, {'z', 'Z', 0x00ab } },
- { 'X', CAPS, {'x', 'X', 0x00bb } },
- { VK_OEM_COMMA, NOCAPS, {',', '\'', '<' } },
- { VK_OEM_PERIOD,NOCAPS, {'.', '.', '>' } },
- { VK_OEM_2, NOCAPS, {0x00e9, 0x00c9, '/' } },
+ { VK_OEM_7, 0, {0x00b0, 0x00b0, 0x00ac } },
+ { '5', 0, {'5', '%', 0x00bd } },
+ { '7', 0, {'7', '&', '{' } },
+ { '8', 0, {'8', '*', '[' } },
+ { '0', 0, {'0', ')', '}' } },
+ { VK_OEM_PLUS, 0, {'=', '+', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b8 } },
+ { 'Y', CAPLOK, {'y', 'Y', 0x00a5 } },
+ { 'F', CAPLOK, {'f', 'F', 0x00aa } },
+ { 'Z', CAPLOK, {'z', 'Z', 0x00ab } },
+ { 'X', CAPLOK, {'x', 'X', 0x00bb } },
+ { VK_OEM_COMMA, 0, {',', '\'', '<' } },
+ { VK_OEM_PERIOD,0, {'.', '.', '>' } },
+ { VK_OEM_2, 0, {0x00e9, 0x00c9, '/' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '1', NOCAPS, {'1', '!', 0x00b9, 0x00a1 } },
- { '2', NOCAPS, {'2', '\"', '@', 0x00b2 } },
- { '3', NOCAPS, {'3', '#', 0x00b3, 0x00a3 } },
- { '4', NOCAPS, {'4', '$', 0x00bc, 0x00a4 } },
- { '9', NOCAPS, {'9', '(', ']', 0x00b1 } },
- { 'R', CAPS, {'r', 'R', 0x00b6, 0x00ae } },
- { 'O', CAPS|CAPLOKALTGR, {'o', 'O', 0x00f8, 0x00d8 } },
- { 'P', CAPS|CAPLOKALTGR, {'p', 'P', 0x00fe, 0x00de } },
- { 'A', CAPS|CAPLOKALTGR, {'a', 'A', 0x00e6, 0x00c6 } },
- { 'S', CAPS, {'s', 'S', 0x00df, 0x00a7 } },
- { 'D', CAPS|CAPLOKALTGR, {'d', 'D', 0x00f0, 0x00d0 } },
- { VK_OEM_1, NOCAPS, {';', ':', WCH_DEAD, WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b4, 0x00b4 } },
- { 'C', CAPS, {'c', 'C', 0x00a2, 0x00a9 } },
- { 'M', CAPS, {'m', 'M', 0x00b5, 0x00ba } },
+ { '1', 0, {'1', '!', 0x00b9, 0x00a1 } },
+ { '2', 0, {'2', '\"', '@', 0x00b2 } },
+ { '3', 0, {'3', '#', 0x00b3, 0x00a3 } },
+ { '4', 0, {'4', '$', 0x00bc, 0x00a4 } },
+ { '9', 0, {'9', '(', ']', 0x00b1 } },
+ { 'R', CAPLOK, {'r', 'R', 0x00b6, 0x00ae } },
+ { 'O', CAPLOK|CAPLOKALTGR, {'o', 'O', 0x00f8, 0x00d8 } },
+ { 'P', CAPLOK|CAPLOKALTGR, {'p', 'P', 0x00fe, 0x00de } },
+ { 'A', CAPLOK|CAPLOKALTGR, {'a', 'A', 0x00e6, 0x00c6 } },
+ { 'S', CAPLOK, {'s', 'S', 0x00df, 0x00a7 } },
+ { 'D', CAPLOK|CAPLOKALTGR, {'d', 'D', 0x00f0, 0x00d0 } },
+ { VK_OEM_1, 0, {';', ':', WCH_DEAD, WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b4, 0x00b4 } },
+ { 'C', CAPLOK, {'c', 'C', 0x00a2, 0x00a9 } },
+ { 'M', CAPLOK, {'m', 'M', 0x00b5, 0x00ba } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_MINUS, NOCAPS, {'-', '_', '|', 0x00bf, 0x001f } },
- { VK_OEM_4, NOCAPS, {WCH_DEAD, WCH_DEAD, 0x00b0, WCH_NONE, 0x001b } },
- { 0xff, NOCAPS, {'^', '^', WCH_NONE, WCH_NONE, WCH_NONE} },
- { VK_OEM_6, NOCAPS, {0x00e7, 0x00c7, WCH_DEAD, WCH_DEAD, 0x001d } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, '~', 0x00a8, WCH_NONE} },
- { VK_OEM_5, NOCAPS, {0x00e0, 0x00c0, WCH_DEAD, WCH_DEAD, 0x001c } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, '`', '`', WCH_NONE} },
- { VK_OEM_102, NOCAPS, {0x00f9, 0x00d9, '\\', '|', 0x001c } },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f } },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b } },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003 } },
+ { VK_OEM_MINUS, 0, {'-', '_', '|', 0x00bf, 0x001f } },
+ { VK_OEM_4, 0, {WCH_DEAD, WCH_DEAD, 0x00b0, WCH_NONE, 0x001b } },
+ { 0xff, 0, {'^', '^', WCH_NONE, WCH_NONE, WCH_NONE} },
+ { VK_OEM_6, 0, {0x00e7, 0x00c7, WCH_DEAD, WCH_DEAD, 0x001d } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, '~', 0x00a8, WCH_NONE} },
+ { VK_OEM_5, 0, {0x00e0, 0x00c0, WCH_DEAD, WCH_DEAD, 0x001c } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, '`', '`', WCH_NONE} },
+ { VK_OEM_102, 0, {0x00f9, 0x00d9, '\\', '|', 0x001c } },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f } },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b } },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003 } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { '6', NOCAPS, {'6', '?', 0x00be, WCH_NONE, WCH_NONE, 0x001e} },
+ { '6', 0, {'6', '?', 0x00be, WCH_NONE, WCH_NONE, 0x001e} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
0,
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { '1', NOCAPS, {'1', '!'} },
-
- { VK_OEM_4, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { VK_EMPTY, NOCAPS, {0xb4 , 0x60 } },
- { VK_OEM_7, CAPS , {0xe4 , 0xc4 } },
- { VK_OEM_3, CAPS , {0xf6 , 0xd6 } },
-
- { VK_OEM_COMMA, NOCAPS, {',' , ';'} },
- { VK_OEM_PERIOD, NOCAPS, {'.' , ':'} },
- { VK_OEM_2, NOCAPS, {'\'', '*'} },
-
- { VK_DECIMAL, NOCAPS, {',' , ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+' , '+' } },
- { VK_DIVIDE, NOCAPS, {'/' , '/' } },
- { VK_MULTIPLY, NOCAPS, {'*' , '*' } },
- { VK_SUBTRACT, NOCAPS, {'-' , '-' } },
+ { '1', 0, {'1', '!'} },
+
+ { VK_OEM_4, 0, {WCH_DEAD, WCH_DEAD} },
+ { VK_EMPTY, 0, {0xb4 , 0x60 } },
+ { VK_OEM_7, CAPLOK , {0xe4 , 0xc4 } },
+ { VK_OEM_3, CAPLOK , {0xf6 , 0xd6 } },
+
+ { VK_OEM_COMMA, 0, {',' , ';'} },
+ { VK_OEM_PERIOD, 0, {'.' , ':'} },
+ { VK_OEM_2, 0, {'\'', '*'} },
+
+ { VK_DECIMAL, 0, {',' , ',' } },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+' , '+' } },
+ { VK_DIVIDE, 0, {'/' , '/' } },
+ { VK_MULTIPLY, 0, {'*' , '*' } },
+ { VK_SUBTRACT, 0, {'-' , '-' } },
{ 0, 0 }
};
/* 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} },
+ { 'A', CAPLOK, {'a', 'A', 0x01} },
+ { 'B', CAPLOK, {'b', 'B', 0x02} },
+ { 'C', CAPLOK, {'c', 'C', 0x03} },
+ { 'D', CAPLOK, {'d', 'D', 0x04} },
+ { 'F', CAPLOK, {'f', 'F', 0x06} },
+ { 'G', CAPLOK, {'g', 'G', 0x07} },
+ { 'H', CAPLOK, {'h', 'H', 0x08} },
+ { 'I', CAPLOK, {'i', 'I', 0x09} },
+ { 'J', CAPLOK, {'j', 'J', 0x0a} },
+ { 'K', CAPLOK, {'k', 'K', 0x0b} },
+ { 'L', CAPLOK, {'l', 'L', 0x0c} },
+ { 'N', CAPLOK, {'n', 'N', 0x0e} },
+ { 'O', CAPLOK, {'o', 'O', 0x0f} },
+ { 'P', CAPLOK, {'p', 'P', 0x10} },
+ { 'Q', CAPLOK, {'q', 'Q', 0x11} },
+ { 'R', CAPLOK, {'r', 'R', 0x12} },
+ { 'S', CAPLOK, {'s', 'S', 0x13} },
+ { 'T', CAPLOK, {'t', 'T', 0x14} },
+ { 'U', CAPLOK, {'u', 'U', 0x15} },
+ { 'V', CAPLOK, {'v', 'V', 0x16} },
+ { 'W', CAPLOK, {'w', 'W', 0x17} },
+ { 'X', CAPLOK, {'x', 'X', 0x18} },
+ { 'Y', CAPLOK, {'y', 'Y', 0x19} },
+ { 'Z', CAPLOK, {'z', 'Z', 0x1a} },
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_6 , CAPS , {0xe5, 0xc5, 0x1d /* GS */} },
- { VK_OEM_5 , NOCAPS, {0xa7, 0xbd, 0x1c /* FS */} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', 0x1f /* US */} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
-
- { VK_BACK, NOCAPS, {'\b', '\b', 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, 0x1b} },
- { VK_SPACE, NOCAPS, {' ' , ' ' , ' ' } },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, 0x03} },
+ { VK_OEM_6 , CAPLOK , {0xe5, 0xc5, 0x1d /* GS */} },
+ { VK_OEM_5 , 0, {0xa7, 0xbd, 0x1c /* FS */} },
+ { VK_OEM_MINUS, 0, {'-', '_', 0x1f /* US */} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
+
+ { VK_BACK, 0, {'\b', '\b', 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, 0x1b} },
+ { VK_SPACE, 0, {' ' , ' ' , ' ' } },
+ { VK_CANCEL, 0, {0x03, 0x03, 0x03} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt */
- { '2', NOCAPS, {'2', '\"', WCH_NONE, '@' } },
- { '3', NOCAPS, {'3', '#' , WCH_NONE, 0xa3 } },
- { '4', NOCAPS, {'4', 0xa4, WCH_NONE, '$' } },
- { '5', NOCAPS, {'5', '%' , WCH_NONE, 0x20ac} },
- { '7', NOCAPS, {'7', '/' , WCH_NONE, '{' } },
- { '8', NOCAPS, {'8', '(' , WCH_NONE, '[' } },
- { '9', NOCAPS, {'9', ')' , WCH_NONE, ']' } },
- { '0', NOCAPS, {'0', '=' , WCH_NONE, '}' } },
- { VK_OEM_PLUS, NOCAPS, {'+', '?', WCH_NONE, '\\'} },
-
- { 'E' , CAPS , {'e' , 'E' , 0x05, 0x20ac } },
- { VK_OEM_1, NOCAPS, {WCH_DEAD, WCH_DEAD, 0x1d, WCH_DEAD} },
- { VK_EMPTY, NOCAPS, {0xa8 , 0x5e , 0x1d, 0x7e } },
-
- { 'M' , CAPS , {'m', 'M', 0x0d, 0x00b5} },
- { VK_OEM_102, NOCAPS, {'<', '>', 0x1c, '|' } },
+ { '2', 0, {'2', '\"', WCH_NONE, '@' } },
+ { '3', 0, {'3', '#' , WCH_NONE, 0xa3 } },
+ { '4', 0, {'4', 0xa4, WCH_NONE, '$' } },
+ { '5', 0, {'5', '%' , WCH_NONE, 0x20ac} },
+ { '7', 0, {'7', '/' , WCH_NONE, '{' } },
+ { '8', 0, {'8', '(' , WCH_NONE, '[' } },
+ { '9', 0, {'9', ')' , WCH_NONE, ']' } },
+ { '0', 0, {'0', '=' , WCH_NONE, '}' } },
+ { VK_OEM_PLUS, 0, {'+', '?', WCH_NONE, '\\'} },
+
+ { 'E' , CAPLOK , {'e' , 'E' , 0x05, 0x20ac } },
+ { VK_OEM_1, 0, {WCH_DEAD, WCH_DEAD, 0x1d, WCH_DEAD} },
+ { VK_EMPTY, 0, {0xa8 , 0x5e , 0x1d, 0x7e } },
+
+ { 'M' , CAPLOK , {'m', 'M', 0x0d, 0x00b5} },
+ { VK_OEM_102, 0, {'<', '>', 0x1c, '|' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt, C-S-x */
- { '6', NOCAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x1e /* RS */} },
+ { '6', 0, {'6', '&', WCH_NONE, WCH_NONE, 0x1e /* RS */} },
{ 0, 0 }
};
{ 0x37, L"NUM * (Numerisk tangent)" },
{ 0x38, L"ALT" },
{ 0x39, L"V\x00C4LILY\x00D6NTI" },
- { 0x3a, L"CAPS LOCK" },
+ { 0x3a, L"CAPLOK LOCK" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
/**
* FIXME : - VK_DIVIDE produces ! instead of /
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
/* Modifier bit order: NONE, SHIFT, CTRL, ALT, ?, ?, SHIFT-CTRL */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
/* The numbers */
- { '1', NOCAPS, {'&', '1'} },
+ { '1', 0, {'&', '1'} },
/* Specials */
/* Ctrl-_ generates FR */
- { VK_OEM_5 ,NOCAPS, {'*',0xb5} }, /* \9c */
- { VK_OEM_3 ,NOCAPS, {0xf9, '%'} }, /* ù */
- { VK_OEM_COMMA ,NOCAPS, {',', '?'} },
- { VK_OEM_PERIOD ,NOCAPS, {';', '.'} },
- { VK_OEM_2 ,NOCAPS, {':', '/'} },
- { VK_OEM_8 ,NOCAPS, {'!', 0xa7} }, /* § */
+ { VK_OEM_5 ,0, {'*',0xb5} }, /* \9c */
+ { VK_OEM_3 ,0, {0xf9, '%'} }, /* ù */
+ { VK_OEM_COMMA ,0, {',', '?'} },
+ { VK_OEM_PERIOD ,0, {';', '.'} },
+ { VK_OEM_2 ,0, {':', '/'} },
+ { VK_OEM_8 ,0, {'!', 0xa7} }, /* § */
/* Keys that do not have shift states */
- { VK_TAB ,NOCAPS, {'\t','\t'} },
- { VK_ADD ,NOCAPS, {'+', '+'} },
- { VK_SUBTRACT ,NOCAPS, {'-', '-'} },
- { VK_MULTIPLY ,NOCAPS, {'*', '*'} },
- { VK_DIVIDE ,NOCAPS, {'/', '/'} },
- { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE ,NOCAPS, {' ', ' '} },
+ { VK_TAB ,0, {'\t','\t'} },
+ { VK_ADD ,0, {'+', '+'} },
+ { VK_SUBTRACT ,0, {'-', '-'} },
+ { VK_MULTIPLY ,0, {'*', '*'} },
+ { VK_DIVIDE ,0, {'/', '/'} },
+ { VK_ESCAPE ,0, {0x1b,0x1b} },
+ { VK_SPACE ,0, {' ', ' '} },
{ 0, 0 }
};
/* 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} },
+ { 'A', CAPLOK, {'a', 'A', 0x01} },
+ { 'B', CAPLOK, {'b', 'B', 0x02} },
+ { 'C', CAPLOK, {'c', 'C', 0x03} },
+ { 'D', CAPLOK, {'d', 'D', 0x04} },
+ { 'F', CAPLOK, {'f', 'F', 0x06} },
+ { 'G', CAPLOK, {'g', 'G', 0x07} },
+ { 'H', CAPLOK, {'h', 'H', 0x08} },
+ { 'I', CAPLOK, {'i', 'I', 0x09} },
+ { 'J', CAPLOK, {'j', 'J', 0x0a} },
+ { 'K', CAPLOK, {'k', 'K', 0x0b} },
+ { 'L', CAPLOK, {'l', 'L', 0x0c} },
+ { 'M', CAPLOK, {'m', 'M', 0x0d} },
+ { 'N', CAPLOK, {'n', 'N', 0x0e} },
+ { 'O', CAPLOK, {'o', 'O', 0x0f} },
+ { 'P', CAPLOK, {'p', 'P', 0x10} },
+ { 'Q', CAPLOK, {'q', 'Q', 0x11} },
+ { 'R', CAPLOK, {'r', 'R', 0x12} },
+ { 'S', CAPLOK, {'s', 'S', 0x13} },
+ { 'T', CAPLOK, {'t', 'T', 0x14} },
+ { 'U', CAPLOK, {'u', 'U', 0x15} },
+ { 'V', CAPLOK, {'v', 'V', 0x16} },
+ { 'W', CAPLOK, {'w', 'W', 0x17} },
+ { 'X', CAPLOK, {'x', 'X', 0x18} },
+ { 'Y', CAPLOK, {'y', 'Y', 0x19} },
+ { 'Z', CAPLOK, {'z', 'Z', 0x1a} },
/* Legacy (telnet-style) ascii escapes */
{ VK_OEM_102, 0, {'<', '>', 0x1c /* FS */} },
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, shifted, control, Alt+Gr */
- { '2' , CAPS, {0xe9, '2', WCH_NONE, WCH_DEAD} },
- { VK_EMPTY, NOCAPS, {WCH_NONE, WCH_NONE, WCH_NONE, '~'} },
- { '3' , NOCAPS, {'"', '3', WCH_NONE, '#'} },
- { '4' , NOCAPS, {'\'', '4', WCH_NONE, '{'} },
- { '7' , CAPS, {0xe8, '7', WCH_NONE, WCH_DEAD} },
- { VK_EMPTY, NOCAPS, {WCH_NONE, WCH_NONE, WCH_NONE, '`'} },
- { '9' , CAPS, {0xe7, '9', WCH_NONE, '^'} }, /* ç */
- { '0' , CAPS, {0xe0, '0', WCH_NONE, '@'} }, /* à */
- { VK_OEM_PLUS,NOCAPS, {'=', '+', WCH_NONE, '}'} },
- { 'E' , CAPS, {'e', 'E', 0x05, 0x20ac } }, /* \80 */
- { VK_OEM_1, NOCAPS, {0x24, 0xa3, WCH_NONE, 0xa4} }, /* $, £, ¤ */
- { VK_OEM_4, NOCAPS, {')', 0xb0, WCH_NONE, ']'} }, /* ° */
+ { '2' , CAPLOK, {0xe9, '2', WCH_NONE, WCH_DEAD} },
+ { VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, '~'} },
+ { '3' , 0, {'"', '3', WCH_NONE, '#'} },
+ { '4' , 0, {'\'', '4', WCH_NONE, '{'} },
+ { '7' , CAPLOK, {0xe8, '7', WCH_NONE, WCH_DEAD} },
+ { VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, '`'} },
+ { '9' , CAPLOK, {0xe7, '9', WCH_NONE, '^'} }, /* ç */
+ { '0' , CAPLOK, {0xe0, '0', WCH_NONE, '@'} }, /* à */
+ { VK_OEM_PLUS,0, {'=', '+', WCH_NONE, '}'} },
+ { 'E' , CAPLOK, {'e', 'E', 0x05, 0x20ac } }, /* \80 */
+ { VK_OEM_1, 0, {0x24, 0xa3, WCH_NONE, 0xa4} }, /* $, £, ¤ */
+ { VK_OEM_4, 0, {')', 0xb0, WCH_NONE, ']'} }, /* ° */
{ 0, 0 }
};
{ 0, 0, 0}
};
-
ROSDATA VSC_LPWSTR key_names[] = {
{ 0x00, L"" },
{ 0x01, L"Esc" },
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- French doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, SHFT_INVALID, SHFT_INVALID, SHFT_INVALID, 2 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- {VK_OEM_3, NOCAPS, {0x201e, 0x201c} },
- {'1', NOCAPS, {'!', '1' } },
- {'2', NOCAPS, {'?', '2' } },
- {'3', NOCAPS, {0x2116, '3' } },
- {'4', NOCAPS, {0x00a7, '4' } },
- {'5', NOCAPS, {'%', '5' } },
- {'6', NOCAPS, {':', '6' } },
- {'7', NOCAPS, {'.', '7' } },
- {'8', NOCAPS, {';', '8' } },
- {'9', NOCAPS, {',', '9' } },
- {'0', NOCAPS, {'/', '0' } },
- {VK_OEM_MINUS, NOCAPS, {0x2013, '-' } },
- {VK_OEM_PLUS, NOCAPS, {'=', '+' } },
- {'Q', NOCAPS, {0x10e6, 0x10e6} },
- {'W', NOCAPS, {0x10ef, 0x10ef} },
- {'E', NOCAPS, {0x10e3, 0x10e3} },
- {'R', NOCAPS, {0x10d9, 0x10d9} },
- {'Y', NOCAPS, {0x10dc, 0x10dc} },
- {'U', NOCAPS, {0x10d2, 0x10d2} },
- {'I', NOCAPS, {0x10e8, 0x10e8} },
- {'O', NOCAPS, {0x10ec, 0x10ec} },
- {'P', NOCAPS, {0x10d6, 0x10d6} },
- {VK_OEM_6, NOCAPS, {0x10ea, 0x10ea} },
- {VK_OEM_5, NOCAPS, {'(', ')' } },
- {'S', NOCAPS, {0x10eb, 0x10eb} },
- {'F', NOCAPS, {0x10d7, 0x10d7} },
- {'G', NOCAPS, {0x10d0, 0x10d0} },
- {'H', NOCAPS, {0x10de, 0x10de} },
- {'J', NOCAPS, {0x10e0, 0x10e0} },
- {'K', NOCAPS, {0x10dd, 0x10dd} },
- {'L', NOCAPS, {0x10da, 0x10da} },
- {VK_OEM_1, NOCAPS, {0x10d3, 0x10d3} },
- {VK_OEM_7, NOCAPS, {0x10df, 0x10df} },
- {'Z', NOCAPS, {0x10ed, 0x10ed} },
- {'X', NOCAPS, {0x10e9, 0x10e9} },
- {'C', NOCAPS, {0x10e7, 0x10e7} },
- {'V', NOCAPS, {0x10e1, 0x10e1} },
- {'B', NOCAPS, {0x10db, 0x10db} },
- {'M', NOCAPS, {0x10e2, 0x10e2} },
- {VK_OEM_COMMA, NOCAPS, {0x10e5, 0x10e5} },
- {VK_OEM_PERIOD,NOCAPS, {0x10d1, 0x10d1} },
- {VK_OEM_102, NOCAPS, {'(', ')' } },
- {VK_DECIMAL, NOCAPS, {',', ',' } },
- {VK_TAB, NOCAPS, {'\t', '\t' } },
- {VK_ADD, NOCAPS, {'+', '+' } },
- {VK_DIVIDE, NOCAPS, {'/', '/' } },
- {VK_MULTIPLY, NOCAPS, {'*', '*' } },
- {VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ {VK_OEM_3, 0, {0x201e, 0x201c} },
+ {'1', 0, {'!', '1' } },
+ {'2', 0, {'?', '2' } },
+ {'3', 0, {0x2116, '3' } },
+ {'4', 0, {0x00a7, '4' } },
+ {'5', 0, {'%', '5' } },
+ {'6', 0, {':', '6' } },
+ {'7', 0, {'.', '7' } },
+ {'8', 0, {';', '8' } },
+ {'9', 0, {',', '9' } },
+ {'0', 0, {'/', '0' } },
+ {VK_OEM_MINUS, 0, {0x2013, '-' } },
+ {VK_OEM_PLUS, 0, {'=', '+' } },
+ {'Q', 0, {0x10e6, 0x10e6} },
+ {'W', 0, {0x10ef, 0x10ef} },
+ {'E', 0, {0x10e3, 0x10e3} },
+ {'R', 0, {0x10d9, 0x10d9} },
+ {'Y', 0, {0x10dc, 0x10dc} },
+ {'U', 0, {0x10d2, 0x10d2} },
+ {'I', 0, {0x10e8, 0x10e8} },
+ {'O', 0, {0x10ec, 0x10ec} },
+ {'P', 0, {0x10d6, 0x10d6} },
+ {VK_OEM_6, 0, {0x10ea, 0x10ea} },
+ {VK_OEM_5, 0, {'(', ')' } },
+ {'S', 0, {0x10eb, 0x10eb} },
+ {'F', 0, {0x10d7, 0x10d7} },
+ {'G', 0, {0x10d0, 0x10d0} },
+ {'H', 0, {0x10de, 0x10de} },
+ {'J', 0, {0x10e0, 0x10e0} },
+ {'K', 0, {0x10dd, 0x10dd} },
+ {'L', 0, {0x10da, 0x10da} },
+ {VK_OEM_1, 0, {0x10d3, 0x10d3} },
+ {VK_OEM_7, 0, {0x10df, 0x10df} },
+ {'Z', 0, {0x10ed, 0x10ed} },
+ {'X', 0, {0x10e9, 0x10e9} },
+ {'C', 0, {0x10e7, 0x10e7} },
+ {'V', 0, {0x10e1, 0x10e1} },
+ {'B', 0, {0x10db, 0x10db} },
+ {'M', 0, {0x10e2, 0x10e2} },
+ {VK_OEM_COMMA, 0, {0x10e5, 0x10e5} },
+ {VK_OEM_PERIOD,0, {0x10d1, 0x10d1} },
+ {VK_OEM_102, 0, {'(', ')' } },
+ {VK_DECIMAL, 0, {',', ',' } },
+ {VK_TAB, 0, {'\t', '\t' } },
+ {VK_ADD, 0, {'+', '+' } },
+ {VK_DIVIDE, 0, {'/', '/' } },
+ {VK_MULTIPLY, 0, {'*', '*' } },
+ {VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { 'T', NOCAPS, {0x10d4, 0x10d4, 0x10f1} },
- { VK_OEM_4, NOCAPS, {0x10ee, 0x10ee, 0x10f4} },
- { 'A', NOCAPS, {0x10e4, 0x10e4, 0x10f6} },
- { 'D', NOCAPS, {0x10d5, 0x10d5, 0x10f3} },
- { 'N', NOCAPS, {0x10d8, 0x10d8, 0x10f2} },
- { VK_OEM_2, NOCAPS, {0x10f0, 0x10f0, 0x10f5} },
+ { 'T', 0, {0x10d4, 0x10d4, 0x10f1} },
+ { VK_OEM_4, 0, {0x10ee, 0x10ee, 0x10f4} },
+ { 'A', 0, {0x10e4, 0x10e4, 0x10f6} },
+ { 'D', 0, {0x10d5, 0x10d5, 0x10f3} },
+ { 'N', 0, {0x10d8, 0x10d8, 0x10f2} },
+ { VK_OEM_2, 0, {0x10f0, 0x10f0, 0x10f5} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, 0x0003} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Georgian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, CTRL + MENU */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_5, NOCAPS, {WCH_DEAD, 0xb0} },
- { 0xff, NOCAPS, {'^', WCH_NONE} }, // FIXME - why doesn't this work?
+ { VK_OEM_5, 0, {WCH_DEAD, 0xb0} },
+ { 0xff, 0, {'^', WCH_NONE} }, // FIXME - why doesn't this work?
/* Normal vs Shifted */
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
- { VK_OEM_6, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { 0xff, NOCAPS, {0xb4, '`'} },
+ { VK_OEM_6, 0, {WCH_DEAD, WCH_DEAD} },
+ { 0xff, 0, {0xb4, '`'} },
/* First letter row */
- { 'W', CAPS, {'w', 'W'} },
- { 'R', CAPS, {'r', 'R'} },
- { 'T', CAPS, {'t', 'T'} },
- { 'Z', CAPS, {'z', 'Z'} },
- { 'U', CAPS, {'u', 'U'} },
- { 'I', CAPS, {'i', 'I'} },
- { 'O', CAPS, {'o', 'O'} },
- { 'P', CAPS, {'p', 'P'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'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, {0xf6, 0xd6} },
- { VK_OEM_7, CAPS, {0xe4, 0xc4} },
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { VK_OEM_3, CAPLOK, {0xf6, 0xd6} },
+ { VK_OEM_7, CAPLOK, {0xe4, 0xc4} },
/* Third letter row */
- { 'Y', CAPS, {'y', 'Y'} },
- { 'X', CAPS, {'x', 'X'} },
- { 'C', CAPS, {'c', 'C'} },
- { 'V', CAPS, {'v', 'V'} },
- { 'B', CAPS, {'b', 'B'} },
- { 'N', CAPS, {'n', 'N'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'N', CAPLOK, {'n', 'N'} },
/* Specials */
- { VK_OEM_COMMA, CAPS, {',', ';'} },
- { VK_OEM_PERIOD, CAPS, {'.', ':'} },
- { VK_DECIMAL, NOCAPS, {',',','} },
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_COMMA, CAPLOK, {',', ';'} },
+ { VK_OEM_PERIOD, CAPLOK, {'.', ':'} },
+ { VK_DECIMAL, 0, {',',','} },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { '3', CAPS, {'3', 0xa7, 0xb3} },
- { '7', CAPS, {'7', '/', '{'} },
- { '8', CAPS, {'8', '(', '['} },
- { '9', CAPS, {'9', ')', ']'} },
- { '0', CAPS, {'0', '=', '}'} },
- { VK_OEM_4, CAPS, {0xdf, '?', '\\'} },
- { 'Q', CAPS, {'q', 'Q', '@'} },
- { 'E', CAPS, {'e', 'E', 0x20ac} },
- { 'M', CAPS, {'m', 'M', 0xb5} },
- { VK_OEM_102, NOCAPS, {'<', '>', '|'} }, // FIXME - why doesn't this work?
+ { '3', CAPLOK, {'3', 0xa7, 0xb3} },
+ { '7', CAPLOK, {'7', '/', '{'} },
+ { '8', CAPLOK, {'8', '(', '['} },
+ { '9', CAPLOK, {'9', ')', ']'} },
+ { '0', CAPLOK, {'0', '=', '}'} },
+ { VK_OEM_4, CAPLOK, {0xdf, '?', '\\'} },
+ { 'Q', CAPLOK, {'q', 'Q', '@'} },
+ { 'E', CAPLOK, {'e', 'E', 0x20ac} },
+ { 'M', CAPLOK, {'m', 'M', 0xb5} },
+ { VK_OEM_102, 0, {'<', '>', '|'} }, // FIXME - why doesn't this work?
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, C-S-x */
/* Legacy Ascii generators */
- { VK_OEM_1, CAPS, {0xfc, 0xdc, WCH_NONE, 0x1b} },
- { VK_OEM_PLUS, CAPS, {'+', '*', '~', 0x1d} },
- { VK_OEM_2, CAPS, {'#', '\'', WCH_NONE, 0x1c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, WCH_NONE, 0x1b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n'} },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, WCH_NONE, 0x03} },
+ { VK_OEM_1, CAPLOK, {0xfc, 0xdc, WCH_NONE, 0x1b} },
+ { VK_OEM_PLUS, CAPLOK, {'+', '*', '~', 0x1d} },
+ { VK_OEM_2, CAPLOK, {'#', '\'', WCH_NONE, 0x1c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, WCH_NONE, 0x1b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n'} },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, WCH_NONE, 0x03} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl, C-S-x */
- { '2', CAPS, {'2', '\"', 0xb2, WCH_NONE, 0x00} },
- { '6', CAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x1e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, WCH_NONE, 0x1f} },
+ { '2', CAPLOK, {'2', '\"', 0xb2, WCH_NONE, 0x00} },
+ { '6', CAPLOK, {'6', '&', WCH_NONE, WCH_NONE, 0x1e} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, WCH_NONE, 0x1f} },
{ 0, 0 }
};
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- German doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, CTRL + MENU */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_5, NOCAPS, {WCH_DEAD, 0xb0} },
- { 0xff, NOCAPS, {'^', WCH_NONE} }, // FIXME - why doesn't this work?
+ { VK_OEM_5, 0, {WCH_DEAD, 0xb0} },
+ { 0xff, 0, {'^', WCH_NONE} }, // FIXME - why doesn't this work?
/* Normal vs Shifted */
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
- { VK_OEM_6, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { 0xff, NOCAPS, {0xb4, '`'} },
+ { VK_OEM_6, 0, {WCH_DEAD, WCH_DEAD} },
+ { 0xff, 0, {0xb4, '`'} },
/* First letter row */
- { 'W', CAPS, {'w', 'W'} },
- { 'R', CAPS, {'r', 'R'} },
- { 'T', CAPS, {'t', 'T'} },
- { 'Z', CAPS, {'z', 'Z'} },
- { 'U', CAPS, {'u', 'U'} },
- { 'I', CAPS, {'i', 'I'} },
- { 'O', CAPS, {'o', 'O'} },
- { 'P', CAPS, {'p', 'P'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'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, {0xf6, 0xd6} },
- { VK_OEM_7, CAPS, {0xe4, 0xc4} },
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { VK_OEM_3, CAPLOK, {0xf6, 0xd6} },
+ { VK_OEM_7, CAPLOK, {0xe4, 0xc4} },
/* Third letter row */
- { 'Y', CAPS, {'y', 'Y'} },
- { 'X', CAPS, {'x', 'X'} },
- { 'C', CAPS, {'c', 'C'} },
- { 'V', CAPS, {'v', 'V'} },
- { 'B', CAPS, {'b', 'B'} },
- { 'N', CAPS, {'n', 'N'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'N', CAPLOK, {'n', 'N'} },
/* Specials */
- { VK_OEM_COMMA, CAPS, {',', ';'} },
- { VK_OEM_PERIOD, CAPS, {'.', ':'} },
- { VK_DECIMAL, NOCAPS, {',',','} },
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_COMMA, CAPLOK, {',', ';'} },
+ { VK_OEM_PERIOD, CAPLOK, {'.', ':'} },
+ { VK_DECIMAL, 0, {',',','} },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { '3', CAPS, {'3', 0xa7, 0xb3} },
- { '7', CAPS, {'7', '/', '{'} },
- { '8', CAPS, {'8', '(', '['} },
- { '9', CAPS, {'9', ')', ']'} },
- { '0', CAPS, {'0', '=', '}'} },
- { VK_OEM_4, CAPS, {0xdf, '?', '\\'} },
- { 'Q', CAPS, {'q', 'Q', '@'} },
- { 'E', CAPS, {'e', 'E', 0x20ac} },
- { 'M', CAPS, {'m', 'M', 0xb5} },
- { VK_OEM_102, NOCAPS, {'<', '>', '|'} }, // FIXME - why doesn't this work?
+ { '3', CAPLOK, {'3', 0xa7, 0xb3} },
+ { '7', CAPLOK, {'7', '/', '{'} },
+ { '8', CAPLOK, {'8', '(', '['} },
+ { '9', CAPLOK, {'9', ')', ']'} },
+ { '0', CAPLOK, {'0', '=', '}'} },
+ { VK_OEM_4, CAPLOK, {0xdf, '?', '\\'} },
+ { 'Q', CAPLOK, {'q', 'Q', '@'} },
+ { 'E', CAPLOK, {'e', 'E', 0x20ac} },
+ { 'M', CAPLOK, {'m', 'M', 0xb5} },
+ { VK_OEM_102, 0, {'<', '>', '|'} }, // FIXME - why doesn't this work?
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, C-S-x */
/* Legacy Ascii generators */
- { VK_OEM_1, CAPS, {0xfc, 0xdc, WCH_NONE, 0x1b} },
- { VK_OEM_PLUS, CAPS, {'+', '*', '~', 0x1d} },
- { VK_OEM_2, CAPS, {'#', '\'', WCH_NONE, 0x1c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, WCH_NONE, 0x1b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n'} },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, WCH_NONE, 0x03} },
+ { VK_OEM_1, CAPLOK, {0xfc, 0xdc, WCH_NONE, 0x1b} },
+ { VK_OEM_PLUS, CAPLOK, {'+', '*', '~', 0x1d} },
+ { VK_OEM_2, CAPLOK, {'#', '\'', WCH_NONE, 0x1c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, WCH_NONE, 0x1b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n'} },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, WCH_NONE, 0x03} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl, C-S-x */
- { '2', CAPS, {'2', '\"', 0xb2, WCH_NONE, 0x00} },
- { '6', CAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x1e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, WCH_NONE, 0x1f} },
+ { '2', CAPLOK, {'2', '\"', 0xb2, WCH_NONE, 0x00} },
+ { '6', CAPLOK, {'6', '&', WCH_NONE, WCH_NONE, 0x1e} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, WCH_NONE, 0x1f} },
{ 0, 0 }
};
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- German doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, CTRL + MENU */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_5, NOCAPS, {WCH_DEAD, 0xb0} },
- { 0xff, NOCAPS, {'^', WCH_NONE} }, // FIXME - why doesn't this work?
+ { VK_OEM_5, 0, {WCH_DEAD, 0xb0} },
+ { 0xff, 0, {'^', WCH_NONE} }, // FIXME - why doesn't this work?
/* Normal vs Shifted */
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
- { VK_OEM_6, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { 0xff, NOCAPS, {0xb4, '`'} },
+ { VK_OEM_6, 0, {WCH_DEAD, WCH_DEAD} },
+ { 0xff, 0, {0xb4, '`'} },
/* First letter row */
- { 'W', CAPS, {'w', 'W'} },
- { 'R', CAPS, {'r', 'R'} },
- { 'T', CAPS, {'t', 'T'} },
- { 'Z', CAPS, {'z', 'Z'} },
- { 'U', CAPS, {'u', 'U'} },
- { 'I', CAPS, {'i', 'I'} },
- { 'O', CAPS, {'o', 'O'} },
- { 'P', CAPS, {'p', 'P'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'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, {0xf6, 0xd6} },
- { VK_OEM_7, CAPS, {0xe4, 0xc4} },
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { VK_OEM_3, CAPLOK, {0xf6, 0xd6} },
+ { VK_OEM_7, CAPLOK, {0xe4, 0xc4} },
/* Third letter row */
- { 'Y', CAPS, {'y', 'Y'} },
- { 'X', CAPS, {'x', 'X'} },
- { 'C', CAPS, {'c', 'C'} },
- { 'V', CAPS, {'v', 'V'} },
- { 'B', CAPS, {'b', 'B'} },
- { 'N', CAPS, {'n', 'N'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'N', CAPLOK, {'n', 'N'} },
/* Specials */
- { VK_OEM_COMMA, CAPS, {',', ';'} },
- { VK_OEM_PERIOD, CAPS, {'.', ':'} },
- { VK_DECIMAL, NOCAPS, {',',','} },
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_COMMA, CAPLOK, {',', ';'} },
+ { VK_OEM_PERIOD, CAPLOK, {'.', ':'} },
+ { VK_DECIMAL, 0, {',',','} },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { '3', CAPS, {'3', 0xa7, 0xb3} },
- { '7', CAPS, {'7', '/', '{'} },
- { '8', CAPS, {'8', '(', '['} },
- { '9', CAPS, {'9', ')', ']'} },
- { '0', CAPS, {'0', '=', '}'} },
- { VK_OEM_4, CAPS, {0xdf, '?', '\\'} },
- { 'Q', CAPS, {'q', 'Q', '@'} },
- { 'E', CAPS, {'e', 'E', 0x20ac} },
- { 'M', CAPS, {'m', 'M', 0xb5} },
- { VK_OEM_102, NOCAPS, {'<', '>', '|'} }, // FIXME - why doesn't this work?
+ { '3', CAPLOK, {'3', 0xa7, 0xb3} },
+ { '7', CAPLOK, {'7', '/', '{'} },
+ { '8', CAPLOK, {'8', '(', '['} },
+ { '9', CAPLOK, {'9', ')', ']'} },
+ { '0', CAPLOK, {'0', '=', '}'} },
+ { VK_OEM_4, CAPLOK, {0xdf, '?', '\\'} },
+ { 'Q', CAPLOK, {'q', 'Q', '@'} },
+ { 'E', CAPLOK, {'e', 'E', 0x20ac} },
+ { 'M', CAPLOK, {'m', 'M', 0xb5} },
+ { VK_OEM_102, 0, {'<', '>', '|'} }, // FIXME - why doesn't this work?
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, C-S-x */
/* Legacy Ascii generators */
- { VK_OEM_1, CAPS, {0xfc, 0xdc, WCH_NONE, 0x1b} },
- { VK_OEM_PLUS, CAPS, {'+', '*', '~', 0x1d} },
- { VK_OEM_2, CAPS, {'#', '\'', WCH_NONE, 0x1c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, WCH_NONE, 0x1b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n'} },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, WCH_NONE, 0x03} },
+ { VK_OEM_1, CAPLOK, {0xfc, 0xdc, WCH_NONE, 0x1b} },
+ { VK_OEM_PLUS, CAPLOK, {'+', '*', '~', 0x1d} },
+ { VK_OEM_2, CAPLOK, {'#', '\'', WCH_NONE, 0x1c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, WCH_NONE, 0x1b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n'} },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, WCH_NONE, 0x03} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl, C-S-x */
- { '2', CAPS, {'2', '\"', 0xb2, WCH_NONE, 0x00} },
- { '6', CAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x1e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, WCH_NONE, 0x1f} },
+ { '2', CAPLOK, {'2', '\"', 0xb2, WCH_NONE, 0x00} },
+ { '6', CAPLOK, {'6', '&', WCH_NONE, WCH_NONE, 0x1e} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, WCH_NONE, 0x1f} },
{ 0, 0 }
};
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- German doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, CTRL + MENU */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_5, NOCAPS, {WCH_DEAD, 0xb0} },
- { 0xff, NOCAPS, {'^', WCH_NONE} }, // FIXME - why doesn't this work?
+ { VK_OEM_5, 0, {WCH_DEAD, 0xb0} },
+ { 0xff, 0, {'^', WCH_NONE} }, // FIXME - why doesn't this work?
/* Normal vs Shifted */
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
- { VK_OEM_6, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { 0xff, NOCAPS, {0xb4, '`'} },
+ { VK_OEM_6, 0, {WCH_DEAD, WCH_DEAD} },
+ { 0xff, 0, {0xb4, '`'} },
/* First letter row */
- { 'W', CAPS, {'w', 'W'} },
- { 'R', CAPS, {'r', 'R'} },
- { 'T', CAPS, {'t', 'T'} },
- { 'Z', CAPS, {'z', 'Z'} },
- { 'U', CAPS, {'u', 'U'} },
- { 'I', CAPS, {'i', 'I'} },
- { 'O', CAPS, {'o', 'O'} },
- { 'P', CAPS, {'p', 'P'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'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, {0xf6, 0xd6} },
- { VK_OEM_7, CAPS, {0xe4, 0xc4} },
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { VK_OEM_3, CAPLOK, {0xf6, 0xd6} },
+ { VK_OEM_7, CAPLOK, {0xe4, 0xc4} },
/* Third letter row */
- { 'Y', CAPS, {'y', 'Y'} },
- { 'X', CAPS, {'x', 'X'} },
- { 'C', CAPS, {'c', 'C'} },
- { 'V', CAPS, {'v', 'V'} },
- { 'B', CAPS, {'b', 'B'} },
- { 'N', CAPS, {'n', 'N'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'N', CAPLOK, {'n', 'N'} },
/* Specials */
- { VK_OEM_COMMA, CAPS, {',', ';'} },
- { VK_OEM_PERIOD, CAPS, {'.', ':'} },
- { VK_DECIMAL, NOCAPS, {',',','} },
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_COMMA, CAPLOK, {',', ';'} },
+ { VK_OEM_PERIOD, CAPLOK, {'.', ':'} },
+ { VK_DECIMAL, 0, {',',','} },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { '3', CAPS, {'3', 0xa7, 0xb3} },
- { '7', CAPS, {'7', '/', '{'} },
- { '8', CAPS, {'8', '(', '['} },
- { '9', CAPS, {'9', ')', ']'} },
- { '0', CAPS, {'0', '=', '}'} },
- { VK_OEM_4, CAPS, {0xdf, '?', '\\'} },
- { 'Q', CAPS, {'q', 'Q', '@'} },
- { 'E', CAPS, {'e', 'E', 0x20ac} },
- { 'M', CAPS, {'m', 'M', 0xb5} },
- { VK_OEM_102, NOCAPS, {'<', '>', '|'} }, // FIXME - why doesn't this work?
+ { '3', CAPLOK, {'3', 0xa7, 0xb3} },
+ { '7', CAPLOK, {'7', '/', '{'} },
+ { '8', CAPLOK, {'8', '(', '['} },
+ { '9', CAPLOK, {'9', ')', ']'} },
+ { '0', CAPLOK, {'0', '=', '}'} },
+ { VK_OEM_4, CAPLOK, {0xdf, '?', '\\'} },
+ { 'Q', CAPLOK, {'q', 'Q', '@'} },
+ { 'E', CAPLOK, {'e', 'E', 0x20ac} },
+ { 'M', CAPLOK, {'m', 'M', 0xb5} },
+ { VK_OEM_102, 0, {'<', '>', '|'} }, // FIXME - why doesn't this work?
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, C-S-x */
/* Legacy Ascii generators */
- { VK_OEM_1, CAPS, {0xfc, 0xdc, WCH_NONE, 0x1b} },
- { VK_OEM_PLUS, CAPS, {'+', '*', '~', 0x1d} },
- { VK_OEM_2, CAPS, {'#', '\'', WCH_NONE, 0x1c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, WCH_NONE, 0x1b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n'} },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, WCH_NONE, 0x03} },
+ { VK_OEM_1, CAPLOK, {0xfc, 0xdc, WCH_NONE, 0x1b} },
+ { VK_OEM_PLUS, CAPLOK, {'+', '*', '~', 0x1d} },
+ { VK_OEM_2, CAPLOK, {'#', '\'', WCH_NONE, 0x1c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, WCH_NONE, 0x1b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n'} },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, WCH_NONE, 0x03} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl, C-S-x */
- { '2', CAPS, {'2', '\"', 0xb2, WCH_NONE, 0x00} },
- { '6', CAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x1e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, WCH_NONE, 0x1f} },
+ { '2', CAPLOK, {'2', '\"', 0xb2, WCH_NONE, 0x00} },
+ { '6', CAPLOK, {'6', '&', WCH_NONE, WCH_NONE, 0x1e} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, WCH_NONE, 0x1f} },
{ 0, 0 }
};
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- German doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
+
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { '3', NOCAPS, {'3', '#'} },
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '3', 0, {'3', '#'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
/* Ctrl-6 generates RS */
- { '7', NOCAPS, {'7', '&'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
- { 'Q', NOCAPS, {';', ':'} },
+ { '7', 0, {'7', '&'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
+ { 'Q', 0, {';', ':'} },
/* Specials */
/* Ctrl-_ generates GR */
- { VK_OEM_PLUS ,NOCAPS, {'=', '+'} },
- { VK_OEM_7 ,NOCAPS, {'\'','\"'} },
- { VK_OEM_3 ,NOCAPS, {'`', '~'} },
- { VK_OEM_COMMA ,NOCAPS, {',', '<'} },
- { VK_OEM_PERIOD ,NOCAPS, {'.', '>'} },
- { VK_OEM_2 ,NOCAPS, {'/', '?'} },
+ { VK_OEM_PLUS ,0, {'=', '+'} },
+ { VK_OEM_7 ,0, {'\'','\"'} },
+ { VK_OEM_3 ,0, {'`', '~'} },
+ { VK_OEM_COMMA ,0, {',', '<'} },
+ { VK_OEM_PERIOD ,0, {'.', '>'} },
+ { VK_OEM_2 ,0, {'/', '?'} },
/* Keys that do not have shift states */
- { VK_TAB ,NOCAPS, {'\t','\t'} },
- { VK_ADD ,NOCAPS, {'+', '+'} },
- { VK_SUBTRACT,NOCAPS, {'-', '-'} },
- { VK_MULTIPLY,NOCAPS, {'*', '*'} },
- { VK_DIVIDE ,NOCAPS, {'/', '/'} },
- { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE ,NOCAPS, {' ', ' '} },
+ { VK_TAB ,0, {'\t','\t'} },
+ { VK_ADD ,0, {'+', '+'} },
+ { VK_SUBTRACT,0, {'-', '-'} },
+ { VK_MULTIPLY,0, {'*', '*'} },
+ { VK_DIVIDE ,0, {'/', '/'} },
+ { VK_ESCAPE ,0, {0x1b,0x1b} },
+ { VK_SPACE ,0, {' ', ' '} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_1, NOCAPS, {WCH_DEAD, WCH_DEAD, WCH_NONE} },
- { VK_EMPTY, NOCAPS, {';', 0x00A8, WCH_NONE} },
- { 'W', NOCAPS, {0x3C2, WCH_DEAD, WCH_NONE} },
- { VK_EMPTY, NOCAPS, {0x3C2, 0x385, WCH_NONE} },
+ { VK_OEM_1, 0, {WCH_DEAD, WCH_DEAD, WCH_NONE} },
+ { VK_EMPTY, 0, {';', 0x00A8, WCH_NONE} },
+ { 'W', 0, {0x3C2, WCH_DEAD, WCH_NONE} },
+ { VK_EMPTY, 0, {0x3C2, 0x385, WCH_NONE} },
{ VK_OEM_4, 0, {'[', '{', 0x1b /* ESC */} },
{ VK_OEM_6, 0, {']', '}', 0x1d /* GS */} },
{ VK_OEM_5, 0, {'\\','|', 0x1c /* FS */} },
/* Normal, Shifted, Ctrl, C-S-x */
/* The alphabet */
- { 'A', CAPS, {0x3B1, 0x391} },
- { 'B', CAPS, {0x3B2, 0x392} },
- { 'C', CAPS, {0x3C8, 0x3A8} },
- { 'D', CAPS, {0x3B4, 0x394} },
- { 'E', CAPS, {0x3B5, 0x395} },
- { 'F', CAPS, {0x3C6, 0x3A6} },
- { 'G', CAPS, {0x3B3, 0x393} },
- { 'H', CAPS, {0x3B7, 0x397} },
- { 'I', CAPS, {0x3B9, 0x399} },
- { 'J', CAPS, {0x3BE, 0x39E} },
- { 'K', CAPS, {0x3BA, 0x39A} },
- { 'L', CAPS, {0x3BB, 0x39B} },
- { 'M', CAPS, {0x3BC, 0x39C} },
- { 'N', CAPS, {0x3BD, 0x39D} },
- { 'O', CAPS, {0x3BF, 0x39F} },
- { 'P', CAPS, {0x3C0, 0x3A0} },
-// { 'Q', CAPS, { ';' , ';' } },
- { 'R', CAPS, {0x3C1, 0x3A1} },
- { 'S', CAPS, {0x3C3, 0x3A3} },
- { 'T', CAPS, {0x3C4, 0x3A4} },
- { 'U', CAPS, {0x3B8, 0x398} },
- { 'V', CAPS, {0x3C9, 0x3A9} },
- { 'W', CAPS, {0x3C2, 0x385} },
- { 'X', CAPS, {0x3C7, 0x3A7} },
- { 'Y', CAPS, {0x3C5, 0x3A5} },
- { 'Z', CAPS, {0x3B6, 0x396} },
+ { 'A', CAPLOK, {0x3B1, 0x391} },
+ { 'B', CAPLOK, {0x3B2, 0x392} },
+ { 'C', CAPLOK, {0x3C8, 0x3A8} },
+ { 'D', CAPLOK, {0x3B4, 0x394} },
+ { 'E', CAPLOK, {0x3B5, 0x395} },
+ { 'F', CAPLOK, {0x3C6, 0x3A6} },
+ { 'G', CAPLOK, {0x3B3, 0x393} },
+ { 'H', CAPLOK, {0x3B7, 0x397} },
+ { 'I', CAPLOK, {0x3B9, 0x399} },
+ { 'J', CAPLOK, {0x3BE, 0x39E} },
+ { 'K', CAPLOK, {0x3BA, 0x39A} },
+ { 'L', CAPLOK, {0x3BB, 0x39B} },
+ { 'M', CAPLOK, {0x3BC, 0x39C} },
+ { 'N', CAPLOK, {0x3BD, 0x39D} },
+ { 'O', CAPLOK, {0x3BF, 0x39F} },
+ { 'P', CAPLOK, {0x3C0, 0x3A0} },
+// { 'Q', CAPLOK, { ';' , ';' } },
+ { 'R', CAPLOK, {0x3C1, 0x3A1} },
+ { 'S', CAPLOK, {0x3C3, 0x3A3} },
+ { 'T', CAPLOK, {0x3C4, 0x3A4} },
+ { 'U', CAPLOK, {0x3B8, 0x398} },
+ { 'V', CAPLOK, {0x3C9, 0x3A9} },
+ { 'W', CAPLOK, {0x3C2, 0x385} },
+ { 'X', CAPLOK, {0x3C7, 0x3A7} },
+ { 'Y', CAPLOK, {0x3C5, 0x3A5} },
+ { 'Z', CAPLOK, {0x3B6, 0x396} },
/* Legacy Ascii generators */
- { '2', NOCAPS, {'2', '@', WCH_NONE, 0} },
- { '6', NOCAPS, {'6', '^', WCH_NONE, 0x1e /* RS */} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x1f /* US */} },
+ { '2', 0, {'2', '@', WCH_NONE, 0} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x1e /* RS */} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x1f /* US */} },
{ 0, 0 }
};
{ 0, 0, 0}
};
-
ROSDATA VSC_LPWSTR key_names[] = {
{ 0x00, L"" },
{ 0x01, L"Esc" },
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Greek doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _MSC_VER
#ifndef WINAPI
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
+
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
enum
{
VK_MULTIPLY, // 37: ?
VK_LMENU, // 38: lalt
VK_SPACE, // 39: space
- VK_CAPITAL, // 3A: caps lock?
+ VK_CAPITAL, // 3A: CAPLOK lock?
/* - 3b - */
/* F-Keys */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { '3', NOCAPS, {'3', '#'} },
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '3', 0, {'3', '#'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
/* Ctrl-6 generates RS */
- { '7', NOCAPS, {'7', '&'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
+ { '7', 0, {'7', '&'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
/* Specials */
/* Ctrl-_ generates ? */
- { VK_OEM_PLUS ,NOCAPS, {'=', '+'} },
- { VK_OEM_1 ,NOCAPS, {PEY_SOFIT, PEY_SOFIT} },
- { 'Q' ,NOCAPS, {TAV, TAV} },
- { 'W' ,NOCAPS, {TSADI_SOFIT, TSADI_SOFIT} },
- { VK_OEM_7 ,NOCAPS, {'\'','\"'} },
- { VK_OEM_3 ,NOCAPS, {'`', '~'} },
- { VK_OEM_COMMA ,NOCAPS, {',', '<'} },
- { VK_OEM_PERIOD ,NOCAPS, {'.', '>'} },
- { VK_OEM_2 ,NOCAPS, {'/', '?'} },
+ { VK_OEM_PLUS ,0, {'=', '+'} },
+ { VK_OEM_1 ,0, {PEY_SOFIT, PEY_SOFIT} },
+ { 'Q' ,0, {TAV, TAV} },
+ { 'W' ,0, {TSADI_SOFIT, TSADI_SOFIT} },
+ { VK_OEM_7 ,0, {'\'','\"'} },
+ { VK_OEM_3 ,0, {'`', '~'} },
+ { VK_OEM_COMMA ,0, {',', '<'} },
+ { VK_OEM_PERIOD ,0, {'.', '>'} },
+ { VK_OEM_2 ,0, {'/', '?'} },
/* Keys that do not have shift states */
- { VK_TAB ,NOCAPS, {'\t','\t'} },
- { VK_ADD ,NOCAPS, {'+', '+'} },
- { VK_SUBTRACT,NOCAPS, {'-', '-'} },
- { VK_MULTIPLY,NOCAPS, {'*', '*'} },
- { VK_DIVIDE ,NOCAPS, {'/', '/'} },
- { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE ,NOCAPS, {' ', ' '} },
+ { VK_TAB ,0, {'\t','\t'} },
+ { VK_ADD ,0, {'+', '+'} },
+ { VK_SUBTRACT,0, {'-', '-'} },
+ { VK_MULTIPLY,0, {'*', '*'} },
+ { VK_DIVIDE ,0, {'/', '/'} },
+ { VK_ESCAPE ,0, {0x1b,0x1b} },
+ { VK_SPACE ,0, {' ', ' '} },
{ 0, 0 }
};
/* Normal, Shifted, Ctrl, C-S-x */
/* The alphabet */
- { 'A', NOCAPS, {SHIN, SHIN, 0x01, 0x01} },
- { 'B', NOCAPS, {NUN, NUN, 0x02, 0x02} },
- { 'C', NOCAPS, {BET, BET, 0x03, 0x03} },
- { 'D', NOCAPS, {GIMEL, GIMEL, 0x04, 0x04} },
- { 'E', NOCAPS, {QOF, QOF, 0x05, 0x05} },
- { 'F', NOCAPS, {KAF, KAF, 0x06, 0x06} },
- { 'G', NOCAPS, {AYIN, AYIN, 0x07, 0x07} },
- { 'H', NOCAPS, {QOF, QOF, 0x08, 0x08} },
- { 'I', NOCAPS, {NUN_SOFIT, NUN_SOFIT, 0x09, 0x09} },
- { 'J', NOCAPS, {HET, HET, 0x0a, 0x0a} },
- { 'K', NOCAPS, {LAMED, LAMED, 0x0b, 0x0b} },
- { 'L', NOCAPS, {KAF_SOFIT, KAF_SOFIT, 0x0c, 0x0c} },
- { 'M', NOCAPS, {TSADI, TSADI, 0x0d, 0x0d} },
- { 'N', NOCAPS, {MEM, MEM, 0x0e, 0x0e} },
- { 'O', NOCAPS, {MEM_SOFIT, MEM_SOFIT, 0x0f, 0x0f} },
- { 'P', NOCAPS, {PEY, PEY, 0x10, 0x10} },
- { VK_OEM_2, NOCAPS, {'/', '?', 0x11, 0x11} },
- { 'R', NOCAPS, {RESH, RESH, 0x12, 0x12} },
- { 'S', NOCAPS, {DALET, DALET, 0x13, 0x13} },
- { 'T', NOCAPS, {ALEF, ALEF, 0x14, 0x14} },
- { 'U', NOCAPS, {VAV, VAV, 0x15, 0x15} },
- { 'V', NOCAPS, {HEY, HEY, 0x16, 0x16} },
- { VK_OEM_7, NOCAPS, {'\'', '\"', 0x17, 0x17} },
- { 'X', NOCAPS, {SAMEKH, SAMEKH, 0x18, 0x18} },
- { 'Y', NOCAPS, {TET, TET, 0x19, 0x19} },
- { 'Z', NOCAPS, {ZAYIN, ZAYIN, 0x1a, 0x1a} },
+ { 'A', 0, {SHIN, SHIN, 0x01, 0x01} },
+ { 'B', 0, {NUN, NUN, 0x02, 0x02} },
+ { 'C', 0, {BET, BET, 0x03, 0x03} },
+ { 'D', 0, {GIMEL, GIMEL, 0x04, 0x04} },
+ { 'E', 0, {QOF, QOF, 0x05, 0x05} },
+ { 'F', 0, {KAF, KAF, 0x06, 0x06} },
+ { 'G', 0, {AYIN, AYIN, 0x07, 0x07} },
+ { 'H', 0, {QOF, QOF, 0x08, 0x08} },
+ { 'I', 0, {NUN_SOFIT, NUN_SOFIT, 0x09, 0x09} },
+ { 'J', 0, {HET, HET, 0x0a, 0x0a} },
+ { 'K', 0, {LAMED, LAMED, 0x0b, 0x0b} },
+ { 'L', 0, {KAF_SOFIT, KAF_SOFIT, 0x0c, 0x0c} },
+ { 'M', 0, {TSADI, TSADI, 0x0d, 0x0d} },
+ { 'N', 0, {MEM, MEM, 0x0e, 0x0e} },
+ { 'O', 0, {MEM_SOFIT, MEM_SOFIT, 0x0f, 0x0f} },
+ { 'P', 0, {PEY, PEY, 0x10, 0x10} },
+ { VK_OEM_2, 0, {'/', '?', 0x11, 0x11} },
+ { 'R', 0, {RESH, RESH, 0x12, 0x12} },
+ { 'S', 0, {DALET, DALET, 0x13, 0x13} },
+ { 'T', 0, {ALEF, ALEF, 0x14, 0x14} },
+ { 'U', 0, {VAV, VAV, 0x15, 0x15} },
+ { 'V', 0, {HEY, HEY, 0x16, 0x16} },
+ { VK_OEM_7, 0, {'\'', '\"', 0x17, 0x17} },
+ { 'X', 0, {SAMEKH, SAMEKH, 0x18, 0x18} },
+ { 'Y', 0, {TET, TET, 0x19, 0x19} },
+ { 'Z', 0, {ZAYIN, ZAYIN, 0x1a, 0x1a} },
/* Legacy Ascii generators */
- { '2', NOCAPS, {'2', '@', WCH_NONE, 0} },
- { '6', NOCAPS, {'6', '^', WCH_NONE, 0x1e /* RS */} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x1f /* US */} },
+ { '2', 0, {'2', '@', WCH_NONE, 0} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x1e /* RS */} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x1f /* US */} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Hebrew doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
+
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
/* The numbers */
- { '1', NOCAPS, {'1', '\''} },
+ { '1', 0, {'1', '\''} },
/* Ctrl-2 generates NUL */
- { '3', NOCAPS, {'3', '+'} },
- { '4', NOCAPS, {'4', '!'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '3', 0, {'3', '+'} },
+ { '4', 0, {'4', '!'} },
+ { '5', 0, {'5', '%'} },
/* Ctrl-6 generates RS */
- { '7', NOCAPS, {'7', '='} },
- { '8', NOCAPS, {'8', '('} },
- { '9', NOCAPS, {'9', ')'} },
- { '0', NOCAPS, {'ö', 'Ö'} },
+ { '7', 0, {'7', '='} },
+ { '8', 0, {'8', '('} },
+ { '9', 0, {'9', ')'} },
+ { '0', 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'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'E', CAPLOK, {'e', 'E'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'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'} },
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'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'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'M', CAPLOK, {'m', 'M'} },
/* Specials */
/* Ctrl-_ generates US */
- { VK_OEM_PLUS ,NOCAPS, {'ó', 'Ó'} },
- { VK_OEM_1 ,NOCAPS, {'é', 'É'} },
- { VK_OEM_7 ,NOCAPS, {'û', 'Û'} },
- { VK_OEM_3 ,NOCAPS, {'0', '§'} },
- { VK_OEM_COMMA ,NOCAPS, {',', '?'} },
- { VK_OEM_PERIOD ,NOCAPS, {'.', ':'} },
- { VK_OEM_2 ,NOCAPS, {'-', '_'} },
+ { VK_OEM_PLUS ,0, {'ó', 'Ó'} },
+ { VK_OEM_1 ,0, {'é', 'É'} },
+ { VK_OEM_7 ,0, {'û', 'Û'} },
+ { VK_OEM_3 ,0, {'0', '§'} },
+ { VK_OEM_COMMA ,0, {',', '?'} },
+ { VK_OEM_PERIOD ,0, {'.', ':'} },
+ { VK_OEM_2 ,0, {'-', '_'} },
/* Keys that do not have shift states */
- { VK_TAB ,NOCAPS, {'\t','\t'} },
- { VK_ADD ,NOCAPS, {'+', '+'} },
- { VK_SUBTRACT,NOCAPS, {'-', '-'} },
- { VK_MULTIPLY,NOCAPS, {'*', '*'} },
- { VK_DIVIDE ,NOCAPS, {'/', '/'} },
- { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE ,NOCAPS, {' ', ' '} },
+ { VK_TAB ,0, {'\t','\t'} },
+ { VK_ADD ,0, {'+', '+'} },
+ { VK_SUBTRACT,0, {'-', '-'} },
+ { VK_MULTIPLY,0, {'*', '*'} },
+ { VK_DIVIDE ,0, {'/', '/'} },
+ { VK_ESCAPE ,0, {0x1b,0x1b} },
+ { VK_SPACE ,0, {' ', ' '} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, C-S-x */
/* Legacy Ascii generators */
- { '2', NOCAPS, {'2', '"', WCH_NONE, 0} },
- { '6', NOCAPS, {'6', '/', WCH_NONE, 0x1e /* RS */} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x1f /* US */} },
+ { '2', 0, {'2', '"', WCH_NONE, 0} },
+ { '6', 0, {'6', '/', WCH_NONE, 0x1e /* RS */} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x1f /* US */} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Hungarian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { '1', NOCAPS, {'1', '!' } },
- { '2', NOCAPS, {'2', '\"' } },
- { '3', NOCAPS, {'3', '#' } },
- { '4', NOCAPS, {'4', '$' } },
- { VK_OEM_4, NOCAPS, {'-', '_' } },
- { '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' } },
- { '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, {0x00e6, 0x00c6} },
- { 'Z', CAPS, {'z', 'Z' } },
- { 'X', CAPS, {'x', 'X' } },
- { 'C', CAPS, {'c', 'C' } },
- { 'V', CAPS, {'v', 'V' } },
- { 'B', CAPS, {'b', 'B' } },
- { 'N', CAPS, {'n', 'N' } },
- { VK_OEM_COMMA, NOCAPS, {',', ';' } },
- { VK_OEM_PERIOD, NOCAPS, {'.', ':' } },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { '1', 0, {'1', '!' } },
+ { '2', 0, {'2', '\"' } },
+ { '3', 0, {'3', '#' } },
+ { '4', 0, {'4', '$' } },
+ { VK_OEM_4, 0, {'-', '_' } },
+ { 'W', CAPLOK, {'w', 'W' } },
+ { 'R', CAPLOK, {'r', 'R' } },
+ { 'T', CAPLOK, {'t', 'T' } },
+ { 'Y', CAPLOK, {'y', 'Y' } },
+ { 'U', CAPLOK, {'u', 'U' } },
+ { 'I', CAPLOK, {'i', 'I' } },
+ { 'O', CAPLOK, {'o', 'O' } },
+ { 'P', CAPLOK, {'p', 'P' } },
+ { 'A', CAPLOK, {'a', 'A' } },
+ { 'S', CAPLOK, {'s', 'S' } },
+ { 'D', CAPLOK, {'d', 'D' } },
+ { 'F', CAPLOK, {'f', 'F' } },
+ { 'G', CAPLOK, {'g', 'G' } },
+ { 'H', CAPLOK, {'h', 'H' } },
+ { 'J', CAPLOK, {'j', 'J' } },
+ { 'K', CAPLOK, {'k', 'K' } },
+ { 'L', CAPLOK, {'l', 'L' } },
+ { VK_OEM_3, CAPLOK, {0x00e6, 0x00c6} },
+ { 'Z', CAPLOK, {'z', 'Z' } },
+ { 'X', CAPLOK, {'x', 'X' } },
+ { 'C', CAPLOK, {'c', 'C' } },
+ { 'V', CAPLOK, {'v', 'V' } },
+ { 'B', CAPLOK, {'b', 'B' } },
+ { 'N', CAPLOK, {'n', 'N' } },
+ { VK_OEM_COMMA, 0, {',', ';' } },
+ { VK_OEM_PERIOD, 0, {'.', ':' } },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { '5', NOCAPS, {'5', '%', 0x20ac } },
- { '7', NOCAPS, {'7', '/', '{' } },
- { '8', NOCAPS, {'8', '(', '[' } },
- { '9', NOCAPS, {'9', ')', ']' } },
- { '0', NOCAPS, {'0', '=', '}' } },
- { VK_OEM_PLUS, CAPS, {0x00f6, 0x00d6, '\\' } },
- { 'Q', CAPS, {'q', 'Q', '@' } },
- { 'E', CAPS, {'e', 'E', 0x20ac } },
- { VK_OEM_2, NOCAPS, {'+', '*', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, '`' } },
- { VK_OEM_7, NOCAPS, {WCH_DEAD, '\'', WCH_DEAD} },
- { 0xff, NOCAPS, {0x00b4, WCH_NONE, '^' } },
- { 'M', CAPS, {'m', 'M', 0x00b5 } },
+ { '5', 0, {'5', '%', 0x20ac } },
+ { '7', 0, {'7', '/', '{' } },
+ { '8', 0, {'8', '(', '[' } },
+ { '9', 0, {'9', ')', ']' } },
+ { '0', 0, {'0', '=', '}' } },
+ { VK_OEM_PLUS, CAPLOK, {0x00f6, 0x00d6, '\\' } },
+ { 'Q', CAPLOK, {'q', 'Q', '@' } },
+ { 'E', CAPLOK, {'e', 'E', 0x20ac } },
+ { VK_OEM_2, 0, {'+', '*', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, '`' } },
+ { VK_OEM_7, 0, {WCH_DEAD, '\'', WCH_DEAD} },
+ { 0xff, 0, {0x00b4, WCH_NONE, '^' } },
+ { 'M', CAPLOK, {'m', 'M', 0x00b5 } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl-Alt, Ctrl */
/* Legacy Ascii generators */
- { VK_OEM_5, NOCAPS, {WCH_DEAD, WCH_DEAD, 0x00b0,0x001c } },
- { 0xff, NOCAPS, {0x00b0, 0x00a8, WCH_NONE, WCH_NONE} },
- { VK_OEM_6, CAPS, {0x00f0, 0x00d0, WCH_NONE, 0x001b } },
- { VK_OEM_1, NOCAPS, {'\'', '?', '~', 0x001d } },
- { VK_OEM_MINUS, CAPS, {0x00fe, 0x00de, WCH_NONE, 0x001f } },
- { VK_OEM_102, NOCAPS, {'<', '>', '|', 0x001c } },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x007f } },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, 0x001b } },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, 0x0003 } },
+ { VK_OEM_5, 0, {WCH_DEAD, WCH_DEAD, 0x00b0,0x001c } },
+ { 0xff, 0, {0x00b0, 0x00a8, WCH_NONE, WCH_NONE} },
+ { VK_OEM_6, CAPLOK, {0x00f0, 0x00d0, WCH_NONE, 0x001b } },
+ { VK_OEM_1, 0, {'\'', '?', '~', 0x001d } },
+ { VK_OEM_MINUS, CAPLOK, {0x00fe, 0x00de, WCH_NONE, 0x001f } },
+ { VK_OEM_102, 0, {'<', '>', '|', 0x001c } },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x007f } },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b } },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003 } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl-Alt, Ctrl, S+Ctrl */
/* Legacy Ascii generators */
- { '6', NOCAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x001e} },
+ { '6', 0, {'6', '&', WCH_NONE, WCH_NONE, 0x001e} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Icelandic doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 5, 2, SHFT_INVALID, SHFT_INVALID, 3, 4 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {WCH_NONE, WCH_NONE} },
- { 'W', NOCAPS, {0x09c8, 0x0990 } },
- { 'E', NOCAPS, {0x09be, 0x0986 } },
- { 'T', NOCAPS, {0x09c2, 0x098a } },
- { 'Y', NOCAPS, {0x09ac, 0x09ad } },
- { 'U', NOCAPS, {0x09b9, 0x0999 } },
- { 'I', NOCAPS, {0x0997, 0x0998 } },
- { 'O', NOCAPS, {0x09a6, 0x09a7 } },
- { 'P', NOCAPS, {0x099c, 0x099d } },
- { VK_OEM_6, NOCAPS, {0x09bc, 0x099e } },
- { VK_OEM_5, NOCAPS, {WCH_NONE, WCH_NONE} },
- { 'G', NOCAPS, {0x09c1, 0x0989 } },
- { 'H', NOCAPS, {0x09aa, 0x09ab } },
- { 'K', NOCAPS, {0x0995, 0x0996 } },
- { 'L', NOCAPS, {0x09a4, 0x09a5 } },
- { VK_OEM_1, NOCAPS, {0x099a, 0x099b } },
- { VK_OEM_7, NOCAPS, {0x099f, 0x09a0 } },
- { 'Z', NOCAPS, {WCH_NONE, WCH_NONE} },
- { 'C', NOCAPS, {0x09ae, 0x09a3 } },
- { 'V', NOCAPS, {0x09a8, WCH_NONE} },
- { 'B', NOCAPS, {0x09ac, WCH_NONE} },
- { 'N', NOCAPS, {0x09b2, WCH_NONE} },
- { 'M', NOCAPS, {0x09b8, 0x09b6 } },
- { VK_OEM_COMMA, NOCAPS, {',', 0x09b7 } },
- { VK_OEM_PERIOD,NOCAPS, {'.', '|' } },
- { VK_OEM_2, NOCAPS, {0x09af, 0x09df } },
- { VK_OEM_102, NOCAPS, {WCH_NONE, WCH_NONE} },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {WCH_NONE, WCH_NONE} },
+ { 'W', 0, {0x09c8, 0x0990 } },
+ { 'E', 0, {0x09be, 0x0986 } },
+ { 'T', 0, {0x09c2, 0x098a } },
+ { 'Y', 0, {0x09ac, 0x09ad } },
+ { 'U', 0, {0x09b9, 0x0999 } },
+ { 'I', 0, {0x0997, 0x0998 } },
+ { 'O', 0, {0x09a6, 0x09a7 } },
+ { 'P', 0, {0x099c, 0x099d } },
+ { VK_OEM_6, 0, {0x09bc, 0x099e } },
+ { VK_OEM_5, 0, {WCH_NONE, WCH_NONE} },
+ { 'G', 0, {0x09c1, 0x0989 } },
+ { 'H', 0, {0x09aa, 0x09ab } },
+ { 'K', 0, {0x0995, 0x0996 } },
+ { 'L', 0, {0x09a4, 0x09a5 } },
+ { VK_OEM_1, 0, {0x099a, 0x099b } },
+ { VK_OEM_7, 0, {0x099f, 0x09a0 } },
+ { 'Z', 0, {WCH_NONE, WCH_NONE} },
+ { 'C', 0, {0x09ae, 0x09a3 } },
+ { 'V', 0, {0x09a8, WCH_NONE} },
+ { 'B', 0, {0x09ac, WCH_NONE} },
+ { 'N', 0, {0x09b2, WCH_NONE} },
+ { 'M', 0, {0x09b8, 0x09b6 } },
+ { VK_OEM_COMMA, 0, {',', 0x09b7 } },
+ { VK_OEM_PERIOD,0, {'.', '|' } },
+ { VK_OEM_2, 0, {0x09af, 0x09df } },
+ { VK_OEM_102, 0, {WCH_NONE, WCH_NONE} },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_MINUS, NOCAPS, {'-', 0x0983, WCH_NONE} },
+ { VK_OEM_MINUS, 0, {'-', 0x0983, WCH_NONE} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '1', NOCAPS, {'1', WCH_NONE, 0x200d, 0x09e7} },
- { '2', NOCAPS, {'2', WCH_NONE, 0x200c, 0x09e8} },
- { '3', NOCAPS, {'3', WCH_LGTR, WCH_NONE, 0x09e9} },
- { '4', NOCAPS, {'4', WCH_LGTR, WCH_NONE, 0x09ea} },
- { '5', NOCAPS, {'5', WCH_LGTR, WCH_NONE, 0x09eb} },
- { '6', NOCAPS, {'6', WCH_LGTR, WCH_NONE, 0x09ec} },
- { '7', NOCAPS, {'7', WCH_LGTR, WCH_NONE, 0x09ed} },
- { '8', NOCAPS, {'8', WCH_LGTR, WCH_NONE, 0x09ee} },
- { '9', NOCAPS, {'9', '(', WCH_NONE, 0x09ef} },
- { '0', NOCAPS, {'0', ')', WCH_NONE, 0x09e6} },
- { 'Q', NOCAPS, {0x09cc, 0x0994, WCH_NONE, 0x09d7} },
- { 'X', NOCAPS, {0x0982, 0x0981, WCH_NONE, 0x09fa} },
+ { '1', 0, {'1', WCH_NONE, 0x200d, 0x09e7} },
+ { '2', 0, {'2', WCH_NONE, 0x200c, 0x09e8} },
+ { '3', 0, {'3', WCH_LGTR, WCH_NONE, 0x09e9} },
+ { '4', 0, {'4', WCH_LGTR, WCH_NONE, 0x09ea} },
+ { '5', 0, {'5', WCH_LGTR, WCH_NONE, 0x09eb} },
+ { '6', 0, {'6', WCH_LGTR, WCH_NONE, 0x09ec} },
+ { '7', 0, {'7', WCH_LGTR, WCH_NONE, 0x09ed} },
+ { '8', 0, {'8', WCH_LGTR, WCH_NONE, 0x09ee} },
+ { '9', 0, {'9', '(', WCH_NONE, 0x09ef} },
+ { '0', 0, {'0', ')', WCH_NONE, 0x09e6} },
+ { 'Q', 0, {0x09cc, 0x0994, WCH_NONE, 0x09d7} },
+ { 'X', 0, {0x0982, 0x0981, WCH_NONE, 0x09fa} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_PLUS, NOCAPS, {0x09c3, 0x098b, WCH_NONE, 0x09e2, 0x09e0} },
- { 'R', NOCAPS, {0x09c0, 0x0988, WCH_NONE, 0x09e3, 0x09e1} },
- { VK_OEM_4, NOCAPS, {0x09a1, 0x09a2, WCH_NONE, 0x09dc, 0x09dd} },
- { 'A', NOCAPS, {0x09cb, 0x0993, WCH_NONE, 0x09f4, 0x09f5} },
- { 'S', NOCAPS, {0x09c7, 0x098f, WCH_NONE, 0x09f6, 0x09f7} },
- { 'D', NOCAPS, {0x09cd, 0x0985, WCH_NONE, 0x09f8, 0x09f9} },
- { 'F', NOCAPS, {0x09bf, 0x0987, WCH_NONE, 0x09e2, 0x098c} },
- { 'J', NOCAPS, {0x09b0, WCH_NONE, WCH_NONE, 0x09f0, 0x09f1} },
+ { VK_OEM_PLUS, 0, {0x09c3, 0x098b, WCH_NONE, 0x09e2, 0x09e0} },
+ { 'R', 0, {0x09c0, 0x0988, WCH_NONE, 0x09e3, 0x09e1} },
+ { VK_OEM_4, 0, {0x09a1, 0x09a2, WCH_NONE, 0x09dc, 0x09dd} },
+ { 'A', 0, {0x09cb, 0x0993, WCH_NONE, 0x09f4, 0x09f5} },
+ { 'S', 0, {0x09c7, 0x098f, WCH_NONE, 0x09f6, 0x09f7} },
+ { 'D', 0, {0x09cd, 0x0985, WCH_NONE, 0x09f8, 0x09f9} },
+ { 'F', 0, {0x09bf, 0x0987, WCH_NONE, 0x09e2, 0x098c} },
+ { 'J', 0, {0x09b0, WCH_NONE, WCH_NONE, 0x09f0, 0x09f1} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, WCH_NONE, 0x0003} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, WCH_NONE, 0x0003} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
3,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 5, 2, SHFT_INVALID, SHFT_INVALID, 3, 4 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {WCH_NONE, WCH_NONE} },
- { VK_OEM_MINUS, NOCAPS, {'-', 0x0983 } },
- { 'W', NOCAPS, {0x09c8, 0x0990 } },
- { 'E', NOCAPS, {0x09be, 0x0986 } },
- { 'T', NOCAPS, {0x09c2, 0x098a } },
- { 'Y', NOCAPS, {0x09ac, 0x09ad } },
- { 'U', NOCAPS, {0x09b9, 0x0999 } },
- { 'I', NOCAPS, {0x0997, 0x0998 } },
- { 'O', NOCAPS, {0x09a6, 0x09a7 } },
- { 'P', NOCAPS, {0x099c, 0x099d } },
- { VK_OEM_6, NOCAPS, {0x09bc, 0x099e } },
- { VK_OEM_5, NOCAPS, {WCH_NONE, WCH_NONE} },
- { 'G', NOCAPS, {0x09c1, 0x0989 } },
- { 'H', NOCAPS, {0x09aa, 0x09ab } },
- { 'K', NOCAPS, {0x0995, 0x0996 } },
- { 'L', NOCAPS, {0x09a4, 0x09a5 } },
- { VK_OEM_1, NOCAPS, {0x099a, 0x099b } },
- { VK_OEM_7, NOCAPS, {0x099f, 0x09a0 } },
- { 'Z', NOCAPS, {WCH_NONE, WCH_NONE} },
- { 'C', NOCAPS, {0x09ae, 0x09a3 } },
- { 'V', NOCAPS, {0x09a8, WCH_NONE} },
- { 'B', NOCAPS, {0x09ac, WCH_NONE} },
- { 'N', NOCAPS, {0x09b2, WCH_NONE} },
- { 'M', NOCAPS, {0x09b8, 0x09b6 } },
- { VK_OEM_COMMA, NOCAPS, {',', 0x09b7 } },
- { VK_OEM_PERIOD,NOCAPS, {'.', '{' } },
- { VK_OEM_2, NOCAPS, {0x09af, 0x09df } },
- { VK_OEM_102, NOCAPS, {WCH_NONE, WCH_NONE} },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {WCH_NONE, WCH_NONE} },
+ { VK_OEM_MINUS, 0, {'-', 0x0983 } },
+ { 'W', 0, {0x09c8, 0x0990 } },
+ { 'E', 0, {0x09be, 0x0986 } },
+ { 'T', 0, {0x09c2, 0x098a } },
+ { 'Y', 0, {0x09ac, 0x09ad } },
+ { 'U', 0, {0x09b9, 0x0999 } },
+ { 'I', 0, {0x0997, 0x0998 } },
+ { 'O', 0, {0x09a6, 0x09a7 } },
+ { 'P', 0, {0x099c, 0x099d } },
+ { VK_OEM_6, 0, {0x09bc, 0x099e } },
+ { VK_OEM_5, 0, {WCH_NONE, WCH_NONE} },
+ { 'G', 0, {0x09c1, 0x0989 } },
+ { 'H', 0, {0x09aa, 0x09ab } },
+ { 'K', 0, {0x0995, 0x0996 } },
+ { 'L', 0, {0x09a4, 0x09a5 } },
+ { VK_OEM_1, 0, {0x099a, 0x099b } },
+ { VK_OEM_7, 0, {0x099f, 0x09a0 } },
+ { 'Z', 0, {WCH_NONE, WCH_NONE} },
+ { 'C', 0, {0x09ae, 0x09a3 } },
+ { 'V', 0, {0x09a8, WCH_NONE} },
+ { 'B', 0, {0x09ac, WCH_NONE} },
+ { 'N', 0, {0x09b2, WCH_NONE} },
+ { 'M', 0, {0x09b8, 0x09b6 } },
+ { VK_OEM_COMMA, 0, {',', 0x09b7 } },
+ { VK_OEM_PERIOD,0, {'.', '{' } },
+ { VK_OEM_2, 0, {0x09af, 0x09df } },
+ { VK_OEM_102, 0, {WCH_NONE, WCH_NONE} },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '1', NOCAPS, {'1', WCH_NONE, 0x200d, 0x09e7} },
- { '2', NOCAPS, {'2', WCH_NONE, 0x200c, 0x09e8} },
- { '3', NOCAPS, {'3', WCH_LGTR, WCH_NONE, 0x09e9} },
- { '4', NOCAPS, {'4', WCH_LGTR, WCH_NONE, 0x09ea} },
- { '5', NOCAPS, {'5', WCH_LGTR, WCH_NONE, 0x09eb} },
- { '6', NOCAPS, {'6', WCH_LGTR, WCH_NONE, 0x09ec} },
- { '7', NOCAPS, {'7', WCH_LGTR, WCH_NONE, 0x09ed} },
- { '8', NOCAPS, {'8', WCH_LGTR, WCH_NONE, 0x09ee} },
- { '9', NOCAPS, {'9', '(', WCH_NONE, 0x09ef} },
- { '0', NOCAPS, {'0', ')', WCH_NONE, 0x09e6} },
- { 'Q', NOCAPS, {0x09cc, 0x0994, WCH_NONE, 0x09d7} },
- { 'X', NOCAPS, {0x0982, 0x0981, WCH_NONE, 0x09fa} },
+ { '1', 0, {'1', WCH_NONE, 0x200d, 0x09e7} },
+ { '2', 0, {'2', WCH_NONE, 0x200c, 0x09e8} },
+ { '3', 0, {'3', WCH_LGTR, WCH_NONE, 0x09e9} },
+ { '4', 0, {'4', WCH_LGTR, WCH_NONE, 0x09ea} },
+ { '5', 0, {'5', WCH_LGTR, WCH_NONE, 0x09eb} },
+ { '6', 0, {'6', WCH_LGTR, WCH_NONE, 0x09ec} },
+ { '7', 0, {'7', WCH_LGTR, WCH_NONE, 0x09ed} },
+ { '8', 0, {'8', WCH_LGTR, WCH_NONE, 0x09ee} },
+ { '9', 0, {'9', '(', WCH_NONE, 0x09ef} },
+ { '0', 0, {'0', ')', WCH_NONE, 0x09e6} },
+ { 'Q', 0, {0x09cc, 0x0994, WCH_NONE, 0x09d7} },
+ { 'X', 0, {0x0982, 0x0981, WCH_NONE, 0x09fa} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_PLUS, NOCAPS, {0x09c3, 0x098b, WCH_NONE, 0x09e2, 0x09e0} },
- { 'R', NOCAPS, {0x09c0, 0x0988, WCH_NONE, 0x09e3, 0x09e1} },
- { VK_OEM_4, NOCAPS, {0x09a1, 0x09a2, WCH_NONE, 0x09dc, 0x09dd} },
- { 'A', NOCAPS, {0x09cb, 0x0993, WCH_NONE, 0x09f4, 0x09f5} },
- { 'S', NOCAPS, {0x09c7, 0x098f, WCH_NONE, 0x09f6, 0x09f7} },
- { 'D', NOCAPS, {0x09cd, 0x0985, WCH_NONE, 0x09f8, 0x09f9} },
- { 'F', NOCAPS, {0x09bf, 0x0987, WCH_NONE, 0x09e2, 0x098c} },
- { 'J', NOCAPS, {0x09b0, WCH_NONE, WCH_NONE, 0x09f0, 0x09f1} },
+ { VK_OEM_PLUS, 0, {0x09c3, 0x098b, WCH_NONE, 0x09e2, 0x09e0} },
+ { 'R', 0, {0x09c0, 0x0988, WCH_NONE, 0x09e3, 0x09e1} },
+ { VK_OEM_4, 0, {0x09a1, 0x09a2, WCH_NONE, 0x09dc, 0x09dd} },
+ { 'A', 0, {0x09cb, 0x0993, WCH_NONE, 0x09f4, 0x09f5} },
+ { 'S', 0, {0x09c7, 0x098f, WCH_NONE, 0x09f6, 0x09f7} },
+ { 'D', 0, {0x09cd, 0x0985, WCH_NONE, 0x09f8, 0x09f9} },
+ { 'F', 0, {0x09bf, 0x0987, WCH_NONE, 0x09e2, 0x098c} },
+ { 'J', 0, {0x09b0, WCH_NONE, WCH_NONE, 0x09f0, 0x09f1} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, WCH_NONE, 0x0003} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, WCH_NONE, 0x0003} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
3,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3, SHFT_INVALID, SHFT_INVALID, 4, 5 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- {VK_OEM_3, NOCAPS, {0x094a, 0x0912} },
- {'Q', NOCAPS, {0x094c, 0x0914} },
- {'W', NOCAPS, {0x0948, 0x0910} },
- {'E', NOCAPS, {0x093e, 0x0906} },
- {'T', NOCAPS, {0x0942, 0x090a} },
- {'Y', NOCAPS, {0x092c, 0x092d} },
- {'U', NOCAPS, {0x0939, 0x0919} },
- {'O', NOCAPS, {0x0926, 0x0927} },
- {'A', NOCAPS, {0x094b, 0x0913} },
- {'S', NOCAPS, {0x0947, 0x090f} },
- {'D', NOCAPS, {0x094d, 0x0905} },
- {'G', NOCAPS, {0x0941, 0x0909} },
- {'J', NOCAPS, {0x0930, 0x0931} },
- {'L', NOCAPS, {0x0924, 0x0925} },
- {'V', NOCAPS, {0x0928, 0x0929} },
- {'B', NOCAPS, {0x0935, 0x0934} },
- {'N', NOCAPS, {0x0932, 0x0933} },
- {'M', NOCAPS, {0x0938, 0x0936} },
- {VK_DECIMAL, NOCAPS, {'.', '.' } },
- {VK_TAB, NOCAPS, {'\t', '\t' } },
- {VK_ADD, NOCAPS, {'+', '+' } },
- {VK_DIVIDE, NOCAPS, {'/', '/' } },
- {VK_MULTIPLY, NOCAPS, {'*', '*' } },
- {VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ {VK_OEM_3, 0, {0x094a, 0x0912} },
+ {'Q', 0, {0x094c, 0x0914} },
+ {'W', 0, {0x0948, 0x0910} },
+ {'E', 0, {0x093e, 0x0906} },
+ {'T', 0, {0x0942, 0x090a} },
+ {'Y', 0, {0x092c, 0x092d} },
+ {'U', 0, {0x0939, 0x0919} },
+ {'O', 0, {0x0926, 0x0927} },
+ {'A', 0, {0x094b, 0x0913} },
+ {'S', 0, {0x0947, 0x090f} },
+ {'D', 0, {0x094d, 0x0905} },
+ {'G', 0, {0x0941, 0x0909} },
+ {'J', 0, {0x0930, 0x0931} },
+ {'L', 0, {0x0924, 0x0925} },
+ {'V', 0, {0x0928, 0x0929} },
+ {'B', 0, {0x0935, 0x0934} },
+ {'N', 0, {0x0932, 0x0933} },
+ {'M', 0, {0x0938, 0x0936} },
+ {VK_DECIMAL, 0, {'.', '.' } },
+ {VK_TAB, 0, {'\t', '\t' } },
+ {VK_ADD, 0, {'+', '+' } },
+ {VK_DIVIDE, 0, {'/', '/' } },
+ {VK_MULTIPLY, 0, {'*', '*' } },
+ {VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_6, NOCAPS, {0x093c ,0x091e ,0x001d} },
- { VK_OEM_5, NOCAPS, {0x0949 ,0x0911 ,0x001c} },
- { VK_OEM_102, NOCAPS, {0x0949 ,0x0911 ,0x001c} },
- { VK_BACK, NOCAPS, {'\b' ,'\b' ,0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b ,0x001b ,0x001b} },
- { VK_RETURN, NOCAPS, {'\r' ,'\r' ,'\n' } },
- { VK_SPACE, NOCAPS, {' ' ,' ' ,' ' } },
- { VK_CANCEL, NOCAPS, {0x0003 ,0x0003 ,0x0003} },
+ { VK_OEM_6, 0, {0x093c ,0x091e ,0x001d} },
+ { VK_OEM_5, 0, {0x0949 ,0x0911 ,0x001c} },
+ { VK_OEM_102, 0, {0x0949 ,0x0911 ,0x001c} },
+ { VK_BACK, 0, {'\b' ,'\b' ,0x007f} },
+ { VK_ESCAPE, 0, {0x001b ,0x001b ,0x001b} },
+ { VK_RETURN, 0, {'\r' ,'\r' ,'\n' } },
+ { VK_SPACE, 0, {' ' ,' ' ,' ' } },
+ { VK_CANCEL, 0, {0x0003 ,0x0003 ,0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_MINUS, NOCAPS, {'-', 0x0903, WCH_NONE, 0x001f} },
+ { VK_OEM_MINUS, 0, {'-', 0x0903, WCH_NONE, 0x001f} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { '1', NOCAPS, {'1', 0x090d, WCH_NONE, 0x200d, 0x0967 } },
- { '2', NOCAPS, {'2', 0x0945, WCH_NONE, 0x200c, 0x0968 } },
- { '3', NOCAPS, {'3', WCH_LGTR, WCH_NONE, WCH_NONE, 0x0969 } },
- { '4', NOCAPS, {'4', WCH_LGTR, WCH_NONE, WCH_NONE, 0x096a } },
- { '5', NOCAPS, {'5', WCH_LGTR, WCH_NONE, WCH_NONE, 0x096b } },
- { '6', NOCAPS, {'6', WCH_LGTR, WCH_NONE, 0x001e, 0x096c } },
- { '7', NOCAPS, {'7', WCH_LGTR, WCH_NONE, WCH_NONE, 0x096d } },
- { '8', NOCAPS, {'8', WCH_LGTR, WCH_NONE, WCH_NONE, 0x096e } },
- { '9', NOCAPS, {'9', '(', WCH_NONE, WCH_NONE, 0x096f } },
- { '0', NOCAPS, {'0', ')', WCH_NONE, WCH_NONE, 0x0966 } },
- { 'I', NOCAPS, {0x0917, 0x0918, WCH_NONE, WCH_NONE, 0x095a } },
- { 'P', NOCAPS, {0x091c, 0x091d, WCH_NONE, WCH_NONE, 0x095b } },
- { VK_OEM_1, NOCAPS, {0x091a, 0x091b, WCH_NONE, WCH_NONE, 0x0952 } },
- { 'Z', NOCAPS, {0x0946, 0x090e, WCH_NONE, WCH_NONE, 0x0953 } },
- { 'C', NOCAPS, {0x092e, 0x0923, WCH_NONE, WCH_NONE, 0x0954 } },
- { VK_OEM_COMMA, NOCAPS, {',', 0x0937, WCH_NONE, WCH_NONE, 0x0970 } },
- { VK_OEM_2, NOCAPS, {0x092f, 0x095f, WCH_NONE, WCH_NONE, WCH_NONE} },
+ { '1', 0, {'1', 0x090d, WCH_NONE, 0x200d, 0x0967 } },
+ { '2', 0, {'2', 0x0945, WCH_NONE, 0x200c, 0x0968 } },
+ { '3', 0, {'3', WCH_LGTR, WCH_NONE, WCH_NONE, 0x0969 } },
+ { '4', 0, {'4', WCH_LGTR, WCH_NONE, WCH_NONE, 0x096a } },
+ { '5', 0, {'5', WCH_LGTR, WCH_NONE, WCH_NONE, 0x096b } },
+ { '6', 0, {'6', WCH_LGTR, WCH_NONE, 0x001e, 0x096c } },
+ { '7', 0, {'7', WCH_LGTR, WCH_NONE, WCH_NONE, 0x096d } },
+ { '8', 0, {'8', WCH_LGTR, WCH_NONE, WCH_NONE, 0x096e } },
+ { '9', 0, {'9', '(', WCH_NONE, WCH_NONE, 0x096f } },
+ { '0', 0, {'0', ')', WCH_NONE, WCH_NONE, 0x0966 } },
+ { 'I', 0, {0x0917, 0x0918, WCH_NONE, WCH_NONE, 0x095a } },
+ { 'P', 0, {0x091c, 0x091d, WCH_NONE, WCH_NONE, 0x095b } },
+ { VK_OEM_1, 0, {0x091a, 0x091b, WCH_NONE, WCH_NONE, 0x0952 } },
+ { 'Z', 0, {0x0946, 0x090e, WCH_NONE, WCH_NONE, 0x0953 } },
+ { 'C', 0, {0x092e, 0x0923, WCH_NONE, WCH_NONE, 0x0954 } },
+ { VK_OEM_COMMA, 0, {',', 0x0937, WCH_NONE, WCH_NONE, 0x0970 } },
+ { VK_OEM_2, 0, {0x092f, 0x095f, WCH_NONE, WCH_NONE, WCH_NONE} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { VK_OEM_PLUS, NOCAPS, {0x0943, 0x090b, WCH_NONE, WCH_NONE, 0x0944, 0x0960} },
- { 'R', NOCAPS, {0x0940, 0x0908, WCH_NONE, WCH_NONE, 0x0963, 0x0961} },
- { VK_OEM_4, NOCAPS, {0x0921, 0x0922, 0x001b, WCH_NONE, 0x095c, 0x095d} },
- { 'F', NOCAPS, {0x093f, 0x0907, WCH_NONE, WCH_NONE, 0x0962, 0x090c} },
- { 'H', NOCAPS, {0x092a, 0x092b, WCH_NONE, WCH_NONE, WCH_NONE, 0x095e} },
- { 'K', NOCAPS, {0x0915, 0x0916, WCH_NONE, WCH_NONE, 0x0958, 0x0959} },
- { VK_OEM_7, NOCAPS, {0x091f, 0x0920, WCH_NONE, WCH_NONE, WCH_NONE, 0x0951} },
- { 'X', NOCAPS, {0x0902, 0x0901, WCH_NONE, WCH_NONE, WCH_NONE, 0x0950} },
- { VK_OEM_PERIOD,NOCAPS, {'.', 0x0964, WCH_NONE, WCH_NONE, 0x0965, 0x093d} },
+ { VK_OEM_PLUS, 0, {0x0943, 0x090b, WCH_NONE, WCH_NONE, 0x0944, 0x0960} },
+ { 'R', 0, {0x0940, 0x0908, WCH_NONE, WCH_NONE, 0x0963, 0x0961} },
+ { VK_OEM_4, 0, {0x0921, 0x0922, 0x001b, WCH_NONE, 0x095c, 0x095d} },
+ { 'F', 0, {0x093f, 0x0907, WCH_NONE, WCH_NONE, 0x0962, 0x090c} },
+ { 'H', 0, {0x092a, 0x092b, WCH_NONE, WCH_NONE, WCH_NONE, 0x095e} },
+ { 'K', 0, {0x0915, 0x0916, WCH_NONE, WCH_NONE, 0x0958, 0x0959} },
+ { VK_OEM_7, 0, {0x091f, 0x0920, WCH_NONE, WCH_NONE, WCH_NONE, 0x0951} },
+ { 'X', 0, {0x0902, 0x0901, WCH_NONE, WCH_NONE, WCH_NONE, 0x0950} },
+ { VK_OEM_PERIOD,0, {'.', 0x0964, WCH_NONE, WCH_NONE, 0x0965, 0x093d} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
3,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 5, 3, SHFT_INVALID, SHFT_INVALID, 2, 4 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {WCH_NONE, WCH_NONE} },
- { VK_OEM_MINUS, NOCAPS, {'-', 0x0a83 } },
- { 'Q', NOCAPS, {0x0acc, 0x0a94 } },
- { 'W', NOCAPS, {0x0ac8, 0x0a90 } },
- { 'E', NOCAPS, {0x0abe, 0x0a86 } },
- { 'R', NOCAPS, {0x0ac0, 0x0a88 } },
- { 'T', NOCAPS, {0x0ac2, 0x0a8a } },
- { 'Y', NOCAPS, {0x0aac, 0x0aad } },
- { 'U', NOCAPS, {0x0ab9, 0x0a99 } },
- { 'I', NOCAPS, {0x0a97, 0x0a98 } },
- { 'O', NOCAPS, {0x0aa6, 0x0aa7 } },
- { 'P', NOCAPS, {0x0a9c, 0x0a9d } },
- { VK_OEM_4, NOCAPS, {0x0aa1, 0x0aa2 } },
- { VK_OEM_6, NOCAPS, {0x0abc, 0x0a9e } },
- { VK_OEM_5, NOCAPS, {0x0ac9, 0x0a91 } },
- { 'A', NOCAPS, {0x0acb, 0x0a93 } },
- { 'S', NOCAPS, {0x0ac7, 0x0a8f } },
- { 'D', NOCAPS, {0x0acd, 0x0a85 } },
- { 'F', NOCAPS, {0x0abf, 0x0a87 } },
- { 'G', NOCAPS, {0x0ac1, 0x0a89 } },
- { 'H', NOCAPS, {0x0aaa, 0x0aab } },
- { 'J', NOCAPS, {0x0ab0, WCH_NONE} },
- { 'K', NOCAPS, {0x0a95, 0x0a96 } },
- { 'L', NOCAPS, {0x0aa4, 0x0aa5 } },
- { VK_OEM_7, NOCAPS, {0x0a9f, 0x0aa0 } },
- { 'Z', NOCAPS, {WCH_NONE, WCH_NONE} },
- { 'C', NOCAPS, {0x0aae, 0x0aa3 } },
- { 'V', NOCAPS, {0x0aa8, WCH_NONE} },
- { 'B', NOCAPS, {0x0aac, WCH_NONE} },
- { 'N', NOCAPS, {0x0ab2, 0x0ab3 } },
- { 'M', NOCAPS, {0x0ab8, 0x0ab6 } },
- { VK_OEM_COMMA, NOCAPS, {',', 0x0ab7 } },
- { VK_OEM_PERIOD,NOCAPS, {'.', '{' } },
- { VK_OEM_2, NOCAPS, {0x0aaf, WCH_NONE} },
- { VK_OEM_102, NOCAPS, {WCH_NONE, WCH_NONE} },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {WCH_NONE, WCH_NONE} },
+ { VK_OEM_MINUS, 0, {'-', 0x0a83 } },
+ { 'Q', 0, {0x0acc, 0x0a94 } },
+ { 'W', 0, {0x0ac8, 0x0a90 } },
+ { 'E', 0, {0x0abe, 0x0a86 } },
+ { 'R', 0, {0x0ac0, 0x0a88 } },
+ { 'T', 0, {0x0ac2, 0x0a8a } },
+ { 'Y', 0, {0x0aac, 0x0aad } },
+ { 'U', 0, {0x0ab9, 0x0a99 } },
+ { 'I', 0, {0x0a97, 0x0a98 } },
+ { 'O', 0, {0x0aa6, 0x0aa7 } },
+ { 'P', 0, {0x0a9c, 0x0a9d } },
+ { VK_OEM_4, 0, {0x0aa1, 0x0aa2 } },
+ { VK_OEM_6, 0, {0x0abc, 0x0a9e } },
+ { VK_OEM_5, 0, {0x0ac9, 0x0a91 } },
+ { 'A', 0, {0x0acb, 0x0a93 } },
+ { 'S', 0, {0x0ac7, 0x0a8f } },
+ { 'D', 0, {0x0acd, 0x0a85 } },
+ { 'F', 0, {0x0abf, 0x0a87 } },
+ { 'G', 0, {0x0ac1, 0x0a89 } },
+ { 'H', 0, {0x0aaa, 0x0aab } },
+ { 'J', 0, {0x0ab0, WCH_NONE} },
+ { 'K', 0, {0x0a95, 0x0a96 } },
+ { 'L', 0, {0x0aa4, 0x0aa5 } },
+ { VK_OEM_7, 0, {0x0a9f, 0x0aa0 } },
+ { 'Z', 0, {WCH_NONE, WCH_NONE} },
+ { 'C', 0, {0x0aae, 0x0aa3 } },
+ { 'V', 0, {0x0aa8, WCH_NONE} },
+ { 'B', 0, {0x0aac, WCH_NONE} },
+ { 'N', 0, {0x0ab2, 0x0ab3 } },
+ { 'M', 0, {0x0ab8, 0x0ab6 } },
+ { VK_OEM_COMMA, 0, {',', 0x0ab7 } },
+ { VK_OEM_PERIOD,0, {'.', '{' } },
+ { VK_OEM_2, 0, {0x0aaf, WCH_NONE} },
+ { VK_OEM_102, 0, {WCH_NONE, WCH_NONE} },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { '3', NOCAPS, {'3', WCH_LGTR, 0x0ae9} },
- { '4', NOCAPS, {'4', WCH_LGTR, 0x0aea} },
- { '5', NOCAPS, {'5', WCH_LGTR, 0x0aeb} },
- { '6', NOCAPS, {'6', WCH_LGTR, 0x0aec} },
- { '7', NOCAPS, {'7', WCH_LGTR, 0x0aed} },
- { '8', NOCAPS, {'8', WCH_LGTR, 0x0aee} },
- { '9', NOCAPS, {'9', '(', 0x0aef} },
- { '0', NOCAPS, {'0', ')', 0x0ae6} },
- { 'X', NOCAPS, {0x0a82, 0x0a81, 0x0ad0} },
+ { '3', 0, {'3', WCH_LGTR, 0x0ae9} },
+ { '4', 0, {'4', WCH_LGTR, 0x0aea} },
+ { '5', 0, {'5', WCH_LGTR, 0x0aeb} },
+ { '6', 0, {'6', WCH_LGTR, 0x0aec} },
+ { '7', 0, {'7', WCH_LGTR, 0x0aed} },
+ { '8', 0, {'8', WCH_LGTR, 0x0aee} },
+ { '9', 0, {'9', '(', 0x0aef} },
+ { '0', 0, {'0', ')', 0x0ae6} },
+ { 'X', 0, {0x0a82, 0x0a81, 0x0ad0} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '1', NOCAPS, {'1', 0x0a8d, 0x0ae7, 0x200d} },
- { '2', NOCAPS, {'2', 0x0ac5, 0x0ae8, 0x200c} },
+ { '1', 0, {'1', 0x0a8d, 0x0ae7, 0x200d} },
+ { '2', 0, {'2', 0x0ac5, 0x0ae8, 0x200c} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_PLUS, NOCAPS, {0x0ac3, 0x0a8b, 0x0ac4, WCH_NONE, 0x0ae0} },
- { VK_OEM_1, NOCAPS, {0x0a9a, 0x0a9b, WCH_NONE, WCH_NONE, 0x0abd} },
+ { VK_OEM_PLUS, 0, {0x0ac3, 0x0a8b, 0x0ac4, WCH_NONE, 0x0ae0} },
+ { VK_OEM_1, 0, {0x0a9a, 0x0a9b, WCH_NONE, WCH_NONE, 0x0abd} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, WCH_NONE, 0x0003} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, WCH_NONE, 0x0003} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
3,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 5, 3, SHFT_INVALID, SHFT_INVALID, 2, 4 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {0x0d4a, 0x0d12 } },
- { VK_OEM_MINUS, NOCAPS, {'-', 0x0d03 } },
- { 'W', NOCAPS, {0x0d48, 0x0d10 } },
- { 'E', NOCAPS, {0x0d3e, 0x0d06 } },
- { 'T', NOCAPS, {0x0d42, 0x0d0a } },
- { 'Y', NOCAPS, {0x0d2c, 0x0d2d } },
- { 'U', NOCAPS, {0x0d39, 0x0d19 } },
- { 'I', NOCAPS, {0x0d17, 0x0d18 } },
- { 'O', NOCAPS, {0x0d26, 0x0d27 } },
- { 'P', NOCAPS, {0x0d1c, 0x0d1d } },
- { VK_OEM_4, NOCAPS, {0x0d21, 0x0d22 } },
- { VK_OEM_6, NOCAPS, {WCH_NONE, 0x0d1e } },
- { VK_OEM_5, NOCAPS, {WCH_NONE, WCH_NONE} },
- { 'A', NOCAPS, {0x0d4b, 0x0d13 } },
- { 'S', NOCAPS, {0x0d47, 0x0d0f } },
- { 'F', NOCAPS, {0x0d3f, 0x0d07 } },
- { 'G', NOCAPS, {0x0d41, 0x0d09 } },
- { 'H', NOCAPS, {0x0d2a, 0x0d2b } },
- { 'J', NOCAPS, {0x0d30, 0x0d31 } },
- { 'K', NOCAPS, {0x0d15, 0x0d16 } },
- { 'L', NOCAPS, {0x0d24, 0x0d25 } },
- { VK_OEM_1, NOCAPS, {0x0d1a, 0x0d1b } },
- { VK_OEM_7, NOCAPS, {0x0d1f, 0x0d20 } },
- { 'Z', NOCAPS, {0x0d46, 0x0d0f } },
- { 'X', NOCAPS, {0x0d02, WCH_NONE} },
- { 'C', NOCAPS, {0x0d2e, 0x0d23 } },
- { 'V', NOCAPS, {0x0d28, WCH_NONE} },
- { 'B', NOCAPS, {0x0d35, 0x0d34 } },
- { 'N', NOCAPS, {0x0d32, 0x0d33 } },
- { 'M', NOCAPS, {0x0d38, 0x0d36 } },
- { VK_OEM_COMMA, NOCAPS, {',', 0x0d37 } },
- { VK_OEM_PERIOD,NOCAPS, {'.', WCH_NONE} },
- { VK_OEM_2, NOCAPS, {0x0d2f, WCH_NONE} },
- { VK_OEM_102, NOCAPS, {WCH_NONE, WCH_NONE} },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {0x0d4a, 0x0d12 } },
+ { VK_OEM_MINUS, 0, {'-', 0x0d03 } },
+ { 'W', 0, {0x0d48, 0x0d10 } },
+ { 'E', 0, {0x0d3e, 0x0d06 } },
+ { 'T', 0, {0x0d42, 0x0d0a } },
+ { 'Y', 0, {0x0d2c, 0x0d2d } },
+ { 'U', 0, {0x0d39, 0x0d19 } },
+ { 'I', 0, {0x0d17, 0x0d18 } },
+ { 'O', 0, {0x0d26, 0x0d27 } },
+ { 'P', 0, {0x0d1c, 0x0d1d } },
+ { VK_OEM_4, 0, {0x0d21, 0x0d22 } },
+ { VK_OEM_6, 0, {WCH_NONE, 0x0d1e } },
+ { VK_OEM_5, 0, {WCH_NONE, WCH_NONE} },
+ { 'A', 0, {0x0d4b, 0x0d13 } },
+ { 'S', 0, {0x0d47, 0x0d0f } },
+ { 'F', 0, {0x0d3f, 0x0d07 } },
+ { 'G', 0, {0x0d41, 0x0d09 } },
+ { 'H', 0, {0x0d2a, 0x0d2b } },
+ { 'J', 0, {0x0d30, 0x0d31 } },
+ { 'K', 0, {0x0d15, 0x0d16 } },
+ { 'L', 0, {0x0d24, 0x0d25 } },
+ { VK_OEM_1, 0, {0x0d1a, 0x0d1b } },
+ { VK_OEM_7, 0, {0x0d1f, 0x0d20 } },
+ { 'Z', 0, {0x0d46, 0x0d0f } },
+ { 'X', 0, {0x0d02, WCH_NONE} },
+ { 'C', 0, {0x0d2e, 0x0d23 } },
+ { 'V', 0, {0x0d28, WCH_NONE} },
+ { 'B', 0, {0x0d35, 0x0d34 } },
+ { 'N', 0, {0x0d32, 0x0d33 } },
+ { 'M', 0, {0x0d38, 0x0d36 } },
+ { VK_OEM_COMMA, 0, {',', 0x0d37 } },
+ { VK_OEM_PERIOD,0, {'.', WCH_NONE} },
+ { VK_OEM_2, 0, {0x0d2f, WCH_NONE} },
+ { VK_OEM_102, 0, {WCH_NONE, WCH_NONE} },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { '3', NOCAPS, {'3', WCH_LGTR, 0x0d69} },
- { '4', NOCAPS, {'4', WCH_NONE, 0x0d6a} },
- { '5', NOCAPS, {'5', WCH_NONE, 0x0d6b} },
- { '6', NOCAPS, {'6', WCH_NONE, 0x0d6c} },
- { '7', NOCAPS, {'7', WCH_LGTR, 0x0d6d} },
- { '8', NOCAPS, {'8', WCH_NONE, 0x0d6e} },
- { '9', NOCAPS, {'9', '(', 0x0d6f} },
- { '0', NOCAPS, {'0', ')', 0x0d66} },
- { 'Q', NOCAPS, {0x0d4c, 0x0d14, 0x0d57} },
+ { '3', 0, {'3', WCH_LGTR, 0x0d69} },
+ { '4', 0, {'4', WCH_NONE, 0x0d6a} },
+ { '5', 0, {'5', WCH_NONE, 0x0d6b} },
+ { '6', 0, {'6', WCH_NONE, 0x0d6c} },
+ { '7', 0, {'7', WCH_LGTR, 0x0d6d} },
+ { '8', 0, {'8', WCH_NONE, 0x0d6e} },
+ { '9', 0, {'9', '(', 0x0d6f} },
+ { '0', 0, {'0', ')', 0x0d66} },
+ { 'Q', 0, {0x0d4c, 0x0d14, 0x0d57} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '1', NOCAPS, {'1', WCH_NONE, 0x0d67, 0x200d} },
- { '2', NOCAPS, {'2', WCH_NONE, 0x0d68, 0x200c} },
+ { '1', 0, {'1', WCH_NONE, 0x0d67, 0x200d} },
+ { '2', 0, {'2', WCH_NONE, 0x0d68, 0x200c} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_PLUS, NOCAPS, {0x0d43, 0x0d0b, WCH_NONE, WCH_NONE, 0x0d60} },
- { 'R', NOCAPS, {0x0d40, 0x0d08, WCH_NONE, WCH_NONE, 0x0d61} },
- { 'D', NOCAPS, {0x0d4d, 0x0d05, WCH_NONE, WCH_NONE, 0x0d0c} },
+ { VK_OEM_PLUS, 0, {0x0d43, 0x0d0b, WCH_NONE, WCH_NONE, 0x0d60} },
+ { 'R', 0, {0x0d40, 0x0d08, WCH_NONE, WCH_NONE, 0x0d61} },
+ { 'D', 0, {0x0d4d, 0x0d05, WCH_NONE, WCH_NONE, 0x0d0c} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, WCH_NONE, 0x0003} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, WCH_NONE, 0x0003} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
3,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 4, 5, SHFT_INVALID, SHFT_INVALID, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { '1', NOCAPS, {'1', '!'} },
- { '2', NOCAPS, {'2', '\"'}},
- { '3', NOCAPS, {'3', 0x00a3} },
- { '5', NOCAPS, {'5', '%'} },
- { '7', NOCAPS, {'7', '&'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
- { VK_OEM_PLUS, NOCAPS, {'=', '+'} },
- { 'Q', CAPS, {'q', 'Q'} },
- { 'W', CAPS, {'w', 'W'} },
- { 'R', CAPS, {'r', 'R'} },
- { 'T', CAPS, {'t', 'T'} },
- { 'Y', CAPS, {'y', 'Y'} },
- { 'P', CAPS, {'p', 'P'} },
- { '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, {';', ':'} },
- { '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, {'/', '?'} },
- { VK_DECIMAL, NOCAPS, {'.', '.'} },
- { VK_TAB, NOCAPS, {'\t','\t'}},
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { '1', 0, {'1', '!'} },
+ { '2', 0, {'2', '\"'}},
+ { '3', 0, {'3', 0x00a3} },
+ { '5', 0, {'5', '%'} },
+ { '7', 0, {'7', '&'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
+ { VK_OEM_PLUS, 0, {'=', '+'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { VK_OEM_1, 0, {';', ':'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { VK_OEM_COMMA, 0, {',', '<'} },
+ { VK_OEM_PERIOD,0, {'.', '>'} },
+ { VK_OEM_2, 0, {'/', '?'} },
+ { VK_DECIMAL, 0, {'.', '.'} },
+ { VK_TAB, 0, {'\t','\t'}},
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { '4', NOCAPS, {'4', '$', 0x20ac} },
+ { '4', 0, {'4', '$', 0x20ac} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_8, NOCAPS, {WCH_DEAD, 0x00ac, 0x00a6, 0x00a6 } },
- { 0xff, NOCAPS, {'`', WCH_NONE, WCH_NONE, WCH_NONE} },
- { 'E', CAPS, {'e', 'E', 0x00e9, 0x00c9 } },
- { 'U', CAPS, {'u', 'U', 0x00fa, 0x00da } },
- { 'I', CAPS, {'i', 'I', 0x00ed, 0x00cd } },
- { 'O', CAPS, {'o', 'O', 0x00f3, 0x00d3 } },
- { 'A', CAPS, {'a', 'A', 0x00e1, 0x00c1 } },
- { VK_OEM_3, NOCAPS, {'\'', '@', WCH_DEAD, '`' } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b4, WCH_NONE} },
+ { VK_OEM_8, 0, {WCH_DEAD, 0x00ac, 0x00a6, 0x00a6 } },
+ { 0xff, 0, {'`', WCH_NONE, WCH_NONE, WCH_NONE} },
+ { 'E', CAPLOK, {'e', 'E', 0x00e9, 0x00c9 } },
+ { 'U', CAPLOK, {'u', 'U', 0x00fa, 0x00da } },
+ { 'I', CAPLOK, {'i', 'I', 0x00ed, 0x00cd } },
+ { 'O', CAPLOK, {'o', 'O', 0x00f3, 0x00d3 } },
+ { 'A', CAPLOK, {'a', 'A', 0x00e1, 0x00c1 } },
+ { VK_OEM_3, 0, {'\'', '@', WCH_DEAD, '`' } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b4, WCH_NONE} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_4, NOCAPS, {'[', '{', WCH_NONE, WCH_NONE, 0x001b} },
- { VK_OEM_6, NOCAPS, {']', '}', WCH_NONE, WCH_NONE, 0x001d} },
- { VK_OEM_7, NOCAPS, {'#', '~', WCH_NONE, WCH_NONE, 0x001c} },
- { VK_OEM_5, NOCAPS, {'\\', '|', WCH_NONE, WCH_NONE, 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
+ { VK_OEM_4, 0, {'[', '{', WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_OEM_6, 0, {']', '}', WCH_NONE, WCH_NONE, 0x001d} },
+ { VK_OEM_7, 0, {'#', '~', WCH_NONE, WCH_NONE, 0x001c} },
+ { VK_OEM_5, 0, {'\\', '|', WCH_NONE, WCH_NONE, 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { '6', NOCAPS, { '6', '^', WCH_NONE, WCH_NONE, WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, { '-', '_', WCH_NONE, WCH_NONE, WCH_NONE, 0x001f} },
+ { '6', 0, { '6', '^', WCH_NONE, WCH_NONE, WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, { '-', '_', WCH_NONE, WCH_NONE, WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* 00 */ VK_EMPTY,
/* 43 */ VK_F9,
/* 44 */ VK_F10,
/* 45 */ VK_NUMLOCK | KMEXT,
-/* 46 */ VK_SCROLL | KMULTI,
+/* 46 */ VK_SCROLL | KBDMULTIVK,
/* 47 */ VK_HOME | KNUMS,
/* 48 */ VK_UP | KNUMS,
/* 49 */ VK_PRIOR | KNUMS,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
+ /* The alphabet */
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
- { '2', NOCAPS, {'2', '"'} },
- { '3', NOCAPS, {'3', 0x00a3} },
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
- { '6', NOCAPS, {'6', '&'} },
- { '7', NOCAPS, {'7', '/'} },
- { '8', NOCAPS, {'8', '('} },
- { '9', NOCAPS, {'9', ')'} },
- { '0', NOCAPS, {'0', '='} },
+ { '1', 0, {'1', '!'} },
+ { '2', 0, {'2', '"'} },
+ { '3', 0, {'3', 0x00a3} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
+ { '6', 0, {'6', '&'} },
+ { '7', 0, {'7', '/'} },
+ { '8', 0, {'8', '('} },
+ { '9', 0, {'9', ')'} },
+ { '0', 0, {'0', '='} },
/* Specials */
/* Ctrl-_ generates US */
- { VK_OEM_2 ,NOCAPS, {'\\', '|'} },
- { VK_OEM_4 ,NOCAPS, {'\'', '?'} },
- { VK_OEM_102 ,NOCAPS, {'<', '>'} },
- { VK_OEM_COMMA ,NOCAPS, {',', ';'} },
- { VK_OEM_PERIOD ,NOCAPS, {'.', ':'} },
- { VK_OEM_MINUS ,NOCAPS, {'-', '_'} },
+ { VK_OEM_2 ,0, {'\\', '|'} },
+ { VK_OEM_4 ,0, {'\'', '?'} },
+ { VK_OEM_102 ,0, {'<', '>'} },
+ { VK_OEM_COMMA ,0, {',', ';'} },
+ { VK_OEM_PERIOD ,0, {'.', ':'} },
+ { VK_OEM_MINUS ,0, {'-', '_'} },
/* Keys that do not have shift states */
- { VK_TAB ,NOCAPS, {'\t','\t'} },
- { VK_ADD ,NOCAPS, {'+', '+'} },
- { VK_SUBTRACT,NOCAPS, {'-', '-'} },
- { VK_MULTIPLY,NOCAPS, {'*', '*'} },
- { VK_DIVIDE ,NOCAPS, {'/', '/'} },
- { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE ,NOCAPS, {' ', ' '} },
- { VK_OEM_5 ,NOCAPS, {0x00f9, 0x00a7} },//ù§
+ { VK_TAB ,0, {'\t','\t'} },
+ { VK_ADD ,0, {'+', '+'} },
+ { VK_SUBTRACT,0, {'-', '-'} },
+ { VK_MULTIPLY,0, {'*', '*'} },
+ { VK_DIVIDE ,0, {'/', '/'} },
+ { VK_ESCAPE ,0, {0x1b,0x1b} },
+ { VK_SPACE ,0, {' ', ' '} },
+ { VK_OEM_5 ,0, {0x00f9, 0x00a7} },//ù§
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, C-S-x */
- { VK_OEM_6, NOCAPS, {0x00ec, '^', WCH_NONE, '~' } },
- { VK_OEM_3, NOCAPS, {0x00f2, 0x00e7, WCH_NONE, '@' } },//òç
- { VK_OEM_7, NOCAPS, {0x00e0, 0x00b0, WCH_NONE, '#'} },//à°
+ { VK_OEM_6, 0, {0x00ec, '^', WCH_NONE, '~' } },
+ { VK_OEM_3, 0, {0x00f2, 0x00e7, WCH_NONE, '@' } },//òç
+ { VK_OEM_7, 0, {0x00e0, 0x00b0, WCH_NONE, '#'} },//à°
- { VK_OEM_1, NOCAPS, {0x00e8, 0x00e9, '{', '['} },// èé
- { VK_OEM_PLUS,NOCAPS, {'+', '*', '}', ']'} },
+ { VK_OEM_1, 0, {0x00e8, 0x00e9, '{', '['} },// èé
+ { VK_OEM_PLUS,0, {'+', '*', '}', ']'} },
/* 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, 0x20AC} }, // eE\80
- { '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} },
+ { 'E', CAPLOK, {'e', 'E', 0x05, 0x20AC} }, // eE\80
/* Legacy Ascii generators */
-//zz { VK_OEM_MINUS, NOCAPS, {'\'', '?', WCH_NONE, 0x1f /* US */} },
+//zz { VK_OEM_MINUS, 0, {'\'', '?', WCH_NONE, 0x1f /* US */} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
+
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
/* temporary */
#define SC_13 0xde
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
+ /* The alphabet */
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'E', CAPLOK, {'e', 'E'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { '2', NOCAPS, {'2', '\"'} },
- { '3', NOCAPS, {'3', '#'} },
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '2', 0, {'2', '\"'} },
+ { '3', 0, {'3', '#'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
/* Ctrl-6 generates RS */
- { '6', NOCAPS, {'6', '&'} },
- { '7', NOCAPS, {'7', '\''} },
- { '8', NOCAPS, {'8', '('} },
- { '9', NOCAPS, {'9', ')'} },
- { '0', NOCAPS, {'0', 0xff} },
+ { '6', 0, {'6', '&'} },
+ { '7', 0, {'7', '\''} },
+ { '8', 0, {'8', '('} },
+ { '9', 0, {'9', ')'} },
+ { '0', 0, {'0', 0xff} },
/*Japanese Keys*/
- { SC_13, NOCAPS, { '^','~'} },
- { SC_27, NOCAPS, { '@','`'} },
- { SC_40, NOCAPS, { ';','+'} },
- { SC_41, NOCAPS, { ':','*'} },
+ { SC_13, 0, { '^','~'} },
+ { SC_27, 0, { '@','`'} },
+ { SC_40, 0, { ';','+'} },
+ { SC_41, 0, { ':','*'} },
/* Specials */
/* Ctrl-_ generates US */
- { VK_OEM_PLUS ,NOCAPS, {';', '+'} },
- { VK_OEM_1 ,NOCAPS, {';', ':'} },
- { VK_OEM_7 ,NOCAPS, {'\'','\"'} },
- { VK_OEM_3 ,NOCAPS, {'`', '~'} },
- { VK_OEM_COMMA ,NOCAPS, {',', '<'} },
- { VK_OEM_PERIOD ,NOCAPS, {'.', '>'} },
- { VK_OEM_2 ,NOCAPS, {'/', '?'} },
+ { VK_OEM_PLUS ,0, {';', '+'} },
+ { VK_OEM_1 ,0, {';', ':'} },
+ { VK_OEM_7 ,0, {'\'','\"'} },
+ { VK_OEM_3 ,0, {'`', '~'} },
+ { VK_OEM_COMMA ,0, {',', '<'} },
+ { VK_OEM_PERIOD ,0, {'.', '>'} },
+ { VK_OEM_2 ,0, {'/', '?'} },
/* Keys that do not have shift states */
- { VK_TAB ,NOCAPS, {'\t','\t'} },
- { VK_ADD ,NOCAPS, {'+', '+'} },
- { VK_SUBTRACT,NOCAPS, {'-', '-'} },
- { VK_MULTIPLY,NOCAPS, {'*', '*'} },
- { VK_DIVIDE ,NOCAPS, {'/', '/'} },
- { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE ,NOCAPS, {' ', ' '} },
+ { VK_TAB ,0, {'\t','\t'} },
+ { VK_ADD ,0, {'+', '+'} },
+ { VK_SUBTRACT,0, {'-', '-'} },
+ { VK_MULTIPLY,0, {'*', '*'} },
+ { VK_DIVIDE ,0, {'/', '/'} },
+ { VK_ESCAPE ,0, {0x1b,0x1b} },
+ { VK_SPACE ,0, {' ', ' '} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_4, NOCAPS, {'[' , '{' , 0x1b /* ESC */} },
- { VK_OEM_6, NOCAPS, {']' , '}' , 0x1d /* GS */} },
- { VK_OEM_5, NOCAPS, {'\\', '|' , 0x1c /* FS */} }, /* Yen */
- { VK_OEM_102, NOCAPS, {'\\', '_' , 0x1c /* FS */} }, /* 'ro' */
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
+ { VK_OEM_4, 0, {'[' , '{' , 0x1b /* ESC */} },
+ { VK_OEM_6, 0, {']' , '}' , 0x1d /* GS */} },
+ { VK_OEM_5, 0, {'\\', '|' , 0x1c /* FS */} }, /* Yen */
+ { VK_OEM_102, 0, {'\\', '_' , 0x1c /* FS */} }, /* 'ro' */
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
{ 0, 0 }
};
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 */} },
- { VK_OEM_MINUS, NOCAPS, {'-', '=', WCH_NONE, 0x1f /* US */} },
+ { '2', 0, {'2', '@', WCH_NONE, 0} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x1e /* RS */} },
+ { VK_OEM_MINUS, 0, {'-', '=', WCH_NONE, 0x1f /* US */} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Japanese doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {'(', ')' } },
- { '1', NOCAPS, {'\"', '!' } },
- { '2', CAPS, {0x04d9, 0x04d8} },
- { '3', CAPS, {0x0456, 0x0406} },
- { '4', CAPS, {0x04a3, 0x04a2} },
- { '5', CAPS, {0x0493, 0x0492} },
- { '7', NOCAPS, {'.', ':' } },
- { '8', CAPS, {0x04af, 0x04ae} },
- { '9', CAPS, {0x04b1, 0x04b0} },
- { '0', CAPS, {0x049b, 0x049a} },
- { VK_OEM_PLUS, CAPS, {0x04bb, 0x04ba} },
- { 'Q', CAPS, {0x0439, 0x0419} },
- { 'W', CAPS, {0x0446, 0x0426} },
- { 'E', CAPS, {0x0443, 0x0423} },
- { 'R', CAPS, {0x043a, 0x041a} },
- { 'T', CAPS, {0x0435, 0x0415} },
- { 'Y', CAPS, {0x043d, 0x041d} },
- { 'U', CAPS, {0x0433, 0x0413} },
- { 'I', CAPS, {0x0448, 0x0428} },
- { 'O', CAPS, {0x0449, 0x0429} },
- { 'P', CAPS, {0x0437, 0x0417} },
- { VK_OEM_4, CAPS, {0x0445, 0x0425} },
- { 'A', CAPS, {0x0444, 0x0424} },
- { 'S', CAPS, {0x044b, 0x042b} },
- { 'D', CAPS, {0x0432, 0x0412} },
- { 'F', CAPS, {0x0430, 0x0410} },
- { 'G', CAPS, {0x043f, 0x041f} },
- { 'H', CAPS, {0x0440, 0x0420} },
- { 'J', CAPS, {0x043e, 0x041e} },
- { 'K', CAPS, {0x043b, 0x041b} },
- { 'L', CAPS, {0x0434, 0x0414} },
- { VK_OEM_7, CAPS, {0x044d, 0x042d} },
- { 'Z', CAPS, {0x044f, 0x042f} },
- { 'X', CAPS, {0x0447, 0x0427} },
- { 'C', CAPS, {0x0441, 0x0421} },
- { 'V', CAPS, {0x043c, 0x041c} },
- { 'B', CAPS, {0x0438, 0x0418} },
- { 'N', CAPS, {0x0442, 0x0422} },
- { 'M', CAPS, {0x044c, 0x042c} },
- { VK_OEM_COMMA, CAPS, {0x0431, 0x0411} },
- { VK_OEM_PERIOD,CAPS, {0x044e, 0x042e} },
- { VK_OEM_2, NOCAPS, {0x2116, '?' } },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {'(', ')' } },
+ { '1', 0, {'\"', '!' } },
+ { '2', CAPLOK, {0x04d9, 0x04d8} },
+ { '3', CAPLOK, {0x0456, 0x0406} },
+ { '4', CAPLOK, {0x04a3, 0x04a2} },
+ { '5', CAPLOK, {0x0493, 0x0492} },
+ { '7', 0, {'.', ':' } },
+ { '8', CAPLOK, {0x04af, 0x04ae} },
+ { '9', CAPLOK, {0x04b1, 0x04b0} },
+ { '0', CAPLOK, {0x049b, 0x049a} },
+ { VK_OEM_PLUS, CAPLOK, {0x04bb, 0x04ba} },
+ { 'Q', CAPLOK, {0x0439, 0x0419} },
+ { 'W', CAPLOK, {0x0446, 0x0426} },
+ { 'E', CAPLOK, {0x0443, 0x0423} },
+ { 'R', CAPLOK, {0x043a, 0x041a} },
+ { 'T', CAPLOK, {0x0435, 0x0415} },
+ { 'Y', CAPLOK, {0x043d, 0x041d} },
+ { 'U', CAPLOK, {0x0433, 0x0413} },
+ { 'I', CAPLOK, {0x0448, 0x0428} },
+ { 'O', CAPLOK, {0x0449, 0x0429} },
+ { 'P', CAPLOK, {0x0437, 0x0417} },
+ { VK_OEM_4, CAPLOK, {0x0445, 0x0425} },
+ { 'A', CAPLOK, {0x0444, 0x0424} },
+ { 'S', CAPLOK, {0x044b, 0x042b} },
+ { 'D', CAPLOK, {0x0432, 0x0412} },
+ { 'F', CAPLOK, {0x0430, 0x0410} },
+ { 'G', CAPLOK, {0x043f, 0x041f} },
+ { 'H', CAPLOK, {0x0440, 0x0420} },
+ { 'J', CAPLOK, {0x043e, 0x041e} },
+ { 'K', CAPLOK, {0x043b, 0x041b} },
+ { 'L', CAPLOK, {0x0434, 0x0414} },
+ { VK_OEM_7, CAPLOK, {0x044d, 0x042d} },
+ { 'Z', CAPLOK, {0x044f, 0x042f} },
+ { 'X', CAPLOK, {0x0447, 0x0427} },
+ { 'C', CAPLOK, {0x0441, 0x0421} },
+ { 'V', CAPLOK, {0x043c, 0x041c} },
+ { 'B', CAPLOK, {0x0438, 0x0418} },
+ { 'N', CAPLOK, {0x0442, 0x0422} },
+ { 'M', CAPLOK, {0x044c, 0x042c} },
+ { VK_OEM_COMMA, CAPLOK, {0x0431, 0x0411} },
+ { VK_OEM_PERIOD,CAPLOK, {0x044e, 0x042e} },
+ { VK_OEM_2, 0, {0x2116, '?' } },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_MINUS, CAPS, {0x04e9, 0x04e8, 0x001f} },
- { VK_OEM_6, CAPS, {0x044a, 0x042a, 0x001b} },
- { VK_OEM_5, NOCAPS, {'\\', '/', 0x001c} },
- { VK_OEM_1, CAPS, {0x0436, 0x0416, 0x001d} },
- { VK_OEM_102, CAPS, {'\\', '|', 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_OEM_MINUS, CAPLOK, {0x04e9, 0x04e8, 0x001f} },
+ { VK_OEM_6, CAPLOK, {0x044a, 0x042a, 0x001b} },
+ { VK_OEM_5, 0, {'\\', '/', 0x001c} },
+ { VK_OEM_1, CAPLOK, {0x0436, 0x0416, 0x001d} },
+ { VK_OEM_102, CAPLOK, {'\\', '|', 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- {'6', NOCAPS, {',', ';', WCH_NONE, 0x001e} },
+ {'6', 0, {',', ';', WCH_NONE, 0x001e} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
+
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
+ /* The alphabet */
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'E', CAPLOK, {'e', 'E'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { '3', NOCAPS, {'3', '#'} },
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '3', 0, {'3', '#'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
/* Ctrl-6 generates RS */
- { '7', NOCAPS, {'7', '&'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
+ { '7', 0, {'7', '&'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
/* Specials */
/* Ctrl-_ generates US */
- { VK_OEM_PLUS ,NOCAPS, {'=', '+'} },
- { VK_OEM_1 ,NOCAPS, {';', ':'} },
- { VK_OEM_7 ,NOCAPS, {'\'','\"'} },
- { VK_OEM_3 ,NOCAPS, {'`', '~'} },
- { VK_OEM_COMMA ,NOCAPS, {',', '<'} },
- { VK_OEM_PERIOD ,NOCAPS, {'.', '>'} },
- { VK_OEM_2 ,NOCAPS, {'/', '?'} },
+ { VK_OEM_PLUS ,0, {'=', '+'} },
+ { VK_OEM_1 ,0, {';', ':'} },
+ { VK_OEM_7 ,0, {'\'','\"'} },
+ { VK_OEM_3 ,0, {'`', '~'} },
+ { VK_OEM_COMMA ,0, {',', '<'} },
+ { VK_OEM_PERIOD ,0, {'.', '>'} },
+ { VK_OEM_2 ,0, {'/', '?'} },
/* Keys that do not have shift states */
- { VK_TAB ,NOCAPS, {'\t','\t'} },
- { VK_ADD ,NOCAPS, {'+', '+'} },
- { VK_SUBTRACT,NOCAPS, {'-', '-'} },
- { VK_MULTIPLY,NOCAPS, {'*', '*'} },
- { VK_DIVIDE ,NOCAPS, {'/', '/'} },
- { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE ,NOCAPS, {' ', ' '} },
+ { VK_TAB ,0, {'\t','\t'} },
+ { VK_ADD ,0, {'+', '+'} },
+ { VK_SUBTRACT,0, {'-', '-'} },
+ { VK_MULTIPLY,0, {'*', '*'} },
+ { VK_DIVIDE ,0, {'/', '/'} },
+ { VK_ESCAPE ,0, {0x1b,0x1b} },
+ { VK_SPACE ,0, {' ', ' '} },
{ 0, 0 }
};
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 */} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x1f /* US */} },
+ { '2', 0, {'2', '@', WCH_NONE, 0} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x1e /* RS */} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x1f /* US */} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Korean doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { '1', NOCAPS, {'1', '!' } },
- { '2', NOCAPS, {'2', '\"' } },
- { '3', NOCAPS, {'3', '#' } },
- { '4', NOCAPS, {'4', '$' } },
- { '5', NOCAPS, {'5', '%' } },
- { '7', NOCAPS, {'7', '/' } },
- { '8', NOCAPS, {'8', '(' } },
- { '9', NOCAPS, {'9', ')' } },
- { '0', NOCAPS, {'0', '=' } },
- { VK_OEM_6, NOCAPS, {0x00bf, 0x00a1} },
- { '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' } },
- { VK_OEM_1, NOCAPS, {WCH_DEAD,WCH_DEAD} },
- { 0xff, NOCAPS, {0x00b4, 0x00a8} },
- { '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} },
- { '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_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { '1', 0, {'1', '!' } },
+ { '2', 0, {'2', '\"' } },
+ { '3', 0, {'3', '#' } },
+ { '4', 0, {'4', '$' } },
+ { '5', 0, {'5', '%' } },
+ { '7', 0, {'7', '/' } },
+ { '8', 0, {'8', '(' } },
+ { '9', 0, {'9', ')' } },
+ { '0', 0, {'0', '=' } },
+ { VK_OEM_6, 0, {0x00bf, 0x00a1} },
+ { 'W', CAPLOK, {'w', 'W' } },
+ { 'E', CAPLOK, {'e', 'E' } },
+ { 'R', CAPLOK, {'r', 'R' } },
+ { 'T', CAPLOK, {'t', 'T' } },
+ { 'Y', CAPLOK, {'y', 'Y' } },
+ { 'U', CAPLOK, {'u', 'U' } },
+ { 'I', CAPLOK, {'i', 'I' } },
+ { 'O', CAPLOK, {'o', 'O' } },
+ { 'P', CAPLOK, {'p', 'P' } },
+ { VK_OEM_1, 0, {WCH_DEAD,WCH_DEAD} },
+ { 0xff, 0, {0x00b4, 0x00a8} },
+ { 'A', CAPLOK, {'a', 'A' } },
+ { 'S', CAPLOK, {'s', 'S' } },
+ { 'D', CAPLOK, {'d', 'D' } },
+ { 'F', CAPLOK, {'f', 'F' } },
+ { 'G', CAPLOK, {'g', 'G' } },
+ { 'H', CAPLOK, {'h', 'H' } },
+ { 'J', CAPLOK, {'j', 'J' } },
+ { 'K', CAPLOK, {'k', 'K' } },
+ { 'L', CAPLOK, {'l', 'L' } },
+ { VK_OEM_3, CAPLOK, {0x00f1, 0x00d1} },
+ { 'Z', CAPLOK, {'z', 'Z' } },
+ { 'X', CAPLOK, {'x', 'X' } },
+ { 'C', CAPLOK, {'c', 'C' } },
+ { 'V', CAPLOK, {'v', 'V' } },
+ { 'B', CAPLOK, {'b', 'B' } },
+ { 'N', CAPLOK, {'n', 'N' } },
+ { 'M', CAPLOK, {'m', 'M' } },
+ { VK_OEM_COMMA, 0, {',', ';' } },
+ { VK_OEM_PERIOD,0, {'.', ':' } },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_MINUS, NOCAPS, {'-', '_', 0x001f} },
- { VK_OEM_102, NOCAPS, {'<', '>', 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_OEM_MINUS, 0, {'-', '_', 0x001f} },
+ { VK_OEM_102, 0, {'<', '>', 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_5, NOCAPS, {'|', 0x00b0, WCH_NONE, 0x00ac } },
- { VK_OEM_4, NOCAPS, {'\'', '?', 0x001c, '\\' } },
- { 'Q', CAPS, {'q', 'Q', WCH_NONE, '@' } },
- { VK_OEM_PLUS, NOCAPS, {'+', '*', WCH_NONE, '~' } },
- { VK_OEM_2, NOCAPS, {'}', ']', 0x001d, WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, WCH_NONE, '`' } },
- { VK_OEM_7, NOCAPS, {'{', '[', 0x001b, WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, WCH_NONE, '^' } },
+ { VK_OEM_5, 0, {'|', 0x00b0, WCH_NONE, 0x00ac } },
+ { VK_OEM_4, 0, {'\'', '?', 0x001c, '\\' } },
+ { 'Q', CAPLOK, {'q', 'Q', WCH_NONE, '@' } },
+ { VK_OEM_PLUS, 0, {'+', '*', WCH_NONE, '~' } },
+ { VK_OEM_2, 0, {'}', ']', 0x001d, WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, WCH_NONE, '`' } },
+ { VK_OEM_7, 0, {'{', '[', 0x001b, WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, WCH_NONE, '^' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { '6', NOCAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x001e} },
+ { '6', 0, {'6', '&', WCH_NONE, WCH_NONE, 0x001e} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, SHFT_INVALID, SHFT_INVALID, SHFT_INVALID, 3, 4 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
- { 'A', CAPS, {'a', 'A'} },
- { 'B', CAPS, {'b', 'B'} },
- { 'C', CAPS, {'c', 'C'} },
- { 'D', CAPS, {'d', 'D'} },
- { 'F', CAPS, {'f', 'F'} },
- { 'G', CAPS, {'g', 'G'} },
- { 'H', CAPS, {'h', 'H'} },
- { 'I', CAPS, {'i', 'I'} },
- { 'J', CAPS, {'j', 'J'} },
- { 'K', CAPS, {'k', 'K'} },
- { 'L', CAPS, {'l', 'L'} },
- { 'M', CAPS, {'m', 'M'} },
- { 'N', CAPS, {'n', 'N'} },
- { 'O', CAPS, {'o', 'O'} },
- { 'P', CAPS, {'p', 'P'} },
- { 'Q', CAPS, {'q', 'Q'} },
- { 'R', CAPS, {'r', 'R'} },
- { 'S', CAPS, {'s', 'S'} },
- { 'T', CAPS, {'t', 'T'} },
- { 'U', CAPS, {'u', 'U'} },
- { 'V', CAPS, {'v', 'V'} },
- { 'W', CAPS, {'w', 'W'} },
- { 'X', CAPS, {'x', 'X'} },
- { 'Y', CAPS, {'y', 'Y'} },
- { 'Z', CAPS, {'z', 'Z'} },
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
- { VK_OEM_1, NOCAPS, {';', ':'} },
- { VK_OEM_2, NOCAPS, {'/', '?'} },
- { VK_OEM_3, NOCAPS, {'`', '~'} },
- { VK_OEM_7, NOCAPS, {'\'','\"'} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_'} },
- { VK_OEM_COMMA, NOCAPS, {',', '<'} },
- { VK_OEM_PERIOD, NOCAPS, {'.', '>'} },
+ { VK_OEM_1, 0, {';', ':'} },
+ { VK_OEM_2, 0, {'/', '?'} },
+ { VK_OEM_3, 0, {'`', '~'} },
+ { VK_OEM_7, 0, {'\'','\"'} },
+ { VK_OEM_MINUS, 0, {'-', '_'} },
+ { VK_OEM_COMMA, 0, {',', '<'} },
+ { VK_OEM_PERIOD, 0, {'.', '>'} },
/* Keys that do not have shift states */
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_ESCAPE, NOCAPS, {'\x1b', '\x1b'} },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_4, NOCAPS, {'[', '{', 0x1b /* ESC */} },
- { VK_OEM_6, NOCAPS, {']', '}', 0x1d /* GS */} },
- { VK_OEM_5, NOCAPS, {'\\', '|', 0x1c /* FS */} },
- { VK_SPACE, NOCAPS, {' ', ' ', ' '} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
- { VK_OEM_102, NOCAPS, {0x5c, 0x2f, 0x1c} },
+ { VK_OEM_4, 0, {'[', '{', 0x1b /* ESC */} },
+ { VK_OEM_6, 0, {']', '}', 0x1d /* GS */} },
+ { VK_OEM_5, 0, {'\\', '|', 0x1c /* FS */} },
+ { VK_SPACE, 0, {' ', ' ', ' '} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
+ { VK_OEM_102, 0, {0x5c, 0x2f, 0x1c} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '9', NOCAPS, {'9', '(', WCH_NONE, '9'} },
- { '0', NOCAPS, {'0', ')', WCH_NONE, '0'} },
- { 'E', CAPS, {'e', 'E', WCH_NONE, 0x20ac} },
+ { '9', 0, {'9', '(', WCH_NONE, '9'} },
+ { '0', 0, {'0', ')', WCH_NONE, '0'} },
+ { 'E', CAPLOK, {'e', 'E', WCH_NONE, 0x20ac} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { '1', CAPS, {0x105, 0x104, 0x01, '1', '!'} },
- { '2', CAPS, {0x10d, 0x10c, 0x02, '2', '@'} },
- { '3', CAPS, {0x119, 0x118, 0x03, '3', '#'} },
- { '4', CAPS, {0x117, 0x116, WCH_NONE, '4', '$'} },
- { '5', CAPS, {0x12f, 0x12e, WCH_NONE, '5', '%'} },
- { '6', CAPS, {0x161, 0x160, WCH_NONE, '6', '^'} },
- { '7', CAPS, {0x173, 0x172, WCH_NONE, '7', '&'} },
- { '8', CAPS, {0x16b, 0x16a, WCH_NONE, '8', '*'} },
- { VK_OEM_PLUS, CAPS, {0x17e, 0x17d, WCH_NONE, '=', '+'} },
+ { '1', CAPLOK, {0x105, 0x104, 0x01, '1', '!'} },
+ { '2', CAPLOK, {0x10d, 0x10c, 0x02, '2', '@'} },
+ { '3', CAPLOK, {0x119, 0x118, 0x03, '3', '#'} },
+ { '4', CAPLOK, {0x117, 0x116, WCH_NONE, '4', '$'} },
+ { '5', CAPLOK, {0x12f, 0x12e, WCH_NONE, '5', '%'} },
+ { '6', CAPLOK, {0x161, 0x160, WCH_NONE, '6', '^'} },
+ { '7', CAPLOK, {0x173, 0x172, WCH_NONE, '7', '&'} },
+ { '8', CAPLOK, {0x16b, 0x16a, WCH_NONE, '8', '*'} },
+ { VK_OEM_PLUS, CAPLOK, {0x17e, 0x17d, WCH_NONE, '=', '+'} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Lithuanian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
+
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { '3', NOCAPS, {'3', '#'} },
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '3', 0, {'3', '#'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
/* Ctrl-6 generates RS */
- { '7', NOCAPS, {'7', '&'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
+ { '7', 0, {'7', '&'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
/* Specials */
/* Ctrl-_ generates US */
- { VK_OEM_PLUS ,NOCAPS, {'=', '+'} },
- { VK_OEM_1 ,NOCAPS, {';', ':'} },
- { VK_OEM_7 ,NOCAPS, {'\'','\"'} },
- { VK_OEM_3 ,NOCAPS, {'`', '~'} },
- { VK_OEM_COMMA ,NOCAPS, {',', '<'} },
- { VK_OEM_PERIOD ,NOCAPS, {'.', '>'} },
- { VK_OEM_2 ,NOCAPS, {'/', '?'} },
+ { VK_OEM_PLUS ,0, {'=', '+'} },
+ { VK_OEM_1 ,0, {';', ':'} },
+ { VK_OEM_7 ,0, {'\'','\"'} },
+ { VK_OEM_3 ,0, {'`', '~'} },
+ { VK_OEM_COMMA ,0, {',', '<'} },
+ { VK_OEM_PERIOD ,0, {'.', '>'} },
+ { VK_OEM_2 ,0, {'/', '?'} },
/* Keys that do not have shift states */
- { VK_TAB ,NOCAPS, {'\t','\t'} },
- { VK_ADD ,NOCAPS, {'+', '+'} },
- { VK_SUBTRACT,NOCAPS, {'-', '-'} },
- { VK_MULTIPLY,NOCAPS, {'*', '*'} },
- { VK_DIVIDE ,NOCAPS, {'/', '/'} },
- { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE ,NOCAPS, {' ', ' '} },
+ { VK_TAB ,0, {'\t','\t'} },
+ { VK_ADD ,0, {'+', '+'} },
+ { VK_SUBTRACT,0, {'-', '-'} },
+ { VK_MULTIPLY,0, {'*', '*'} },
+ { VK_DIVIDE ,0, {'/', '/'} },
+ { VK_ESCAPE ,0, {0x1b,0x1b} },
+ { VK_SPACE ,0, {' ', ' '} },
{ 0, 0 }
};
/* Normal, Shifted, Ctrl, C-S-x */
/* The alphabet */
- { 'A', CAPS, {'a', 'A', 0x101, 0x100} },
- { 'B', CAPS, {'b', 'B', 0x02, 0x02} },
- { 'C', CAPS, {'c', 'C', 0x10d, 0x10c} },
- { 'D', CAPS, {'d', 'D', 0x04, 0x04} },
- { 'E', CAPS, {'e', 'E', 0x113, 0x112} },
- { 'F', CAPS, {'f', 'F', 0x06, 0x06} },
- { 'G', CAPS, {'g', 'G', 0x123, 0x122} },
- { 'H', CAPS, {'h', 'H', 0x08, 0x08} },
- { 'I', CAPS, {'i', 'I', 0x12b, 0x12a} },
- { 'J', CAPS, {'j', 'J', 0x0a, 0x0a} },
- { 'K', CAPS, {'k', 'K', 0x137, 0x136} },
- { 'L', CAPS, {'l', 'L', 0x13c, 0x13b} },
- { 'M', CAPS, {'m', 'M', 0x0d, 0x0d} },
- { 'N', CAPS, {'n', 'N', 0x146, 0x145} },
- { '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', 0x161, 0x160} },
- { 'T', CAPS, {'t', 'T', 0x14, 0x14} },
- { 'U', CAPS, {'u', 'U', 0x16b, 0x16a} },
- { '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', 0x17e, 0x17d} },
+ { 'A', CAPLOK, {'a', 'A', 0x101, 0x100} },
+ { 'B', CAPLOK, {'b', 'B', 0x02, 0x02} },
+ { 'C', CAPLOK, {'c', 'C', 0x10d, 0x10c} },
+ { 'D', CAPLOK, {'d', 'D', 0x04, 0x04} },
+ { 'E', CAPLOK, {'e', 'E', 0x113, 0x112} },
+ { 'F', CAPLOK, {'f', 'F', 0x06, 0x06} },
+ { 'G', CAPLOK, {'g', 'G', 0x123, 0x122} },
+ { 'H', CAPLOK, {'h', 'H', 0x08, 0x08} },
+ { 'I', CAPLOK, {'i', 'I', 0x12b, 0x12a} },
+ { 'J', CAPLOK, {'j', 'J', 0x0a, 0x0a} },
+ { 'K', CAPLOK, {'k', 'K', 0x137, 0x136} },
+ { 'L', CAPLOK, {'l', 'L', 0x13c, 0x13b} },
+ { 'M', CAPLOK, {'m', 'M', 0x0d, 0x0d} },
+ { 'N', CAPLOK, {'n', 'N', 0x146, 0x145} },
+ { 'O', CAPLOK, {'o', 'O', 0x0f, 0x0f} },
+ { 'P', CAPLOK, {'p', 'P', 0x10, 0x10} },
+ { 'Q', CAPLOK, {'q', 'Q', 0x11, 0x11} },
+ { 'R', CAPLOK, {'r', 'R', 0x12, 0x12} },
+ { 'S', CAPLOK, {'s', 'S', 0x161, 0x160} },
+ { 'T', CAPLOK, {'t', 'T', 0x14, 0x14} },
+ { 'U', CAPLOK, {'u', 'U', 0x16b, 0x16a} },
+ { 'V', CAPLOK, {'v', 'V', 0x16, 0x16} },
+ { 'W', CAPLOK, {'w', 'W', 0x17, 0x17} },
+ { 'X', CAPLOK, {'x', 'X', 0x18, 0x18} },
+ { 'Y', CAPLOK, {'y', 'Y', 0x19, 0x19} },
+ { 'Z', CAPLOK, {'z', 'Z', 0x17e, 0x17d} },
/* Legacy Ascii generators */
- { '2', NOCAPS, {'2', '@', WCH_NONE, 0} },
- { '6', NOCAPS, {'6', '^', WCH_NONE, 0x1e /* RS */} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x1f /* US */} },
+ { '2', 0, {'2', '@', WCH_NONE, 0} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x1e /* RS */} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x1f /* US */} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Latvian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {'`', '~' } },
- { '1', NOCAPS, {'1', '!' } },
- { '2', NOCAPS, {'2', 0x201e} },
- { '3', NOCAPS, {'3', 0x201c} },
- { '4', NOCAPS, {'4', 0x2019} },
- { '5', NOCAPS, {'5', '%' } },
- { '7', NOCAPS, {'7', '&' } },
- { '8', NOCAPS, {'8', '*' } },
- { '9', NOCAPS, {'9', '(' } },
- { '0', NOCAPS, {'0', ')' } },
- { VK_OEM_PLUS, NOCAPS, {'=', '+' } },
- { 'Q', CAPS, {0x0459, 0x0409} },
- { 'W', CAPS, {0x045a, 0x040a} },
- { 'R', CAPS, {0x0440, 0x0420} },
- { 'T', CAPS, {0x0442, 0x0422} },
- { 'Y', CAPS, {0x0455, 0x0405} },
- { 'U', CAPS, {0x0443, 0x0423} },
- { 'I', CAPS, {0x0438, 0x0418} },
- { 'O', CAPS, {0x043e, 0x041e} },
- { 'P', CAPS, {0x043f, 0x041f} },
- { 'A', CAPS, {0x0430, 0x0410} },
- { 'S', CAPS, {0x0441, 0x0421} },
- { 'D', CAPS, {0x0434, 0x0414} },
- { 'H', CAPS, {0x0445, 0x0425} },
- { 'J', CAPS, {0x0458, 0x0408} },
- { 'K', CAPS, {0x043a, 0x041a} },
- { 'L', CAPS, {0x043b, 0x041b} },
- { 'Z', CAPS, {0x0437, 0x0417} },
- { 'X', CAPS, {0x045f, 0x040f} },
- { 'C', CAPS, {0x0446, 0x0426} },
- { VK_OEM_COMMA, NOCAPS, {',', ';' } },
- { VK_OEM_PERIOD, NOCAPS, {'.', ':' } },
- { VK_OEM_2, NOCAPS, {'/', '?' } },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {'`', '~' } },
+ { '1', 0, {'1', '!' } },
+ { '2', 0, {'2', 0x201e} },
+ { '3', 0, {'3', 0x201c} },
+ { '4', 0, {'4', 0x2019} },
+ { '5', 0, {'5', '%' } },
+ { '7', 0, {'7', '&' } },
+ { '8', 0, {'8', '*' } },
+ { '9', 0, {'9', '(' } },
+ { '0', 0, {'0', ')' } },
+ { VK_OEM_PLUS, 0, {'=', '+' } },
+ { 'Q', CAPLOK, {0x0459, 0x0409} },
+ { 'W', CAPLOK, {0x045a, 0x040a} },
+ { 'R', CAPLOK, {0x0440, 0x0420} },
+ { 'T', CAPLOK, {0x0442, 0x0422} },
+ { 'Y', CAPLOK, {0x0455, 0x0405} },
+ { 'U', CAPLOK, {0x0443, 0x0423} },
+ { 'I', CAPLOK, {0x0438, 0x0418} },
+ { 'O', CAPLOK, {0x043e, 0x041e} },
+ { 'P', CAPLOK, {0x043f, 0x041f} },
+ { 'A', CAPLOK, {0x0430, 0x0410} },
+ { 'S', CAPLOK, {0x0441, 0x0421} },
+ { 'D', CAPLOK, {0x0434, 0x0414} },
+ { 'H', CAPLOK, {0x0445, 0x0425} },
+ { 'J', CAPLOK, {0x0458, 0x0408} },
+ { 'K', CAPLOK, {0x043a, 0x041a} },
+ { 'L', CAPLOK, {0x043b, 0x041b} },
+ { 'Z', CAPLOK, {0x0437, 0x0417} },
+ { 'X', CAPLOK, {0x045f, 0x040f} },
+ { 'C', CAPLOK, {0x0446, 0x0426} },
+ { VK_OEM_COMMA, 0, {',', ';' } },
+ { VK_OEM_PERIOD, 0, {'.', ':' } },
+ { VK_OEM_2, 0, {'/', '?' } },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { 'E', CAPS, {0x0435, 0x0415, 0x20ac} },
- { VK_OEM_4, CAPS, {0x0448, 0x0428, 0x0402} },
- { 'F', CAPS, {0x0444, 0x0424, '[' } },
- { 'G', CAPS, {0x0433, 0x0413, ']' } },
- { VK_OEM_7, CAPS, {0x045c, 0x040c, 0x045b} },
- { 'V', CAPS, {0x0432, 0x0412, '@' } },
- { 'B', CAPS, {0x0431, 0x0411, '{' } },
- { 'N', CAPS, {0x043d, 0x041d, '}' } },
- { 'M', CAPS, {0x043c, 0x041c, 0x00a7} },
+ { 'E', CAPLOK, {0x0435, 0x0415, 0x20ac} },
+ { VK_OEM_4, CAPLOK, {0x0448, 0x0428, 0x0402} },
+ { 'F', CAPLOK, {0x0444, 0x0424, '[' } },
+ { 'G', CAPLOK, {0x0433, 0x0413, ']' } },
+ { VK_OEM_7, CAPLOK, {0x045c, 0x040c, 0x045b} },
+ { 'V', CAPLOK, {0x0432, 0x0412, '@' } },
+ { 'B', CAPLOK, {0x0431, 0x0411, '{' } },
+ { 'N', CAPLOK, {0x043d, 0x041d, '}' } },
+ { 'M', CAPLOK, {0x043c, 0x041c, 0x00a7} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x001f} },
- { VK_OEM_6, CAPS, {0x0453, 0x0403, 0x0452, 0x001b} },
- { VK_OEM_5, CAPS, {0x0436, 0x0416, WCH_NONE, 0x001c} },
- { VK_OEM_1, CAPS, {0x0447, 0x0427, 0x040b, 0x001d} },
- { VK_OEM_102, CAPS, {0x0451, 0x0401, WCH_NONE, 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, 0x0003} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x001f} },
+ { VK_OEM_6, CAPLOK, {0x0453, 0x0403, 0x0452, 0x001b} },
+ { VK_OEM_5, CAPLOK, {0x0436, 0x0416, WCH_NONE, 0x001c} },
+ { VK_OEM_1, CAPLOK, {0x0447, 0x0427, 0x040b, 0x001d} },
+ { VK_OEM_102, CAPLOK, {0x0451, 0x0401, WCH_NONE, 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { '6', NOCAPS, {'6', 0x2018, WCH_NONE, WCH_NONE, 0x001e} },
+ { '6', 0, {'6', 0x2018, WCH_NONE, WCH_NONE, 0x001e} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { '0', NOCAPS, {'0', '\'' } },
- { 'Q', CAPS, {'q', 'Q' } },
- { 'W', CAPS, {'w', 'W' } },
- { '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, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { 0xff, NOCAPS, {0x00a8, '^' } },
- { VK_OEM_1, NOCAPS, {'*', '|' } },
- { VK_OEM_5, NOCAPS, {'<', '>' } },
- { 'A', CAPS, {'a', 'A' } },
- { '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_PLUS, NOCAPS, {'+', 0x00b1 } },
- { VK_OEM_3, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { 0xff, NOCAPS, {0x00b4, '`' } },
- { 'V', CAPS, {'v', 'V' } },
- { 'B', CAPS, {'b', 'B' } },
- { 'N', CAPS, {'n', 'N' } },
- { VK_OEM_COMMA, NOCAPS, {',', ';' } },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { '0', 0, {'0', '\'' } },
+ { 'Q', CAPLOK, {'q', 'Q' } },
+ { 'W', CAPLOK, {'w', 'W' } },
+ { 'T', CAPLOK, {'t', 'T' } },
+ { 'Y', CAPLOK, {'y', 'Y' } },
+ { 'U', CAPLOK, {'u', 'U' } },
+ { 'I', CAPLOK, {'i', 'I' } },
+ { 'O', CAPLOK, {'o', 'O' } },
+ { 'P', CAPLOK, {'p', 'P' } },
+ { VK_OEM_6, 0, {WCH_DEAD, WCH_DEAD} },
+ { 0xff, 0, {0x00a8, '^' } },
+ { VK_OEM_1, 0, {'*', '|' } },
+ { VK_OEM_5, 0, {'<', '>' } },
+ { 'A', CAPLOK, {'a', 'A' } },
+ { 'D', CAPLOK, {'d', 'D' } },
+ { 'F', CAPLOK, {'f', 'F' } },
+ { 'G', CAPLOK, {'g', 'G' } },
+ { 'H', CAPLOK, {'h', 'H' } },
+ { 'J', CAPLOK, {'j', 'J' } },
+ { 'K', CAPLOK, {'k', 'K' } },
+ { 'L', CAPLOK, {'l', 'L' } },
+ { VK_OEM_PLUS, 0, {'+', 0x00b1 } },
+ { VK_OEM_3, 0, {WCH_DEAD, WCH_DEAD} },
+ { 0xff, 0, {0x00b4, '`' } },
+ { 'V', CAPLOK, {'v', 'V' } },
+ { 'B', CAPLOK, {'b', 'B' } },
+ { 'N', CAPLOK, {'n', 'N' } },
+ { VK_OEM_COMMA, 0, {',', ';' } },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_7, NOCAPS, {'@', 0x00a7, 0x00ac} },
- { '1', NOCAPS, {'1', '!', 0x00b9} },
- { '2', NOCAPS, {'2', '\"', 0x00b2} },
- { '3', NOCAPS, {'3', '#', 0x00b3} },
- { '4', NOCAPS, {'4', '$', 0x00bc} },
- { '5', NOCAPS, {'5', '%', 0x00bd} },
- { '7', NOCAPS, {'7', '_', 0x00a3} },
- { '8', NOCAPS, {'8', '(', '{' } },
- { '9', NOCAPS, {'9', ')', '}' } },
- { 'E', CAPS, {'e', 'E', 0x20ac} },
- { 'R', CAPS, {'r', 'R', 0x00b6} },
- { 'S', CAPS, {'s', 'S', 0x00df} },
- { 'Z', CAPS, {'z', 'Z', 0x00ab} },
- { 'X', CAPS, {'x', 'X', 0x00bb} },
- { 'C', CAPS, {'c', 'C', 0x00a2} },
- { 'M', CAPS, {'m', 'M', 0x00b5} },
- { VK_OEM_PERIOD, NOCAPS, {'.', ':', 0x00b7} },
+ { VK_OEM_7, 0, {'@', 0x00a7, 0x00ac} },
+ { '1', 0, {'1', '!', 0x00b9} },
+ { '2', 0, {'2', '\"', 0x00b2} },
+ { '3', 0, {'3', '#', 0x00b3} },
+ { '4', 0, {'4', '$', 0x00bc} },
+ { '5', 0, {'5', '%', 0x00bd} },
+ { '7', 0, {'7', '_', 0x00a3} },
+ { '8', 0, {'8', '(', '{' } },
+ { '9', 0, {'9', ')', '}' } },
+ { 'E', CAPLOK, {'e', 'E', 0x20ac} },
+ { 'R', CAPLOK, {'r', 'R', 0x00b6} },
+ { 'S', CAPLOK, {'s', 'S', 0x00df} },
+ { 'Z', CAPLOK, {'z', 'Z', 0x00ab} },
+ { 'X', CAPLOK, {'x', 'X', 0x00bb} },
+ { 'C', CAPLOK, {'c', 'C', 0x00a2} },
+ { 'M', CAPLOK, {'m', 'M', 0x00b5} },
+ { VK_OEM_PERIOD, 0, {'.', ':', 0x00b7} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_4, NOCAPS, {'/', '?', '\\', 0x001c } },
- { VK_OEM_2, NOCAPS, {0x00b0, WCH_DEAD, WCH_DEAD, 0x001d } },
- { 0xff, NOCAPS, {WCH_NONE, '~', 0x00b8, WCH_NONE} },
- { VK_OEM_MINUS, NOCAPS, {'-', '=', WCH_NONE, 0x001f } },
- { VK_OEM_102, NOCAPS, {']', '[', 0x00a6, 0x001b } },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x007f } },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, 0x001b } },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, 0x0003 } },
+ { VK_OEM_4, 0, {'/', '?', '\\', 0x001c } },
+ { VK_OEM_2, 0, {0x00b0, WCH_DEAD, WCH_DEAD, 0x001d } },
+ { 0xff, 0, {WCH_NONE, '~', 0x00b8, WCH_NONE} },
+ { VK_OEM_MINUS, 0, {'-', '=', WCH_NONE, 0x001f } },
+ { VK_OEM_102, 0, {']', '[', 0x00a6, 0x001b } },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x007f } },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b } },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003 } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { '6', NOCAPS, {'6', '&', 0x00be, WCH_NONE, 0x001e} },
+ { '6', 0, {'6', '&', 0x00be, WCH_NONE, 0x001e} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
* Copyright (C) 2004 ReactOS Development Team
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, CTRL + MENU */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
/* The numbers */
- { VK_OEM_5, NOCAPS, {'|', 0xa7} }, /* Button to the left of 1. 0xa7=§ */
- { '1', NOCAPS, {'1', '!'} },
+ { VK_OEM_5, 0, {'|', 0xa7} }, /* Button to the left of 1. 0xa7=§ */
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { VK_OEM_PLUS, NOCAPS, {'+', '?'} },
- { VK_OEM_6, CAPS, {0xe5, 0xc5} }, /* Å */
+ { VK_OEM_PLUS, 0, {'+', '?'} },
+ { VK_OEM_6, CAPLOK, {0xe5, 0xc5} }, /* Å */
/* Specials */
- { VK_OEM_3, CAPS, {0xf8, 0xd8} }, /* Ø */
- { VK_OEM_7, CAPS, {0xe6, 0xc6} }, /* Æ */
-
- { VK_OEM_COMMA, CAPS, {',', ';'} },
- { VK_OEM_PERIOD, CAPS, {'.', ':'} },
- { VK_OEM_2, NOCAPS, {'\'', '*'} },
-
- { VK_DECIMAL, NOCAPS, {',', ','} },
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_3, CAPLOK, {0xf8, 0xd8} }, /* Ø */
+ { VK_OEM_7, CAPLOK, {0xe6, 0xc6} }, /* Æ */
+
+ { VK_OEM_COMMA, CAPLOK, {',', ';'} },
+ { VK_OEM_PERIOD, CAPLOK, {'.', ':'} },
+ { VK_OEM_2, 0, {'\'', '*'} },
+
+ { VK_DECIMAL, 0, {',', ','} },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
/* 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} },
+ { 'A', CAPLOK, {'a', 'A', 0x01} },
+ { 'B', CAPLOK, {'b', 'B', 0x02} },
+ { 'C', CAPLOK, {'c', 'C', 0x03} },
+ { 'D', CAPLOK, {'d', 'D', 0x04} },
+ { 'F', CAPLOK, {'f', 'F', 0x06} },
+ { 'G', CAPLOK, {'g', 'G', 0x07} },
+ { 'H', CAPLOK, {'h', 'H', 0x08} },
+ { 'I', CAPLOK, {'i', 'I', 0x09} },
+ { 'J', CAPLOK, {'j', 'J', 0x0a} },
+ { 'K', CAPLOK, {'k', 'K', 0x0b} },
+ { 'L', CAPLOK, {'l', 'L', 0x0c} },
+ { 'M', CAPLOK, {'m', 'M', 0x0d} },
+ { 'N', CAPLOK, {'n', 'N', 0x0e} },
+ { 'O', CAPLOK, {'o', 'O', 0x0f} },
+ { 'P', CAPLOK, {'p', 'P', 0x10} },
+ { 'Q', CAPLOK, {'q', 'Q', 0x11} },
+ { 'R', CAPLOK, {'r', 'R', 0x12} },
+ { 'S', CAPLOK, {'s', 'S', 0x13} },
+ { 'T', CAPLOK, {'t', 'T', 0x14} },
+ { 'U', CAPLOK, {'u', 'U', 0x15} },
+ { 'V', CAPLOK, {'v', 'V', 0x16} },
+ { 'W', CAPLOK, {'w', 'W', 0x17} },
+ { 'X', CAPLOK, {'x', 'X', 0x18} },
+ { 'Y', CAPLOK, {'y', 'Y', 0x19} },
+ { 'Z', CAPLOK, {'z', 'Z', 0x1a} },
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_MINUS, NOCAPS, {'-', '_', 0x1f /* US */} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
+ { VK_OEM_MINUS, 0, {'-', '_', 0x1f /* US */} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, 0x1b} },
- { VK_SPACE, NOCAPS, {' ', ' ', ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, 0x03} },
+ { VK_BACK, 0, {'\b', '\b', 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, 0x1b} },
+ { VK_SPACE, 0, {' ', ' ', ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, 0x03} },
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt */
/* Legacy Ascii generators */
- { '2', NOCAPS, {'2', '\"', WCH_NONE, '@'} },
- { '3', NOCAPS, {'3', '#', WCH_NONE, 0x00a3} },
- { '4', NOCAPS, {'4', 0xa4, WCH_NONE, '$'} },
- { '5', NOCAPS, {'5', '%', WCH_NONE, 0x20ac} },
- { '7', NOCAPS, {'7', '/', WCH_NONE, '{'} },
- { '8', NOCAPS, {'8', '(', WCH_NONE, '['} },
- { '9', NOCAPS, {'9', ')', WCH_NONE, ']'} },
- { '0', NOCAPS, {'0', '=', WCH_NONE, '}'} },
- { VK_OEM_4, NOCAPS, {'\\', 0x60, WCH_NONE, 0xb4} }, //VK_OEM_4 is between +? and backspace
- { VK_EMPTY , NOCAPS, {0xb4, '`', '|', WCH_NONE} },
-
- { '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', 0x0d, 0x00b5} },
- { VK_OEM_102, NOCAPS, {'<', '>', 0x001c, '\\'} },
+ { '2', 0, {'2', '\"', WCH_NONE, '@'} },
+ { '3', 0, {'3', '#', WCH_NONE, 0x00a3} },
+ { '4', 0, {'4', 0xa4, WCH_NONE, '$'} },
+ { '5', 0, {'5', '%', WCH_NONE, 0x20ac} },
+ { '7', 0, {'7', '/', WCH_NONE, '{'} },
+ { '8', 0, {'8', '(', WCH_NONE, '['} },
+ { '9', 0, {'9', ')', WCH_NONE, ']'} },
+ { '0', 0, {'0', '=', WCH_NONE, '}'} },
+ { VK_OEM_4, 0, {'\\', 0x60, WCH_NONE, 0xb4} }, //VK_OEM_4 is between +? and backspace
+ { VK_EMPTY , 0, {0xb4, '`', '|', WCH_NONE} },
+
+ { 'E', CAPLOK, {'e', 'E', 0x05, 0x20ac} },
+ { VK_OEM_1, 0, {WCH_DEAD, WCH_DEAD, WCH_NONE, WCH_DEAD} },
+ { VK_EMPTY , 0, {0xa8, '^', WCH_NONE, '~'} },
+
+ { 'M', CAPLOK, {'m', 'M', 0x0d, 0x00b5} },
+ { VK_OEM_102, 0, {'<', '>', 0x001c, '\\'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt, C-S-x */
- { '6', NOCAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x1e /* RS */} },
+ { '6', 0, {'6', '&', WCH_NONE, WCH_NONE, 0x1e /* RS */} },
{ 0, 0 }
};
{ 0x37, L"NUM * (Numerisk del)" },
{ 0x38, L"ALT" },
{ 0x39, L"MELLOMROM" },
- { 0x3a, L"CAPS LOCK" },
+ { 0x3a, L"CAPLOK LOCK" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Norwegian doesn't have any (æ is not a ligature!)*/
0,
*
* Thanks to: http://www.barcodeman.com/altek/mule/scandoc.php
* and http://win.tue.nl/~aeb/linux/kbd/scancodes-1.html
- *
- * missing ~ - Tylda deadkey -
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1D, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
ROSDATA MODIFIERS modifier_bits = {
modifier_keys,
7,
- { 0, 1, 3, SHFT_INVALID, SHFT_INVALID, SHFT_INVALID, 2, 4 }
+ { 0, 1, 4, 5, SHFT_INVALID, SHFT_INVALID, 2, 3 }
};
-
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
+ /* The alphabet */
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { '3', NOCAPS, {'3', '#'} },
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '3', 0, {'3', '#'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
/* Ctrl-6 generates RS */
- { '7', NOCAPS, {'7', '&'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
+ { '7', 0, {'7', '&'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
/* Specials */
/* Ctrl-_ generates US */
- { VK_OEM_PLUS ,NOCAPS, {'=', '+'} },
- { VK_OEM_1 ,NOCAPS, {';', ':'} },
- { VK_OEM_7 ,NOCAPS, {'\'','\"'} },
- { VK_OEM_3 ,NOCAPS, {'`', '~'} },
- { VK_OEM_COMMA ,NOCAPS, {',', '<'} },
- { VK_OEM_PERIOD ,NOCAPS, {'.', '>'} },
- { VK_OEM_2 ,NOCAPS, {'/', '?'} },
+ { VK_OEM_PLUS, 0, {'=', '+'} },
+ { VK_OEM_1, 0, {';', ':'} },
+ { VK_OEM_7, 0, {'\'','\"'} },
+ { VK_OEM_3, 0, {'`', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE,'~'} },
+ { VK_OEM_COMMA, 0, {',', '<'} },
+ { VK_OEM_PERIOD, 0, {'.', '>'} },
+ { VK_OEM_2, 0, {'/', '?'} },
/* Keys that do not have shift states */
- { VK_TAB ,NOCAPS, {'\t','\t'} },
- { VK_ADD ,NOCAPS, {'+', '+'} },
- { VK_SUBTRACT,NOCAPS, {'-', '-'} },
- { VK_MULTIPLY,NOCAPS, {'*', '*'} },
- { VK_DIVIDE ,NOCAPS, {'/', '/'} },
- { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE ,NOCAPS, {' ', ' '} },
+ { VK_TAB, 0, {'\t','\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_ESCAPE, 0, {0x1b,0x1b} },
+ { VK_SPACE, 0, {' ', ' '} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- /* Normal, Shifted, Ctrl */
- /* Legacy (telnet-style) ascii escapes */
- { VK_OEM_4, 0, {'[', '{', 0x1b /* ESC */} },
- { VK_OEM_6, 0, {']', '}', 0x1d /* GS */} },
- { VK_OEM_5, 0, {'\\','|', 0x1c /* FS */} },
- { VK_RETURN,0, {'\r', '\r', '\n'} },
- { 0,0 }
+ /* Normal, Shifted, C-A */
+ { 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, C-S-x */
+ { 'A', CAPLOK|CAPLOKALTGR, {'a', 'A', 0x0105, 0x0104} },
+ { 'C', CAPLOK|CAPLOKALTGR, {'c', 'C', 0x0107, 0x0106} },
+ { 'E', CAPLOK|CAPLOKALTGR, {'e', 'E', 0x0119, 0x0118} },
+ { 'L', CAPLOK|CAPLOKALTGR, {'l', 'L', 0x0142, 0x0141} },
+ { 'N', CAPLOK|CAPLOKALTGR, {'n', 'N', 0x0144, 0x0143} },
+ { 'O', CAPLOK|CAPLOKALTGR, {'o', 'O', 0xF3, 0xD3} },
+ { 'S', CAPLOK|CAPLOKALTGR, {'s', 'S', 0x015B, 0x015A} },
+ { 'X', CAPLOK|CAPLOKALTGR, {'x', 'X', 0x017A, 0x0179} },
+ { 'Z', CAPLOK|CAPLOKALTGR, {'z', 'Z', 0x017C, 0x017B} },
+ { 0, 0 }
+};
- /* The alphabet */
- { 'B', CAPS, {'b', 'B', 0x02, 0x02} },
- { 'D', CAPS, {'d', 'D', 0x04, 0x04} },
- { '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} },
- { 'M', CAPS, {'m', 'M', 0x0d, 0x0d} },
- { 'P', CAPS, {'p', 'P', 0x10, 0x10} },
- { 'Q', CAPS, {'q', 'Q', 0x11, 0x11} },
- { 'R', CAPS, {'r', 'R', 0x12, 0x12} },
- { 'T', CAPS, {'t', 'T', 0x14, 0x14} },
- { 'U', CAPS, {'u', 'U', 0x15, 0x15} },
- { 'V', CAPS, {'v', 'V', 0x16, 0x16} },
- { 'W', CAPS, {'w', 'W', 0x17, 0x17} },
- { 'Y', CAPS, {'y', 'Y', 0x19, 0x19} },
-
-
+ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
+ /* Normal, Shifted, C-A, S-C-A, Ctrl */
/* Legacy Ascii generators */
- { '2', NOCAPS, {'2', '@', WCH_NONE, 0} },
- { '6', NOCAPS, {'6', '^', WCH_NONE, 0x1e /* RS */} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x1f /* US */} },
+ { VK_OEM_4, 0, {'[', '{', WCH_NONE, WCH_NONE, 0x1b /* ESC */} },
+ { VK_OEM_6, 0, {']', '}', WCH_NONE, WCH_NONE, 0x1d /* GS */} },
+ { VK_OEM_5, 0, {'\\','|', WCH_NONE, WCH_NONE, 0x1c /* FS */} },
+ { VK_RETURN, 0, {'\r','\r',WCH_NONE, WCH_NONE, '\n'} },
{ 0, 0 }
};
-ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- /* Normal, Shifted, Ctrl, C-S-x */
- { 'A', CAPS, {'a', 'A', 0x0105, 0x01, 0x0104} },
- { 'C', CAPS, {'c', 'C', 0x0107, 0x03, 0x0106} },
- { 'E', CAPS, {'e', 'E', 0x0119, 0x05, 0x0118} },
- { 'L', CAPS, {'l', 'L', 0x0142, 0x0C, 0x0141} },
- { 'N', CAPS, {'n', 'N', 0x0144, 0x0E, 0x0143} },
- { 'O', CAPS, {'o', 'O', 0xF3, 0x0F, 0xD3} },
- { 'S', CAPS, {'s', 'S', 0x015B, 0x13, 0x015A} },
- { 'X', CAPS, {'x', 'X', 0x017A, 0x18, 0x0179} },
- { 'Z', CAPS, {'z', 'Z', 0x017C, 0x1A, 0x017B} },
+ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
+ /* Normal, Shifted, Ctrl-Alt, Sh-Ctrl-Alt, Ctrl, Ctrl-Shift */
+ /* Legacy Ascii generators */
+ { '2', 0, {'2', '@', WCH_NONE, WCH_NONE, WCH_NONE, 0x00} },
+ { '6', 0, {'6', '^', WCH_NONE, WCH_NONE, WCH_NONE, 0x1e /* RS */} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, WCH_NONE, 0x1f, 0x1f /* US */} },
{ 0, 0 }
};
{ VK_NUMPAD9, 0, {'9'} },
{ VK_DECIMAL, 0, {'.'} },
{ VK_BACK, 0, {'\010'} },
- { 0,0 }
+ { 0, 0 }
};
#define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
- vk_master(1,keypad_numbers),
- vk_master(2,key_to_chars_2mod),
- vk_master(3,key_to_chars_3mod),
- vk_master(4,key_to_chars_4mod),
- vk_master(5,key_to_chars_5mod),
- { 0,0,0 }
+ vk_master(1, keypad_numbers),
+ vk_master(2, key_to_chars_2mod),
+ vk_master(3, key_to_chars_3mod),
+ vk_master(4, key_to_chars_4mod),
+ vk_master(5, key_to_chars_5mod),
+ vk_master(6, key_to_chars_6mod),
+ { 0, 0, 0 }
};
ROSDATA VSC_LPWSTR key_names[] = {
- { 0x00, L"" },
{ 0x01, L"Esc" },
{ 0x0e, L"Backspace" },
{ 0x0f, L"Tab" },
{ 0, NULL },
};
+ROSDATA DEADKEY_LPWSTR dead_key_names[] = {
+ L"~" L"Tylda",
+ NULL
+};
+
+#define DEADTRANS(ch, accent, comp, flags) MAKELONG(ch, accent), comp, flags
+
+ROSDATA DEADKEY dead_key[] = {
+ { DEADTRANS(L'a', L'~', 0x0105, 0x00) },
+ { DEADTRANS(L'c', L'~', 0x0107, 0x00) },
+ { DEADTRANS(L'e', L'~', 0x0119, 0x00) },
+ { DEADTRANS(L'l', L'~', 0x0142, 0x00) },
+ { DEADTRANS(L'n', L'~', 0x0144, 0x00) },
+ { DEADTRANS(L'o', L'~', 0xF3, 0x00) },
+ { DEADTRANS(L's', L'~', 0x015B, 0x00) },
+ { DEADTRANS(L'x', L'~', 0x017A, 0x00) },
+ { DEADTRANS(L'z', L'~', 0x017C, 0x00) },
+
+ { DEADTRANS(L'A', L'~', 0x0104, 0x00) },
+ { DEADTRANS(L'C', L'~', 0x0106, 0x00) },
+ { DEADTRANS(L'E', L'~', 0x0118, 0x00) },
+ { DEADTRANS(L'L', L'~', 0x0141, 0x00) },
+ { DEADTRANS(L'N', L'~', 0x0143, 0x00) },
+ { DEADTRANS(L'O', L'~', 0xD3, 0x00) },
+ { DEADTRANS(L'S', L'~', 0x015A, 0x00) },
+ { DEADTRANS(L'X', L'~', 0x0179, 0x00) },
+ { DEADTRANS(L'Z', L'~', 0x017B, 0x00) },
+};
+
/* Finally, the master table */
ROSDATA KBDTABLES keyboard_layout_table = {
/* modifier assignments */
vk_to_wchar_master_table,
/* diacritical marks -- currently implemented by wine code */
- NULL,
+ dead_key,
/* Key names */
- (VSC_LPWSTR *)key_names,
- (VSC_LPWSTR *)extended_key_names,
- NULL, /* Dead key names */
+ key_names,
+ extended_key_names,
+ dead_key_names, /* Dead key names */
/* scan code to virtual key maps */
scancode_to_vk,
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
0,
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
-
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* 00 */ VK_EMPTY,
/* 43 */ VK_F9,
/* 44 */ VK_F10,
/* 45 */ VK_NUMLOCK | KMEXT,
-/* 46 */ VK_SCROLL | KMULTI,
+/* 46 */ VK_SCROLL | KBDMULTIVK,
/* 47 */ VK_HOME | KNUMS,
/* 48 */ VK_UP | KNUMS,
/* 49 */ VK_PRIOR | KNUMS,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT }, // Pista Anterior
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT }, // Proxima Pista
- { 0x1D, VK_RCONTROL | KEXT }, // Tecla ctrl
- { 0x20, VK_VOLUME_MUTE | KEXT }, // Mute volume
- { 0x21, VK_LAUNCH_APP2 | KEXT }, // Tecla calculadora
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT }, // Play/pause
- { 0x24, VK_MEDIA_STOP | KEXT }, // Stop
- { 0x2E, VK_VOLUME_DOWN | KEXT }, // Baixar volume
- { 0x30, VK_VOLUME_UP | KEXT }, // Subir volume
- { 0x32, VK_BROWSER_HOME | KEXT }, // Pagina predefinida do navegador de internet, ou abri-lo se não estiver activo
- { 0x35, VK_DIVIDE | KEXT }, // Tecla /
- { 0x37, VK_SNAPSHOT | KEXT }, // Tecla de Print Screen
- { 0x38, VK_RMENU | KEXT }, // Tecla Alt
- { 0x47, VK_HOME | KEXT }, // Tecla Home
- { 0x48, VK_UP | KEXT }, // Cursor Cima
- { 0x49, VK_PRIOR | KEXT }, // Tecla Re pag
- { 0x4b, VK_LEFT | KEXT }, // Cursor esquerda
- { 0x4d, VK_RIGHT | KEXT }, // Cursor direita
- { 0x4f, VK_END | KEXT }, // Tecla End
- { 0x50, VK_DOWN | KEXT }, // Cursor Down
- { 0x51, VK_NEXT | KEXT }, // Tecla Av pag
- { 0x52, VK_INSERT | KEXT }, // Tecla insert
- { 0x53, VK_DELETE | KEXT }, // Tecla delete
- { 0x5b, VK_LWIN | KEXT }, // Tecla windows esquerda
- { 0x5c, VK_RWIN | KEXT }, // Tecla windows direita
- { 0x5d, VK_APPS | KEXT }, // Tecla menu aplicacao direita*/
- { 0x5f, VK_SLEEP | KEXT }, // Tecla Sleep
- { 0x65, VK_BROWSER_SEARCH | KEXT }, // Pagina de pesquisa do navegador de internet
- { 0x66, VK_BROWSER_FAVORITES | KEXT }, // Favoritos, not yet implemented
- { 0x67, VK_BROWSER_REFRESH | KEXT }, // Actualizar pagina do navegador de internet
- { 0x68, VK_BROWSER_STOP | KEXT }, // Parar navegação na internet internet
- { 0x69, VK_BROWSER_FORWARD | KEXT }, // Frente no historico de paginas no navegador de internet
- { 0x6a, VK_BROWSER_BACK | KEXT }, // Atras no historico de paginas no navegador de internet (Backspace)
- { 0x6b, VK_LAUNCH_APP1 | KEXT }, // Tecla Meu Computador
- { 0x6c, VK_LAUNCH_MAIL | KEXT }, // Abrir programa de e-mail
- { 0x6d, VK_LAUNCH_MEDIA_SELECT | KEXT }, // Abrir reproductor multimedia
- { 0x1c, VK_RETURN | KEXT }, // Tecla de Enter
- { 0x46, VK_CANCEL | KEXT }, // Tecla Escape
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT }, // Pista Anterior
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT }, // Proxima Pista
+ { 0x1D, VK_RCONTROL | KBDEXT }, // Tecla ctrl
+ { 0x20, VK_VOLUME_MUTE | KBDEXT }, // Mute volume
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT }, // Tecla calculadora
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT }, // Play/pause
+ { 0x24, VK_MEDIA_STOP | KBDEXT }, // Stop
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT }, // Baixar volume
+ { 0x30, VK_VOLUME_UP | KBDEXT }, // Subir volume
+ { 0x32, VK_BROWSER_HOME | KBDEXT }, // Pagina predefinida do navegador de internet, ou abri-lo se não estiver activo
+ { 0x35, VK_DIVIDE | KBDEXT }, // Tecla /
+ { 0x37, VK_SNAPSHOT | KBDEXT }, // Tecla de Print Screen
+ { 0x38, VK_RMENU | KBDEXT }, // Tecla Alt
+ { 0x47, VK_HOME | KBDEXT }, // Tecla Home
+ { 0x48, VK_UP | KBDEXT }, // Cursor Cima
+ { 0x49, VK_PRIOR | KBDEXT }, // Tecla Re pag
+ { 0x4b, VK_LEFT | KBDEXT }, // Cursor esquerda
+ { 0x4d, VK_RIGHT | KBDEXT }, // Cursor direita
+ { 0x4f, VK_END | KBDEXT }, // Tecla End
+ { 0x50, VK_DOWN | KBDEXT }, // Cursor Down
+ { 0x51, VK_NEXT | KBDEXT }, // Tecla Av pag
+ { 0x52, VK_INSERT | KBDEXT }, // Tecla insert
+ { 0x53, VK_DELETE | KBDEXT }, // Tecla delete
+ { 0x5b, VK_LWIN | KBDEXT }, // Tecla windows esquerda
+ { 0x5c, VK_RWIN | KBDEXT }, // Tecla windows direita
+ { 0x5d, VK_APPS | KBDEXT }, // Tecla menu aplicacao direita*/
+ { 0x5f, VK_SLEEP | KBDEXT }, // Tecla Sleep
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT }, // Pagina de pesquisa do navegador de internet
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT }, // Favoritos, not yet implemented
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT }, // Actualizar pagina do navegador de internet
+ { 0x68, VK_BROWSER_STOP | KBDEXT }, // Parar navegação na internet internet
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT }, // Frente no historico de paginas no navegador de internet
+ { 0x6a, VK_BROWSER_BACK | KBDEXT }, // Atras no historico de paginas no navegador de internet (Backspace)
+ { 0x6b, VK_LAUNCH_APP1 | KBDEXT }, // Tecla Meu Computador
+ { 0x6c, VK_LAUNCH_MAIL | KBDEXT }, // Abrir programa de e-mail
+ { 0x6d, VK_LAUNCH_MEDIA_SELECT | KBDEXT }, // Abrir reproductor multimedia
+ { 0x1c, VK_RETURN | KBDEXT }, // Tecla de Enter
+ { 0x46, VK_CANCEL | KBDEXT }, // Tecla Escape
{ 0, 0 },
};
{ 0, 0 },
};
-
#define TIDLE_CIRC VK_OEM_2
#define ACUTE_GRAVE VK_OEM_1
#define ORDERN_SUPERSCRIPT VK_OEM_7
#define CLASSIC_QUOTES VK_OEM_6
#define MATH_RELATE VK_OEM_102
-
#define ACUTE_CHAR 0xB4
#define GRAVE_CHAR 0x60
#define CIRC_CHAR 0x5E
#define TIDLE_CHAR 0x7E
#define TREMA_CHAR 0xA8
-
/* Modifiers */
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
/* NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, SHIFT+CONTROL */
};
-
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
{ VK_NUMPAD0, 0, {'0'} },
{ VK_NUMPAD1, 0, {'1'} },
/* Normal vs Shifted */
/* The alphabet */
- { 'A', CAPS, {'a', 'A'} },
- { 'B', CAPS, {'b', 'B'} },
- { 'C', CAPS, {'c', 'C'} },
- { 'D', CAPS, {'d', 'D'} },
- { 'F', CAPS, {'f', 'F'} },
- { 'G', CAPS, {'g', 'G'} },
- { 'H', CAPS, {'h', 'H'} },
- { 'I', CAPS, {'i', 'I'} },
- { 'J', CAPS, {'j', 'J'} },
- { 'K', CAPS, {'k', 'K'} },
- { 'L', CAPS, {'l', 'L'} },
- { 'M', CAPS, {'m', 'M'} },
- { 'N', CAPS, {'n', 'N'} },
- { 'O', CAPS, {'o', 'O'} },
- { 'P', CAPS, {'p', 'P'} },
- { 'Q', CAPS, {'q', 'Q'} },
- { 'R', CAPS, {'r', 'R'} },
- { 'S', CAPS, {'s', 'S'} },
- { 'T', CAPS, {'t', 'T'} },
- { 'U', CAPS, {'u', 'U'} },
- { 'V', CAPS, {'v', 'V'} },
- { 'W', CAPS, {'w', 'W'} },
- { 'X', CAPS, {'x', 'X'} },
- { 'Y', CAPS, {'y', 'Y'} },
- { 'Z', CAPS, {'z', 'Z'} },
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
/* The numbers */
//De 2 ate 4 tem tres estados
- { '1', NOCAPS, {'1', '!'} },
- { '5', NOCAPS, {'5', '%'} },
- { '6', NOCAPS, {'6', '&'} },
+ { '1', 0, {'1', '!'} },
+ { '5', 0, {'5', '%'} },
+ { '6', 0, {'6', '&'} },
//De 7 ate 0 tem tres estados
/* Specials */
/* Shift-_ generates PT */
- { TIDLE_CIRC, NOCAPS, { WCH_DEAD, WCH_DEAD} },
- { VK_EMPTY, NOCAPS, { TIDLE_CHAR, CIRC_CHAR} },
+ { TIDLE_CIRC, 0, { WCH_DEAD, WCH_DEAD} },
+ { VK_EMPTY, 0, { TIDLE_CHAR, CIRC_CHAR} },
- { CCEDIL, CAPS, { 0xe7, 0xc7} }, // ç
- { QUOTE, NOCAPS, { 0xb4, '?'} }, // ' ?
- { BACKSLASH_BAR, NOCAPS, { 0x5c, 0x7c} }, // \ |
- { CLASSIC_QUOTES, NOCAPS, { 0xab, 0xbb} }, // « »
+ { CCEDIL, CAPLOK, { 0xe7, 0xc7} }, // ç
+ { QUOTE, 0, { 0xb4, '?'} }, // ' ?
+ { BACKSLASH_BAR, 0, { 0x5c, 0x7c} }, // \ |
+ { CLASSIC_QUOTES, 0, { 0xab, 0xbb} }, // « »
- { ACUTE_GRAVE, NOCAPS, { WCH_DEAD, WCH_DEAD} }, // ` '
- { VK_EMPTY, NOCAPS, { ACUTE_CHAR, GRAVE_CHAR} },
+ { ACUTE_GRAVE, 0, { WCH_DEAD, WCH_DEAD} }, // ` '
+ { VK_EMPTY, 0, { ACUTE_CHAR, GRAVE_CHAR} },
- { ORDERN_SUPERSCRIPT, NOCAPS, { 0xBA, 0xAA} }, // º ª
- { MATH_RELATE, NOCAPS, { '<', '>'} },
- { VK_OEM_COMMA, NOCAPS, { ',', ';'} },
- { VK_OEM_PERIOD, NOCAPS, { '.', ':'} },
- { VK_OEM_MINUS, NOCAPS, { '-', '_'} },
+ { ORDERN_SUPERSCRIPT, 0, { 0xBA, 0xAA} }, // º ª
+ { MATH_RELATE, 0, { '<', '>'} },
+ { VK_OEM_COMMA, 0, { ',', ';'} },
+ { VK_OEM_PERIOD, 0, { '.', ':'} },
+ { VK_OEM_MINUS, 0, { '-', '_'} },
/* Keys that do not have shift states */
- { VK_TAB, NOCAPS, { '\t', '\t'} },
- { VK_ADD, NOCAPS, { '+', '+'} },
- { VK_SUBTRACT, NOCAPS, { '-', '-'} },
- { VK_MULTIPLY, NOCAPS, { '*', '*'} },
- { VK_DIVIDE, NOCAPS, { '/', '/'} },
- { VK_ESCAPE, NOCAPS, { '\x1b', '\x1b'} },
- { VK_SPACE, NOCAPS, { ' ', ' '} },
+ { VK_TAB, 0, { '\t', '\t'} },
+ { VK_ADD, 0, { '+', '+'} },
+ { VK_SUBTRACT, 0, { '-', '-'} },
+ { VK_MULTIPLY, 0, { '*', '*'} },
+ { VK_DIVIDE, 0, { '/', '/'} },
+ { VK_ESCAPE, 0, { 0x1b, 0x1b} },
+ { VK_SPACE, 0, { ' ', ' '} },
{ 0, 0 }
};
-
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x7f} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
+ { VK_BACK, 0, {'\b', '\b', 0x7f} },
{ 0,0 }
};
-
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shift, Control, Alt+Gr */
- { '2', NOCAPS, { '2', '"', WCH_NONE, '@' } }, // 2 " @
- { '3', NOCAPS, { '3', '#', WCH_NONE, 0xa3 } }, // 3 #
- { '4', NOCAPS, { '4', '$', WCH_NONE, 0xa7 } }, // 4 $
- { '7', NOCAPS, { '7', '/', WCH_NONE, 0x7b } }, // 7 &
- { '8', NOCAPS, { '8', '(', WCH_NONE, 0x5b } }, // 8 (
- { '9', NOCAPS, { '9', ')', WCH_NONE, 0x5d } }, // 9 )
- { '0', NOCAPS, { '0', '=', WCH_NONE, 0x7d } }, // 0 =
- { 'E', CAPS, { 'e', 'E', WCH_NONE, 0x20ac } }, // e E
-
- { VK_OEM_PLUS, NOCAPS, { '+', '*', WCH_NONE, WCH_DEAD } }, // + * "
- { VK_EMPTY, NOCAPS, { '+', '*', WCH_NONE, TREMA_CHAR } },
+ { '2', 0, { '2', '"', WCH_NONE, '@' } }, // 2 " @
+ { '3', 0, { '3', '#', WCH_NONE, 0xa3 } }, // 3 #
+ { '4', 0, { '4', '$', WCH_NONE, 0xa7 } }, // 4 $
+ { '7', 0, { '7', '/', WCH_NONE, 0x7b } }, // 7 &
+ { '8', 0, { '8', '(', WCH_NONE, 0x5b } }, // 8 (
+ { '9', 0, { '9', ')', WCH_NONE, 0x5d } }, // 9 )
+ { '0', 0, { '0', '=', WCH_NONE, 0x7d } }, // 0 =
+ { 'E', CAPLOK, { 'e', 'E', WCH_NONE, 0x20ac } }, // e E
+
+ { VK_OEM_PLUS, 0, { '+', '*', WCH_NONE, WCH_DEAD } }, // + * "
+ { VK_EMPTY, 0, { '+', '*', WCH_NONE, TREMA_CHAR } },
{ 0, 0 }
};
-
#define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
{ 0,0,0 }
};
-
#define DEADTRANS(ch, accent, comp, flags) MAKELONG(ch, accent), comp, flags
ROSDATA DEADKEY deadkey[] =
{ 0, 0, 0}
};
-
ROSDATA VSC_LPWSTR key_names[] = {
{ 0x01, L"Escape" },
{ 0x0e, L"BackSpace" },
{ 0x37, L"* Num" },
{ 0x38, L"Alt" },
{ 0x39, L"Espaco" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
NULL
};
-
/* Finally, the master table */
ROSDATA KBDTABLES keyboard_layout_table = {
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Portuguese doesn't have any, that i'm aware */
0,
NULL
};
-
PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
return &keyboard_layout_table;
}
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {']', '[' } },
- { 'E', CAPS, {'e', 'E' } },
- { 'R', CAPS, {'r', 'R' } },
- { 'T', CAPS, {'t', 'T' } },
- { 'Z', CAPS, {'z', 'Z' } },
- { 'U', CAPS, {'u', 'U' } },
- { 'I', CAPS, {'i', 'I' } },
- { 'O', CAPS, {'o', 'O' } },
- { 'P', CAPS, {'p', 'P' } },
- { 'A', CAPS, {'a', 'A' } },
- { 'F', CAPS, {'f', 'F' } },
- { 'G', CAPS, {'g', 'G' } },
- { 'H', CAPS, {'h', 'H' } },
- { 'J', CAPS, {'j', 'J' } },
- { 'Y', CAPS, {'y', 'Y' } },
- { 'X', CAPS, {'x', 'X' } },
- { 'C', CAPS, {'c', 'C' } },
- { VK_OEM_2, NOCAPS, {'-', '_' } },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t','\t'} },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {']', '[' } },
+ { 'E', CAPLOK, {'e', 'E' } },
+ { 'R', CAPLOK, {'r', 'R' } },
+ { 'T', CAPLOK, {'t', 'T' } },
+ { 'Z', CAPLOK, {'z', 'Z' } },
+ { 'U', CAPLOK, {'u', 'U' } },
+ { 'I', CAPLOK, {'i', 'I' } },
+ { 'O', CAPLOK, {'o', 'O' } },
+ { 'P', CAPLOK, {'p', 'P' } },
+ { 'A', CAPLOK, {'a', 'A' } },
+ { 'F', CAPLOK, {'f', 'F' } },
+ { 'G', CAPLOK, {'g', 'G' } },
+ { 'H', CAPLOK, {'h', 'H' } },
+ { 'J', CAPLOK, {'j', 'J' } },
+ { 'Y', CAPLOK, {'y', 'Y' } },
+ { 'X', CAPLOK, {'x', 'X' } },
+ { 'C', CAPLOK, {'c', 'C' } },
+ { VK_OEM_2, 0, {'-', '_' } },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t','\t'} },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { '1', NOCAPS, {'1', '!', '~' } },
- { '3', NOCAPS, {'3', '#', '^' } },
- { '4', NOCAPS, {'4', 0x00a4, 0x02d8} },
- { '5', NOCAPS, {'5', '%', 0x00b0} },
- { '7', NOCAPS, {'7', '/', '`' } },
- { '8', NOCAPS, {'8', '(', 0x00b7} },
- { '9', NOCAPS, {'9', ')', 0x00b4} },
- { '0', NOCAPS, {'0', '=', 0x02dd} },
- { VK_OEM_PLUS, NOCAPS, {'\'', '*', 0x00b8} },
- { 'Q', CAPS, {'q', 'Q', '\\' } },
- { 'W', CAPS, {'w', 'W', '|' } },
- { 'S', CAPS, {'s', 'S', 0x0111} },
- { 'D', CAPS, {'d', 'D', 0x0110} },
- { 'K', CAPS, {'k', 'K', 0x0142} },
- { 'L', CAPS, {'l', 'L', 0x0141} },
- { VK_OEM_1, NOCAPS, {0x015f, 0x015e, '$' } },
- { VK_OEM_7, NOCAPS, {0x0163, 0x0162, 0x00df} },
- { 'V', CAPS, {'v', 'V', '@' } },
- { 'B', CAPS, {'b', 'B', '{' } },
- { 'N', CAPS, {'n', 'N', '}' } },
- { 'M', CAPS, {'m', 'M', 0x00a7} },
- { VK_OEM_COMMA, NOCAPS, {',', ';', '<' } },
- { VK_OEM_PERIOD, NOCAPS, {'.', ':', '>' } },
+ { '1', 0, {'1', '!', '~' } },
+ { '3', 0, {'3', '#', '^' } },
+ { '4', 0, {'4', 0x00a4, 0x02d8} },
+ { '5', 0, {'5', '%', 0x00b0} },
+ { '7', 0, {'7', '/', '`' } },
+ { '8', 0, {'8', '(', 0x00b7} },
+ { '9', 0, {'9', ')', 0x00b4} },
+ { '0', 0, {'0', '=', 0x02dd} },
+ { VK_OEM_PLUS, 0, {'\'', '*', 0x00b8} },
+ { 'Q', CAPLOK, {'q', 'Q', '\\' } },
+ { 'W', CAPLOK, {'w', 'W', '|' } },
+ { 'S', CAPLOK, {'s', 'S', 0x0111} },
+ { 'D', CAPLOK, {'d', 'D', 0x0110} },
+ { 'K', CAPLOK, {'k', 'K', 0x0142} },
+ { 'L', CAPLOK, {'l', 'L', 0x0141} },
+ { VK_OEM_1, 0, {0x015f, 0x015e, '$' } },
+ { VK_OEM_7, 0, {0x0163, 0x0162, 0x00df} },
+ { 'V', CAPLOK, {'v', 'V', '@' } },
+ { 'B', CAPLOK, {'b', 'B', '{' } },
+ { 'N', CAPLOK, {'n', 'N', '}' } },
+ { 'M', CAPLOK, {'m', 'M', 0x00a7} },
+ { VK_OEM_COMMA, 0, {',', ';', '<' } },
+ { VK_OEM_PERIOD, 0, {'.', ':', '>' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_4, NOCAPS, {0x0103, 0x0102, 0x00f7, 0x001b} },
- { VK_OEM_6, NOCAPS, {0x00ee, 0x00ce, 0x00d7, 0x001d} },
- { VK_OEM_5, NOCAPS, {0x00e2, 0x00c2, WCH_NONE, 0x001c} },
- { VK_OEM_102, NOCAPS, {'<', '>', WCH_NONE, 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, 0x0003} },
+ { VK_OEM_4, 0, {0x0103, 0x0102, 0x00f7, 0x001b} },
+ { VK_OEM_6, 0, {0x00ee, 0x00ce, 0x00d7, 0x001d} },
+ { VK_OEM_5, 0, {0x00e2, 0x00c2, WCH_NONE, 0x001c} },
+ { VK_OEM_102, 0, {'<', '>', WCH_NONE, 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { '2', NOCAPS, {'2', '\"', 0x02c7, WCH_NONE, 0x0000} },
- { '6', NOCAPS, {'6', '&', 0x02db, WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {'+', '?', 0x00a8, WCH_NONE, 0x001f} },
+ { '2', 0, {'2', '\"', 0x02c7, WCH_NONE, 0x0000} },
+ { '6', 0, {'6', '&', 0x02db, WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {'+', '?', 0x00a8, WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- {VK_OEM_3, CAPS, {0x451, 0x401} },
- { '1', NOCAPS, {'1', '!'} },
- { '3', NOCAPS, {'3', 0x2116} },
- { '4', NOCAPS, {'4', ';'} },
- { '5', NOCAPS, {'5', '%'} },
- { '7', NOCAPS, {'7', '?'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
- { VK_OEM_PLUS, NOCAPS, {'=', '+'} },
+ {VK_OEM_3, CAPLOK, {0x451, 0x401} },
+ { '1', 0, {'1', '!'} },
+ { '3', 0, {'3', 0x2116} },
+ { '4', 0, {'4', ';'} },
+ { '5', 0, {'5', '%'} },
+ { '7', 0, {'7', '?'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
+ { VK_OEM_PLUS, 0, {'=', '+'} },
/* First letter row */
- { 'Q', CAPS, {0x439, 0x419} },
- { 'W', CAPS, {0x446, 0x426} },
- { 'E', CAPS, {0x443, 0x423} },
- { 'R', CAPS, {0x43a, 0x41a} },
- { 'T', CAPS, {0x435, 0x415} },
- { 'Y', CAPS, {0x43d, 0x41d} },
- { 'U', CAPS, {0x433, 0x413} },
- { 'I', CAPS, {0x448, 0x428} },
- { 'O', CAPS, {0x449, 0x429} },
- { 'P', CAPS, {0x437, 0x417} },
- { VK_OEM_4, CAPS, {0x445, 0x425} },
- { VK_OEM_6, CAPS, {0x44a, 0x42a} },
+ { 'Q', CAPLOK, {0x439, 0x419} },
+ { 'W', CAPLOK, {0x446, 0x426} },
+ { 'E', CAPLOK, {0x443, 0x423} },
+ { 'R', CAPLOK, {0x43a, 0x41a} },
+ { 'T', CAPLOK, {0x435, 0x415} },
+ { 'Y', CAPLOK, {0x43d, 0x41d} },
+ { 'U', CAPLOK, {0x433, 0x413} },
+ { 'I', CAPLOK, {0x448, 0x428} },
+ { 'O', CAPLOK, {0x449, 0x429} },
+ { 'P', CAPLOK, {0x437, 0x417} },
+ { VK_OEM_4, CAPLOK, {0x445, 0x425} },
+ { VK_OEM_6, CAPLOK, {0x44a, 0x42a} },
/* Second letter row */
- { 'A', CAPS, {0x444, 0x424} },
- { 'S', CAPS, {0x44b, 0x42b} },
- { 'D', CAPS, {0x432, 0x412} },
- { 'F', CAPS, {0x430, 0x410} },
- { 'G', CAPS, {0x43f, 0x41f} },
- { 'H', CAPS, {0x440, 0x420} },
- { 'J', CAPS, {0x43e, 0x41e} },
- { 'K', CAPS, {0x43b, 0x41b} },
- { 'L', CAPS, {0x434, 0x414} },
- { VK_OEM_1, CAPS, {0x436, 0x416} },
- { VK_OEM_7, CAPS, {0x44d, 0x42d} },
+ { 'A', CAPLOK, {0x444, 0x424} },
+ { 'S', CAPLOK, {0x44b, 0x42b} },
+ { 'D', CAPLOK, {0x432, 0x412} },
+ { 'F', CAPLOK, {0x430, 0x410} },
+ { 'G', CAPLOK, {0x43f, 0x41f} },
+ { 'H', CAPLOK, {0x440, 0x420} },
+ { 'J', CAPLOK, {0x43e, 0x41e} },
+ { 'K', CAPLOK, {0x43b, 0x41b} },
+ { 'L', CAPLOK, {0x434, 0x414} },
+ { VK_OEM_1, CAPLOK, {0x436, 0x416} },
+ { VK_OEM_7, CAPLOK, {0x44d, 0x42d} },
/* Third letter row */
- { 'Z', CAPS, {0x44f, 0x42f} },
- { 'X', CAPS, {0x447, 0x427} },
- { 'C', CAPS, {0x441, 0x421} },
- { 'V', CAPS, {0x43c, 0x41c} },
- { 'B', CAPS, {0x438, 0x418} },
- { 'N', CAPS, {0x442, 0x422} },
- { 'M', CAPS, {0x44c, 0x42c} },
- { VK_OEM_COMMA,CAPS, {0x431, 0x411} },
- { VK_OEM_PERIOD,CAPS, {0x44e, 0x42e} },
- { VK_OEM_2, NOCAPS, {'.', ','} },
+ { 'Z', CAPLOK, {0x44f, 0x42f} },
+ { 'X', CAPLOK, {0x447, 0x427} },
+ { 'C', CAPLOK, {0x441, 0x421} },
+ { 'V', CAPLOK, {0x43c, 0x41c} },
+ { 'B', CAPLOK, {0x438, 0x418} },
+ { 'N', CAPLOK, {0x442, 0x422} },
+ { 'M', CAPLOK, {0x44c, 0x42c} },
+ { VK_OEM_COMMA,CAPLOK, {0x431, 0x411} },
+ { VK_OEM_PERIOD,CAPLOK, {0x44e, 0x42e} },
+ { VK_OEM_2, 0, {'.', ','} },
/* Specials */
- { 0x6e, NOCAPS, {',', ','} },
- { VK_TAB, NOCAPS, {9, 9} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { 0x6e, 0, {',', ','} },
+ { VK_TAB, 0, {9, 9} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_5, NOCAPS, {0x5c, 0x2f, 0x1c} },
- { VK_OEM_102, NOCAPS, {0x5c, 0x2f, 0x1c} },
- { VK_BACK, NOCAPS, {0x8, 0x8, 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, 0x1b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
- { VK_SPACE, NOCAPS, {' ', ' ', ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, 0x03} },
+ { VK_OEM_5, 0, {0x5c, 0x2f, 0x1c} },
+ { VK_OEM_102, 0, {0x5c, 0x2f, 0x1c} },
+ { VK_BACK, 0, {0x8, 0x8, 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, 0x1b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
+ { VK_SPACE, 0, {' ', ' ', ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, 0x03} },
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt */
/* Legacy Ascii generators */
- { '2', NOCAPS, {'2', '\"', WCH_NONE, 0} },
- { '6', NOCAPS, {'6', ':', WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {0x2d, '_', WCH_NONE, 0x001f} }, // different '-'
+ { '2', 0, {'2', '\"', WCH_NONE, 0} },
+ { '6', 0, {'6', ':', WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {0x2d, '_', WCH_NONE, 0x001f} }, // different '-'
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Russian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- {VK_OEM_3, NOCAPS, {'|', '+' } },
- { '1', NOCAPS, {0x2116, '1' } },
- { '2', NOCAPS, {'-', '2' } },
- { '3', NOCAPS, {'/', '3' } },
- { '4', NOCAPS, {'\"', '4' } },
- { '5', NOCAPS, {':', '5' } },
- { '7', NOCAPS, {'.', '7' } },
- { '8', NOCAPS, {'_', '8' } },
- { '9', NOCAPS, {'?', '9' } },
- { '0', NOCAPS, {'%', '0' } },
- { VK_OEM_PLUS, NOCAPS, {';', '\\'} },
+ {VK_OEM_3, 0, {'|', '+' } },
+ { '1', 0, {0x2116, '1' } },
+ { '2', 0, {'-', '2' } },
+ { '3', 0, {'/', '3' } },
+ { '4', 0, {'\"', '4' } },
+ { '5', 0, {':', '5' } },
+ { '7', 0, {'.', '7' } },
+ { '8', 0, {'_', '8' } },
+ { '9', 0, {'?', '9' } },
+ { '0', 0, {'%', '0' } },
+ { VK_OEM_PLUS, 0, {';', '\\'} },
/* First letter row */
- { 'Q', CAPS, {0x439, 0x419} },
- { 'W', CAPS, {0x446, 0x426} },
- { 'E', CAPS, {0x443, 0x423} },
- { 'R', CAPS, {0x43a, 0x41a} },
- { 'T', CAPS, {0x435, 0x415} },
- { 'Y', CAPS, {0x43d, 0x41d} },
- { 'U', CAPS, {0x433, 0x413} },
- { 'I', CAPS, {0x448, 0x428} },
- { 'O', CAPS, {0x449, 0x429} },
- { 'P', CAPS, {0x437, 0x417} },
- { VK_OEM_4, CAPS, {0x445, 0x425} },
+ { 'Q', CAPLOK, {0x439, 0x419} },
+ { 'W', CAPLOK, {0x446, 0x426} },
+ { 'E', CAPLOK, {0x443, 0x423} },
+ { 'R', CAPLOK, {0x43a, 0x41a} },
+ { 'T', CAPLOK, {0x435, 0x415} },
+ { 'Y', CAPLOK, {0x43d, 0x41d} },
+ { 'U', CAPLOK, {0x433, 0x413} },
+ { 'I', CAPLOK, {0x448, 0x428} },
+ { 'O', CAPLOK, {0x449, 0x429} },
+ { 'P', CAPLOK, {0x437, 0x417} },
+ { VK_OEM_4, CAPLOK, {0x445, 0x425} },
/* Second letter row */
- { 'A', CAPS, {0x444, 0x424} },
- { 'S', CAPS, {0x44b, 0x42b} },
- { 'D', CAPS, {0x432, 0x412} },
- { 'F', CAPS, {0x430, 0x410} },
- { 'G', CAPS, {0x43f, 0x41f} },
- { 'H', CAPS, {0x440, 0x420} },
- { 'J', CAPS, {0x43e, 0x41e} },
- { 'K', CAPS, {0x43b, 0x41b} },
- { 'L', CAPS, {0x434, 0x414} },
- { VK_OEM_7, CAPS, {0x44d, 0x42d} },
+ { 'A', CAPLOK, {0x444, 0x424} },
+ { 'S', CAPLOK, {0x44b, 0x42b} },
+ { 'D', CAPLOK, {0x432, 0x412} },
+ { 'F', CAPLOK, {0x430, 0x410} },
+ { 'G', CAPLOK, {0x43f, 0x41f} },
+ { 'H', CAPLOK, {0x440, 0x420} },
+ { 'J', CAPLOK, {0x43e, 0x41e} },
+ { 'K', CAPLOK, {0x43b, 0x41b} },
+ { 'L', CAPLOK, {0x434, 0x414} },
+ { VK_OEM_7, CAPLOK, {0x44d, 0x42d} },
/* Third letter row */
- { 'Z', CAPS, {0x44f, 0x42f} },
- { 'X', CAPS, {0x447, 0x427} },
- { 'C', CAPS, {0x441, 0x421} },
- { 'V', CAPS, {0x43c, 0x41c} },
- { 'B', CAPS, {0x438, 0x418} },
- { 'N', CAPS, {0x442, 0x422} },
- { 'M', CAPS, {0x44c, 0x42c} },
- { VK_OEM_COMMA, CAPS, {0x431, 0x411} },
- { VK_OEM_PERIOD, CAPS, {0x44e, 0x42e} },
- { VK_OEM_2, CAPS, {0x451, 0x401} },
+ { 'Z', CAPLOK, {0x44f, 0x42f} },
+ { 'X', CAPLOK, {0x447, 0x427} },
+ { 'C', CAPLOK, {0x441, 0x421} },
+ { 'V', CAPLOK, {0x43c, 0x41c} },
+ { 'B', CAPLOK, {0x438, 0x418} },
+ { 'N', CAPLOK, {0x442, 0x422} },
+ { 'M', CAPLOK, {0x44c, 0x42c} },
+ { VK_OEM_COMMA, CAPLOK, {0x431, 0x411} },
+ { VK_OEM_PERIOD, CAPLOK, {0x44e, 0x42e} },
+ { VK_OEM_2, CAPLOK, {0x451, 0x401} },
/* Specials */
- { 0x6e, NOCAPS, {',', ','} },
- { VK_TAB, NOCAPS, {9, 9 } },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { 0x6e, 0, {',', ','} },
+ { VK_TAB, 0, {9, 9 } },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_MINUS, NOCAPS, {'!', '=', 0x1f} },
- { VK_OEM_6, CAPS, {0x44a, 0x42a, 0x1b} },
- { VK_OEM_5, NOCAPS, {')', '(', 0x1c} },
- { VK_OEM_1, CAPS, {0x436, 0x416, 0x1d} },
- { VK_OEM_102, NOCAPS, {')', '(', 0x1c} },
- { VK_BACK, NOCAPS, {0x8, 0x8, 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, 0x1b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, 0x03} },
+ { VK_OEM_MINUS, 0, {'!', '=', 0x1f} },
+ { VK_OEM_6, CAPLOK, {0x44a, 0x42a, 0x1b} },
+ { VK_OEM_5, 0, {')', '(', 0x1c} },
+ { VK_OEM_1, CAPLOK, {0x436, 0x416, 0x1d} },
+ { VK_OEM_102, 0, {')', '(', 0x1c} },
+ { VK_BACK, 0, {0x8, 0x8, 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, 0x1b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x03, 0x03, 0x03} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt */
/* Legacy Ascii generators */
- { '6', NOCAPS, {',', '6', WCH_NONE, 0x001e} },
+ { '6', 0, {',', '6', WCH_NONE, 0x001e} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Russian doesn't have any */
0,
* and http://www.unicode.org/charts/
*/
-
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, CTRL + MENU */
};
-
/* ############################################ */
/* ############################################ */
/* ############################################ */
/* ############################################ */
/* ############################################ */
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_5, NOCAPS, {0xa7, 0xb0} }, /* § ° */
+ { VK_OEM_5, 0, {0xa7, 0xb0} }, /* § ° */
/* Normal vs Shifted */
/* The numbers */
/* Ctrl-2 generates NUL */
- { 0xff, NOCAPS, {0xa7, 0x9B} }, /* what is this for? */
- { '4', NOCAPS, {'4', 0xE7} },
- { '5', NOCAPS, {'5', '%'} },
- { '9', NOCAPS, {'9', ')'} },
- { '0', NOCAPS, {'0', '='} },
+ { 0xff, 0, {0xa7, 0x9B} }, /* what is this for? */
+ { '4', 0, {'4', 0xE7} },
+ { '5', 0, {'5', '%'} },
+ { '9', 0, {'9', ')'} },
+ { '0', 0, {'0', '='} },
/* First letter row */
- { 'W', CAPS, {'w', 'W'} },
- { 'R', CAPS, {'r', 'R'} },
- { 'T', CAPS, {'t', 'T'} },
- { 'Z', CAPS, {'z', 'Z'} },
- { 'U', CAPS, {'u', 'U'} },
- { 'I', CAPS, {'i', 'I'} },
- { 'O', CAPS, {'o', 'O'} },
- { 'P', CAPS, {'p', 'P'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'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'} },
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
/* Third letter row */
- { 'Y', CAPS, {'y', 'Y'} },
- { 'X', CAPS, {'x', 'X'} },
- { 'V', CAPS, {'v', 'V'} },
- { 'B', CAPS, {'b', 'B'} },
- { 'N', CAPS, {'n', 'N'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'N', CAPLOK, {'n', 'N'} },
/* Specials */
- { VK_OEM_COMMA, NOCAPS, {',', ';'} },
- { VK_OEM_PERIOD, NOCAPS, {'.', ':'} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_'} },
- { VK_DECIMAL, NOCAPS, {'.', '.'} },
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {0x2f, 0x2f} }, /* '/' */
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_COMMA, 0, {',', ';'} },
+ { VK_OEM_PERIOD, 0, {'.', ':'} },
+ { VK_OEM_MINUS, 0, {'-', '_'} },
+ { VK_DECIMAL, 0, {'.', '.'} },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {0x2f, 0x2f} }, /* '/' */
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Alt Gr */
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_4, NOCAPS, {'\'' , '?' , WCH_DEAD} }, /* ' ? ´ */
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0xb4} },
- { 'Q', CAPS, {'q', 'Q', '@'} },
- { 'C', CAPS, {'c', 'C', 0xa9} }, /* c C Copyright-Sign */
- { 'E', CAPS, {'e', 'E', 0x20ac} }, /* e E \80 */
- { 'M', CAPS, {'m', 'M', 0xb5} }, /* m M mu-Sign */
- { VK_OEM_102, NOCAPS, {'<', '>', '\\'} },
+ { VK_OEM_4, 0, {'\'' , '?' , WCH_DEAD} }, /* ' ? ´ */
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0xb4} },
+ { 'Q', CAPLOK, {'q', 'Q', '@'} },
+ { 'C', CAPLOK, {'c', 'C', 0xa9} }, /* c C Copyright-Sign */
+ { 'E', CAPLOK, {'e', 'E', 0x20ac} }, /* e E \80 */
+ { 'M', CAPLOK, {'m', 'M', 0xb5} }, /* m M mu-Sign */
+ { VK_OEM_102, 0, {'<', '>', '\\'} },
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Alt Gr, C-S-x */
/* Legacy Ascii generators */
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, WCH_NONE, 0x1b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n'} },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, WCH_NONE, 0x03} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, WCH_NONE, 0x1b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n'} },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, WCH_NONE, 0x03} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Alt Gr, Ctrl */
- { '1', NOCAPS, {'1', '+', '|', WCH_NONE, 0x00} },
- { '2', NOCAPS, {'2', '\"', '@', WCH_NONE, 0x00} },
- { '3', NOCAPS, {'3', '*', '#', WCH_NONE, 0x00} },
- { '6', NOCAPS, {'6', '&', 0xac, WCH_NONE, 0x00} },
- { '7', NOCAPS, {'7', '/', 0xa6, WCH_NONE, 0x00} },
- { '8', NOCAPS, {'8', '(', 0xa2, WCH_NONE, 0x00} },
- { VK_OEM_1, KCTRL, {0xfc, 0xe8, 0x5b, 0Xdc, 0xc8} }, /* ü è [ Ü È */
- { VK_OEM_2, NOCAPS, {0x24, 0xa3, 0x7d, WCH_NONE, 0x00} }, /* $ £ } */
- { VK_OEM_3, KCTRL, {0xf6, 0xe9, WCH_NONE, 0xd6, 0xc9} }, /* ö é Ö É*/
- { VK_OEM_6, NOCAPS, {WCH_DEAD, WCH_DEAD, WCH_DEAD, WCH_NONE, 0x00} }, /* ^ ` ~ */
- { 0xff, NOCAPS, {0x5e , 0x27 , 0x7e , WCH_NONE, 0x00} },
- { VK_OEM_7, KCTRL, {0xe4, 0xe0, 0x7b, 0xc4, 0xc0} }, /* ä à { Ä À */
- { VK_OEM_PLUS, NOCAPS, {WCH_DEAD, 0x21 , 0x5D , WCH_NONE, 0x00} }, /* ¨ ! ] */
- { 0xff, NOCAPS, {0xa8 , WCH_NONE, WCH_NONE, WCH_NONE, 0x00} },
+ { '1', 0, {'1', '+', '|', WCH_NONE, 0x00} },
+ { '2', 0, {'2', '\"', '@', WCH_NONE, 0x00} },
+ { '3', 0, {'3', '*', '#', WCH_NONE, 0x00} },
+ { '6', 0, {'6', '&', 0xac, WCH_NONE, 0x00} },
+ { '7', 0, {'7', '/', 0xa6, WCH_NONE, 0x00} },
+ { '8', 0, {'8', '(', 0xa2, WCH_NONE, 0x00} },
+ { VK_OEM_1, KBDCTRL, {0xfc, 0xe8, 0x5b, 0Xdc, 0xc8} }, /* ü è [ Ü È */
+ { VK_OEM_2, 0, {0x24, 0xa3, 0x7d, WCH_NONE, 0x00} }, /* $ £ } */
+ { VK_OEM_3, KBDCTRL, {0xf6, 0xe9, WCH_NONE, 0xd6, 0xc9} }, /* ö é Ö É*/
+ { VK_OEM_6, 0, {WCH_DEAD, WCH_DEAD, WCH_DEAD, WCH_NONE, 0x00} }, /* ^ ` ~ */
+ { 0xff, 0, {0x5e , 0x27 , 0x7e , WCH_NONE, 0x00} },
+ { VK_OEM_7, KBDCTRL, {0xe4, 0xe0, 0x7b, 0xc4, 0xc0} }, /* ä à { Ä À */
+ { VK_OEM_PLUS, 0, {WCH_DEAD, 0x21 , 0x5D , WCH_NONE, 0x00} }, /* ¨ ! ] */
+ { 0xff, 0, {0xa8 , WCH_NONE, WCH_NONE, WCH_NONE, 0x00} },
{ 0, 0 }
};
{ 0x37, L" (Zehnertastatur)" },
{ 0x38, L"Alt" },
{ 0x39, L"Leer" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- German doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Y', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT|KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT|KBDEXT,
/* - 37 - */
/* Bottom Row */
VK_MULTIPLY, VK_MENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
/* Modifier bit order: NONE, SHIFT, CTRL, SHIFT-CTRL, ALT (not used), SHIFT-ALT (not used), CTRL-ALT, SHIFT-CTRL-ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
- { VK_OEM_8, NOCAPS, {';', WCH_DEAD} }, // degree sign
+ { VK_OEM_8, 0, {';', WCH_DEAD} }, // degree sign
{ VK_EMPTY, 0, {WCH_NONE, 0x00b0} }, // VK_OEM_8 death
/* Keys that do not have shift states */
- { VK_TAB, NOCAPS, {'\t','\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_ESCAPE, NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE, NOCAPS, {' ', ' '} },
+ { VK_TAB, 0, {'\t','\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_ESCAPE, 0, {0x1b,0x1b} },
+ { VK_SPACE, 0, {' ', ' '} },
{ 0, 0 }
};
/* Normal, Shifted, Ctrl, Ctrl+Alt */
/* The numbers */
- { '1', NOCAPS, {'+', '1', WCH_NONE, '~'} },
- { '2', NOCAPS, {0x013e, '2', WCH_NONE, WCH_DEAD} }, // l with caron
+ { '1', 0, {'+', '1', WCH_NONE, '~'} },
+ { '2', 0, {0x013e, '2', WCH_NONE, WCH_DEAD} }, // l with caron
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x02c7} }, // 2 death
- { '3', NOCAPS, {0x0161, '3', WCH_NONE, WCH_DEAD} }, // s with caron
+ { '3', 0, {0x0161, '3', WCH_NONE, WCH_DEAD} }, // s with caron
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x005e} }, // 3 death
- { '4', NOCAPS, {0x010d, '4', WCH_NONE, WCH_DEAD} }, // c with caron
+ { '4', 0, {0x010d, '4', WCH_NONE, WCH_DEAD} }, // c with caron
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x02d8} }, // 4 death
- { '5', NOCAPS, {0x0165, '5', WCH_NONE, WCH_DEAD} }, // t with caron
+ { '5', 0, {0x0165, '5', WCH_NONE, WCH_DEAD} }, // t with caron
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x00b0} }, // 5 death
- { '6', NOCAPS, {0x017e, '6', WCH_NONE, WCH_DEAD} }, // z with caron
+ { '6', 0, {0x017e, '6', WCH_NONE, WCH_DEAD} }, // z with caron
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x02db} }, // 6 death
- { '7', NOCAPS, {0x00fd, '7', WCH_NONE, '`'} }, // y with acute
- { '8', NOCAPS, {0x00e1, '8', WCH_NONE, WCH_DEAD} }, // a with acute
+ { '7', 0, {0x00fd, '7', WCH_NONE, '`'} }, // y with acute
+ { '8', 0, {0x00e1, '8', WCH_NONE, WCH_DEAD} }, // a with acute
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x02d9} }, // 8 death
- { '9', NOCAPS, {0x00ed, '9', WCH_NONE, WCH_DEAD} }, // i with acute
+ { '9', 0, {0x00ed, '9', WCH_NONE, WCH_DEAD} }, // i with acute
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x00b4} }, // 9 death
- { '0', NOCAPS, {0x00e9, '0', WCH_NONE, WCH_DEAD} }, // e with acute
+ { '0', 0, {0x00e9, '0', WCH_NONE, WCH_DEAD} }, // e with acute
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x02dd} }, // 0 death
- { VK_OEM_MINUS, NOCAPS, {'=', '%', WCH_NONE, WCH_DEAD} },
+ { VK_OEM_MINUS, 0, {'=', '%', WCH_NONE, WCH_DEAD} },
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x00a8} }, // = death
- { VK_OEM_PLUS, NOCAPS, {WCH_DEAD, WCH_DEAD, WCH_NONE, WCH_DEAD} }, // dead letters - acute, caron
+ { VK_OEM_PLUS, 0, {WCH_DEAD, WCH_DEAD, WCH_NONE, WCH_DEAD} }, // dead letters - acute, caron
{ VK_EMPTY, 0, {0x00b4, 0x02c7, WCH_NONE, 0x00b8} }, // dead letters death :)
- { VK_OEM_1, NOCAPS, {0x00f4, '\"', WCH_NONE, '$'} }, // o with circumflex
- { VK_OEM_2, NOCAPS, {'-', '_', WCH_NONE, '*'} },
- { VK_OEM_3, NOCAPS, {0x00a7, '!', WCH_NONE, 0x00df} }, // section sign
- { VK_OEM_4, NOCAPS, {0x00fa, '/', WCH_NONE, 0x00f7} }, // u with acute
- { VK_OEM_5, NOCAPS, {'&', '*', WCH_NONE, '<'} },
- { VK_OEM_6, NOCAPS, {0x00E4, '(', WCH_NONE, 0x00d7} }, // a with diaeresis
- { VK_OEM_7, NOCAPS, {0x0148, ')', WCH_NONE, 0x00a4} }, // n with caron
- { VK_OEM_COMMA, NOCAPS, {',', '?', WCH_NONE, '<'} },
- { VK_OEM_PERIOD, NOCAPS, {'.', ':', WCH_NONE, '>'} },
+ { VK_OEM_1, 0, {0x00f4, '\"', WCH_NONE, '$'} }, // o with circumflex
+ { VK_OEM_2, 0, {'-', '_', WCH_NONE, '*'} },
+ { VK_OEM_3, 0, {0x00a7, '!', WCH_NONE, 0x00df} }, // section sign
+ { VK_OEM_4, 0, {0x00fa, '/', WCH_NONE, 0x00f7} }, // u with acute
+ { VK_OEM_5, 0, {'&', '*', WCH_NONE, '<'} },
+ { VK_OEM_6, 0, {0x00E4, '(', WCH_NONE, 0x00d7} }, // a with diaeresis
+ { VK_OEM_7, 0, {0x0148, ')', WCH_NONE, 0x00a4} }, // n with caron
+ { VK_OEM_COMMA, 0, {',', '?', WCH_NONE, '<'} },
+ { VK_OEM_PERIOD, 0, {'.', ':', WCH_NONE, '>'} },
/* The alphabet */
- { 'A', CAPS, {'a', 'A', 0x01, WCH_NONE} },
- { 'B', CAPS, {'b', 'B', 0x02, '{'} },
- { 'C', CAPS, {'c', 'C', 0x03, '&'} },
- { 'D', CAPS, {'d', 'D', 0x04, 0x0110} },
- { 'E', CAPS, {'e', 'E', 0x05, 0x20ac} },
- { 'F', CAPS, {'f', 'F', 0x06, '['} },
- { 'G', CAPS, {'g', 'G', 0x07, ']'} },
- { 'H', CAPS, {'h', 'H', 0x08, WCH_NONE} },
- { 'I', CAPS, {'i', 'I', 0x09, WCH_NONE} },
- { 'J', CAPS, {'j', 'J', 0x0a, WCH_NONE} },
- { 'K', CAPS, {'k', 'K', 0x0b, 0x0142} },
- { 'L', CAPS, {'l', 'L', 0x0c, 0x0141} },
- { 'M', CAPS, {'m', 'M', 0x0d, WCH_NONE} },
- { 'N', CAPS, {'n', 'N', 0x0e, '}'} },
- { 'O', CAPS, {'o', 'O', 0x0f, WCH_NONE} },
- { 'P', CAPS, {'p', 'P', 0x10, '\''} },
- { 'Q', CAPS, {'q', 'Q', 0x11, '\\'} },
- { 'R', CAPS, {'r', 'R', 0x12, WCH_NONE} },
- { 'S', CAPS, {'s', 'S', 0x13, 0x0111} },
- { 'T', CAPS, {'t', 'T', 0x14, WCH_NONE} },
- { 'U', CAPS, {'u', 'U', 0x15, WCH_NONE} },
- { 'V', CAPS, {'v', 'V', 0x16, '@'} },
- { 'W', CAPS, {'w', 'W', 0x17, '|'} },
- { 'X', CAPS, {'x', 'X', 0x18, '#'} },
- { 'Y', CAPS, {'y', 'Y', 0x19, WCH_NONE} },
- { 'Z', CAPS, {'z', 'Z', 0x1a, '>'} },
+ { 'A', CAPLOK, {'a', 'A', 0x01, WCH_NONE} },
+ { 'B', CAPLOK, {'b', 'B', 0x02, '{'} },
+ { 'C', CAPLOK, {'c', 'C', 0x03, '&'} },
+ { 'D', CAPLOK, {'d', 'D', 0x04, 0x0110} },
+ { 'E', CAPLOK, {'e', 'E', 0x05, 0x20ac} },
+ { 'F', CAPLOK, {'f', 'F', 0x06, '['} },
+ { 'G', CAPLOK, {'g', 'G', 0x07, ']'} },
+ { 'H', CAPLOK, {'h', 'H', 0x08, WCH_NONE} },
+ { 'I', CAPLOK, {'i', 'I', 0x09, WCH_NONE} },
+ { 'J', CAPLOK, {'j', 'J', 0x0a, WCH_NONE} },
+ { 'K', CAPLOK, {'k', 'K', 0x0b, 0x0142} },
+ { 'L', CAPLOK, {'l', 'L', 0x0c, 0x0141} },
+ { 'M', CAPLOK, {'m', 'M', 0x0d, WCH_NONE} },
+ { 'N', CAPLOK, {'n', 'N', 0x0e, '}'} },
+ { 'O', CAPLOK, {'o', 'O', 0x0f, WCH_NONE} },
+ { 'P', CAPLOK, {'p', 'P', 0x10, '\''} },
+ { 'Q', CAPLOK, {'q', 'Q', 0x11, '\\'} },
+ { 'R', CAPLOK, {'r', 'R', 0x12, WCH_NONE} },
+ { 'S', CAPLOK, {'s', 'S', 0x13, 0x0111} },
+ { 'T', CAPLOK, {'t', 'T', 0x14, WCH_NONE} },
+ { 'U', CAPLOK, {'u', 'U', 0x15, WCH_NONE} },
+ { 'V', CAPLOK, {'v', 'V', 0x16, '@'} },
+ { 'W', CAPLOK, {'w', 'W', 0x17, '|'} },
+ { 'X', CAPLOK, {'x', 'X', 0x18, '#'} },
+ { 'Y', CAPLOK, {'y', 'Y', 0x19, WCH_NONE} },
+ { 'Z', CAPLOK, {'z', 'Z', 0x1a, '>'} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
-
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Slovak doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT|KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT|KBDEXT,
/* - 37 - */
/* Bottom Row */
VK_MULTIPLY, VK_MENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
/* Modifier bit order: NONE, SHIFT, CTRL, SHIFT-CTRL, ALT (not used), SHIFT-ALT (not used), CTRL-ALT, SHIFT-CTRL-ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
- { VK_OEM_8, NOCAPS, {';', WCH_DEAD} }, // degree sign
+ { VK_OEM_8, 0, {';', WCH_DEAD} }, // degree sign
{ VK_EMPTY, 0, {WCH_NONE, 0x00b0} }, // VK_OEM_8 death
/* Keys that do not have shift states */
- { VK_TAB, NOCAPS, {'\t','\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_ESCAPE, NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE, NOCAPS, {' ', ' '} },
+ { VK_TAB, 0, {'\t','\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_ESCAPE, 0, {0x1b,0x1b} },
+ { VK_SPACE, 0, {' ', ' '} },
{ 0, 0 }
};
/* Normal, Shifted, Ctrl, Ctrl+Alt */
/* The numbers */
- { '1', NOCAPS, {'+', '1', WCH_NONE, '~'} },
- { '2', NOCAPS, {0x013e, '2', WCH_NONE, WCH_DEAD} }, // l with caron
+ { '1', 0, {'+', '1', WCH_NONE, '~'} },
+ { '2', 0, {0x013e, '2', WCH_NONE, WCH_DEAD} }, // l with caron
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x02c7} }, // 2 death
- { '3', NOCAPS, {0x0161, '3', WCH_NONE, WCH_DEAD} }, // s with caron
+ { '3', 0, {0x0161, '3', WCH_NONE, WCH_DEAD} }, // s with caron
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x005e} }, // 3 death
- { '4', NOCAPS, {0x010d, '4', WCH_NONE, WCH_DEAD} }, // c with caron
+ { '4', 0, {0x010d, '4', WCH_NONE, WCH_DEAD} }, // c with caron
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x02d8} }, // 4 death
- { '5', NOCAPS, {0x0165, '5', WCH_NONE, WCH_DEAD} }, // t with caron
+ { '5', 0, {0x0165, '5', WCH_NONE, WCH_DEAD} }, // t with caron
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x00b0} }, // 5 death
- { '6', NOCAPS, {0x017e, '6', WCH_NONE, WCH_DEAD} }, // z with caron
+ { '6', 0, {0x017e, '6', WCH_NONE, WCH_DEAD} }, // z with caron
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x02db} }, // 6 death
- { '7', NOCAPS, {0x00fd, '7', WCH_NONE, '`'} }, // y with acute
- { '8', NOCAPS, {0x00e1, '8', WCH_NONE, WCH_DEAD} }, // a with acute
+ { '7', 0, {0x00fd, '7', WCH_NONE, '`'} }, // y with acute
+ { '8', 0, {0x00e1, '8', WCH_NONE, WCH_DEAD} }, // a with acute
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x02d9} }, // 8 death
- { '9', NOCAPS, {0x00ed, '9', WCH_NONE, WCH_DEAD} }, // i with acute
+ { '9', 0, {0x00ed, '9', WCH_NONE, WCH_DEAD} }, // i with acute
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x00b4} }, // 9 death
- { '0', NOCAPS, {0x00e9, '0', WCH_NONE, WCH_DEAD} }, // e with acute
+ { '0', 0, {0x00e9, '0', WCH_NONE, WCH_DEAD} }, // e with acute
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x02dd} }, // 0 death
- { VK_OEM_MINUS, NOCAPS, {'=', '%', WCH_NONE, WCH_DEAD} },
+ { VK_OEM_MINUS, 0, {'=', '%', WCH_NONE, WCH_DEAD} },
{ VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, 0x00a8} }, // = death
- { VK_OEM_PLUS, NOCAPS, {WCH_DEAD, WCH_DEAD, WCH_NONE, WCH_DEAD} }, // dead letters - acute, caron
+ { VK_OEM_PLUS, 0, {WCH_DEAD, WCH_DEAD, WCH_NONE, WCH_DEAD} }, // dead letters - acute, caron
{ VK_EMPTY, 0, {0x00b4, 0x02c7, WCH_NONE, 0x00b8} }, // dead letters death :)
- { VK_OEM_1, NOCAPS, {0x00f4, '\"', WCH_NONE, '$'} }, // o with circumflex
- { VK_OEM_2, NOCAPS, {'-', '_', WCH_NONE, '*'} },
- { VK_OEM_3, NOCAPS, {0x00a7, '!', WCH_NONE, 0x00df} }, // section sign
- { VK_OEM_4, NOCAPS, {0x00fa, '/', WCH_NONE, 0x00f7} }, // u with acute
- { VK_OEM_5, NOCAPS, {'&', '*', WCH_NONE, '<'} },
- { VK_OEM_6, NOCAPS, {0x00E4, '(', WCH_NONE, 0x00d7} }, // a with diaeresis
- { VK_OEM_7, NOCAPS, {0x0148, ')', WCH_NONE, 0x00a4} }, // n with caron
- { VK_OEM_COMMA, NOCAPS, {',', '?', WCH_NONE, '<'} },
- { VK_OEM_PERIOD, NOCAPS, {'.', ':', WCH_NONE, '>'} },
+ { VK_OEM_1, 0, {0x00f4, '\"', WCH_NONE, '$'} }, // o with circumflex
+ { VK_OEM_2, 0, {'-', '_', WCH_NONE, '*'} },
+ { VK_OEM_3, 0, {0x00a7, '!', WCH_NONE, 0x00df} }, // section sign
+ { VK_OEM_4, 0, {0x00fa, '/', WCH_NONE, 0x00f7} }, // u with acute
+ { VK_OEM_5, 0, {'&', '*', WCH_NONE, '<'} },
+ { VK_OEM_6, 0, {0x00E4, '(', WCH_NONE, 0x00d7} }, // a with diaeresis
+ { VK_OEM_7, 0, {0x0148, ')', WCH_NONE, 0x00a4} }, // n with caron
+ { VK_OEM_COMMA, 0, {',', '?', WCH_NONE, '<'} },
+ { VK_OEM_PERIOD, 0, {'.', ':', WCH_NONE, '>'} },
/* The alphabet */
- { 'A', CAPS, {'a', 'A', 0x01, WCH_NONE} },
- { 'B', CAPS, {'b', 'B', 0x02, '{'} },
- { 'C', CAPS, {'c', 'C', 0x03, '&'} },
- { 'D', CAPS, {'d', 'D', 0x04, 0x0110} },
- { 'E', CAPS, {'e', 'E', 0x05, 0x20ac} },
- { 'F', CAPS, {'f', 'F', 0x06, '['} },
- { 'G', CAPS, {'g', 'G', 0x07, ']'} },
- { 'H', CAPS, {'h', 'H', 0x08, WCH_NONE} },
- { 'I', CAPS, {'i', 'I', 0x09, WCH_NONE} },
- { 'J', CAPS, {'j', 'J', 0x0a, WCH_NONE} },
- { 'K', CAPS, {'k', 'K', 0x0b, 0x0142} },
- { 'L', CAPS, {'l', 'L', 0x0c, 0x0141} },
- { 'M', CAPS, {'m', 'M', 0x0d, WCH_NONE} },
- { 'N', CAPS, {'n', 'N', 0x0e, '}'} },
- { 'O', CAPS, {'o', 'O', 0x0f, WCH_NONE} },
- { 'P', CAPS, {'p', 'P', 0x10, '\''} },
- { 'Q', CAPS, {'q', 'Q', 0x11, '\\'} },
- { 'R', CAPS, {'r', 'R', 0x12, WCH_NONE} },
- { 'S', CAPS, {'s', 'S', 0x13, 0x0111} },
- { 'T', CAPS, {'t', 'T', 0x14, WCH_NONE} },
- { 'U', CAPS, {'u', 'U', 0x15, WCH_NONE} },
- { 'V', CAPS, {'v', 'V', 0x16, '@'} },
- { 'W', CAPS, {'w', 'W', 0x17, '|'} },
- { 'X', CAPS, {'x', 'X', 0x18, '#'} },
- { 'Y', CAPS, {'y', 'Y', 0x19, WCH_NONE} }, // qwertY
- { 'Z', CAPS, {'z', 'Z', 0x1a, '>'} },
+ { 'A', CAPLOK, {'a', 'A', 0x01, WCH_NONE} },
+ { 'B', CAPLOK, {'b', 'B', 0x02, '{'} },
+ { 'C', CAPLOK, {'c', 'C', 0x03, '&'} },
+ { 'D', CAPLOK, {'d', 'D', 0x04, 0x0110} },
+ { 'E', CAPLOK, {'e', 'E', 0x05, 0x20ac} },
+ { 'F', CAPLOK, {'f', 'F', 0x06, '['} },
+ { 'G', CAPLOK, {'g', 'G', 0x07, ']'} },
+ { 'H', CAPLOK, {'h', 'H', 0x08, WCH_NONE} },
+ { 'I', CAPLOK, {'i', 'I', 0x09, WCH_NONE} },
+ { 'J', CAPLOK, {'j', 'J', 0x0a, WCH_NONE} },
+ { 'K', CAPLOK, {'k', 'K', 0x0b, 0x0142} },
+ { 'L', CAPLOK, {'l', 'L', 0x0c, 0x0141} },
+ { 'M', CAPLOK, {'m', 'M', 0x0d, WCH_NONE} },
+ { 'N', CAPLOK, {'n', 'N', 0x0e, '}'} },
+ { 'O', CAPLOK, {'o', 'O', 0x0f, WCH_NONE} },
+ { 'P', CAPLOK, {'p', 'P', 0x10, '\''} },
+ { 'Q', CAPLOK, {'q', 'Q', 0x11, '\\'} },
+ { 'R', CAPLOK, {'r', 'R', 0x12, WCH_NONE} },
+ { 'S', CAPLOK, {'s', 'S', 0x13, 0x0111} },
+ { 'T', CAPLOK, {'t', 'T', 0x14, WCH_NONE} },
+ { 'U', CAPLOK, {'u', 'U', 0x15, WCH_NONE} },
+ { 'V', CAPLOK, {'v', 'V', 0x16, '@'} },
+ { 'W', CAPLOK, {'w', 'W', 0x17, '|'} },
+ { 'X', CAPLOK, {'x', 'X', 0x18, '#'} },
+ { 'Y', CAPLOK, {'y', 'Y', 0x19, WCH_NONE} }, // qwertY
+ { 'Z', CAPLOK, {'z', 'Z', 0x1a, '>'} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
-
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Slovak doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, CTRL + MENU */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
/* Specials */
- { VK_OEM_4, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { VK_OEM_7, CAPS, {0xe4,0xc4} },
- { VK_OEM_3, CAPS, {0xf6, 0xd6} },
-
- { VK_OEM_COMMA, CAPS, {',', ';'} },
- { VK_OEM_PERIOD, CAPS, {'.', ':'} },
- { VK_OEM_2, NOCAPS, {'\'', '*'} },
-
- { VK_DECIMAL, NOCAPS, {',',','} },
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_4, 0, {WCH_DEAD, WCH_DEAD} },
+ { VK_OEM_7, CAPLOK, {0xe4,0xc4} },
+ { VK_OEM_3, CAPLOK, {0xf6, 0xd6} },
+
+ { VK_OEM_COMMA, CAPLOK, {',', ';'} },
+ { VK_OEM_PERIOD, CAPLOK, {'.', ':'} },
+ { VK_OEM_2, 0, {'\'', '*'} },
+
+ { VK_DECIMAL, 0, {',',','} },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
/* 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} },
+ { 'A', CAPLOK, {'a', 'A', 0x01} },
+ { 'B', CAPLOK, {'b', 'B', 0x02} },
+ { 'C', CAPLOK, {'c', 'C', 0x03} },
+ { 'D', CAPLOK, {'d', 'D', 0x04} },
+ { 'F', CAPLOK, {'f', 'F', 0x06} },
+ { 'G', CAPLOK, {'g', 'G', 0x07} },
+ { 'H', CAPLOK, {'h', 'H', 0x08} },
+ { 'I', CAPLOK, {'i', 'I', 0x09} },
+ { 'J', CAPLOK, {'j', 'J', 0x0a} },
+ { 'K', CAPLOK, {'k', 'K', 0x0b} },
+ { 'L', CAPLOK, {'l', 'L', 0x0c} },
+ { 'N', CAPLOK, {'n', 'N', 0x0e} },
+ { 'O', CAPLOK, {'o', 'O', 0x0f} },
+ { 'P', CAPLOK, {'p', 'P', 0x10} },
+ { 'Q', CAPLOK, {'q', 'Q', 0x11} },
+ { 'R', CAPLOK, {'r', 'R', 0x12} },
+ { 'S', CAPLOK, {'s', 'S', 0x13} },
+ { 'T', CAPLOK, {'t', 'T', 0x14} },
+ { 'U', CAPLOK, {'u', 'U', 0x15} },
+ { 'V', CAPLOK, {'v', 'V', 0x16} },
+ { 'W', CAPLOK, {'w', 'W', 0x17} },
+ { 'X', CAPLOK, {'x', 'X', 0x18} },
+ { 'Y', CAPLOK, {'y', 'Y', 0x19} },
+ { 'Z', CAPLOK, {'z', 'Z', 0x1a} },
/* Legacy (telnet-style) ascii escapes */
- {VK_OEM_6, CAPS, {0xe5,0xc5, 0x1d /* GS */} },
- { VK_OEM_5, NOCAPS, {0xa7,0xbd, 0x1c /* FS */} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', 0x1f /* US */} },
- { VK_RETURN,NOCAPS, {'\r', '\r', '\n'} },
+ {VK_OEM_6, CAPLOK, {0xe5,0xc5, 0x1d /* GS */} },
+ { VK_OEM_5, 0, {0xa7,0xbd, 0x1c /* FS */} },
+ { VK_OEM_MINUS, 0, {'-', '_', 0x1f /* US */} },
+ { VK_RETURN,0, {'\r', '\r', '\n'} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, 0x1b} },
- { VK_SPACE, NOCAPS, {' ', ' ', ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, 0x03} },
+ { VK_BACK, 0, {'\b', '\b', 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, 0x1b} },
+ { VK_SPACE, 0, {' ', ' ', ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, 0x03} },
{ 0,0 }
};
/* Normal, Shifted, Ctrl, Ctrl-Alt */
/* Legacy Ascii generators */
- { '2', NOCAPS, {'2', '\"', WCH_NONE,'@'} },
- { '3', NOCAPS, {'3', '#', WCH_NONE, 0x00a3} },
- { '4', NOCAPS, {'4', 0xa4, WCH_NONE, '$'} },
- { '5', NOCAPS, {'5', '%', WCH_NONE, 0x00ac} },
- { '7', NOCAPS, {'7', '/', WCH_NONE, '{'} },
- { '8', NOCAPS, {'8', '(', WCH_NONE, '['} },
- { '9', NOCAPS, {'9', ')', WCH_NONE, ']'} },
- { '0', NOCAPS, {'0', '=', WCH_NONE, '}'} },
- { VK_OEM_PLUS ,NOCAPS, {'+', '?', WCH_NONE, '\\'} },
- { 'E', CAPS, {'e', 'E' , 0x05, 0x00ac} },
- { VK_OEM_1 ,NOCAPS, {0xa8, '^', 0x001d, '~'} },
- { 'M', CAPS, {'m', 'M', 0x0d, 0x00b5} },
- {VK_OEM_102, NOCAPS, {'<', '>' ,0x001c,'|'} },
+ { '2', 0, {'2', '\"', WCH_NONE,'@'} },
+ { '3', 0, {'3', '#', WCH_NONE, 0x00a3} },
+ { '4', 0, {'4', 0xa4, WCH_NONE, '$'} },
+ { '5', 0, {'5', '%', WCH_NONE, 0x00ac} },
+ { '7', 0, {'7', '/', WCH_NONE, '{'} },
+ { '8', 0, {'8', '(', WCH_NONE, '['} },
+ { '9', 0, {'9', ')', WCH_NONE, ']'} },
+ { '0', 0, {'0', '=', WCH_NONE, '}'} },
+ { VK_OEM_PLUS ,0, {'+', '?', WCH_NONE, '\\'} },
+ { 'E', CAPLOK, {'e', 'E' , 0x05, 0x00ac} },
+ { VK_OEM_1 ,0, {0xa8, '^', 0x001d, '~'} },
+ { 'M', CAPLOK, {'m', 'M', 0x0d, 0x00b5} },
+ {VK_OEM_102, 0, {'<', '>' ,0x001c,'|'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt, C-S-x */
- { '6', NOCAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x1e /* RS */} },
+ { '6', 0, {'6', '&', WCH_NONE, WCH_NONE, 0x1e /* RS */} },
{ 0, 0 }
};
{ 0x37, L"NUM * (Numerisk tangent)" },
{ 0x38, L"ALT" },
{ 0x39, L"BLANKSTEG" },
- { 0x3a, L"CAPS LOCK" },
+ { 0x3a, L"CAPLOK LOCK" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Swedish doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 4, 5, SHFT_INVALID, SHFT_INVALID, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- {'1', NOCAPS, {'1', '!' } },
- {'5', NOCAPS, {'5', '%' } },
- {VK_OEM_PLUS, NOCAPS, {'=', '+' } },
- {'Q', CAPS, {0x0439, 0x0419} },
- {'E', CAPS, {0x0443, 0x0423} },
- {'R', CAPS, {0x043a, 0x041a} },
- {'T', CAPS, {0x0435, 0x0415} },
- {'Y', CAPS, {0x043d, 0x041d} },
- {'U', CAPS, {0x0433, 0x0413} },
- {'I', CAPS, {0x0448, 0x0428} },
- {'P', CAPS, {0x0437, 0x0417} },
- {VK_OEM_4, CAPS, {0x0445, 0x0425} },
- {'A', CAPS, {0x0444, 0x0424} },
- {'S', CAPS, {0x044b, 0x042b} },
- {'D', CAPS, {0x0432, 0x0412} },
- {'F', CAPS, {0x0430, 0x0410} },
- {'G', CAPS, {0x043f, 0x041f} },
- {'H', CAPS, {0x0440, 0x0420} },
- {'J', CAPS, {0x043e, 0x041e} },
- {'K', CAPS, {0x043b, 0x041b} },
- {'L', CAPS, {0x0434, 0x0414} },
- {'Z', CAPS, {0x044f, 0x042f} },
- {'X', CAPS, {0x0447, 0x0427} },
- {'C', CAPS, {0x0441, 0x0421} },
- {'V', CAPS, {0x043c, 0x041c} },
- {'B', CAPS, {0x0438, 0x0418} },
- {'N', CAPS, {0x0442, 0x0422} },
- {VK_OEM_2, NOCAPS, {'.', ',' } },
- {VK_DECIMAL, NOCAPS, {',', ',' } },
- {VK_TAB, NOCAPS, {'\t', '\t' } },
- {VK_ADD, NOCAPS, {'+', '+' } },
- {VK_DIVIDE, NOCAPS, {'/', '/' } },
- {VK_MULTIPLY, NOCAPS, {'*', '*' } },
- {VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ {'1', 0, {'1', '!' } },
+ {'5', 0, {'5', '%' } },
+ {VK_OEM_PLUS, 0, {'=', '+' } },
+ {'Q', CAPLOK, {0x0439, 0x0419} },
+ {'E', CAPLOK, {0x0443, 0x0423} },
+ {'R', CAPLOK, {0x043a, 0x041a} },
+ {'T', CAPLOK, {0x0435, 0x0415} },
+ {'Y', CAPLOK, {0x043d, 0x041d} },
+ {'U', CAPLOK, {0x0433, 0x0413} },
+ {'I', CAPLOK, {0x0448, 0x0428} },
+ {'P', CAPLOK, {0x0437, 0x0417} },
+ {VK_OEM_4, CAPLOK, {0x0445, 0x0425} },
+ {'A', CAPLOK, {0x0444, 0x0424} },
+ {'S', CAPLOK, {0x044b, 0x042b} },
+ {'D', CAPLOK, {0x0432, 0x0412} },
+ {'F', CAPLOK, {0x0430, 0x0410} },
+ {'G', CAPLOK, {0x043f, 0x041f} },
+ {'H', CAPLOK, {0x0440, 0x0420} },
+ {'J', CAPLOK, {0x043e, 0x041e} },
+ {'K', CAPLOK, {0x043b, 0x041b} },
+ {'L', CAPLOK, {0x0434, 0x0414} },
+ {'Z', CAPLOK, {0x044f, 0x042f} },
+ {'X', CAPLOK, {0x0447, 0x0427} },
+ {'C', CAPLOK, {0x0441, 0x0421} },
+ {'V', CAPLOK, {0x043c, 0x041c} },
+ {'B', CAPLOK, {0x0438, 0x0418} },
+ {'N', CAPLOK, {0x0442, 0x0422} },
+ {VK_OEM_2, 0, {'.', ',' } },
+ {VK_DECIMAL, 0, {',', ',' } },
+ {VK_TAB, 0, {'\t', '\t' } },
+ {VK_ADD, 0, {'+', '+' } },
+ {VK_DIVIDE, 0, {'/', '/' } },
+ {VK_MULTIPLY, 0, {'*', '*' } },
+ {VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { '2', NOCAPS, {'2', '\"', '@'} },
- { '3', NOCAPS, {'3', 0x2116, '#'} },
- { '4', NOCAPS, {'4', ';', '$'} },
- { '7', NOCAPS, {'7', '?', '['} },
- { '8', NOCAPS, {'8', '*', ']'} },
- { '9', NOCAPS, {'9', '(', '{'} },
- { '0', NOCAPS, {'0', ')', '}'} },
- { VK_OEM_7, CAPS, {0x044d, 0x042d, '\''} },
- { VK_OEM_COMMA, CAPS, {0x0431, 0x0411, '<'} },
- { VK_OEM_PERIOD, CAPS, {0x044e, 0x042e, '>'} },
+ { '2', 0, {'2', '\"', '@'} },
+ { '3', 0, {'3', 0x2116, '#'} },
+ { '4', 0, {'4', ';', '$'} },
+ { '7', 0, {'7', '?', '['} },
+ { '8', 0, {'8', '*', ']'} },
+ { '9', 0, {'9', '(', '{'} },
+ { '0', 0, {'0', ')', '}'} },
+ { VK_OEM_7, CAPLOK, {0x044d, 0x042d, '\''} },
+ { VK_OEM_COMMA, CAPLOK, {0x0431, 0x0411, '<'} },
+ { VK_OEM_PERIOD, CAPLOK, {0x044e, 0x042e, '>'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_3, CAPS, {0x04bb, 0x04ba, 0x0451, 0x0401} },
- { 'W', CAPS, {0x04e9, 0x04e8, 0x0446, 0x0426} },
- { 'O', CAPS, {0x04d9, 0x04d8, 0x0449, 0x0429} },
- { 'M', CAPS, {0x0497, 0x0496, 0x044c, 0x042c} },
+ { VK_OEM_3, CAPLOK, {0x04bb, 0x04ba, 0x0451, 0x0401} },
+ { 'W', CAPLOK, {0x04e9, 0x04e8, 0x0446, 0x0426} },
+ { 'O', CAPLOK, {0x04d9, 0x04d8, 0x0449, 0x0429} },
+ { 'M', CAPLOK, {0x0497, 0x0496, 0x044c, 0x042c} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, WCH_NONE, 0x001f} },
- { VK_OEM_6, CAPS, {0x04af, 0x04ae, 0x044a, 0x042a, 0x001b} },
- { VK_OEM_5, NOCAPS, {'\\', '/', WCH_NONE, WCH_NONE, 0x001c} },
- { VK_OEM_1, CAPS, {0x04a3, 0x04a2, 0x0436, 0x0416, 0x001d} },
- { VK_OEM_102, CAPS, {0x0491, 0x0490, WCH_NONE, WCH_NONE, 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, WCH_NONE, 0x001f} },
+ { VK_OEM_6, CAPLOK, {0x04af, 0x04ae, 0x044a, 0x042a, 0x001b} },
+ { VK_OEM_5, 0, {'\\', '/', WCH_NONE, WCH_NONE, 0x001c} },
+ { VK_OEM_1, CAPLOK, {0x04a3, 0x04a2, 0x0436, 0x0416, 0x001d} },
+ { VK_OEM_102, CAPLOK, {0x0491, 0x0490, WCH_NONE, WCH_NONE, 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { '6', NOCAPS, {'6', ':', WCH_NONE, WCH_NONE, WCH_NONE, 0x001e} },
+ { '6', 0, {'6', ':', WCH_NONE, WCH_NONE, WCH_NONE, 0x001e} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- Tatar doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, CAPS, {'_', '%' } },
- { '1', CAPS, {0x0e45, '+' } },
- { '2', CAPS, {'/', 0x0e51} },
- { '3', CAPS, {'-', 0x0e52} },
- { '4', CAPS, {0x0e20, 0x0e53} },
- { '5', CAPS, {0x0e16, 0x0e54} },
- { '7', CAPS, {0x0e36, 0x0e3f} },
- { '8', CAPS, {0x0e04, 0x0e55} },
- { '9', CAPS, {0x0e15, 0x0e56} },
- { '0', CAPS, {0x0e08, 0x0e57} },
- { VK_OEM_PLUS, CAPS, {0x0e0a, 0x0e59} },
- { 'Q', CAPS, {0x0e46, 0x0e50} },
- { 'W', CAPS, {0x0e44, '\"' } },
- { 'E', CAPS, {0x0e33, 0x0e0e} },
- { 'R', CAPS, {0x0e1e, 0x0e11} },
- { 'T', CAPS, {0x0e30, 0x0e18} },
- { 'Y', CAPS, {0x0e31, 0x0e4d} },
- { 'U', CAPS, {0x0e35, 0x0e4a} },
- { 'I', CAPS, {0x0e23, 0x0e13} },
- { 'O', CAPS, {0x0e19, 0x0e2f} },
- { 'P', CAPS, {0x0e22, 0x0e0d} },
- { 'A', CAPS, {0x0e1f, 0x0e24} },
- { 'S', CAPS, {0x0e2b, 0x0e06} },
- { 'D', CAPS, {0x0e01, 0x0e0f} },
- { 'F', CAPS, {0x0e14, 0x0e42} },
- { 'G', CAPS, {0x0e40, 0x0e0c} },
- { 'H', CAPS, {0x0e49, 0x0e47} },
- { 'J', CAPS, {0x0e48, 0x0e4b} },
- { 'K', CAPS, {0x0e32, 0x0e29} },
- { 'L', CAPS, {0x0e2a, 0x0e28} },
- { VK_OEM_1, CAPS, {0x0e27, 0x0e0b} },
- { VK_OEM_7, CAPS, {0x0e07, '.' } },
- { 'Z', CAPS, {0x0e1c, '(' } },
- { 'X', CAPS, {0x0e1b, ')' } },
- { 'C', CAPS, {0x0e41, 0x0e09} },
- { 'V', CAPS, {0x0e2d, 0x0e2e} },
- { 'B', CAPS, {0x0e34, 0x0e3a} },
- { 'N', CAPS, {0x0e37, 0x0e4c} },
- { 'M', CAPS, {0x0e17, '?' } },
- { VK_OEM_COMMA, CAPS, {0x0e21, 0x0e12} },
- { VK_OEM_PERIOD,CAPS, {0x0e43, 0x0e2c} },
- { VK_OEM_2, CAPS, {0x0e1d, 0x0e26} },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, CAPLOK, {'_', '%' } },
+ { '1', CAPLOK, {0x0e45, '+' } },
+ { '2', CAPLOK, {'/', 0x0e51} },
+ { '3', CAPLOK, {'-', 0x0e52} },
+ { '4', CAPLOK, {0x0e20, 0x0e53} },
+ { '5', CAPLOK, {0x0e16, 0x0e54} },
+ { '7', CAPLOK, {0x0e36, 0x0e3f} },
+ { '8', CAPLOK, {0x0e04, 0x0e55} },
+ { '9', CAPLOK, {0x0e15, 0x0e56} },
+ { '0', CAPLOK, {0x0e08, 0x0e57} },
+ { VK_OEM_PLUS, CAPLOK, {0x0e0a, 0x0e59} },
+ { 'Q', CAPLOK, {0x0e46, 0x0e50} },
+ { 'W', CAPLOK, {0x0e44, '\"' } },
+ { 'E', CAPLOK, {0x0e33, 0x0e0e} },
+ { 'R', CAPLOK, {0x0e1e, 0x0e11} },
+ { 'T', CAPLOK, {0x0e30, 0x0e18} },
+ { 'Y', CAPLOK, {0x0e31, 0x0e4d} },
+ { 'U', CAPLOK, {0x0e35, 0x0e4a} },
+ { 'I', CAPLOK, {0x0e23, 0x0e13} },
+ { 'O', CAPLOK, {0x0e19, 0x0e2f} },
+ { 'P', CAPLOK, {0x0e22, 0x0e0d} },
+ { 'A', CAPLOK, {0x0e1f, 0x0e24} },
+ { 'S', CAPLOK, {0x0e2b, 0x0e06} },
+ { 'D', CAPLOK, {0x0e01, 0x0e0f} },
+ { 'F', CAPLOK, {0x0e14, 0x0e42} },
+ { 'G', CAPLOK, {0x0e40, 0x0e0c} },
+ { 'H', CAPLOK, {0x0e49, 0x0e47} },
+ { 'J', CAPLOK, {0x0e48, 0x0e4b} },
+ { 'K', CAPLOK, {0x0e32, 0x0e29} },
+ { 'L', CAPLOK, {0x0e2a, 0x0e28} },
+ { VK_OEM_1, CAPLOK, {0x0e27, 0x0e0b} },
+ { VK_OEM_7, CAPLOK, {0x0e07, '.' } },
+ { 'Z', CAPLOK, {0x0e1c, '(' } },
+ { 'X', CAPLOK, {0x0e1b, ')' } },
+ { 'C', CAPLOK, {0x0e41, 0x0e09} },
+ { 'V', CAPLOK, {0x0e2d, 0x0e2e} },
+ { 'B', CAPLOK, {0x0e34, 0x0e3a} },
+ { 'N', CAPLOK, {0x0e37, 0x0e4c} },
+ { 'M', CAPLOK, {0x0e17, '?' } },
+ { VK_OEM_COMMA, CAPLOK, {0x0e21, 0x0e12} },
+ { VK_OEM_PERIOD,CAPLOK, {0x0e43, 0x0e2c} },
+ { VK_OEM_2, CAPLOK, {0x0e1d, 0x0e26} },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_4, CAPS, {0x0e1a, 0x0e10, '%' } },
- { VK_OEM_6, CAPS, {0x0e25, ',', 0x0e51} },
- { VK_OEM_5, CAPS, {0x0e03, 0x0e05, '+' } },
- { VK_OEM_102, CAPS, {0x0e03, 0x0e05, 0x0e52} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_OEM_4, CAPLOK, {0x0e1a, 0x0e10, '%' } },
+ { VK_OEM_6, CAPLOK, {0x0e25, ',', 0x0e51} },
+ { VK_OEM_5, CAPLOK, {0x0e03, 0x0e05, '+' } },
+ { VK_OEM_102, CAPLOK, {0x0e03, 0x0e05, 0x0e52} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '6', CAPS, {0x0e38, 0x0e39, WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, CAPS, {0x0e02, 0x0e58, WCH_NONE, 0x001f} },
+ { '6', CAPLOK, {0x0e38, 0x0e39, WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, CAPLOK, {0x0e02, 0x0e58, WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Thai doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, CAPS, {'_', 0x0e3f} },
- { '1', CAPS, {'=', '+' } },
- { '2', CAPS, {0x0e52, '\"' } },
- { '3', CAPS, {0x0e53, '/' } },
- { '4', CAPS, {0x0e54, ',' } },
- { '5', CAPS, {0x0e55, '?' } },
- { '7', CAPS, {0x0e57, '_' } },
- { '8', CAPS, {0x0e58, '.' } },
- { '9', CAPS, {0x0e59, '(' } },
- { '0', CAPS, {0x0e50, ')' } },
- { VK_OEM_PLUS, CAPS, {0x0e56, '%' } },
- { 'Q', CAPS, {0x0e47, 0x0e4a} },
- { 'W', CAPS, {0x0e15, 0x0e24} },
- { 'E', CAPS, {0x0e22, 0x0e46} },
- { 'R', CAPS, {0x0e2d, 0x0e0d} },
- { 'T', CAPS, {0x0e23, 0x0e29} },
- { 'Y', CAPS, {0x0e48, 0x0e36} },
- { 'U', CAPS, {0x0e14, 0x0e1d} },
- { 'I', CAPS, {0x0e21, 0x0e0b} },
- { 'O', CAPS, {0x0e27, 0x0e16} },
- { 'P', CAPS, {0x0e41, 0x0e12} },
- { 'A', CAPS, {0x0e49, 0x0e4b} },
- { 'S', CAPS, {0x0e17, 0x0e18} },
- { 'D', CAPS, {0x0e07, 0x0e33} },
- { 'F', CAPS, {0x0e01, 0x0e13} },
- { 'G', CAPS, {0x0e31, 0x0e4c} },
- { 'H', CAPS, {0x0e35, 0x0e37} },
- { 'J', CAPS, {0x0e32, 0x0e1c} },
- { 'K', CAPS, {0x0e19, 0x0e0a} },
- { 'L', CAPS, {0x0e40, 0x0e42} },
- { VK_OEM_1, CAPS, {0x0e44, 0x0e06} },
- { VK_OEM_7, CAPS, {0x0e02, 0x0e11} },
- { 'Z', CAPS, {0x0e1a, 0x0e0e} },
- { 'X', CAPS, {0x0e1b, 0x0e0f} },
- { 'C', CAPS, {0x0e25, 0x0e10} },
- { 'V', CAPS, {0x0e2b, 0x0e20} },
- { 'B', CAPS, {0x0e34, 0x0e31} },
- { 'N', CAPS, {0x0e04, 0x0e28} },
- { 'M', CAPS, {0x0e2a, 0x0e2e} },
- { VK_OEM_COMMA, CAPS, {0x0e30, 0x0e1f} },
- { VK_OEM_PERIOD,CAPS, {0x0e08, 0x0e09} },
- { VK_OEM_2, CAPS, {0x0e1e, 0x0e2c} },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, CAPLOK, {'_', 0x0e3f} },
+ { '1', CAPLOK, {'=', '+' } },
+ { '2', CAPLOK, {0x0e52, '\"' } },
+ { '3', CAPLOK, {0x0e53, '/' } },
+ { '4', CAPLOK, {0x0e54, ',' } },
+ { '5', CAPLOK, {0x0e55, '?' } },
+ { '7', CAPLOK, {0x0e57, '_' } },
+ { '8', CAPLOK, {0x0e58, '.' } },
+ { '9', CAPLOK, {0x0e59, '(' } },
+ { '0', CAPLOK, {0x0e50, ')' } },
+ { VK_OEM_PLUS, CAPLOK, {0x0e56, '%' } },
+ { 'Q', CAPLOK, {0x0e47, 0x0e4a} },
+ { 'W', CAPLOK, {0x0e15, 0x0e24} },
+ { 'E', CAPLOK, {0x0e22, 0x0e46} },
+ { 'R', CAPLOK, {0x0e2d, 0x0e0d} },
+ { 'T', CAPLOK, {0x0e23, 0x0e29} },
+ { 'Y', CAPLOK, {0x0e48, 0x0e36} },
+ { 'U', CAPLOK, {0x0e14, 0x0e1d} },
+ { 'I', CAPLOK, {0x0e21, 0x0e0b} },
+ { 'O', CAPLOK, {0x0e27, 0x0e16} },
+ { 'P', CAPLOK, {0x0e41, 0x0e12} },
+ { 'A', CAPLOK, {0x0e49, 0x0e4b} },
+ { 'S', CAPLOK, {0x0e17, 0x0e18} },
+ { 'D', CAPLOK, {0x0e07, 0x0e33} },
+ { 'F', CAPLOK, {0x0e01, 0x0e13} },
+ { 'G', CAPLOK, {0x0e31, 0x0e4c} },
+ { 'H', CAPLOK, {0x0e35, 0x0e37} },
+ { 'J', CAPLOK, {0x0e32, 0x0e1c} },
+ { 'K', CAPLOK, {0x0e19, 0x0e0a} },
+ { 'L', CAPLOK, {0x0e40, 0x0e42} },
+ { VK_OEM_1, CAPLOK, {0x0e44, 0x0e06} },
+ { VK_OEM_7, CAPLOK, {0x0e02, 0x0e11} },
+ { 'Z', CAPLOK, {0x0e1a, 0x0e0e} },
+ { 'X', CAPLOK, {0x0e1b, 0x0e0f} },
+ { 'C', CAPLOK, {0x0e25, 0x0e10} },
+ { 'V', CAPLOK, {0x0e2b, 0x0e20} },
+ { 'B', CAPLOK, {0x0e34, 0x0e31} },
+ { 'N', CAPLOK, {0x0e04, 0x0e28} },
+ { 'M', CAPLOK, {0x0e2a, 0x0e2e} },
+ { VK_OEM_COMMA, CAPLOK, {0x0e30, 0x0e1f} },
+ { VK_OEM_PERIOD,CAPLOK, {0x0e08, 0x0e09} },
+ { VK_OEM_2, CAPLOK, {0x0e1e, 0x0e2c} },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_4, CAPS, {0x0e43, 0x0e2f, 0x001b} },
- { VK_OEM_6, CAPS, {0x0e0c, 0x0e26, 0x001d} },
- { VK_OEM_5, CAPS, {0xf8c7, 0x0e4d, 0x001c} },
- { VK_OEM_102, CAPS, {0xf8c7, 0x0e4d, 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_OEM_4, CAPLOK, {0x0e43, 0x0e2f, 0x001b} },
+ { VK_OEM_6, CAPLOK, {0x0e0c, 0x0e26, 0x001d} },
+ { VK_OEM_5, CAPLOK, {0xf8c7, 0x0e4d, 0x001c} },
+ { VK_OEM_102, CAPLOK, {0xf8c7, 0x0e4d, 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '6', CAPS, {0x0e39, 0x0e38, WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, CAPS, {0x0e51, '-', WCH_NONE, 0x001f} },
+ { '6', CAPLOK, {0x0e39, 0x0e38, WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, CAPLOK, {0x0e51, '-', WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Thai doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
+
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
VK_MULTIPLY, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 } /* Modifier bit order */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
{ VK_OEM_3, 0, {'_', '%' } },
{ '1', 0, {0x0e45, '+' } },
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {'_', 0x0e3f} },
- { '1', NOCAPS, {'=', '+' } },
- { '2', NOCAPS, {0x0e52, '\"' } },
- { '3', NOCAPS, {0x0e53, '/' } },
- { '4', NOCAPS, {0x0e54, ',' } },
- { '5', NOCAPS, {0x0e55, '?' } },
- { '7', NOCAPS, {0x0e57, '_' } },
- { '8', NOCAPS, {0x0e58, '.' } },
- { '9', NOCAPS, {0x0e59, '(' } },
- { '0', NOCAPS, {0x0e50, ')' } },
- { VK_OEM_PLUS, NOCAPS, {0x0e56, '%' } },
- { 'Q', NOCAPS, {0x0e47, 0x0e4a} },
- { 'W', NOCAPS, {0x0e15, 0x0e24} },
- { 'E', NOCAPS, {0x0e22, 0x0e46} },
- { 'R', NOCAPS, {0x0e2d, 0x0e0d} },
- { 'T', NOCAPS, {0x0e23, 0x0e29} },
- { 'Y', NOCAPS, {0x0e48, 0x0e36} },
- { 'U', NOCAPS, {0x0e14, 0x0e1d} },
- { 'I', NOCAPS, {0x0e21, 0x0e0b} },
- { 'O', NOCAPS, {0x0e27, 0x0e16} },
- { 'P', NOCAPS, {0x0e41, 0x0e12} },
- { 'A', NOCAPS, {0x0e49, 0x0e4b} },
- { 'S', NOCAPS, {0x0e17, 0x0e18} },
- { 'D', NOCAPS, {0x0e07, 0x0e33} },
- { 'F', NOCAPS, {0x0e01, 0x0e13} },
- { 'G', NOCAPS, {0x0e31, 0x0e4c} },
- { 'H', NOCAPS, {0x0e35, 0x0e37} },
- { 'J', NOCAPS, {0x0e32, 0x0e1c} },
- { 'K', NOCAPS, {0x0e19, 0x0e0a} },
- { 'L', NOCAPS, {0x0e40, 0x0e42} },
- { VK_OEM_1, NOCAPS, {0x0e44, 0x0e06} },
- { VK_OEM_7, NOCAPS, {0x0e02, 0x0e11} },
- { 'Z', NOCAPS, {0x0e1a, 0x0e0e} },
- { 'X', NOCAPS, {0x0e1b, 0x0e0f} },
- { 'C', NOCAPS, {0x0e25, 0x0e10} },
- { 'V', NOCAPS, {0x0e2b, 0x0e20} },
- { 'B', NOCAPS, {0x0e34, 0x0e31} },
- { 'N', NOCAPS, {0x0e04, 0x0e28} },
- { 'M', NOCAPS, {0x0e2a, 0x0e2e} },
- { VK_OEM_COMMA, NOCAPS, {0x0e30, 0x0e1f} },
- { VK_OEM_PERIOD,NOCAPS, {0x0e08, 0x0e09} },
- { VK_OEM_2, NOCAPS, {0x0e1e, 0x0e2c} },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {'_', 0x0e3f} },
+ { '1', 0, {'=', '+' } },
+ { '2', 0, {0x0e52, '\"' } },
+ { '3', 0, {0x0e53, '/' } },
+ { '4', 0, {0x0e54, ',' } },
+ { '5', 0, {0x0e55, '?' } },
+ { '7', 0, {0x0e57, '_' } },
+ { '8', 0, {0x0e58, '.' } },
+ { '9', 0, {0x0e59, '(' } },
+ { '0', 0, {0x0e50, ')' } },
+ { VK_OEM_PLUS, 0, {0x0e56, '%' } },
+ { 'Q', 0, {0x0e47, 0x0e4a} },
+ { 'W', 0, {0x0e15, 0x0e24} },
+ { 'E', 0, {0x0e22, 0x0e46} },
+ { 'R', 0, {0x0e2d, 0x0e0d} },
+ { 'T', 0, {0x0e23, 0x0e29} },
+ { 'Y', 0, {0x0e48, 0x0e36} },
+ { 'U', 0, {0x0e14, 0x0e1d} },
+ { 'I', 0, {0x0e21, 0x0e0b} },
+ { 'O', 0, {0x0e27, 0x0e16} },
+ { 'P', 0, {0x0e41, 0x0e12} },
+ { 'A', 0, {0x0e49, 0x0e4b} },
+ { 'S', 0, {0x0e17, 0x0e18} },
+ { 'D', 0, {0x0e07, 0x0e33} },
+ { 'F', 0, {0x0e01, 0x0e13} },
+ { 'G', 0, {0x0e31, 0x0e4c} },
+ { 'H', 0, {0x0e35, 0x0e37} },
+ { 'J', 0, {0x0e32, 0x0e1c} },
+ { 'K', 0, {0x0e19, 0x0e0a} },
+ { 'L', 0, {0x0e40, 0x0e42} },
+ { VK_OEM_1, 0, {0x0e44, 0x0e06} },
+ { VK_OEM_7, 0, {0x0e02, 0x0e11} },
+ { 'Z', 0, {0x0e1a, 0x0e0e} },
+ { 'X', 0, {0x0e1b, 0x0e0f} },
+ { 'C', 0, {0x0e25, 0x0e10} },
+ { 'V', 0, {0x0e2b, 0x0e20} },
+ { 'B', 0, {0x0e34, 0x0e31} },
+ { 'N', 0, {0x0e04, 0x0e28} },
+ { 'M', 0, {0x0e2a, 0x0e2e} },
+ { VK_OEM_COMMA, 0, {0x0e30, 0x0e1f} },
+ { VK_OEM_PERIOD,0, {0x0e08, 0x0e09} },
+ { VK_OEM_2, 0, {0x0e1e, 0x0e2c} },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_4, NOCAPS, {0x0e43, 0x0e2f, 0x001b} },
- { VK_OEM_6, NOCAPS, {0x0e0c, 0x0e26, 0x001d} },
- { VK_OEM_5, NOCAPS, {0xf8c7, 0x0e4d, 0x001c} },
- { VK_OEM_102, NOCAPS, {0xf8c7, 0x0e4d, 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_OEM_4, 0, {0x0e43, 0x0e2f, 0x001b} },
+ { VK_OEM_6, 0, {0x0e0c, 0x0e26, 0x001d} },
+ { VK_OEM_5, 0, {0xf8c7, 0x0e4d, 0x001c} },
+ { VK_OEM_102, 0, {0xf8c7, 0x0e4d, 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '6', NOCAPS, {0x0e39, 0x0e38, WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {0x0e51, '-', WCH_NONE, 0x001f} },
+ { '6', 0, {0x0e39, 0x0e38, WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {0x0e51, '-', WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Thai doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2, 5 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { 'G', CAPS, {'g', 'G' } },
- { VK_OEM_1, CAPS, {0x011f, 0x011e} },
- { 'O', CAPS, {'o', 'O' } },
- { 'R', CAPS, {'r', 'R' } },
- { 'N', CAPS, {'n', 'N' } },
- { 'T', CAPS, {'t', 'T' } },
- { 'K', CAPS, {'k', 'K' } },
- { 'M', CAPS, {'m', 'M' } },
- { 'L', CAPS, {'l', 'L' } },
- { VK_OEM_7, CAPS, {0x015f, 0x015e} },
- { 'C', CAPS, {'c', 'C' } },
- { VK_OEM_2, CAPS, {0x00e7, 0x00c7} },
- { 'Z', CAPS, {'z', 'Z' } },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { 'G', CAPLOK, {'g', 'G' } },
+ { VK_OEM_1, CAPLOK, {0x011f, 0x011e} },
+ { 'O', CAPLOK, {'o', 'O' } },
+ { 'R', CAPLOK, {'r', 'R' } },
+ { 'N', CAPLOK, {'n', 'N' } },
+ { 'T', CAPLOK, {'t', 'T' } },
+ { 'K', CAPLOK, {'k', 'K' } },
+ { 'M', CAPLOK, {'m', 'M' } },
+ { 'L', CAPLOK, {'l', 'L' } },
+ { VK_OEM_7, CAPLOK, {0x015f, 0x015e} },
+ { 'C', CAPLOK, {'c', 'C' } },
+ { VK_OEM_2, CAPLOK, {0x00e7, 0x00c7} },
+ { 'Z', CAPLOK, {'z', 'Z' } },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_3, NOCAPS, {'+', '*', 0x00ac } },
- { '5', NOCAPS, {'5', '%', 0x00bd } },
- { '7', NOCAPS, {'7', '\'', '{' } },
- { '9', NOCAPS, {'9', ')', ']' } },
- { '0', NOCAPS, {'0', '=', '}' } },
- { 'F', CAPS, {'f', 'F', '@' } },
- { 'D', CAPS, {'d', 'D', 0x00a5 } },
- { 'P', CAPS, {'p', 'P', 0x00a3 } },
- { 'Q', CAPS, {'q', 'Q', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00a8 } },
- { 'W', CAPS, {'w', 'W', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, '~' } },
- { 'X', CAPS, {'x', 'X', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, '`' } },
- { 'E', CAPS, {'e', 'E', 0x20ac } },
- { 'Y', CAPS, {'y', 'Y', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b4 } },
- { 'B', CAPS, {'b', 'B', 0x00d7 } },
- { VK_OEM_PERIOD, NOCAPS, {'.', ':', 0x00f7 } },
- { VK_OEM_COMMA, NOCAPS, {',', ';', 0x00ad } },
+ { VK_OEM_3, 0, {'+', '*', 0x00ac } },
+ { '5', 0, {'5', '%', 0x00bd } },
+ { '7', 0, {'7', '\'', '{' } },
+ { '9', 0, {'9', ')', ']' } },
+ { '0', 0, {'0', '=', '}' } },
+ { 'F', CAPLOK, {'f', 'F', '@' } },
+ { 'D', CAPLOK, {'d', 'D', 0x00a5 } },
+ { 'P', CAPLOK, {'p', 'P', 0x00a3 } },
+ { 'Q', CAPLOK, {'q', 'Q', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00a8 } },
+ { 'W', CAPLOK, {'w', 'W', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, '~' } },
+ { 'X', CAPLOK, {'x', 'X', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, '`' } },
+ { 'E', CAPLOK, {'e', 'E', 0x20ac } },
+ { 'Y', CAPLOK, {'y', 'Y', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b4 } },
+ { 'B', CAPLOK, {'b', 'B', 0x00d7 } },
+ { VK_OEM_PERIOD, 0, {'.', ':', 0x00f7 } },
+ { VK_OEM_COMMA, 0, {',', ';', 0x00ad } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '8', NOCAPS, {'8', '(', '[', 0x001b} },
- { VK_OEM_6, CAPS, {0x00fc, 0x00dc, WCH_NONE, 0x001d} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, 0x0003} },
+ { '8', 0, {'8', '(', '[', 0x001b} },
+ { VK_OEM_6, CAPLOK, {0x00fc, 0x00dc, WCH_NONE, 0x001d} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { '2', NOCAPS, {'2', '\"', 0x00b2, WCH_NONE, 0x0000} },
- { '6', NOCAPS, {'6', '&', 0x00be, WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', '|', WCH_NONE, 0x001f} },
+ { '2', 0, {'2', '\"', 0x00b2, WCH_NONE, 0x0000} },
+ { '6', 0, {'6', '&', 0x00be, WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {'-', '_', '|', WCH_NONE, 0x001f} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { '1', NOCAPS, {'1', '!', 0x00b9, WCH_NONE, WCH_NONE, 0x00a1 } },
- { '3', NOCAPS, {'3', WCH_DEAD, '#', WCH_NONE, WCH_NONE, 0x00b3 } },
- { 0xff, NOCAPS, {WCH_NONE, '^', WCH_NONE, WCH_NONE, WCH_NONE, WCH_NONE} },
- { '4', NOCAPS, {'4', '$', 0x00bc, WCH_NONE, WCH_NONE, 0x00a4 } },
- { VK_OEM_PLUS, NOCAPS, {'/', '?', '\\', 0x001c, WCH_NONE, 0x00bf } },
- { 'I', CAPS, {0x0131, 'I', 0x00b6, WCH_NONE, WCH_NONE, 0x00ae } },
- { 'H', CAPS|CAPLOKALTGR,{'h', 'H', 0x00f8, WCH_NONE, WCH_NONE, 0x00d8 } },
- { 'U', CAPS, {'u', 'U', 0x00e6, WCH_NONE, WCH_NONE, 0x00c6 } },
- { VK_OEM_4, CAPS|CAPLOKALTGR,{'i', 0x0130, 0x00df, WCH_NONE, WCH_NONE, 0x00a7 } },
- { 'A', CAPS, {'a', 'A', WCH_NONE, WCH_NONE, WCH_NONE, 0x00aa } },
- { 'J', CAPS, {'j', 'J', 0x00ab, WCH_NONE, WCH_NONE, '<' } },
- { VK_OEM_5, CAPS, {0x00f6 ,0x00d6, 0x00bb, 0x001c , WCH_NONE, '>' } },
- { 'V', CAPS, {'v', 'V', 0x00a2, WCH_NONE, WCH_NONE, 0x00a9 } },
- { 'S', CAPS, {'s', 'S', 0x00b5, WCH_NONE, WCH_NONE, 0x00ba } },
- { VK_OEM_102, NOCAPS, {'<', '>', '|', WCH_NONE, WCH_NONE, 0x00a6 } },
+ { '1', 0, {'1', '!', 0x00b9, WCH_NONE, WCH_NONE, 0x00a1 } },
+ { '3', 0, {'3', WCH_DEAD, '#', WCH_NONE, WCH_NONE, 0x00b3 } },
+ { 0xff, 0, {WCH_NONE, '^', WCH_NONE, WCH_NONE, WCH_NONE, WCH_NONE} },
+ { '4', 0, {'4', '$', 0x00bc, WCH_NONE, WCH_NONE, 0x00a4 } },
+ { VK_OEM_PLUS, 0, {'/', '?', '\\', 0x001c, WCH_NONE, 0x00bf } },
+ { 'I', CAPLOK, {0x0131, 'I', 0x00b6, WCH_NONE, WCH_NONE, 0x00ae } },
+ { 'H', CAPLOK|CAPLOKALTGR,{'h', 'H', 0x00f8, WCH_NONE, WCH_NONE, 0x00d8 } },
+ { 'U', CAPLOK, {'u', 'U', 0x00e6, WCH_NONE, WCH_NONE, 0x00c6 } },
+ { VK_OEM_4, CAPLOK|CAPLOKALTGR,{'i', 0x0130, 0x00df, WCH_NONE, WCH_NONE, 0x00a7 } },
+ { 'A', CAPLOK, {'a', 'A', WCH_NONE, WCH_NONE, WCH_NONE, 0x00aa } },
+ { 'J', CAPLOK, {'j', 'J', 0x00ab, WCH_NONE, WCH_NONE, '<' } },
+ { VK_OEM_5, CAPLOK, {0x00f6 ,0x00d6, 0x00bb, 0x001c , WCH_NONE, '>' } },
+ { 'V', CAPLOK, {'v', 'V', 0x00a2, WCH_NONE, WCH_NONE, 0x00a9 } },
+ { 'S', CAPLOK, {'s', 'S', 0x00b5, WCH_NONE, WCH_NONE, 0x00ba } },
+ { VK_OEM_102, 0, {'<', '>', '|', WCH_NONE, WCH_NONE, 0x00a6 } },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2, 5 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { 'W', CAPS, {'w', 'W' } },
- { 'R', CAPS, {'r', 'R' } },
- { 'T', CAPS, {'t', 'T' } },
- { 'Y', CAPS, {'y', 'Y' } },
- { 'U', CAPS, {'u', 'U' } },
- { 'O', CAPS, {'o', 'O' } },
- { 'P', CAPS, {'p', 'P' } },
- { '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_7, CAPS, {'i', 0x0130} },
- { '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, CAPS, {0x00f6, 0x00d6} },
- { VK_OEM_PERIOD, CAPS, {0x00e7, 0x00c7} },
- { VK_OEM_2, NOCAPS, {'.', ':' } },
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { 'W', CAPLOK, {'w', 'W' } },
+ { 'R', CAPLOK, {'r', 'R' } },
+ { 'T', CAPLOK, {'t', 'T' } },
+ { 'Y', CAPLOK, {'y', 'Y' } },
+ { 'U', CAPLOK, {'u', 'U' } },
+ { 'O', CAPLOK, {'o', 'O' } },
+ { 'P', CAPLOK, {'p', 'P' } },
+ { 'D', CAPLOK, {'d', 'D' } },
+ { 'F', CAPLOK, {'f', 'F' } },
+ { 'G', CAPLOK, {'g', 'G' } },
+ { 'H', CAPLOK, {'h', 'H' } },
+ { 'J', CAPLOK, {'j', 'J' } },
+ { 'K', CAPLOK, {'k', 'K' } },
+ { 'L', CAPLOK, {'l', 'L' } },
+ { VK_OEM_7, CAPLOK, {'i', 0x0130} },
+ { 'Z', CAPLOK, {'z', 'Z' } },
+ { 'X', CAPLOK, {'x', 'X' } },
+ { 'C', CAPLOK, {'c', 'C' } },
+ { 'V', CAPLOK, {'v', 'V' } },
+ { 'B', CAPLOK, {'b', 'B' } },
+ { 'N', CAPLOK, {'n', 'N' } },
+ { 'M', CAPLOK, {'m', 'M' } },
+ { VK_OEM_COMMA, CAPLOK, {0x00f6, 0x00d6} },
+ { VK_OEM_PERIOD, CAPLOK, {0x00e7, 0x00c7} },
+ { VK_OEM_2, 0, {'.', ':' } },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_3, NOCAPS, {'\"', 0x00e9, '<' } },
- { '1', NOCAPS, {'1', '!', '>' } },
- { '3', NOCAPS, {'3', WCH_DEAD, '#' } },
- { 0xff, NOCAPS, {WCH_NONE, '^', WCH_NONE} },
- { '4', NOCAPS, {'4', '+', '$' } },
- { '5', NOCAPS, {'5', '%', 0x00bd } },
- { '7', NOCAPS, {'7', '/', '{' } },
- { '8', NOCAPS, {'8', '(', '[' } },
- { '9', NOCAPS, {'9', ')', ']' } },
- { '0', NOCAPS, {'0', '=', '}' } },
- { VK_OEM_8, NOCAPS, {'*', '?', '\\' } },
- { 'Q', CAPS, {'q', 'Q', '@' } },
- { 'E', CAPS, {'e', 'E', 0x20ac } },
- { 'S', CAPS, {'s', 'S', 0x00df } },
- { VK_OEM_1, CAPS, {0x015f, 0x015e, WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b4 } },
+ { VK_OEM_3, 0, {'\"', 0x00e9, '<' } },
+ { '1', 0, {'1', '!', '>' } },
+ { '3', 0, {'3', WCH_DEAD, '#' } },
+ { 0xff, 0, {WCH_NONE, '^', WCH_NONE} },
+ { '4', 0, {'4', '+', '$' } },
+ { '5', 0, {'5', '%', 0x00bd } },
+ { '7', 0, {'7', '/', '{' } },
+ { '8', 0, {'8', '(', '[' } },
+ { '9', 0, {'9', ')', ']' } },
+ { '0', 0, {'0', '=', '}' } },
+ { VK_OEM_8, 0, {'*', '?', '\\' } },
+ { 'Q', CAPLOK, {'q', 'Q', '@' } },
+ { 'E', CAPLOK, {'e', 'E', 0x20ac } },
+ { 'S', CAPLOK, {'s', 'S', 0x00df } },
+ { VK_OEM_1, CAPLOK, {0x015f, 0x015e, WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b4 } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_4, CAPS, {0x011f, 0x011e, WCH_DEAD, 0x001b } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00a8, WCH_NONE} },
- { VK_OEM_6, CAPS, {0x00fc, 0x00dc, WCH_DEAD, 0x001d } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, '~', WCH_NONE} },
- { VK_OEM_5, NOCAPS, {',', ';', WCH_DEAD, 0x001c } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, '`', WCH_NONE} },
- { VK_OEM_102, NOCAPS, {'<', '>', '|', 0x001c } },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x007f } },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, 0x001b } },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, 0x0003 } },
+ { VK_OEM_4, CAPLOK, {0x011f, 0x011e, WCH_DEAD, 0x001b } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00a8, WCH_NONE} },
+ { VK_OEM_6, CAPLOK, {0x00fc, 0x00dc, WCH_DEAD, 0x001d } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, '~', WCH_NONE} },
+ { VK_OEM_5, 0, {',', ';', WCH_DEAD, 0x001c } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, '`', WCH_NONE} },
+ { VK_OEM_102, 0, {'<', '>', '|', 0x001c } },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x007f } },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b } },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003 } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { '2', NOCAPS, {'2', '\'', 0x00a3, WCH_NONE, 0x0000} },
- { '6', NOCAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', '|', WCH_NONE, 0x001f} },
+ { '2', 0, {'2', '\'', 0x00a3, WCH_NONE, 0x0000} },
+ { '6', 0, {'6', '&', WCH_NONE, WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {'-', '_', '|', WCH_NONE, 0x001f} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { 'I', CAPS|CAPLOKALTGR, {0x0131, 'I', 'i', WCH_NONE, WCH_NONE, 0x0130} },
- { 'A', CAPS|CAPLOKALTGR, {'a', 'A', 0x00e6, WCH_NONE, WCH_NONE, 0x00c6} },
+ { 'I', CAPLOK|CAPLOKALTGR, {0x0131, 'I', 'i', WCH_NONE, WCH_NONE, 0x0130} },
+ { 'A', CAPLOK|CAPLOKALTGR, {'a', 'A', 0x00e6, WCH_NONE, WCH_NONE, 0x00c6} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT|KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT|KBDEXT,
/* - 37 - */
/* Bottom Row */
VK_MULTIPLY, VK_MENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- {0x1c, VK_RETURN|KEXT}, //Keypad return
- {0x1d, VK_RCONTROL|KEXT},//Right control key
- {0x35, VK_DIVIDE|KEXT}, // Numpad div
- {0x38, VK_RMENU|KEXT}, //AltGr?
- {0, 0},
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
+ { 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
/* Modifier bit order: NONE, SHIFT, CTRL, SHIFT-CTRL, ALT (not used), SHIFT-ALT (not used), CTRL-ALT, SHIFT-CTRL-ALT */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
- /* The numbers */
- { '1', NOCAPS, {'1', '!'} },
- { '2', NOCAPS, {'2', '\"'} },
- { '3', NOCAPS, {'3', 0xa3} },
- { '5', NOCAPS, {'5', '%'} },
- { '7', NOCAPS, {'7', '&'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
- { VK_OEM_PLUS ,NOCAPS, {'=', '+'} },
- { VK_OEM_1 ,NOCAPS, {';', ':'} },
- { VK_OEM_COMMA, NOCAPS, {',', '<'} },
- { VK_OEM_PERIOD, NOCAPS, {'.', '>'} },
- { VK_OEM_2, NOCAPS, {'/', '?'} },
+ /* The alphabet */
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+ /* The numbers */
+ { '1', 0, {'1', '!'} },
+ { '2', 0, {'2', '\"'} },
+ { '3', 0, {'3', 0xa3} },
+ { '5', 0, {'5', '%'} },
+ { '7', 0, {'7', '&'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
+ { VK_OEM_PLUS ,0, {'=', '+'} },
+ { VK_OEM_1 ,0, {';', ':'} },
+ { VK_OEM_COMMA, 0, {',', '<'} },
+ { VK_OEM_PERIOD, 0, {'.', '>'} },
+ { VK_OEM_2, 0, {'/', '?'} },
/* Keys that do not have shift states */
- { VK_TAB, NOCAPS, {'\t','\t'} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_ESCAPE, NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE, NOCAPS, {' ', ' '} },
+ { VK_TAB, 0, {'\t','\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_ESCAPE, 0, {0x1b,0x1b} },
+ { VK_SPACE, 0, {' ', ' '} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_4, NOCAPS, {'[', '{', 0x1b} },
- { VK_OEM_6, NOCAPS, {']', '}', 0x1d} },
- { VK_OEM_7, NOCAPS, {'#', '~', 0x1c} },
+ { VK_OEM_4, 0, {'[', '{', 0x1b} },
+ { VK_OEM_6, 0, {']', '}', 0x1d} },
+ { VK_OEM_7, 0, {'#', '~', 0x1c} },
{ VK_OEM_5, 0, {'\\', '|', 0x1c} },
{ VK_RETURN, 0, {'\r', '\r', '\n'} },
{ 0, 0 }
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} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x1f} },
- { VK_OEM_3, NOCAPS, {'\'', '@', WCH_NONE, 0x00} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x1e} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x1f} },
+ { VK_OEM_3, 0, {'\'', '@', WCH_NONE, 0x00} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
/* Normal, Shifted, Ctrl, Sh-Ctrl,Sh-Alt,Ctl-Alt */
/* Ctrl-sh-6 generates RS */
- {VK_OEM_8, NOCAPS, {'`', 0x00ac, WCH_NONE, WCH_NONE, 0xa6} },
- { '4', NOCAPS, {'4', '$', WCH_NONE, WCH_NONE, 0x20ac} },
+ {VK_OEM_8, 0, {'`', 0x00ac, WCH_NONE, WCH_NONE, 0xa6} },
+ { '4', 0, {'4', '$', WCH_NONE, WCH_NONE, 0x20ac} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
/* Normal, Shifted, Ctrl, Sh-Ctrl,Sh-Alt,Ctl-Alt,Ctl-Sh-Alt */
- { '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} },
+ { 'E', CAPLOK, {'e', 'E', 0x05, 0x05, 0x00e9, 0x00c9} },
+ { 'U', CAPLOK, {'u', 'U', 0x15, 0x15, 0x00fa, 0x00da} },
+ { 'I', CAPLOK, {'i', 'I', 0x09, 0x09, 0x00ed, 0x00cd} },
+ { 'O', CAPLOK, {'o', 'O', 0x0f, 0x0f, 0x00f3, 0x00d3} },
+ { 'A', CAPLOK, {'a', 'A', 0x01, 0x01, 0x00e1, 0x00c1} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
-
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures -- English doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- {VK_OEM_3, CAPS, {0x451, 0x401} },
- { '1', NOCAPS, {'1', '!'} },
- { '3', NOCAPS, {'3', 0x2116} },
- { '4', NOCAPS, {'4', ';'} },
- { '5', NOCAPS, {'5', '%'} },
- { '7', NOCAPS, {'7', '?'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
- { VK_OEM_PLUS, NOCAPS, {'=', '+'} },
+ {VK_OEM_3, CAPLOK, {0x451, 0x401} },
+ { '1', 0, {'1', '!'} },
+ { '3', 0, {'3', 0x2116} },
+ { '4', 0, {'4', ';'} },
+ { '5', 0, {'5', '%'} },
+ { '7', 0, {'7', '?'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
+ { VK_OEM_PLUS, 0, {'=', '+'} },
/* First letter row */
- { 'Q', CAPS, {0x439, 0x419} },
- { 'W', CAPS, {0x446, 0x426} },
- { 'E', CAPS, {0x443, 0x423} },
- { 'R', CAPS, {0x43a, 0x41a} },
- { 'T', CAPS, {0x435, 0x415} },
- { 'Y', CAPS, {0x43d, 0x41d} },
- { 'U', CAPS, {0x433, 0x413} },
- { 'I', CAPS, {0x448, 0x428} },
- { 'O', CAPS, {0x449, 0x429} },
- { 'P', CAPS, {0x437, 0x417} },
- { VK_OEM_4, CAPS, {0x445, 0x425} },
- { VK_OEM_6, CAPS, {0x457, 0x407} },
+ { 'Q', CAPLOK, {0x439, 0x419} },
+ { 'W', CAPLOK, {0x446, 0x426} },
+ { 'E', CAPLOK, {0x443, 0x423} },
+ { 'R', CAPLOK, {0x43a, 0x41a} },
+ { 'T', CAPLOK, {0x435, 0x415} },
+ { 'Y', CAPLOK, {0x43d, 0x41d} },
+ { 'U', CAPLOK, {0x433, 0x413} },
+ { 'I', CAPLOK, {0x448, 0x428} },
+ { 'O', CAPLOK, {0x449, 0x429} },
+ { 'P', CAPLOK, {0x437, 0x417} },
+ { VK_OEM_4, CAPLOK, {0x445, 0x425} },
+ { VK_OEM_6, CAPLOK, {0x457, 0x407} },
/* Second letter row */
- { 'A', CAPS, {0x444, 0x424} },
- { 'S', CAPS, {0x456, 0x406} },
- { 'D', CAPS, {0x432, 0x412} },
- { 'F', CAPS, {0x430, 0x410} },
- { 'G', CAPS, {0x43f, 0x41f} },
- { 'H', CAPS, {0x440, 0x420} },
- { 'J', CAPS, {0x43e, 0x41e} },
- { 'K', CAPS, {0x43b, 0x41b} },
- { 'L', CAPS, {0x434, 0x414} },
- { VK_OEM_1, CAPS, {0x436, 0x416} },
- { VK_OEM_7, CAPS, {0x454, 0x404} },
+ { 'A', CAPLOK, {0x444, 0x424} },
+ { 'S', CAPLOK, {0x456, 0x406} },
+ { 'D', CAPLOK, {0x432, 0x412} },
+ { 'F', CAPLOK, {0x430, 0x410} },
+ { 'G', CAPLOK, {0x43f, 0x41f} },
+ { 'H', CAPLOK, {0x440, 0x420} },
+ { 'J', CAPLOK, {0x43e, 0x41e} },
+ { 'K', CAPLOK, {0x43b, 0x41b} },
+ { 'L', CAPLOK, {0x434, 0x414} },
+ { VK_OEM_1, CAPLOK, {0x436, 0x416} },
+ { VK_OEM_7, CAPLOK, {0x454, 0x404} },
/* Third letter row */
- { 'Z', CAPS, {0x44f, 0x42f} },
- { 'X', CAPS, {0x447, 0x427} },
- { 'C', CAPS, {0x441, 0x421} },
- { 'V', CAPS, {0x43c, 0x41c} },
- { 'B', CAPS, {0x438, 0x418} },
- { 'N', CAPS, {0x442, 0x422} },
- { 'M', CAPS, {0x44c, 0x42c} },
- { VK_OEM_COMMA,CAPS, {0x431, 0x411} },
- { VK_OEM_PERIOD,CAPS, {0x44e, 0x42e} },
- { VK_OEM_2, NOCAPS, {'.', ','} },
+ { 'Z', CAPLOK, {0x44f, 0x42f} },
+ { 'X', CAPLOK, {0x447, 0x427} },
+ { 'C', CAPLOK, {0x441, 0x421} },
+ { 'V', CAPLOK, {0x43c, 0x41c} },
+ { 'B', CAPLOK, {0x438, 0x418} },
+ { 'N', CAPLOK, {0x442, 0x422} },
+ { 'M', CAPLOK, {0x44c, 0x42c} },
+ { VK_OEM_COMMA,CAPLOK, {0x431, 0x411} },
+ { VK_OEM_PERIOD,CAPLOK, {0x44e, 0x42e} },
+ { VK_OEM_2, 0, {'.', ','} },
/* Specials */
- { 0x6e, NOCAPS, {',', ','} },
- { VK_TAB, NOCAPS, {9, 9} },
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { 0x6e, 0, {',', ','} },
+ { VK_TAB, 0, {9, 9} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_5, NOCAPS, {0x5c, 0x2f, 0x1c} },
- { VK_OEM_102, NOCAPS, {0x5c, 0x2f, 0x1c} },
- { VK_BACK, NOCAPS, {0x8, 0x8, 0x7f} },
- { VK_ESCAPE, NOCAPS, {0x1b, 0x1b, 0x1b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n'} },
- { VK_SPACE, NOCAPS, {' ', ' ', ' '} },
- { VK_CANCEL, NOCAPS, {0x03, 0x03, 0x03} },
+ { VK_OEM_5, 0, {0x5c, 0x2f, 0x1c} },
+ { VK_OEM_102, 0, {0x5c, 0x2f, 0x1c} },
+ { VK_BACK, 0, {0x8, 0x8, 0x7f} },
+ { VK_ESCAPE, 0, {0x1b, 0x1b, 0x1b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n'} },
+ { VK_SPACE, 0, {' ', ' ', ' '} },
+ { VK_CANCEL, 0, {0x03, 0x03, 0x03} },
{ 0,0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl, Ctrl-Alt */
/* Legacy Ascii generators */
- { '2', NOCAPS, {'2', '\"', WCH_NONE, 0} },
- { '6', NOCAPS, {'6', ':', WCH_NONE, 0x001e} },
- { 'U', CAPS, {0x433, 0x413, 0x0491, 0x0490} },
- { VK_OEM_MINUS, NOCAPS, {0x2d, '_', WCH_NONE, 0x001f} }, // different '-'
+ { '2', 0, {'2', '\"', WCH_NONE, 0} },
+ { '6', 0, {'6', ':', WCH_NONE, 0x001e} },
+ { 'U', CAPLOK, {0x433, 0x413, 0x0491, 0x0490} },
+ { VK_OEM_MINUS, 0, {0x2d, '_', WCH_NONE, 0x001f} }, // different '-'
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- Ukrainian doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
/* Modifier bit order: NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, CTRL + MENU */
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_DECIMAL, NOCAPS, {',' ,',' } },
- { VK_TAB, NOCAPS, {'\t' ,'\t'} },
- { VK_ADD, NOCAPS, {'+' ,'+' } },
- { VK_DIVIDE, NOCAPS, {'/' ,'/' } },
- { VK_MULTIPLY, NOCAPS, {'*' ,'*' } },
- { VK_SUBTRACT, NOCAPS, {'-' ,'-' } },
+ { VK_DECIMAL, 0, {',' ,',' } },
+ { VK_TAB, 0, {'\t' ,'\t'} },
+ { VK_ADD, 0, {'+' ,'+' } },
+ { VK_DIVIDE, 0, {'/' ,'/' } },
+ { VK_MULTIPLY, 0, {'*' ,'*' } },
+ { VK_SUBTRACT, 0, {'-' ,'-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_3, CAPS, {0x0451, 0x0401, '`', '~'} },
- { '1', NOCAPS, {'1', 0x2116, '!', '!'} },
- { '2', NOCAPS, {'2', '!', '@', '@'} },
- { '3', NOCAPS, {'3', '$', '#', '#'} },
- { '4', NOCAPS, {'4', '\"', '$', '$'} },
- { '5', NOCAPS, {'5', '%', '%', '%'} },
- { '7', NOCAPS, {'7', 0x00ad, '&', '&'} },
- { '8', NOCAPS, {'8', '*', '*', '*'} },
- { '9', NOCAPS, {'9', '(', '(', '('} },
- { '0', NOCAPS, {'0', ')', ')', ')'} },
- { VK_OEM_PLUS, NOCAPS, {0x0439, 0x0419, '=', '+'} },
- { 'Q', CAPS, {0x0449, 0x0429, 'q', 'Q'} },
- { 'W', CAPS, {0x0448, 0x0428, 'w', 'W'} },
- { 'E', CAPS, {0x0435, 0x0415, 'e', 'E'} },
- { 'R', CAPS, {0x0440, 0x0420, 'r', 'R'} },
- { 'T', CAPS, {0x0442, 0x0422, 't', 'T'} },
- { 'Y', CAPS, {0x0443, 0x0423, 'y', 'Y'} },
- { 'U', CAPS, {0x0438, 0x0418, 'u', 'U'} },
- { 'I', CAPS, {0x0456, 0x0406, 'i', 'I'} },
- { 'O', CAPS, {0x043e, 0x041e, 'o', 'O'} },
- { 'P', CAPS, {0x043f, 0x041f, 'p', 'P'} },
- { VK_OEM_4, CAPS, {0x044f, 0x042f, '[', '{'} },
- { 'A', CAPS, {0x0430, 0x0410, 'a', 'A'} },
- { 'S', CAPS, {0x0446, 0x0426, 's', 'S'} },
- { 'D', CAPS, {0x0434, 0x0414, 'd', 'D'} },
- { 'F', CAPS, {0x0444, 0x0424, 'f', 'F'} },
- { 'G', CAPS, {0x0491, 0x0490, 'g', 'G'} },
- { 'H', CAPS, {0x0433, 0x0413, 'h', 'H'} },
- { 'J', CAPS, {0x0436, 0x0416, 'j', 'J'} },
- { 'K', CAPS, {0x043a, 0x041a, 'k', 'K'} },
- { 'L', CAPS, {0x043b, 0x041b, 'l', 'L'} },
- { VK_OEM_7, CAPS, {'\'', WCH_NONE,'\'','\"'}},
- { 'Z', CAPS, {0x0437, 0x0417, 'z', 'Z'} },
- { 'X', CAPS, {0x0445, 0x0425, 'x', 'X'} },
- { 'C', CAPS, {0x0441, 0x0421, 'c', 'C'} },
- { 'V', CAPS, {0x0412, 0x0412, 'v', 'V'} },
- { 'B', CAPS, {0x0431, 0x0411, 'b', 'B'} },
- { 'N', CAPS, {0x043d, 0x041d, 'n', 'N'} },
- { 'M', CAPS, {0x043c, 0x041c, 'm', 'M'} },
- { VK_OEM_COMMA, CAPS, {0x0447, 0x0427, ',', '<'} },
- { VK_OEM_PERIOD, CAPS, {0x044c, 0x042c, '.', '>'} },
- { VK_OEM_2, NOCAPS, {0x044d, 0x042d, '/', '?'} },
+ { VK_OEM_3, CAPLOK, {0x0451, 0x0401, '`', '~'} },
+ { '1', 0, {'1', 0x2116, '!', '!'} },
+ { '2', 0, {'2', '!', '@', '@'} },
+ { '3', 0, {'3', '$', '#', '#'} },
+ { '4', 0, {'4', '\"', '$', '$'} },
+ { '5', 0, {'5', '%', '%', '%'} },
+ { '7', 0, {'7', 0x00ad, '&', '&'} },
+ { '8', 0, {'8', '*', '*', '*'} },
+ { '9', 0, {'9', '(', '(', '('} },
+ { '0', 0, {'0', ')', ')', ')'} },
+ { VK_OEM_PLUS, 0, {0x0439, 0x0419, '=', '+'} },
+ { 'Q', CAPLOK, {0x0449, 0x0429, 'q', 'Q'} },
+ { 'W', CAPLOK, {0x0448, 0x0428, 'w', 'W'} },
+ { 'E', CAPLOK, {0x0435, 0x0415, 'e', 'E'} },
+ { 'R', CAPLOK, {0x0440, 0x0420, 'r', 'R'} },
+ { 'T', CAPLOK, {0x0442, 0x0422, 't', 'T'} },
+ { 'Y', CAPLOK, {0x0443, 0x0423, 'y', 'Y'} },
+ { 'U', CAPLOK, {0x0438, 0x0418, 'u', 'U'} },
+ { 'I', CAPLOK, {0x0456, 0x0406, 'i', 'I'} },
+ { 'O', CAPLOK, {0x043e, 0x041e, 'o', 'O'} },
+ { 'P', CAPLOK, {0x043f, 0x041f, 'p', 'P'} },
+ { VK_OEM_4, CAPLOK, {0x044f, 0x042f, '[', '{'} },
+ { 'A', CAPLOK, {0x0430, 0x0410, 'a', 'A'} },
+ { 'S', CAPLOK, {0x0446, 0x0426, 's', 'S'} },
+ { 'D', CAPLOK, {0x0434, 0x0414, 'd', 'D'} },
+ { 'F', CAPLOK, {0x0444, 0x0424, 'f', 'F'} },
+ { 'G', CAPLOK, {0x0491, 0x0490, 'g', 'G'} },
+ { 'H', CAPLOK, {0x0433, 0x0413, 'h', 'H'} },
+ { 'J', CAPLOK, {0x0436, 0x0416, 'j', 'J'} },
+ { 'K', CAPLOK, {0x043a, 0x041a, 'k', 'K'} },
+ { 'L', CAPLOK, {0x043b, 0x041b, 'l', 'L'} },
+ { VK_OEM_7, CAPLOK, {'\'', WCH_NONE,'\'','\"'}},
+ { 'Z', CAPLOK, {0x0437, 0x0417, 'z', 'Z'} },
+ { 'X', CAPLOK, {0x0445, 0x0425, 'x', 'X'} },
+ { 'C', CAPLOK, {0x0441, 0x0421, 'c', 'C'} },
+ { 'V', CAPLOK, {0x0412, 0x0412, 'v', 'V'} },
+ { 'B', CAPLOK, {0x0431, 0x0411, 'b', 'B'} },
+ { 'N', CAPLOK, {0x043d, 0x041d, 'n', 'N'} },
+ { 'M', CAPLOK, {0x043c, 0x041c, 'm', 'M'} },
+ { VK_OEM_COMMA, CAPLOK, {0x0447, 0x0427, ',', '<'} },
+ { VK_OEM_PERIOD, CAPLOK, {0x044c, 0x042c, '.', '>'} },
+ { VK_OEM_2, 0, {0x044d, 0x042d, '/', '?'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_MINUS, NOCAPS, {0x0457, 0x0407, '-', '_', 0x001f} },
- { VK_OEM_6, CAPS, {0x044e, 0x042e, ']', '}', 0x001b} },
- { VK_OEM_5, NOCAPS, {'-', '=', '\\', '|', 0x001c} },
- { VK_OEM_1, CAPS, {';', ':', ';', ':', 0x001d} },
- { VK_OEM_102, CAPS, {0x0454, 0x0404, '\\', '|', 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
+ { VK_OEM_MINUS, 0, {0x0457, 0x0407, '-', '_', 0x001f} },
+ { VK_OEM_6, CAPLOK, {0x044e, 0x042e, ']', '}', 0x001b} },
+ { VK_OEM_5, 0, {'-', '=', '\\', '|', 0x001c} },
+ { VK_OEM_1, CAPLOK, {';', ':', ';', ':', 0x001d} },
+ { VK_OEM_102, CAPLOK, {0x0454, 0x0404, '\\', '|', 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { '6', NOCAPS, {'6', '\'', '^', '^', WCH_NONE, 0x001e} },
+ { '6', 0, {'6', '\'', '^', '^', WCH_NONE, 0x001e} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
+
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
ROSDATA VSC_VK extcode1_to_vk[] = {
+ { 0x1d, VK_PAUSE },
{ 0, 0 },
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
ROSDATA MODIFIERS modifier_bits = {
modifier_keys,
3,
- { 0, 1, 2, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT */
+ {
+ 0, // NONE
+ 1, // SHIFT
+ 2, // CTRL
+ 3, // SHIFT+CTRL
+ }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
/* Normal vs Shifted */
+ /* The alphabet */
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'E', CAPLOK, {'e', 'E'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
/* The numbers */
- { '1', NOCAPS, {'1', '!'} },
+ { '1', 0, {'1', '!'} },
/* Ctrl-2 generates NUL */
- { '3', NOCAPS, {'3', '#'} },
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
+ { '3', 0, {'3', '#'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
/* Ctrl-6 generates RS */
- { '7', NOCAPS, {'7', '&'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
+ { '7', 0, {'7', '&'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
/* Specials */
/* Ctrl-_ generates US */
- { VK_OEM_PLUS ,NOCAPS, {'=', '+'} },
- { VK_OEM_1 ,NOCAPS, {';', ':'} },
- { VK_OEM_7 ,NOCAPS, {'\'','\"'} },
- { VK_OEM_3 ,NOCAPS, {'`', '~'} },
- { VK_OEM_COMMA ,NOCAPS, {',', '<'} },
- { VK_OEM_PERIOD ,NOCAPS, {'.', '>'} },
- { VK_OEM_2 ,NOCAPS, {'/', '?'} },
+ { VK_OEM_PLUS, 0, {'=', '+'} },
+ { VK_OEM_1, 0, {';', ':'} },
+ { VK_OEM_7, 0, {'\'','\"'} },
+ { VK_OEM_3, 0, {'`', '~'} },
+ { VK_OEM_COMMA, 0, {',', '<'} },
+ { VK_OEM_PERIOD, 0, {'.', '>'} },
+ { VK_OEM_2, 0, {'/', '?'} },
/* Keys that do not have shift states */
- { VK_TAB ,NOCAPS, {'\t','\t'} },
- { VK_ADD ,NOCAPS, {'+', '+'} },
- { VK_SUBTRACT,NOCAPS, {'-', '-'} },
- { VK_MULTIPLY,NOCAPS, {'*', '*'} },
- { VK_DIVIDE ,NOCAPS, {'/', '/'} },
- { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} },
- { VK_SPACE ,NOCAPS, {' ', ' '} },
+ { VK_TAB, 0, {'\t','\t'} },
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
+ { VK_DECIMAL, 0, {'.', '.'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_4, 0, {'[', '{', 0x1b /* ESC */} },
- { VK_OEM_6, 0, {']', '}', 0x1d /* GS */} },
- { VK_OEM_5, 0, {'\\','|', 0x1c /* FS */} },
- { VK_OEM_102,0,{'\\','|', 0x1c /* FS */} },
- { VK_RETURN,0, {'\r', '\r', '\n'} },
- { 0,0 }
+ { VK_OEM_4, 0, {'[', '{', 0x1b /* ESC */} },
+ { VK_OEM_6, 0, {']', '}', 0x1d /* GS */} },
+ { VK_OEM_5, 0, {'\\','|', 0x1c /* FS */} },
+ { VK_OEM_102, 0, {'\\','|', 0x1c /* FS */} },
+ { VK_BACK, 0, {0x8, 0x8, 0x7F } },
+ { VK_ESCAPE, 0, {0x1b,0x1b,0x1b } },
+ { VK_RETURN, 0, {'\r','\r','\n'} },
+ { VK_SPACE, 0, {' ', ' ', ' '} },
+ { VK_CANCEL, 0, {0x3, 0x3, 0x3} },
+ { 0, 0 }
};
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 */} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x1f /* US */} },
+ { '2', 0, {'2', '@', WCH_NONE, 0} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x1e /* RS */} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x1f /* US */} },
{ 0, 0 }
};
{ VK_NUMPAD7, 0, {'7'} },
{ VK_NUMPAD8, 0, {'8'} },
{ VK_NUMPAD9, 0, {'9'} },
- { VK_DECIMAL, 0, {'.'} },
- { VK_BACK, 0, {'\010'} },
- { 0,0 }
+ { 0, 0 }
};
-#define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
+#define vk_master(n, x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
- vk_master(1,keypad_numbers),
- vk_master(2,key_to_chars_2mod),
- vk_master(3,key_to_chars_3mod),
- vk_master(4,key_to_chars_4mod),
- { 0,0,0 }
+ vk_master(1, keypad_numbers),
+ vk_master(2, key_to_chars_2mod),
+ vk_master(3, key_to_chars_3mod),
+ vk_master(4, key_to_chars_4mod),
+ { 0, 0, 0 }
};
ROSDATA VSC_LPWSTR key_names[] = {
- { 0x00, L"" },
{ 0x01, L"Esc" },
{ 0x0e, L"Backspace" },
{ 0x0f, L"Tab" },
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
{ 0x52, L"Num 0" },
{ 0x53, L"Num Del" },
{ 0x54, L"Sys Req" },
+ { 0x56, L"\\" },
{ 0x57, L"F11" },
{ 0x58, L"F12" },
{ 0x7c, L"F13" },
{ 0x47, L"Home" },
{ 0x48, L"Up" },
{ 0x49, L"Page Up" },
- { 0x4a, L"Left" },
- { 0x4c, L"Center" },
+ { 0x4a, L"-" },
+ { 0x4b, L"Left" },
{ 0x4d, L"Right" },
{ 0x4f, L"End" },
{ 0x50, L"Down" },
{ 0x51, L"Page Down" },
{ 0x52, L"Insert" },
{ 0x53, L"Delete" },
- { 0x54, L"<ReactOS>" },
- { 0x55, L"Help" },
- { 0x56, L"Left Windows" },
- { 0x5b, L"Right Windows" },
+ { 0x54, L"<00>" },
+ { 0x56, L"Help" },
+ { 0x5b, L"Left Windows" },
+ { 0x5c, L"Right Windows" },
+ { 0x5d, L"Application" },
{ 0, NULL },
};
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- English doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {'<', '>'} },
- { '1', NOCAPS, {'1', '!'} },
- { '3', NOCAPS, {'3', '#'} },
- { '4', NOCAPS, {'4', '$'} },
- { '5', NOCAPS, {'5', '%'} },
- { '7', NOCAPS, {'7', '&'} },
- { '8', NOCAPS, {'8', '*'} },
- { '9', NOCAPS, {'9', '('} },
- { '0', NOCAPS, {'0', ')'} },
- { VK_OEM_PLUS, NOCAPS, {'=', '+'} },
- { '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'} },
- { '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_1, NOCAPS, {';', ':'} },
- { VK_OEM_7, NOCAPS, {'\'','\"'}},
- { '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, {'/', '?'} },
- { VK_DECIMAL, NOCAPS, {'.', '.'} },
- { VK_TAB, NOCAPS, {'\t','\t'}},
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_3, 0, {'<', '>'} },
+ { '1', 0, {'1', '!'} },
+ { '3', 0, {'3', '#'} },
+ { '4', 0, {'4', '$'} },
+ { '5', 0, {'5', '%'} },
+ { '7', 0, {'7', '&'} },
+ { '8', 0, {'8', '*'} },
+ { '9', 0, {'9', '('} },
+ { '0', 0, {'0', ')'} },
+ { VK_OEM_PLUS, 0, {'=', '+'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'E', CAPLOK, {'e', 'E'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { VK_OEM_1, 0, {';', ':'} },
+ { VK_OEM_7, 0, {'\'','\"'}},
+ { 'Z', CAPLOK, {'z', 'Z'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { VK_OEM_COMMA, 0, {',', ','} },
+ { VK_OEM_PERIOD,0, {'.', '.'} },
+ { VK_OEM_2, 0, {'/', '?'} },
+ { VK_DECIMAL, 0, {'.', '.'} },
+ { VK_TAB, 0, {'\t','\t'}},
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
/* Normal, Shifted, Ctrl */
/* Legacy (telnet-style) ascii escapes */
- { VK_OEM_4, NOCAPS, {'[', '{', 0x001b} },
- { VK_OEM_6, NOCAPS, {']', '}', 0x001d} },
- { VK_OEM_5, NOCAPS, {'`', '~', 0x001c} },
- { VK_OEM_102, NOCAPS, {'\\', '|', 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_OEM_4, 0, {'[', '{', 0x001b} },
+ { VK_OEM_6, 0, {']', '}', 0x001d} },
+ { VK_OEM_5, 0, {'`', '~', 0x001c} },
+ { VK_OEM_102, 0, {'\\', '|', 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
/* Normal, Shifted, Ctrl-Alt, Ctrl */
/* Legacy Ascii generators */
- { '2', NOCAPS, {'2', '@', WCH_NONE, 0x0000} },
- { '6', NOCAPS, {'6', '^', WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x001f} },
+ { '2', 0, {'2', '@', WCH_NONE, 0x0000} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {'`', '~'} },
- { VK_OEM_2, NOCAPS, {'/', '?'} },
- { 'P', CAPS, {'p', 'P'} },
- { 'F', CAPS, {'f', 'F'} },
- { 'M', CAPS, {'m', 'M'} },
- { 'L', CAPS, {'l', 'L'} },
- { 'J', CAPS, {'j', 'J'} },
- { '4', NOCAPS, {'4', '$'} },
- { '3', NOCAPS, {'3', '#'} },
- { '1', NOCAPS, {'1', '!'} },
- { VK_OEM_1, NOCAPS, {';', ':'} },
- { 'Q', CAPS, {'q', 'Q'} },
- { 'B', CAPS, {'b', 'B'} },
- { 'Y', CAPS, {'y', 'Y'} },
- { 'U', CAPS, {'u', 'U'} },
- { 'R', CAPS, {'r', 'R'} },
- { 'S', CAPS, {'s', 'S'} },
- { 'O', CAPS, {'o', 'O'} },
- { VK_OEM_PERIOD, NOCAPS, {'.', '>'} },
- { '5', NOCAPS, {'5', '%'} },
- { VK_OEM_PLUS, NOCAPS, {'=', '+'} },
- { 'K', CAPS, {'k', 'K'} },
- { 'C', CAPS, {'c', 'C'} },
- { 'D', CAPS, {'d', 'D'} },
- { 'T', CAPS, {'t', 'T'} },
- { 'H', CAPS, {'h', 'H'} },
- { 'E', CAPS, {'e', 'E'} },
- { 'A', CAPS, {'a', 'A'} },
- { 'Z', CAPS, {'z', 'Z'} },
- { '8', NOCAPS, {'8', '*'} },
- { '7', NOCAPS, {'7', '&'} },
- { VK_OEM_7, NOCAPS, {'\'','\"'}},
- { 'X', CAPS, {'x', 'X'} },
- { 'G', CAPS, {'g', 'G'} },
- { 'V', CAPS, {'v', 'V'} },
- { 'W', CAPS, {'w', 'W'} },
- { 'N', CAPS, {'n', 'N'} },
- { 'I', CAPS, {'i', 'I'} },
- { VK_OEM_COMMA, NOCAPS, {',', '<'} },
- { '0', NOCAPS, {'0', ')'} },
- { '9', NOCAPS, {'9', '('} },
- { VK_DECIMAL, NOCAPS, {'.', '.'} },
- { VK_TAB, NOCAPS, {'\t','\t'}},
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_3, 0, {'`', '~'} },
+ { VK_OEM_2, 0, {'/', '?'} },
+ { 'P', CAPLOK, {'p', 'P'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'M', CAPLOK, {'m', 'M'} },
+ { 'L', CAPLOK, {'l', 'L'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { '4', 0, {'4', '$'} },
+ { '3', 0, {'3', '#'} },
+ { '1', 0, {'1', '!'} },
+ { VK_OEM_1, 0, {';', ':'} },
+ { 'Q', CAPLOK, {'q', 'Q'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { 'Y', CAPLOK, {'y', 'Y'} },
+ { 'U', CAPLOK, {'u', 'U'} },
+ { 'R', CAPLOK, {'r', 'R'} },
+ { 'S', CAPLOK, {'s', 'S'} },
+ { 'O', CAPLOK, {'o', 'O'} },
+ { VK_OEM_PERIOD, 0, {'.', '>'} },
+ { '5', 0, {'5', '%'} },
+ { VK_OEM_PLUS, 0, {'=', '+'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'C', CAPLOK, {'c', 'C'} },
+ { 'D', CAPLOK, {'d', 'D'} },
+ { 'T', CAPLOK, {'t', 'T'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'E', CAPLOK, {'e', 'E'} },
+ { 'A', CAPLOK, {'a', 'A'} },
+ { 'Z', CAPLOK, {'z', 'Z'} },
+ { '8', 0, {'8', '*'} },
+ { '7', 0, {'7', '&'} },
+ { VK_OEM_7, 0, {'\'','\"'}},
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'W', CAPLOK, {'w', 'W'} },
+ { 'N', CAPLOK, {'n', 'N'} },
+ { 'I', CAPLOK, {'i', 'I'} },
+ { VK_OEM_COMMA, 0, {',', '<'} },
+ { '0', 0, {'0', ')'} },
+ { '9', 0, {'9', '('} },
+ { VK_DECIMAL, 0, {'.', '.'} },
+ { VK_TAB, 0, {'\t','\t'}},
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_4, NOCAPS, {'[', '{', 0x001b} },
- { VK_OEM_6, NOCAPS, {']', '}', 0x001d} },
- { VK_OEM_5, NOCAPS, {'\\', '|', 0x001c} },
- { VK_OEM_102, NOCAPS, {'\\', '|', 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_OEM_4, 0, {'[', '{', 0x001b} },
+ { VK_OEM_6, 0, {']', '}', 0x001d} },
+ { VK_OEM_5, 0, {'\\', '|', 0x001c} },
+ { VK_OEM_102, 0, {'\\', '|', 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '2', NOCAPS, {'2', '@', WCH_NONE, 0x0000} },
- { '6', NOCAPS, {'6', '^', WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x001f} },
+ { '2', 0, {'2', '@', WCH_NONE, 0x0000} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- English doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {'`' ,'~'} },
- { '1', NOCAPS, {'1' ,'!'} },
- { '3', NOCAPS, {'3' ,'#'} },
- { '4', NOCAPS, {'4' ,'$'} },
- { 'J', CAPS, {'j' ,'J'} },
- { 'L', CAPS, {'l' ,'L'} },
- { 'M', CAPS, {'m' ,'M'} },
- { 'F', CAPS, {'f' ,'F'} },
- { 'P', CAPS, {'p' ,'P'} },
- { VK_OEM_2, NOCAPS, {'/' ,'?'} },
- { '5', NOCAPS, {'5' ,'%'} },
- { 'Q', CAPS, {'q' ,'Q'} },
- { VK_OEM_PERIOD, NOCAPS, {'.' ,'>'} },
- { 'O', CAPS, {'o' ,'O'} },
- { 'R', CAPS, {'r' ,'R'} },
- { 'S', CAPS, {'s' ,'S'} },
- { 'U', CAPS, {'u' ,'U'} },
- { 'Y', CAPS, {'y' ,'Y'} },
- { 'B', CAPS, {'b' ,'B'} },
- { VK_OEM_1, NOCAPS, {';' ,':'} },
- { VK_OEM_PLUS, NOCAPS, {'=' ,'+'} },
- { '7', NOCAPS, {'7' ,'&'} },
- { '8', NOCAPS, {'8' ,'*'} },
- { 'Z', CAPS, {'z' ,'Z'} },
- { 'A', CAPS, {'a' ,'A'} },
- { 'E', CAPS, {'e' ,'E'} },
- { 'H', CAPS, {'h' ,'H'} },
- { 'T', CAPS, {'t' ,'T'} },
- { 'D', CAPS, {'d' ,'D'} },
- { 'C', CAPS, {'c' ,'C'} },
- { 'K', CAPS, {'k' ,'K'} },
- { '9', NOCAPS, {'9' ,'('} },
- { '0', NOCAPS, {'0' ,')'} },
- { 'X', CAPS, {'x' ,'X'} },
- { VK_OEM_COMMA, NOCAPS, {',' ,'<'} },
- { 'I', CAPS, {'i' ,'I'} },
- { 'N', CAPS, {'n' ,'N'} },
- { 'W', CAPS, {'w' ,'W'} },
- { 'V', CAPS, {'v' ,'V'} },
- { 'G', CAPS, {'g' ,'G'} },
- { VK_OEM_7, NOCAPS, {'\'','\"'}},
- { VK_DECIMAL, NOCAPS, {'.' ,'.'} },
- { VK_TAB, NOCAPS, {'\t','\t'}},
- { VK_ADD, NOCAPS, {'+' ,'+'} },
- { VK_DIVIDE, NOCAPS, {'/' ,'/'} },
- { VK_MULTIPLY, NOCAPS, {'*' ,'*'} },
- { VK_SUBTRACT, NOCAPS, {'-' ,'-'} },
+ { VK_OEM_3, 0, {'`' ,'~'} },
+ { '1', 0, {'1' ,'!'} },
+ { '3', 0, {'3' ,'#'} },
+ { '4', 0, {'4' ,'$'} },
+ { 'J', CAPLOK, {'j' ,'J'} },
+ { 'L', CAPLOK, {'l' ,'L'} },
+ { 'M', CAPLOK, {'m' ,'M'} },
+ { 'F', CAPLOK, {'f' ,'F'} },
+ { 'P', CAPLOK, {'p' ,'P'} },
+ { VK_OEM_2, 0, {'/' ,'?'} },
+ { '5', 0, {'5' ,'%'} },
+ { 'Q', CAPLOK, {'q' ,'Q'} },
+ { VK_OEM_PERIOD, 0, {'.' ,'>'} },
+ { 'O', CAPLOK, {'o' ,'O'} },
+ { 'R', CAPLOK, {'r' ,'R'} },
+ { 'S', CAPLOK, {'s' ,'S'} },
+ { 'U', CAPLOK, {'u' ,'U'} },
+ { 'Y', CAPLOK, {'y' ,'Y'} },
+ { 'B', CAPLOK, {'b' ,'B'} },
+ { VK_OEM_1, 0, {';' ,':'} },
+ { VK_OEM_PLUS, 0, {'=' ,'+'} },
+ { '7', 0, {'7' ,'&'} },
+ { '8', 0, {'8' ,'*'} },
+ { 'Z', CAPLOK, {'z' ,'Z'} },
+ { 'A', CAPLOK, {'a' ,'A'} },
+ { 'E', CAPLOK, {'e' ,'E'} },
+ { 'H', CAPLOK, {'h' ,'H'} },
+ { 'T', CAPLOK, {'t' ,'T'} },
+ { 'D', CAPLOK, {'d' ,'D'} },
+ { 'C', CAPLOK, {'c' ,'C'} },
+ { 'K', CAPLOK, {'k' ,'K'} },
+ { '9', 0, {'9' ,'('} },
+ { '0', 0, {'0' ,')'} },
+ { 'X', CAPLOK, {'x' ,'X'} },
+ { VK_OEM_COMMA, 0, {',' ,'<'} },
+ { 'I', CAPLOK, {'i' ,'I'} },
+ { 'N', CAPLOK, {'n' ,'N'} },
+ { 'W', CAPLOK, {'w' ,'W'} },
+ { 'V', CAPLOK, {'v' ,'V'} },
+ { 'G', CAPLOK, {'g' ,'G'} },
+ { VK_OEM_7, 0, {'\'','\"'}},
+ { VK_DECIMAL, 0, {'.' ,'.'} },
+ { VK_TAB, 0, {'\t','\t'}},
+ { VK_ADD, 0, {'+' ,'+'} },
+ { VK_DIVIDE, 0, {'/' ,'/'} },
+ { VK_MULTIPLY, 0, {'*' ,'*'} },
+ { VK_SUBTRACT, 0, {'-' ,'-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_4, NOCAPS, {'[', '{', 0x001b} },
- { VK_OEM_6, NOCAPS, {']', '}', 0x001d} },
- { VK_OEM_5, NOCAPS, {'\\', '|', 0x001c} },
- { VK_OEM_102, NOCAPS, {'\\', '|', 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_OEM_4, 0, {'[', '{', 0x001b} },
+ { VK_OEM_6, 0, {']', '}', 0x001d} },
+ { VK_OEM_5, 0, {'\\', '|', 0x001c} },
+ { VK_OEM_102, 0, {'\\', '|', 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '2', NOCAPS, {'2', '@', WCH_NONE, 0x0000} },
- { '6', NOCAPS, {'6', '^', WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', WCH_NONE, 0x001f} },
+ { '2', 0, {'2', '@', WCH_NONE, 0x0000} },
+ { '6', 0, {'6', '^', WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures -- English doesn't have any */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 4, 5, SHFT_INVALID, SHFT_INVALID, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {WCH_DEAD, WCH_DEAD} },
- { 0xff, NOCAPS, {'`', '~'} },
- { 'F', CAPS, {'f', 'F'} },
- { 'G', CAPS, {'g', 'G'} },
- { 'H', CAPS, {'h', 'H'} },
- { 'J', CAPS, {'j', 'J'} },
- { 'K', CAPS, {'k', 'K'} },
- { 'X', CAPS, {'x', 'X'} },
- { 'V', CAPS, {'v', 'V'} },
- { 'B', CAPS, {'b', 'B'} },
- { VK_OEM_PERIOD,NOCAPS, {'.', '>'} },
- { VK_DECIMAL, NOCAPS, {'.', '.'} },
- { VK_TAB, NOCAPS, {'\t','\t'}},
- { VK_ADD, NOCAPS, {'+', '+'} },
- { VK_DIVIDE, NOCAPS, {'/', '/'} },
- { VK_MULTIPLY, NOCAPS, {'*', '*'} },
- { VK_SUBTRACT, NOCAPS, {'-', '-'} },
+ { VK_OEM_3, 0, {WCH_DEAD, WCH_DEAD} },
+ { 0xff, 0, {'`', '~'} },
+ { 'F', CAPLOK, {'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H'} },
+ { 'J', CAPLOK, {'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K'} },
+ { 'X', CAPLOK, {'x', 'X'} },
+ { 'V', CAPLOK, {'v', 'V'} },
+ { 'B', CAPLOK, {'b', 'B'} },
+ { VK_OEM_PERIOD,0, {'.', '>'} },
+ { VK_DECIMAL, 0, {'.', '.'} },
+ { VK_TAB, 0, {'\t','\t'}},
+ { VK_ADD, 0, {'+', '+'} },
+ { VK_DIVIDE, 0, {'/', '/'} },
+ { VK_MULTIPLY, 0, {'*', '*'} },
+ { VK_SUBTRACT, 0, {'-', '-'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { '3', NOCAPS, {'3', '#', 0x00b3} },
- { '5', NOCAPS, {'5', '%', 0x20ac} },
- { '7', NOCAPS, {'7', '&', 0x00bd} },
- { '8', NOCAPS, {'8', '*', 0x00be} },
- { '9', NOCAPS, {'9', '(', 0x2018} },
- { '0', NOCAPS, {'0', ')', 0x2019} },
- { 'R', CAPS, {'r', 'R', 0x00ae} },
- { 'M', CAPS, {'m', 'M', 0x00b5} },
- { VK_OEM_2, NOCAPS, {'/', '?', 0x00bf} },
+ { '3', 0, {'3', '#', 0x00b3} },
+ { '5', 0, {'5', '%', 0x20ac} },
+ { '7', 0, {'7', '&', 0x00bd} },
+ { '8', 0, {'8', '*', 0x00be} },
+ { '9', 0, {'9', '(', 0x2018} },
+ { '0', 0, {'0', ')', 0x2019} },
+ { 'R', CAPLOK, {'r', 'R', 0x00ae} },
+ { 'M', CAPLOK, {'m', 'M', 0x00b5} },
+ { VK_OEM_2, 0, {'/', '?', 0x00bf} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '1', NOCAPS, {'1', '!', 0x00a1, 0x00b9 } },
- { '4', NOCAPS, {'4', '$', 0x00a4, 0x00a3 } },
- { VK_OEM_PLUS, NOCAPS, {'=', '+', 0x00d7, 0x00f7 } },
- { 'Q', CAPS|CAPLOKALTGR, {'q', 'Q', 0x00e4, 0x00c4 } },
- { 'W', CAPS|CAPLOKALTGR, {'w', 'W', 0x00e5, 0x00c5 } },
- { 'E', CAPS|CAPLOKALTGR, {'e', 'E', 0x00e9, 0x00c9 } },
- { 'T', CAPS|CAPLOKALTGR, {'t', 'T', 0x00fe, 0x00de } },
- { 'Y', CAPS|CAPLOKALTGR, {'y', 'Y', 0x00fc, 0x00dc } },
- { 'U', CAPS|CAPLOKALTGR, {'u', 'U', 0x00fa, 0x00da } },
- { 'I', CAPS|CAPLOKALTGR, {'i', 'I', 0x00ed, 0x00cd } },
- { 'O', CAPS|CAPLOKALTGR, {'o', 'O', 0x00f3, 0x00d3 } },
- { 'P', CAPS|CAPLOKALTGR, {'p', 'P', 0x00f6, 0x00d6 } },
- { 'A', CAPS|CAPLOKALTGR, {'a', 'A', 0x00e1, 0x00c1 } },
- { 'S', CAPS, {'s', 'S', 0x00df, 0x00a7 } },
- { 'D', CAPS|CAPLOKALTGR, {'d', 'D', 0x00f0, 0x00d0 } },
- { 'L', CAPS|CAPLOKALTGR, {'l', 'L', 0x00f8, 0x00d8 } },
- { VK_OEM_1, NOCAPS, {';', ':', 0x00b6, 0x00b0 } },
- { VK_OEM_7, NOCAPS, {WCH_DEAD, WCH_DEAD, 0x00b4, 0x00a8 } },
- { 0xff, NOCAPS, {'\'', '\"', WCH_NONE, WCH_NONE} },
- { 'Z', CAPS|CAPLOKALTGR, {'z', 'Z', 0x00e6, 0x00c6 } },
- { 'C', CAPS, {'c', 'C', 0x00a9, 0x00a2 } },
- { 'N', CAPS|CAPLOKALTGR, {'n', 'N', 0x00f1, 0x00d1 } },
+ { '1', 0, {'1', '!', 0x00a1, 0x00b9 } },
+ { '4', 0, {'4', '$', 0x00a4, 0x00a3 } },
+ { VK_OEM_PLUS, 0, {'=', '+', 0x00d7, 0x00f7 } },
+ { 'Q', CAPLOK|CAPLOKALTGR, {'q', 'Q', 0x00e4, 0x00c4 } },
+ { 'W', CAPLOK|CAPLOKALTGR, {'w', 'W', 0x00e5, 0x00c5 } },
+ { 'E', CAPLOK|CAPLOKALTGR, {'e', 'E', 0x00e9, 0x00c9 } },
+ { 'T', CAPLOK|CAPLOKALTGR, {'t', 'T', 0x00fe, 0x00de } },
+ { 'Y', CAPLOK|CAPLOKALTGR, {'y', 'Y', 0x00fc, 0x00dc } },
+ { 'U', CAPLOK|CAPLOKALTGR, {'u', 'U', 0x00fa, 0x00da } },
+ { 'I', CAPLOK|CAPLOKALTGR, {'i', 'I', 0x00ed, 0x00cd } },
+ { 'O', CAPLOK|CAPLOKALTGR, {'o', 'O', 0x00f3, 0x00d3 } },
+ { 'P', CAPLOK|CAPLOKALTGR, {'p', 'P', 0x00f6, 0x00d6 } },
+ { 'A', CAPLOK|CAPLOKALTGR, {'a', 'A', 0x00e1, 0x00c1 } },
+ { 'S', CAPLOK, {'s', 'S', 0x00df, 0x00a7 } },
+ { 'D', CAPLOK|CAPLOKALTGR, {'d', 'D', 0x00f0, 0x00d0 } },
+ { 'L', CAPLOK|CAPLOKALTGR, {'l', 'L', 0x00f8, 0x00d8 } },
+ { VK_OEM_1, 0, {';', ':', 0x00b6, 0x00b0 } },
+ { VK_OEM_7, 0, {WCH_DEAD, WCH_DEAD, 0x00b4, 0x00a8 } },
+ { 0xff, 0, {'\'', '\"', WCH_NONE, WCH_NONE} },
+ { 'Z', CAPLOK|CAPLOKALTGR, {'z', 'Z', 0x00e6, 0x00c6 } },
+ { 'C', CAPLOK, {'c', 'C', 0x00a9, 0x00a2 } },
+ { 'N', CAPLOK|CAPLOKALTGR, {'n', 'N', 0x00f1, 0x00d1 } },
{ VK_OEM_COMMA, CAPLOKALTGR, {',', '<', 0x00e7, 0x00c7 } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_4, NOCAPS, {'[', '{', 0x00ab, WCH_NONE, 0x001b} },
- { VK_OEM_6, NOCAPS, {']', '}', 0x00bb, WCH_NONE, 0x001d} },
- { VK_OEM_5, NOCAPS, {'\\', '|', 0x00ac, 0x00a6, 0x001c} },
- { VK_OEM_102, NOCAPS, {'\\', '|', WCH_NONE, WCH_NONE, 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
+ { VK_OEM_4, 0, {'[', '{', 0x00ab, WCH_NONE, 0x001b} },
+ { VK_OEM_6, 0, {']', '}', 0x00bb, WCH_NONE, 0x001d} },
+ { VK_OEM_5, 0, {'\\', '|', 0x00ac, 0x00a6, 0x001c} },
+ { VK_OEM_102, 0, {'\\', '|', WCH_NONE, WCH_NONE, 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { '2', NOCAPS, {'2', '@', 0x00b2, WCH_NONE, WCH_NONE, 0x0000 } },
- { '6', NOCAPS, {'6', WCH_DEAD, 0x00bc, WCH_NONE, WCH_NONE, 0x001e } },
- { 0xff, NOCAPS, {WCH_NONE, '^', WCH_NONE, WCH_NONE, WCH_NONE, WCH_NONE} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', 0x00a5, WCH_NONE, WCH_NONE, 0x001f } },
+ { '2', 0, {'2', '@', 0x00b2, WCH_NONE, WCH_NONE, 0x0000 } },
+ { '6', 0, {'6', WCH_DEAD, 0x00bc, WCH_NONE, WCH_NONE, 0x001e } },
+ { 0xff, 0, {WCH_NONE, '^', WCH_NONE, WCH_NONE, WCH_NONE, WCH_NONE} },
+ { VK_OEM_MINUS, 0, {'-', '_', 0x00a5, WCH_NONE, WCH_NONE, 0x001f } },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, CAPS, {0x0451, 0x0401} },
- { '1', NOCAPS, {'1', '!' } },
- { '3', NOCAPS, {'3', 0x2116} },
- { '4', NOCAPS, {'4', ';' } },
- { '5', NOCAPS, {'5', '%' } },
- { '7', NOCAPS, {'7', '?' } },
- { '8', NOCAPS, {'8', '*' } },
- { '9', NOCAPS, {'9', '(' } },
- { '0', NOCAPS, {'0', ')' } },
- { VK_OEM_PLUS, CAPS, {0x04b3, 0x04b2} },
- { 'Q', CAPS, {0x0439, 0x0419} },
- { 'W', CAPS, {0x0446, 0x0426} },
- { 'E', CAPS, {0x0443, 0x0423} },
- { 'R', CAPS, {0x043a, 0x041a} },
- { 'T', CAPS, {0x0435, 0x0415} },
- { 'Y', CAPS, {0x043d, 0x041d} },
- { 'U', CAPS, {0x0433, 0x0413} },
- { 'I', CAPS, {0x0448, 0x0428} },
- { 'O', CAPS, {0x045e, 0x040e} },
- { 'P', CAPS, {0x0437, 0x0417} },
- { VK_OEM_4, CAPS, {0x0445, 0x0425} },
- { VK_OEM_6, CAPS, {0x044a, 0x042a} },
- { 'A', CAPS, {0x0444, 0x0424} },
- { 'S', CAPS, {0x049b, 0x049a} },
- { 'D', CAPS, {0x0432, 0x0412} },
- { 'F', CAPS, {0x0430, 0x0410} },
- { 'G', CAPS, {0x043f, 0x041f} },
- { 'H', CAPS, {0x0440, 0x0420} },
- { 'J', CAPS, {0x043e, 0x041e} },
- { 'K', CAPS, {0x043b, 0x041b} },
- { 'L', CAPS, {0x0434, 0x0414} },
- { VK_OEM_1, CAPS, {0x0436, 0x0416} },
- { VK_OEM_7, CAPS, {0x044d, 0x042d} },
- { 'Z', CAPS, {0x044f, 0x042f} },
- { 'X', CAPS, {0x0447, 0x0427} },
- { 'C', CAPS, {0x0441, 0x0421} },
- { 'V', CAPS, {0x043c, 0x041c} },
- { 'B', CAPS, {0x0438, 0x0418} },
- { 'N', CAPS, {0x0442, 0x0422} },
- { 'M', CAPS, {0x044c, 0x042c} },
- { VK_OEM_COMMA, CAPS, {0x0431, 0x0411} },
- { VK_OEM_PERIOD, CAPS, {0x044e, 0x042e} },
- { VK_OEM_2, NOCAPS, {'.', ',' } },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, CAPLOK, {0x0451, 0x0401} },
+ { '1', 0, {'1', '!' } },
+ { '3', 0, {'3', 0x2116} },
+ { '4', 0, {'4', ';' } },
+ { '5', 0, {'5', '%' } },
+ { '7', 0, {'7', '?' } },
+ { '8', 0, {'8', '*' } },
+ { '9', 0, {'9', '(' } },
+ { '0', 0, {'0', ')' } },
+ { VK_OEM_PLUS, CAPLOK, {0x04b3, 0x04b2} },
+ { 'Q', CAPLOK, {0x0439, 0x0419} },
+ { 'W', CAPLOK, {0x0446, 0x0426} },
+ { 'E', CAPLOK, {0x0443, 0x0423} },
+ { 'R', CAPLOK, {0x043a, 0x041a} },
+ { 'T', CAPLOK, {0x0435, 0x0415} },
+ { 'Y', CAPLOK, {0x043d, 0x041d} },
+ { 'U', CAPLOK, {0x0433, 0x0413} },
+ { 'I', CAPLOK, {0x0448, 0x0428} },
+ { 'O', CAPLOK, {0x045e, 0x040e} },
+ { 'P', CAPLOK, {0x0437, 0x0417} },
+ { VK_OEM_4, CAPLOK, {0x0445, 0x0425} },
+ { VK_OEM_6, CAPLOK, {0x044a, 0x042a} },
+ { 'A', CAPLOK, {0x0444, 0x0424} },
+ { 'S', CAPLOK, {0x049b, 0x049a} },
+ { 'D', CAPLOK, {0x0432, 0x0412} },
+ { 'F', CAPLOK, {0x0430, 0x0410} },
+ { 'G', CAPLOK, {0x043f, 0x041f} },
+ { 'H', CAPLOK, {0x0440, 0x0420} },
+ { 'J', CAPLOK, {0x043e, 0x041e} },
+ { 'K', CAPLOK, {0x043b, 0x041b} },
+ { 'L', CAPLOK, {0x0434, 0x0414} },
+ { VK_OEM_1, CAPLOK, {0x0436, 0x0416} },
+ { VK_OEM_7, CAPLOK, {0x044d, 0x042d} },
+ { 'Z', CAPLOK, {0x044f, 0x042f} },
+ { 'X', CAPLOK, {0x0447, 0x0427} },
+ { 'C', CAPLOK, {0x0441, 0x0421} },
+ { 'V', CAPLOK, {0x043c, 0x041c} },
+ { 'B', CAPLOK, {0x0438, 0x0418} },
+ { 'N', CAPLOK, {0x0442, 0x0422} },
+ { 'M', CAPLOK, {0x044c, 0x042c} },
+ { VK_OEM_COMMA, CAPLOK, {0x0431, 0x0411} },
+ { VK_OEM_PERIOD, CAPLOK, {0x044e, 0x042e} },
+ { VK_OEM_2, 0, {'.', ',' } },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_5, NOCAPS, {'\\', '/', 0x001c} },
- { VK_OEM_102, NOCAPS, {'\\', '/', 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003} },
+ { VK_OEM_5, 0, {'\\', '/', 0x001c} },
+ { VK_OEM_102, 0, {'\\', '/', 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { '2', NOCAPS, {'2', '\"', WCH_NONE, 0x0000} },
- { '6', NOCAPS, {'6', ':', WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, CAPS, {0x0493, 0x0492, WCH_NONE, 0x001f} },
+ { '2', 0, {'2', '\"', WCH_NONE, 0x0000} },
+ { '6', 0, {'6', ':', WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, CAPLOK, {0x0493, 0x0492, WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(0,1), /* Version 1.0 */
+ MAKELONG(0, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 4, 5, SHFT_INVALID, SHFT_INVALID, 2, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_DECIMAL, NOCAPS, {',', ',' } },
- { VK_TAB, NOCAPS, {'\t', '\t'} },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_DECIMAL, 0, {',', ',' } },
+ { VK_TAB, 0, {'\t', '\t'} },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_3, NOCAPS, {'`', '~', '`', '~'} },
- { '1', CAPS, {0x0103, 0x0102, '1', '!'} },
- { '2', CAPS, {0x00e2, 0x00c2, '2', '@'} },
- { '3', CAPS, {0x00ea, 0x00ca, '3', '#'} },
- { '4', CAPS, {0x00f4, 0x00d4, '4', '$'} },
- { '5', NOCAPS, {0x0300, 0x0300, '5', '%'} },
- { '7', NOCAPS, {0x0303, 0x0303, '7', '&'} },
- { '8', CAPS, {0x0301, 0x0301, '8', '*'} },
- { '9', NOCAPS, {0x0323, 0x0323, '9', '('} },
- { '0', CAPS, {0x0111, 0x0110, '0', ')'} },
- { VK_OEM_PLUS, NOCAPS, {0x20ab, '+', '=', '+'} },
- { 'Q', CAPS, {'q', 'Q', 'q', 'Q'} },
- { 'W', CAPS, {'w', 'W', 'w', 'W'} },
- { 'E', CAPS, {'e', 'E', 'e', 'E'} },
- { 'R', CAPS, {'r', 'R', 'r', 'R'} },
- { 'T', CAPS, {'t', 'T', 't', 'T'} },
- { 'Y', CAPS, {'y', 'Y', 'y', 'Y'} },
- { 'U', CAPS, {'u', 'U', 'u', 'U'} },
- { 'I', CAPS, {'i', 'I', 'i', 'I'} },
- { 'O', CAPS, {'o', 'O', 'o', 'O'} },
- { 'P', CAPS, {'p', 'P', 'p', 'P'} },
- { 'A', CAPS, {'a', 'A', 'a', 'A'} },
- { 'S', CAPS, {'s', 'S', 's', 'S'} },
- { 'D', CAPS, {'d', 'D', 'd', 'D'} },
- { 'F', CAPS, {'f', 'F', 'f', 'F'} },
- { 'G', CAPS, {'g', 'G', 'g', 'G'} },
- { 'H', CAPS, {'h', 'H', 'h', 'H'} },
- { 'J', CAPS, {'j', 'J', 'j', 'J'} },
- { 'K', CAPS, {'k', 'K', 'k', 'K'} },
- { 'L', CAPS, {'l', 'L', 'l', 'L'} },
- { VK_OEM_1, NOCAPS, {';', ':', ';', ':'} },
- { VK_OEM_7, NOCAPS, {'\'', '\"', '\'', '\"'}},
- { 'Z', CAPS, {'z', 'Z', 'z', 'Z'} },
- { 'X', CAPS, {'x', 'X', 'x', 'X'} },
- { 'C', CAPS, {'c', 'C', 'c', 'C'} },
- { 'V', CAPS, {'v', 'V', 'v', 'V'} },
- { 'B', CAPS, {'b', 'B', 'b', 'B'} },
- { 'N', CAPS, {'n', 'N', 'n', 'N'} },
- { 'M', CAPS, {'m', 'M', 'm', 'M'} },
- { VK_OEM_COMMA, NOCAPS, {',', '<', ',', '<'} },
- { VK_OEM_PERIOD, NOCAPS, {'.', '>', '.', '>'} },
- { VK_OEM_2, NOCAPS, {'/', '?', '/', '?'} },
+ { VK_OEM_3, 0, {'`', '~', '`', '~'} },
+ { '1', CAPLOK, {0x0103, 0x0102, '1', '!'} },
+ { '2', CAPLOK, {0x00e2, 0x00c2, '2', '@'} },
+ { '3', CAPLOK, {0x00ea, 0x00ca, '3', '#'} },
+ { '4', CAPLOK, {0x00f4, 0x00d4, '4', '$'} },
+ { '5', 0, {0x0300, 0x0300, '5', '%'} },
+ { '7', 0, {0x0303, 0x0303, '7', '&'} },
+ { '8', CAPLOK, {0x0301, 0x0301, '8', '*'} },
+ { '9', 0, {0x0323, 0x0323, '9', '('} },
+ { '0', CAPLOK, {0x0111, 0x0110, '0', ')'} },
+ { VK_OEM_PLUS, 0, {0x20ab, '+', '=', '+'} },
+ { 'Q', CAPLOK, {'q', 'Q', 'q', 'Q'} },
+ { 'W', CAPLOK, {'w', 'W', 'w', 'W'} },
+ { 'E', CAPLOK, {'e', 'E', 'e', 'E'} },
+ { 'R', CAPLOK, {'r', 'R', 'r', 'R'} },
+ { 'T', CAPLOK, {'t', 'T', 't', 'T'} },
+ { 'Y', CAPLOK, {'y', 'Y', 'y', 'Y'} },
+ { 'U', CAPLOK, {'u', 'U', 'u', 'U'} },
+ { 'I', CAPLOK, {'i', 'I', 'i', 'I'} },
+ { 'O', CAPLOK, {'o', 'O', 'o', 'O'} },
+ { 'P', CAPLOK, {'p', 'P', 'p', 'P'} },
+ { 'A', CAPLOK, {'a', 'A', 'a', 'A'} },
+ { 'S', CAPLOK, {'s', 'S', 's', 'S'} },
+ { 'D', CAPLOK, {'d', 'D', 'd', 'D'} },
+ { 'F', CAPLOK, {'f', 'F', 'f', 'F'} },
+ { 'G', CAPLOK, {'g', 'G', 'g', 'G'} },
+ { 'H', CAPLOK, {'h', 'H', 'h', 'H'} },
+ { 'J', CAPLOK, {'j', 'J', 'j', 'J'} },
+ { 'K', CAPLOK, {'k', 'K', 'k', 'K'} },
+ { 'L', CAPLOK, {'l', 'L', 'l', 'L'} },
+ { VK_OEM_1, 0, {';', ':', ';', ':'} },
+ { VK_OEM_7, 0, {'\'', '\"', '\'', '\"'}},
+ { 'Z', CAPLOK, {'z', 'Z', 'z', 'Z'} },
+ { 'X', CAPLOK, {'x', 'X', 'x', 'X'} },
+ { 'C', CAPLOK, {'c', 'C', 'c', 'C'} },
+ { 'V', CAPLOK, {'v', 'V', 'v', 'V'} },
+ { 'B', CAPLOK, {'b', 'B', 'b', 'B'} },
+ { 'N', CAPLOK, {'n', 'N', 'n', 'N'} },
+ { 'M', CAPLOK, {'m', 'M', 'm', 'M'} },
+ { VK_OEM_COMMA, 0, {',', '<', ',', '<'} },
+ { VK_OEM_PERIOD, 0, {'.', '>', '.', '>'} },
+ { VK_OEM_2, 0, {'/', '?', '/', '?'} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { VK_OEM_4, CAPS, {0x01b0, 0x01af, '[', '{', 0x001b} },
- { VK_OEM_6, CAPS, {0x01a1, 0x01a0, ']', '}', 0x001d} },
- { VK_OEM_5, NOCAPS, {'\\', '|', '\\', '|', 0x001c} },
- { VK_OEM_102, NOCAPS, {'\\', '|', '\\', '|', 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
+ { VK_OEM_4, CAPLOK, {0x01b0, 0x01af, '[', '{', 0x001b} },
+ { VK_OEM_6, CAPLOK, {0x01a1, 0x01a0, ']', '}', 0x001d} },
+ { VK_OEM_5, 0, {'\\', '|', '\\', '|', 0x001c} },
+ { VK_OEM_102, 0, {'\\', '|', '\\', '|', 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
- { '6', NOCAPS, {0x0309, 0x0309, '6', '^', WCH_NONE, 0x001e} },
- { VK_OEM_MINUS, NOCAPS, {'-', '_', '-', '_', WCH_NONE, 0x001f} },
+ { '6', 0, {0x0309, 0x0309, '6', '^', WCH_NONE, 0x001e} },
+ { VK_OEM_MINUS, 0, {'-', '_', '-', '_', WCH_NONE, 0x001f} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {'`', '~' } },
- { '1', NOCAPS, {'1', '!' } },
- { '2', NOCAPS, {'2', '\"' } },
- { '3', NOCAPS, {'3', '#' } },
- { '4', NOCAPS, {'4', '$' } },
- { '5', NOCAPS, {'5', '%' } },
- { '7', NOCAPS, {'7', '/' } },
- { '8', NOCAPS, {'8', '(' } },
- { '9', NOCAPS, {'9', ')' } },
- { '0', NOCAPS, {'0', '=' } },
- { VK_OEM_PLUS, NOCAPS, {'+', '*' } },
- { 'Q', CAPS, {0x0459, 0x0409} },
- { 'W', CAPS, {0x045a, 0x040a} },
- { 'R', CAPS, {0x0440, 0x0420} },
- { 'T', CAPS, {0x0442, 0x0422} },
- { 'Y', CAPS, {0x0437, 0x0417} },
- { 'U', CAPS, {0x0443, 0x0423} },
- { 'I', CAPS, {0x0438, 0x0418} },
- { 'O', CAPS, {0x043e, 0x041e} },
- { 'P', CAPS, {0x043f, 0x041f} },
- { VK_OEM_4, CAPS, {0x0448, 0x0428} },
- { 'A', CAPS, {0x0430, 0x0410} },
- { 'S', CAPS, {0x0441, 0x0421} },
- { 'D', CAPS, {0x0434, 0x0414} },
- { 'F', CAPS, {0x0444, 0x0424} },
- { 'G', CAPS, {0x0433, 0x0413} },
- { 'H', CAPS, {0x0445, 0x0425} },
- { 'J', CAPS, {0x0458, 0x0408} },
- { 'K', CAPS, {0x043a, 0x041a} },
- { 'L', CAPS, {0x043b, 0x041b} },
- { VK_OEM_7, CAPS, {0x045b, 0x040b} },
- { 'Z', CAPS, {0x0455, 0x0405} },
- { 'X', CAPS, {0x045f, 0x040f} },
- { 'C', CAPS, {0x0446, 0x0426} },
- { 'V', CAPS, {0x0432, 0x0412} },
- { 'B', CAPS, {0x0431, 0x0411} },
- { 'N', CAPS, {0x043d, 0x041d} },
- { 'M', CAPS, {0x043c, 0x041c} },
- { VK_OEM_2, NOCAPS, {'-', '_' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {'`', '~' } },
+ { '1', 0, {'1', '!' } },
+ { '2', 0, {'2', '\"' } },
+ { '3', 0, {'3', '#' } },
+ { '4', 0, {'4', '$' } },
+ { '5', 0, {'5', '%' } },
+ { '7', 0, {'7', '/' } },
+ { '8', 0, {'8', '(' } },
+ { '9', 0, {'9', ')' } },
+ { '0', 0, {'0', '=' } },
+ { VK_OEM_PLUS, 0, {'+', '*' } },
+ { 'Q', CAPLOK, {0x0459, 0x0409} },
+ { 'W', CAPLOK, {0x045a, 0x040a} },
+ { 'R', CAPLOK, {0x0440, 0x0420} },
+ { 'T', CAPLOK, {0x0442, 0x0422} },
+ { 'Y', CAPLOK, {0x0437, 0x0417} },
+ { 'U', CAPLOK, {0x0443, 0x0423} },
+ { 'I', CAPLOK, {0x0438, 0x0418} },
+ { 'O', CAPLOK, {0x043e, 0x041e} },
+ { 'P', CAPLOK, {0x043f, 0x041f} },
+ { VK_OEM_4, CAPLOK, {0x0448, 0x0428} },
+ { 'A', CAPLOK, {0x0430, 0x0410} },
+ { 'S', CAPLOK, {0x0441, 0x0421} },
+ { 'D', CAPLOK, {0x0434, 0x0414} },
+ { 'F', CAPLOK, {0x0444, 0x0424} },
+ { 'G', CAPLOK, {0x0433, 0x0413} },
+ { 'H', CAPLOK, {0x0445, 0x0425} },
+ { 'J', CAPLOK, {0x0458, 0x0408} },
+ { 'K', CAPLOK, {0x043a, 0x041a} },
+ { 'L', CAPLOK, {0x043b, 0x041b} },
+ { VK_OEM_7, CAPLOK, {0x045b, 0x040b} },
+ { 'Z', CAPLOK, {0x0455, 0x0405} },
+ { 'X', CAPLOK, {0x045f, 0x040f} },
+ { 'C', CAPLOK, {0x0446, 0x0426} },
+ { 'V', CAPLOK, {0x0432, 0x0412} },
+ { 'B', CAPLOK, {0x0431, 0x0411} },
+ { 'N', CAPLOK, {0x043d, 0x041d} },
+ { 'M', CAPLOK, {0x043c, 0x041c} },
+ { VK_OEM_2, 0, {'-', '_' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { VK_OEM_MINUS, NOCAPS, {WCH_DEAD, '?', 0x001f } },
- { 0xff, NOCAPS, {'\'', WCH_NONE, WCH_NONE} },
- { VK_OEM_6, CAPS, {0x0452, 0x0402, 0x001b } },
- { VK_OEM_5, CAPS, {0x0436, 0x0416, 0x001c } },
- { VK_OEM_1, CAPS, {0x0447, 0x0427, 0x001d } },
- { VK_OEM_102, NOCAPS, {'<', '>', 0x001c } },
- { VK_BACK, NOCAPS, {'\b', '\b', 0x007f } },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, 0x001b } },
- { VK_RETURN, NOCAPS, {'\r', '\r', '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, 0x0003 } },
+ { VK_OEM_MINUS, 0, {WCH_DEAD, '?', 0x001f } },
+ { 0xff, 0, {'\'', WCH_NONE, WCH_NONE} },
+ { VK_OEM_6, CAPLOK, {0x0452, 0x0402, 0x001b } },
+ { VK_OEM_5, CAPLOK, {0x0436, 0x0416, 0x001c } },
+ { VK_OEM_1, CAPLOK, {0x0447, 0x0427, 0x001d } },
+ { VK_OEM_102, 0, {'<', '>', 0x001c } },
+ { VK_BACK, 0, {'\b', '\b', 0x007f } },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, 0x001b } },
+ { VK_RETURN, 0, {'\r', '\r', '\n' } },
+ { VK_SPACE, 0, {' ', ' ', ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, 0x0003 } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { 'E', CAPS, {0x0435, 0x0415, WCH_NONE, 0x20ac} },
- { VK_OEM_COMMA, NOCAPS, {',', ';', WCH_NONE, '<' } },
- { VK_OEM_PERIOD, NOCAPS, {'.', ':', WCH_NONE, '>' } },
+ { 'E', CAPLOK, {0x0435, 0x0415, WCH_NONE, 0x20ac} },
+ { VK_OEM_COMMA, 0, {',', ';', WCH_NONE, '<' } },
+ { VK_OEM_PERIOD, 0, {'.', ':', WCH_NONE, '>' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { '6', NOCAPS, {'6', '&', WCH_NONE, WCH_NONE, 0x001e} },
+ { '6', 0, {'6', '&', WCH_NONE, WCH_NONE, 0x001e} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
0,
*/
#include <windows.h>
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
#ifdef _M_IA64
#define ROSDATA static __declspec(allocate(".data"))
#endif
#endif
-#define VK_EMPTY 0xff /* The non-existent VK */
-#define KSHIFT 0x001 /* Shift modifier */
-#define KCTRL 0x002 /* Ctrl modifier */
-#define KALT 0x004 /* Alt modifier */
-#define KEXT 0x100 /* Extended key code */
-#define KMULTI 0x200 /* Multi-key */
-#define KSPEC 0x400 /* Special key */
-#define KNUMP 0x800 /* Number-pad */
-#define KNUMS 0xc00 /* Special + number pad */
-#define KMEXT 0x300 /* Multi + ext */
+#define VK_EMPTY 0xff /* The non-existent VK */
-#define SHFT_INVALID 0x0F
+#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
+#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
ROSDATA USHORT scancode_to_vk[] = {
/* Numbers Row */
/* Third letters row */
'Z', 'X', 'C', 'V',
'B', 'N', 'M', VK_OEM_COMMA,
- VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KEXT,
+ VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
/* - 37 - */
/* Bottom Row */
0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL,
/* - 45 - */
/* Locks */
VK_NUMLOCK | KMEXT,
- VK_SCROLL | KMULTI,
+ VK_SCROLL | KBDMULTIVK,
/* - 47 - */
/* Number-Pad */
VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT,
};
ROSDATA VSC_VK extcode0_to_vk[] = {
- { 0x10, VK_MEDIA_PREV_TRACK | KEXT },
- { 0x19, VK_MEDIA_NEXT_TRACK | KEXT },
- { 0x1D, VK_RCONTROL | KEXT },
- { 0x20, VK_VOLUME_MUTE | KEXT },
- { 0x21, VK_LAUNCH_APP2 | KEXT },
- { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT },
- { 0x24, VK_MEDIA_STOP | KEXT },
- { 0x2E, VK_VOLUME_DOWN | KEXT },
- { 0x30, VK_VOLUME_UP | KEXT },
- { 0x32, VK_BROWSER_HOME | KEXT },
- { 0x35, VK_DIVIDE | KEXT },
- { 0x37, VK_SNAPSHOT | KEXT },
- { 0x38, VK_RMENU | KEXT },
- { 0x47, VK_HOME | KEXT },
- { 0x48, VK_UP | KEXT },
- { 0x49, VK_PRIOR | KEXT },
- { 0x4B, VK_LEFT | KEXT },
- { 0x4D, VK_RIGHT | KEXT },
- { 0x4F, VK_END | KEXT },
- { 0x50, VK_DOWN | KEXT },
- { 0x51, VK_NEXT | KEXT },
- { 0x52, VK_INSERT | KEXT },
- { 0x53, VK_DELETE | KEXT },
- { 0x5B, VK_LWIN | KEXT },
- { 0x5C, VK_RWIN | KEXT },
- { 0x5D, VK_APPS | KEXT },
- { 0x5F, VK_SLEEP | KEXT },
- { 0x65, VK_BROWSER_SEARCH | KEXT },
- { 0x66, VK_BROWSER_FAVORITES | KEXT },
- { 0x67, VK_BROWSER_REFRESH | KEXT },
- { 0x68, VK_BROWSER_STOP | KEXT },
- { 0x69, VK_BROWSER_FORWARD | KEXT },
- { 0x6A, VK_BROWSER_BACK | KEXT },
- { 0x6B, VK_LAUNCH_APP1 | KEXT },
- { 0x6C, VK_LAUNCH_MAIL | KEXT },
- { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT },
- { 0x1C, VK_RETURN | KEXT },
- { 0x46, VK_CANCEL | KEXT },
+ { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
+ { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
+ { 0x1D, VK_RCONTROL | KBDEXT },
+ { 0x20, VK_VOLUME_MUTE | KBDEXT },
+ { 0x21, VK_LAUNCH_APP2 | KBDEXT },
+ { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
+ { 0x24, VK_MEDIA_STOP | KBDEXT },
+ { 0x2E, VK_VOLUME_DOWN | KBDEXT },
+ { 0x30, VK_VOLUME_UP | KBDEXT },
+ { 0x32, VK_BROWSER_HOME | KBDEXT },
+ { 0x35, VK_DIVIDE | KBDEXT },
+ { 0x37, VK_SNAPSHOT | KBDEXT },
+ { 0x38, VK_RMENU | KBDEXT },
+ { 0x47, VK_HOME | KBDEXT },
+ { 0x48, VK_UP | KBDEXT },
+ { 0x49, VK_PRIOR | KBDEXT },
+ { 0x4B, VK_LEFT | KBDEXT },
+ { 0x4D, VK_RIGHT | KBDEXT },
+ { 0x4F, VK_END | KBDEXT },
+ { 0x50, VK_DOWN | KBDEXT },
+ { 0x51, VK_NEXT | KBDEXT },
+ { 0x52, VK_INSERT | KBDEXT },
+ { 0x53, VK_DELETE | KBDEXT },
+ { 0x5B, VK_LWIN | KBDEXT },
+ { 0x5C, VK_RWIN | KBDEXT },
+ { 0x5D, VK_APPS | KBDEXT },
+ { 0x5F, VK_SLEEP | KBDEXT },
+ { 0x65, VK_BROWSER_SEARCH | KBDEXT },
+ { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
+ { 0x67, VK_BROWSER_REFRESH | KBDEXT },
+ { 0x68, VK_BROWSER_STOP | KBDEXT },
+ { 0x69, VK_BROWSER_FORWARD | KBDEXT },
+ { 0x6A, VK_BROWSER_BACK | KBDEXT },
+ { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
+ { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
+ { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
+ { 0x1C, VK_RETURN | KBDEXT },
+ { 0x46, VK_CANCEL | KBDEXT },
{ 0, 0 },
};
};
ROSDATA VK_TO_BIT modifier_keys[] = {
- { VK_SHIFT, KSHIFT },
- { VK_CONTROL, KCTRL },
- { VK_MENU, KALT },
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
{ 0, 0 }
};
{ 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 }
};
-#define NOCAPS 0
-#define CAPS KSHIFT /* Caps -> shift */
-
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
- { VK_OEM_3, NOCAPS, {WCH_LGTR, '~' } },
- { 'R', CAPS, {'r', 'R' } },
- { 'T', CAPS, {'t', 'T' } },
- { 'Z', CAPS, {'z', 'Z' } },
- { 'U', CAPS, {'u', 'U' } },
- { 'I', CAPS, {'i', 'I' } },
- { 'O', CAPS, {'o', 'O' } },
- { 'P', CAPS, {'p', 'P' } },
- { 'A', CAPS, {'a', 'A' } },
- { 'S', CAPS, {'s', 'S' } },
- { 'D', CAPS, {'d', 'D' } },
- { 'H', CAPS, {'h', 'H' } },
- { 'J', CAPS, {'j', 'J' } },
- { VK_OEM_1, CAPS, {0x010d, 0x010c} },
- { 'Y', CAPS, {'y', 'Y' } },
- { 'X', CAPS, {'x', 'X' } },
- { 'C', CAPS, {'c', 'C' } },
- { VK_OEM_MINUS, NOCAPS, {'-', '_' } },
- { VK_DECIMAL, NOCAPS, {'.', '.' } },
- { VK_TAB, NOCAPS, {'\t', '\t' } },
- { VK_ADD, NOCAPS, {'+', '+' } },
- { VK_DIVIDE, NOCAPS, {'/', '/' } },
- { VK_MULTIPLY, NOCAPS, {'*', '*' } },
- { VK_SUBTRACT, NOCAPS, {'-', '-' } },
+ { VK_OEM_3, 0, {WCH_LGTR, '~' } },
+ { 'R', CAPLOK, {'r', 'R' } },
+ { 'T', CAPLOK, {'t', 'T' } },
+ { 'Z', CAPLOK, {'z', 'Z' } },
+ { 'U', CAPLOK, {'u', 'U' } },
+ { 'I', CAPLOK, {'i', 'I' } },
+ { 'O', CAPLOK, {'o', 'O' } },
+ { 'P', CAPLOK, {'p', 'P' } },
+ { 'A', CAPLOK, {'a', 'A' } },
+ { 'S', CAPLOK, {'s', 'S' } },
+ { 'D', CAPLOK, {'d', 'D' } },
+ { 'H', CAPLOK, {'h', 'H' } },
+ { 'J', CAPLOK, {'j', 'J' } },
+ { VK_OEM_1, CAPLOK, {0x010d, 0x010c} },
+ { 'Y', CAPLOK, {'y', 'Y' } },
+ { 'X', CAPLOK, {'x', 'X' } },
+ { 'C', CAPLOK, {'c', 'C' } },
+ { VK_OEM_MINUS, 0, {'-', '_' } },
+ { VK_DECIMAL, 0, {'.', '.' } },
+ { VK_TAB, 0, {'\t', '\t' } },
+ { VK_ADD, 0, {'+', '+' } },
+ { VK_DIVIDE, 0, {'/', '/' } },
+ { VK_MULTIPLY, 0, {'*', '*' } },
+ { VK_SUBTRACT, 0, {'-', '-' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
- { '1', NOCAPS, {'1', '!', '~' } },
- { '3', NOCAPS, {'3', '#', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, '^' } },
- { '4', NOCAPS, {'4', '$', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02d8 } },
- { '5', NOCAPS, {'5', '%', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b0 } },
- { '7', NOCAPS, {'7', '/', '`' } },
- { '8', NOCAPS, {'8', '(', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02d9 } },
- { '9', NOCAPS, {'9', ')', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b4 } },
- { '0', NOCAPS, {'0', '=', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02dd } },
- { VK_OEM_PLUS, NOCAPS, {'+', '*', WCH_DEAD} },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00b8 } },
- { 'Q', CAPS, {'q', 'Q', '\\' } },
- { 'W', CAPS, {'w', 'W', '|' } },
- { 'E', CAPS, {'e', 'E', 0x20ac } },
- { 'F', CAPS, {'f', 'F', '[' } },
- { 'G', CAPS, {'g', 'G', ']' } },
- { 'K', CAPS, {'k', 'K', 0x0142 } },
- { 'L', CAPS, {'l', 'L', 0x0141 } },
- { VK_OEM_7, CAPS, {0x0107, 0x0106, 0x00df } },
- { 'V', CAPS, {'v', 'V', '@' } },
- { 'B', CAPS, {'b', 'B', '{' } },
- { 'N', CAPS, {'n', 'N', '}' } },
- { 'M', CAPS, {'m', 'M', 0x00a7 } },
- { VK_OEM_COMMA, NOCAPS, {',', ';', '<' } },
- { VK_OEM_PERIOD, NOCAPS, {'.', ':', '>' } },
+ { '1', 0, {'1', '!', '~' } },
+ { '3', 0, {'3', '#', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, '^' } },
+ { '4', 0, {'4', '$', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02d8 } },
+ { '5', 0, {'5', '%', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b0 } },
+ { '7', 0, {'7', '/', '`' } },
+ { '8', 0, {'8', '(', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02d9 } },
+ { '9', 0, {'9', ')', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b4 } },
+ { '0', 0, {'0', '=', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02dd } },
+ { VK_OEM_PLUS, 0, {'+', '*', WCH_DEAD} },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b8 } },
+ { 'Q', CAPLOK, {'q', 'Q', '\\' } },
+ { 'W', CAPLOK, {'w', 'W', '|' } },
+ { 'E', CAPLOK, {'e', 'E', 0x20ac } },
+ { 'F', CAPLOK, {'f', 'F', '[' } },
+ { 'G', CAPLOK, {'g', 'G', ']' } },
+ { 'K', CAPLOK, {'k', 'K', 0x0142 } },
+ { 'L', CAPLOK, {'l', 'L', 0x0141 } },
+ { VK_OEM_7, CAPLOK, {0x0107, 0x0106, 0x00df } },
+ { 'V', CAPLOK, {'v', 'V', '@' } },
+ { 'B', CAPLOK, {'b', 'B', '{' } },
+ { 'N', CAPLOK, {'n', 'N', '}' } },
+ { 'M', CAPLOK, {'m', 'M', 0x00a7 } },
+ { VK_OEM_COMMA, 0, {',', ';', '<' } },
+ { VK_OEM_PERIOD, 0, {'.', ':', '>' } },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
- { VK_OEM_4, CAPS, {0x0161, 0x0160, 0x00f7, 0x001b} },
- { VK_OEM_6, CAPS, {0x0111, 0x0110, 0x00d7, 0x001d} },
- { VK_OEM_5, CAPS, {0x017e, 0x017d, 0x00a4, 0x001c} },
- { VK_OEM_102, NOCAPS, {'<', '>', WCH_NONE, 0x001c} },
- { VK_BACK, NOCAPS, {'\b', '\b', WCH_NONE, 0x007f} },
- { VK_ESCAPE, NOCAPS, {0x001b, 0x001b, WCH_NONE, 0x001b} },
- { VK_RETURN, NOCAPS, {'\r', '\r', WCH_NONE, '\n' } },
- { VK_SPACE, NOCAPS, {' ', ' ', WCH_NONE, ' ' } },
- { VK_CANCEL, NOCAPS, {0x0003, 0x0003, WCH_NONE, 0x0003} },
+ { VK_OEM_4, CAPLOK, {0x0161, 0x0160, 0x00f7, 0x001b} },
+ { VK_OEM_6, CAPLOK, {0x0111, 0x0110, 0x00d7, 0x001d} },
+ { VK_OEM_5, CAPLOK, {0x017e, 0x017d, 0x00a4, 0x001c} },
+ { VK_OEM_102, 0, {'<', '>', WCH_NONE, 0x001c} },
+ { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x007f} },
+ { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b} },
+ { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n' } },
+ { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' ' } },
+ { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003} },
{ 0, 0 }
};
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
- { '2', NOCAPS, {'2', '\"', WCH_DEAD, WCH_NONE, 0x0000 } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02c7, WCH_NONE, WCH_NONE} },
- { '6', NOCAPS, {'6', '&', WCH_DEAD, WCH_NONE, 0x001e } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x02db, WCH_NONE, WCH_NONE} },
- { VK_OEM_2, NOCAPS, {'\'', '?', WCH_DEAD, WCH_NONE, 0x001f } },
- { 0xff, NOCAPS, {WCH_NONE, WCH_NONE, 0x00a8, WCH_NONE, WCH_NONE} },
+ { '2', 0, {'2', '\"', WCH_DEAD, WCH_NONE, 0x0000 } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02c7, WCH_NONE, WCH_NONE} },
+ { '6', 0, {'6', '&', WCH_DEAD, WCH_NONE, 0x001e } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02db, WCH_NONE, WCH_NONE} },
+ { VK_OEM_2, 0, {'\'', '?', WCH_DEAD, WCH_NONE, 0x001f } },
+ { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00a8, WCH_NONE, WCH_NONE} },
{ 0, 0 }
};
{ 0x37, L"Num *" },
{ 0x38, L"Alt" },
{ 0x39, L"Space" },
- { 0x3a, L"Caps Lock" },
+ { 0x3a, L"CAPLOK Lock" },
{ 0x3b, L"F1" },
{ 0x3c, L"F2" },
{ 0x3d, L"F3" },
};
ROSDATA LIGATURE2 Ligature[] = {
- { VK_OEM_3, NOCAPS, {0x201a, 0x201a } },
+ { VK_OEM_3, 0, {0x201a, 0x201a } },
{0, 0}
};
extcode0_to_vk,
extcode1_to_vk,
- MAKELONG(1,1), /* Version 1.0 */
+ MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
/* Ligatures */
2,
extern "C" {
#endif
+/* Virtual key flags */
+#define KBDEXT 0x100 /* Extended key code */
+#define KBDMULTIVK 0x200 /* Multi-key */
+#define KBDSPECIAL 0x400 /* Special key */
+#define KBDNUMPAD 0x800 /* Number-pad */
+
+/* Modifier bits */
+#define KBDSHIFT 0x001 /* Shift modifier */
+#define KBDCTRL 0x002 /* Ctrl modifier */
+#define KBDALT 0x004 /* Alt modifier */
+
+/* Invalid shift */
+#define SHFT_INVALID 0x0F
+
typedef struct _VK_TO_BIT {
BYTE Vk;
BYTE ModBits;
#define KBD_VERSION 1
#define GET_KBD_VERSION(p) (HIWORD((p)->fLocalFlags))
-#define KLLF_ALTGR 1
-#define KLLF_SHIFTLOCK 2
-#define KLLF_LRM_RLM 4
+#define KLLF_ALTGR 0x1
+#define KLLF_SHIFTLOCK 0x2
+#define KLLF_LRM_RLM 0x4
typedef struct _KBDTABLES {
PMODIFIERS pCharModifiers;
BYTE bMaxVSCtoVK;
PVSC_VK pVSCtoVK_E0;
PVSC_VK pVSCtoVK_E1;
- DWORD fLocalFlags;
+ DWORD fLocaleFlags;
BYTE nLgMaxd;
BYTE cbLgEntry;
PLIGATURE1 pLigature;
} KBDTABLES, *PKBDTABLES;
- /* Constants that help table decoding */
-#define WCH_NONE 0xf000
-#define WCH_DEAD 0xf001
-#define WCH_LGTR 0xf002
+/* Constants that help table decoding */
+#define WCH_NONE 0xf000
+#define WCH_DEAD 0xf001
+#define WCH_LGTR 0xf002
-#define CAPSLOK 1
-#define SGCAPS 2
-#define CAPLOKALTGR 4
-#define KANALOK 8
-#define GRPSELTAP 0x80
+/* VK_TO_WCHARS attributes */
+#define CAPLOK 0x01
+#define SGCAPS 0x02
+#define CAPLOKALTGR 0x04
+#define KANALOK 0x08
+#define GRPSELTAP 0x80
#define VK_ABNT_C1 0xC1
#define VK_ABNT_C2 0xC2
+/* Useful scancodes */
+#define SCANCODE_LSHIFT 0x2A
+#define SCANCODE_RSHIFT 0x36
+#define SCANCODE_CTRL 0x1D
+#define SCANCODE_ALT 0x38
#ifdef __cplusplus
};
#pragma once
-#include <internal/kbd.h>
+#include <ndk/kbd.h>
typedef struct _KBL
{
LIST_ENTRY List;
DWORD Flags;
WCHAR Name[KL_NAMELENGTH]; // used w GetKeyboardLayoutName same as wszKLID.
- struct _KBDTABLES* KBTables; // KBDTABLES in ntoskrnl/include/internal/kbd.h
+ struct _KBDTABLES* KBTables; // KBDTABLES in ndk/kbd.h
HANDLE hModule;
ULONG RefCount;
HKL hkl;
/* Key States */
#define KS_DOWN_BIT 0x80
#define KS_LOCK_BIT 0x01
-/* Lock modifiers */
-#define CAPITAL_BIT 0x80000000
-#define NUMLOCK_BIT 0x40000000
-#define MOD_BITS_MASK 0x3fffffff
-#define MOD_KCTRL 0x02
/* Scan Codes */
#define SC_KEY_UP 0x8000
/* lParam bits */
-#define LP_EXT_BIT (1<<24)
-/* From kbdxx.c -- Key changes with numlock */
-#define KNUMP 0x400
+#define LP_EXT_BIT (1<<24)
+#define LP_DO_NOT_CARE_BIT (1<<25) // for GetKeyNameText
+#define LP_CONTEXT_BIT (1<<29)
+#define LP_PREV_STATE_BIT (1<<30)
+#define LP_TRANSITION_BIT (1<<31)
+
INIT_FUNCTION NTSTATUS NTAPI InitInputImpl(VOID);
INIT_FUNCTION NTSTATUS NTAPI InitKeyboardImpl(VOID);
PKBL W32kGetDefaultKeyLayout(VOID);
-VOID FASTCALL W32kKeyProcessMessage(LPMSG Msg, PKBDTABLES KeyLayout, BYTE Prefix);
+VOID NTAPI UserProcessKeyboardInput(PKEYBOARD_INPUT_DATA pKeyInput);
+BOOL NTAPI UserSendKeyboardInput(KEYBDINPUT *pKbdInput, BOOL bInjected);
BOOL FASTCALL IntBlockInput(PTHREADINFO W32Thread, BOOL BlockIt);
BOOL FASTCALL IntMouseInput(MOUSEINPUT *mi, BOOL Injected);
BOOL UserInitDefaultKeyboardLayout(VOID);
PKBL UserHklToKbl(HKL hKl);
BOOL FASTCALL UserAttachThreadInput(PTHREADINFO,PTHREADINFO,BOOL);
VOID FASTCALL DoTheScreenSaver(VOID);
-WORD FASTCALL get_key_state(void);
#define ThreadHasInputAccess(W32Thread) \
(TRUE)
+extern HANDLE ghKeyboardDevice;
extern PTHREADINFO ptiRawInput;
+extern BYTE gKeyStateTable[0x100];
LRESULT FASTCALL IntDispatchMessage(MSG* Msg);
BOOL FASTCALL IntTranslateKbdMessage(LPMSG lpMsg, UINT flags);
-VOID FASTCALL co_MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
+VOID FASTCALL co_MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL bInjected);
VOID FASTCALL MsqPostHotKeyMessage(PVOID Thread, HWND hWnd, WPARAM wParam, LPARAM lParam);
VOID FASTCALL co_MsqInsertMouseMessage(MSG* Msg, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Hook);
BOOL FASTCALL MsqIsClkLck(LPMSG Msg, BOOL Remove);
* PROJECT: ReactOS kernel
* PURPOSE: Window classes
* FILE: subsystems/win32/win32k/ntuser/input.c
- * PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * PROGRAMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * Rafal Harabien (rafalh@reactos.org)
*/
#include <win32k.h>
PTHREADINFO ptiMouse;
PKTIMER MasterTimer = NULL;
PATTACHINFO gpai = NULL;
+HANDLE ghKeyboardDevice;
static DWORD LastInputTick = 0;
static HANDLE MouseDeviceHandle;
static CLIENT_ID MouseThreadId;
static HANDLE KeyboardThreadHandle;
static CLIENT_ID KeyboardThreadId;
-static HANDLE KeyboardDeviceHandle;
static HANDLE RawInputThreadHandle;
static CLIENT_ID RawInputThreadId;
static KEVENT InputThreadsStart;
static BOOLEAN InputThreadsRunning = FALSE;
-static BYTE TrackSysKey = 0; /* determine whether ALT key up will cause a WM_SYSKEYUP
- or a WM_KEYUP message */
/* FUNCTIONS *****************************************************************/
-DWORD IntLastInputTick(BOOL LastInputTickSetGet);
#define ClearMouseInput(mi) \
mi.dx = 0; \
IntMouseInput(&mi,FALSE); \
ClearMouseInput(mi);
-
-DWORD IntLastInputTick(BOOL LastInputTickSetGet)
+static DWORD FASTCALL
+IntLastInputTick(BOOL bUpdate)
{
- if (LastInputTickSetGet == TRUE)
+ if (bUpdate)
{
LARGE_INTEGER TickCount;
KeQueryTickCount(&TickCount);
return LastInputTick;
}
-
-VOID FASTCALL DoTheScreenSaver(VOID)
+VOID FASTCALL
+DoTheScreenSaver(VOID)
{
LARGE_INTEGER TickCount;
DWORD Test, TO;
}
}
-VOID FASTCALL
-ProcessMouseInputData(PMOUSE_INPUT_DATA Data, ULONG InputCount)
+static VOID NTAPI
+IntProcessMouseInputData(PMOUSE_INPUT_DATA Data, ULONG InputCount)
{
PMOUSE_INPUT_DATA mid;
MOUSEINPUT mi;
SendMouseEvent(mi);
}
-
-
-
-VOID APIENTRY
+static VOID APIENTRY
MouseThreadMain(PVOID StartContext)
{
UNICODE_STRING MouseDeviceName = RTL_CONSTANT_STRING(L"\\Device\\PointerClass0");
UserEnterExclusive();
- ProcessMouseInputData(&MouseInput, Iosb.Information / sizeof(MOUSE_INPUT_DATA));
+ IntProcessMouseInputData(&MouseInput, Iosb.Information / sizeof(MOUSE_INPUT_DATA));
UserLeave();
}
}
}
-/* Returns a value that indicates if the key is a modifier key, and
- * which one.
- */
-static UINT APIENTRY
-IntKeyboardGetModifiers(KEYBOARD_INPUT_DATA *InputData)
-{
- if (InputData->Flags & KEY_E1)
- return 0;
-
- if (!(InputData->Flags & KEY_E0))
- {
- switch (InputData->MakeCode)
- {
- case 0x2a: /* left shift */
- case 0x36: /* right shift */
- return MOD_SHIFT;
-
- case 0x1d: /* left control */
- return MOD_CONTROL;
-
- case 0x38: /* left alt */
- return MOD_ALT;
-
- default:
- return 0;
- }
- }
- else
- {
- switch (InputData->MakeCode)
- {
- case 0x1d: /* right control */
- return MOD_CONTROL;
-
- case 0x38: /* right alt */
- return MOD_ALT;
-
- case 0x5b: /* left gui (windows) */
- case 0x5c: /* right gui (windows) */
- return MOD_WIN;
-
- default:
- return 0;
- }
- }
-}
-
-/* Asks the keyboard driver to send a small table that shows which
- * lights should connect with which scancodes
- */
-static NTSTATUS APIENTRY
-IntKeyboardGetIndicatorTrans(HANDLE KeyboardDeviceHandle,
- PKEYBOARD_INDICATOR_TRANSLATION *IndicatorTrans)
-{
- NTSTATUS Status;
- DWORD Size = 0;
- IO_STATUS_BLOCK Block;
- PKEYBOARD_INDICATOR_TRANSLATION Ret;
-
- Size = sizeof(KEYBOARD_INDICATOR_TRANSLATION);
-
- Ret = ExAllocatePoolWithTag(PagedPool,
- Size,
- USERTAG_KBDTABLE);
-
- while (Ret)
- {
- Status = NtDeviceIoControlFile(KeyboardDeviceHandle,
- NULL,
- NULL,
- NULL,
- &Block,
- IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION,
- NULL, 0,
- Ret, Size);
-
- if (Status != STATUS_BUFFER_TOO_SMALL)
- break;
-
- ExFreePoolWithTag(Ret, USERTAG_KBDTABLE);
-
- Size += sizeof(KEYBOARD_INDICATOR_TRANSLATION);
-
- Ret = ExAllocatePoolWithTag(PagedPool,
- Size,
- USERTAG_KBDTABLE);
- }
-
- if (!Ret)
- return STATUS_INSUFFICIENT_RESOURCES;
-
- if (Status != STATUS_SUCCESS)
- {
- ExFreePoolWithTag(Ret, USERTAG_KBDTABLE);
- return Status;
- }
-
- *IndicatorTrans = Ret;
- return Status;
-}
-
-/* Sends the keyboard commands to turn on/off the lights.
- */
-static NTSTATUS APIENTRY
-IntKeyboardUpdateLeds(HANDLE KeyboardDeviceHandle,
- PKEYBOARD_INPUT_DATA KeyInput,
- PKEYBOARD_INDICATOR_TRANSLATION IndicatorTrans)
-{
- NTSTATUS Status;
- UINT Count;
- static KEYBOARD_INDICATOR_PARAMETERS Indicators;
- IO_STATUS_BLOCK Block;
-
- if (!IndicatorTrans)
- return STATUS_NOT_SUPPORTED;
-
- if (KeyInput->Flags & (KEY_E0 | KEY_E1 | KEY_BREAK))
- return STATUS_SUCCESS;
-
- for (Count = 0; Count < IndicatorTrans->NumberOfIndicatorKeys; Count++)
- {
- if (KeyInput->MakeCode == IndicatorTrans->IndicatorList[Count].MakeCode)
- {
- Indicators.LedFlags ^=
- IndicatorTrans->IndicatorList[Count].IndicatorFlags;
-
- /* Update the lights on the hardware */
-
- Status = NtDeviceIoControlFile(KeyboardDeviceHandle,
- NULL,
- NULL,
- NULL,
- &Block,
- IOCTL_KEYBOARD_SET_INDICATORS,
- &Indicators, sizeof(Indicators),
- NULL, 0);
-
- return Status;
- }
- }
-
- return STATUS_SUCCESS;
-}
-
-static VOID APIENTRY
-IntKeyboardSendWinKeyMsg()
-{
- PWND Window;
- MSG Mesg;
-
- if (!(Window = UserGetWindowObject(InputWindowStation->ShellWindow)))
- {
- ERR("Couldn't find window to send Windows key message!\n");
- return;
- }
-
- Mesg.hwnd = InputWindowStation->ShellWindow;
- Mesg.message = WM_SYSCOMMAND;
- Mesg.wParam = SC_TASKLIST;
- Mesg.lParam = 0;
-
- /* The QS_HOTKEY is just a guess */
- MsqPostMessage(Window->head.pti->MessageQueue, &Mesg, FALSE, QS_HOTKEY);
-}
-
-static VOID APIENTRY
-co_IntKeyboardSendAltKeyMsg()
-{
- ERR("co_IntKeyboardSendAltKeyMsg\n");
-// co_MsqPostKeyboardMessage(WM_SYSCOMMAND,SC_KEYMENU,0); // This sends everything into a msg loop!
-}
-
static VOID APIENTRY
KeyboardThreadMain(PVOID StartContext)
{
OBJECT_ATTRIBUTES KeyboardObjectAttributes;
IO_STATUS_BLOCK Iosb;
NTSTATUS Status;
- MSG msg;
- PUSER_MESSAGE_QUEUE FocusQueue;
- struct _ETHREAD *FocusThread;
-
- PKEYBOARD_INDICATOR_TRANSLATION IndicatorTrans = NULL;
- UINT ModifierState = 0;
- USHORT LastMakeCode = 0;
- USHORT LastFlags = 0;
- UINT RepeatCount = 0;
InitializeObjectAttributes(&KeyboardObjectAttributes,
&KeyboardDeviceName,
DueTime.QuadPart = (LONGLONG)(-10000000);
KeInitializeEvent(&Event, NotificationEvent, FALSE);
Status = KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, &DueTime);
- Status = NtOpenFile(&KeyboardDeviceHandle,
+ Status = NtOpenFile(&ghKeyboardDevice,
FILE_ALL_ACCESS,
&KeyboardObjectAttributes,
&Iosb,
KeSetPriorityThread(&PsGetCurrentThread()->Tcb,
LOW_REALTIME_PRIORITY + 3);
- IntKeyboardGetIndicatorTrans(KeyboardDeviceHandle,
- &IndicatorTrans);
+ //IntKeyboardGetIndicatorTrans(ghKeyboardDevice,
+ // &IndicatorTrans);
for (;;)
{
*/
while (InputThreadsRunning)
{
- BOOLEAN NumKeys = 1;
- BOOLEAN bLeftAlt;
KEYBOARD_INPUT_DATA KeyInput;
- KEYBOARD_INPUT_DATA NextKeyInput;
- LPARAM lParam = 0;
- UINT fsModifiers, fsNextModifiers;
- struct _ETHREAD *Thread;
- HWND hWnd;
- int id;
TRACE("KeyInput @ %08x\n", &KeyInput);
- Status = NtReadFile (KeyboardDeviceHandle,
+ Status = NtReadFile (ghKeyboardDevice,
NULL,
NULL,
NULL,
}
if(Status == STATUS_PENDING)
{
- NtWaitForSingleObject(KeyboardDeviceHandle, FALSE, NULL);
+ NtWaitForSingleObject(ghKeyboardDevice, FALSE, NULL);
Status = Iosb.Status;
}
if(!NT_SUCCESS(Status))
/* Set LastInputTick */
IntLastInputTick(TRUE);
- /* Update modifier state */
- fsModifiers = IntKeyboardGetModifiers(&KeyInput);
-
- if (fsModifiers)
- {
- if (KeyInput.Flags & KEY_BREAK)
- {
- ModifierState &= ~fsModifiers;
- if(fsModifiers == MOD_ALT)
- {
- if(KeyInput.Flags & KEY_E0)
- {
- gKeyStateTable[VK_RMENU] = 0;
- }
- else
- {
- gKeyStateTable[VK_LMENU] = 0;
- }
- if (gKeyStateTable[VK_RMENU] == 0 &&
- gKeyStateTable[VK_LMENU] == 0)
- {
- gKeyStateTable[VK_MENU] = 0;
- }
- }
- }
- else
- {
- ModifierState |= fsModifiers;
-
- if (ModifierState == fsModifiers &&
- (fsModifiers == MOD_ALT || fsModifiers == MOD_WIN))
- {
- /* First send out special notifications
- * (For alt, the message that turns on accelerator
- * display, not sure what for win. Both TODO though.)
- */
- bLeftAlt = FALSE;
- if(fsModifiers == MOD_ALT)
- {
- if(KeyInput.Flags & KEY_E0)
- {
- gKeyStateTable[VK_RMENU] = KS_DOWN_BIT;
- }
- else
- {
- gKeyStateTable[VK_LMENU] = KS_DOWN_BIT;
- bLeftAlt = TRUE;
- }
-
- gKeyStateTable[VK_MENU] = KS_DOWN_BIT;
- }
-
- /* Read the next key before sending this one */
- do
- {
- Status = NtReadFile (KeyboardDeviceHandle,
- NULL,
- NULL,
- NULL,
- &Iosb,
- &NextKeyInput,
- sizeof(KEYBOARD_INPUT_DATA),
- NULL,
- NULL);
- TRACE("KeyRaw: %s %04x\n",
- (NextKeyInput.Flags & KEY_BREAK) ? "up" : "down",
- NextKeyInput.MakeCode );
-
- if (Status == STATUS_ALERTED && !InputThreadsRunning)
- goto KeyboardEscape;
-
- }
- while ((!(NextKeyInput.Flags & KEY_BREAK)) &&
- NextKeyInput.MakeCode == KeyInput.MakeCode);
- /* ^ Ignore repeats, they'll be KEY_MAKE and the same
- * code. I'm not caring about the counting, not sure
- * if that matters. I think not.
- */
-
- /* If the ModifierState is now empty again, send a
- * special notification and eat both keypresses
- */
-
- fsNextModifiers = IntKeyboardGetModifiers(&NextKeyInput);
-
- if (fsNextModifiers)
- ModifierState ^= fsNextModifiers;
-
- if (ModifierState == 0)
- {
- UserEnterExclusive();
- if (fsModifiers == MOD_WIN)
- IntKeyboardSendWinKeyMsg();
- else if (fsModifiers == MOD_ALT)
- {
- gKeyStateTable[VK_MENU] = 0;
- if(bLeftAlt)
- {
- gKeyStateTable[VK_LMENU] = 0;
- }
- else
- {
- gKeyStateTable[VK_RMENU] = 0;
- }
- co_IntKeyboardSendAltKeyMsg();
- }
- UserLeave();
- continue;
- }
-
- NumKeys = 2;
- }
- }
- }
-
+ /* Process data */
UserEnterExclusive();
-
- for (; NumKeys; memcpy(&KeyInput, &NextKeyInput, sizeof(KeyInput)),
- NumKeys--)
- {
- PKBL keyboardLayout = NULL;
- lParam = 0;
-
- IntKeyboardUpdateLeds(KeyboardDeviceHandle,
- &KeyInput,
- IndicatorTrans);
-
- /* While we are working, we set up lParam. The format is:
- * 0-15: The number of times this key has autorepeated
- * 16-23: The keyboard scancode
- * 24: Set if it's and extended key (I assume KEY_E0 | KEY_E1)
- * Note that E1 is only used for PAUSE (E1-1D-45) and
- * E0-45 happens not to be anything.
- * 29: Alt is pressed ('Context code')
- * 30: Previous state, if the key was down before this message
- * This is a cheap way to ignore autorepeat keys
- * 31: 1 if the key is being pressed
- */
-
- /* If it's a KEY_MAKE (which is 0, so test using !KEY_BREAK)
- * and it's the same key as the last one, increase the repeat
- * count.
- */
-
- if (!(KeyInput.Flags & KEY_BREAK))
- {
- if (((KeyInput.Flags & (KEY_E0 | KEY_E1)) == LastFlags) &&
- (KeyInput.MakeCode == LastMakeCode))
- {
- RepeatCount++;
- lParam |= (KF_REPEAT << 16);
- }
- else
- {
- RepeatCount = 1;
- LastFlags = KeyInput.Flags & (KEY_E0 | KEY_E1);
- LastMakeCode = KeyInput.MakeCode;
- }
- }
- else
- {
- LastFlags = 0;
- LastMakeCode = 0; /* Should never match */
- lParam |= (KF_UP << 16) | (KF_REPEAT << 16);
- }
-
- lParam |= RepeatCount;
-
- lParam |= (KeyInput.MakeCode & 0xff) << 16;
-
- if (KeyInput.Flags & KEY_E0)
- lParam |= (KF_EXTENDED << 16);
-
- if (ModifierState & MOD_ALT)
- {
- lParam |= (KF_ALTDOWN << 16);
-
- if (!(KeyInput.Flags & KEY_BREAK))
- msg.message = WM_SYSKEYDOWN;
- else
- msg.message = WM_SYSKEYUP;
- }
- else
- {
- if (!(KeyInput.Flags & KEY_BREAK))
- msg.message = WM_KEYDOWN;
- else
- msg.message = WM_KEYUP;
- }
-
- /* Find the target thread whose locale is in effect */
- FocusQueue = IntGetFocusMessageQueue();
-
- if (FocusQueue)
- {
- msg.hwnd = FocusQueue->FocusWindow;
-
- FocusThread = FocusQueue->Thread;
- if (FocusThread && FocusThread->Tcb.Win32Thread)
- {
- keyboardLayout = ((PTHREADINFO)FocusThread->Tcb.Win32Thread)->KeyboardLayout;
- }
- if ( FocusQueue->QF_flags & QF_DIALOGACTIVE )
- lParam |= (KF_DLGMODE << 16);
- if ( FocusQueue->MenuOwner )//FocusQueue->MenuState ) // MenuState needs a start flag...
- lParam |= (KF_MENUMODE << 16);
- }
- if (!keyboardLayout)
- {
- keyboardLayout = W32kGetDefaultKeyLayout();
- }
-
- msg.lParam = lParam;
-
- /* This function uses lParam to fill wParam according to the
- * keyboard layout in use.
- */
- W32kKeyProcessMessage(&msg,
- keyboardLayout->KBTables,
- KeyInput.Flags & KEY_E0 ? 0xE0 :
- (KeyInput.Flags & KEY_E1 ? 0xE1 : 0));
-
- if (GetHotKey(ModifierState,
- msg.wParam,
- &Thread,
- &hWnd,
- &id))
- {
- if (!(KeyInput.Flags & KEY_BREAK))
- {
- TRACE("Hot key pressed (hWnd %lx, id %d)\n", hWnd, id);
- MsqPostHotKeyMessage (Thread,
- hWnd,
- (WPARAM)id,
- MAKELPARAM((WORD)ModifierState,
- (WORD)msg.wParam));
- }
- continue; /* Eat key up motion too */
- }
-
- if (!FocusQueue)
- {
- /* There is no focused window to receive a keyboard message */
- continue;
- }
- if ( msg.wParam == VK_F10 ) // Bypass this key before it is in the queue.
- {
- if (msg.message == WM_KEYUP) msg.message = WM_SYSKEYUP;
- if (msg.message == WM_KEYDOWN) msg.message = WM_SYSKEYDOWN;
- }
- /*
- * Post a keyboard message.
- */
- co_MsqPostKeyboardMessage(msg.message, msg.wParam, msg.lParam);
- }
-
+ UserProcessKeyboardInput(&KeyInput);
UserLeave();
}
-KeyboardEscape:
TRACE( "KeyboardInput Thread Stopped...\n" );
}
}
}
BOOL FASTCALL
-IntBlockInput(PTHREADINFO W32Thread, BOOL BlockIt)
+IntBlockInput(PTHREADINFO pti, BOOL BlockIt)
{
PTHREADINFO OldBlock;
- ASSERT(W32Thread);
+ ASSERT(pti);
- if(!W32Thread->rpdesk || ((W32Thread->TIF_flags & TIF_INCLEANUP) && BlockIt))
+ if(!pti->rpdesk || ((pti->TIF_flags & TIF_INCLEANUP) && BlockIt))
{
/*
* fail blocking if exiting the thread
* FIXME - check access rights of the window station
* e.g. services running in the service window station cannot block input
*/
- if(!ThreadHasInputAccess(W32Thread) ||
- !IntIsActiveDesktop(W32Thread->rpdesk))
+ if(!ThreadHasInputAccess(pti) ||
+ !IntIsActiveDesktop(pti->rpdesk))
{
EngSetLastError(ERROR_ACCESS_DENIED);
return FALSE;
}
- ASSERT(W32Thread->rpdesk);
- OldBlock = W32Thread->rpdesk->BlockInputThread;
+ ASSERT(pti->rpdesk);
+ OldBlock = pti->rpdesk->BlockInputThread;
if(OldBlock)
{
- if(OldBlock != W32Thread)
+ if(OldBlock != pti)
{
EngSetLastError(ERROR_ACCESS_DENIED);
return FALSE;
}
- W32Thread->rpdesk->BlockInputThread = (BlockIt ? W32Thread : NULL);
+ pti->rpdesk->BlockInputThread = (BlockIt ? pti : NULL);
return OldBlock == NULL;
}
- W32Thread->rpdesk->BlockInputThread = (BlockIt ? W32Thread : NULL);
+ pti->rpdesk->BlockInputThread = (BlockIt ? pti : NULL);
return OldBlock == NULL;
}
}
BOOL FASTCALL
-IntKeyboardInput(KEYBDINPUT *ki, BOOL Injected)
-{
- PUSER_MESSAGE_QUEUE FocusMessageQueue;
- MSG Msg;
- LARGE_INTEGER LargeTickCount;
- KBDLLHOOKSTRUCT KbdHookData;
- WORD flags, wVkStripped, wVkL, wVkR, wVk = ki->wVk, vk_hook = ki->wVk;
-
- Msg.lParam = 0;
-
- // Condition may arise when calling MsqPostMessage and waiting for an event.
- ASSERT (UserIsEntered());
-
- wVk = LOBYTE(wVk);
- Msg.wParam = wVk;
- flags = LOBYTE(ki->wScan);
-
- FocusMessageQueue = IntGetFocusMessageQueue();
-
- if (ki->dwFlags & KEYEVENTF_EXTENDEDKEY) flags |= KF_EXTENDED;
- /* FIXME: set KF_DLGMODE and KF_MENUMODE when needed */
- if ( FocusMessageQueue && FocusMessageQueue->QF_flags & QF_DIALOGACTIVE )
- flags |= KF_DLGMODE;
- if ( FocusMessageQueue && FocusMessageQueue->MenuOwner )//FocusMessageQueue->MenuState ) // MenuState needs a start flag...
- flags |= KF_MENUMODE;
-
- /* strip left/right for menu, control, shift */
- switch (wVk)
- {
- case VK_MENU:
- case VK_LMENU:
- case VK_RMENU:
- wVk = (ki->dwFlags & KEYEVENTF_EXTENDEDKEY) ? VK_RMENU : VK_LMENU;
- wVkStripped = VK_MENU;
- wVkL = VK_LMENU;
- wVkR = VK_RMENU;
- break;
- case VK_CONTROL:
- case VK_LCONTROL:
- case VK_RCONTROL:
- wVk = (ki->dwFlags & KEYEVENTF_EXTENDEDKEY) ? VK_RCONTROL : VK_LCONTROL;
- wVkStripped = VK_CONTROL;
- wVkL = VK_LCONTROL;
- wVkR = VK_RCONTROL;
- break;
- case VK_SHIFT:
- case VK_LSHIFT:
- case VK_RSHIFT:
- wVk = (ki->dwFlags & KEYEVENTF_EXTENDEDKEY) ? VK_RSHIFT : VK_LSHIFT;
- wVkStripped = VK_SHIFT;
- wVkL = VK_LSHIFT;
- wVkR = VK_RSHIFT;
- break;
- default:
- wVkStripped = wVkL = wVkR = wVk;
- }
-
- if (ki->dwFlags & KEYEVENTF_KEYUP)
- {
- Msg.message = WM_KEYUP;
- if (((gKeyStateTable[VK_MENU] & KS_DOWN_BIT) &&
- ((wVkStripped == VK_MENU) || (wVkStripped == VK_CONTROL)
- || !(gKeyStateTable[VK_CONTROL] & KS_DOWN_BIT)))
- || (wVkStripped == VK_F10))
- {
- if( TrackSysKey == VK_MENU || /* <ALT>-down/<ALT>-up sequence */
- (wVkStripped != VK_MENU)) /* <ALT>-down...<something else>-up */
- Msg.message = WM_SYSKEYUP;
- TrackSysKey = 0;
- }
- flags |= KF_REPEAT | KF_UP;
- }
- else
- {
- Msg.message = WM_KEYDOWN;
- if (((gKeyStateTable[VK_MENU] & KS_DOWN_BIT || wVkStripped == VK_MENU) &&
- !(gKeyStateTable[VK_CONTROL] & KS_DOWN_BIT || wVkStripped == VK_CONTROL))
- || (wVkStripped == VK_F10))
- {
- Msg.message = WM_SYSKEYDOWN;
- TrackSysKey = wVkStripped;
- }
- if (!(ki->dwFlags & KEYEVENTF_UNICODE) && gKeyStateTable[wVk] & KS_DOWN_BIT) flags |= KF_REPEAT;
- }
-
- if (ki->dwFlags & KEYEVENTF_UNICODE)
- {
- vk_hook = Msg.wParam = wVk = VK_PACKET;
- Msg.lParam = MAKELPARAM(1 /* repeat count */, ki->wScan);
- }
-
- if (!(ki->dwFlags & KEYEVENTF_UNICODE))
- {
- if (ki->dwFlags & KEYEVENTF_KEYUP)
- {
- gKeyStateTable[wVk] &= ~KS_DOWN_BIT;
- gKeyStateTable[wVkStripped] = gKeyStateTable[wVkL] | gKeyStateTable[wVkR];
- }
- else
- {
- if (!(gKeyStateTable[wVk] & KS_DOWN_BIT)) gKeyStateTable[wVk] ^= KS_LOCK_BIT;
- gKeyStateTable[wVk] |= KS_DOWN_BIT;
- gKeyStateTable[wVkStripped] = gKeyStateTable[wVkL] | gKeyStateTable[wVkR];
- }
-
- if (gKeyStateTable[VK_MENU] & KS_DOWN_BIT) flags |= KF_ALTDOWN;
-
- if (wVkStripped == VK_SHIFT) flags &= ~KF_EXTENDED;
-
- Msg.lParam = MAKELPARAM(1 /* repeat count */, flags);
- }
-
- Msg.hwnd = 0;
-
- if (FocusMessageQueue && (FocusMessageQueue->FocusWindow != (HWND)0))
- Msg.hwnd = FocusMessageQueue->FocusWindow;
-
- if (!ki->time)
- {
- KeQueryTickCount(&LargeTickCount);
- Msg.time = MsqCalculateMessageTime(&LargeTickCount);
- }
- else
- Msg.time = ki->time;
-
- /* All messages have to contain the cursor point. */
- Msg.pt = gpsi->ptCursor;
-
- KbdHookData.vkCode = vk_hook;
- KbdHookData.scanCode = ki->wScan;
- KbdHookData.flags = (flags & (KF_EXTENDED | KF_ALTDOWN | KF_UP)) >> 8;
- if (Injected) KbdHookData.flags |= LLKHF_INJECTED;
- KbdHookData.time = Msg.time;
- KbdHookData.dwExtraInfo = ki->dwExtraInfo;
- if (co_HOOK_CallHooks(WH_KEYBOARD_LL, HC_ACTION, Msg.message, (LPARAM) &KbdHookData))
- {
- ERR("Kbd msg %d wParam %d lParam 0x%08x dropped by WH_KEYBOARD_LL hook\n",
- Msg.message, vk_hook, Msg.lParam);
-
- return FALSE;
- }
-
- if (FocusMessageQueue == NULL)
- {
- TRACE("No focus message queue\n");
-
- return FALSE;
- }
-
- if (FocusMessageQueue->FocusWindow != (HWND)0)
- {
- Msg.hwnd = FocusMessageQueue->FocusWindow;
- TRACE("Msg.hwnd = %x\n", Msg.hwnd);
-
- FocusMessageQueue->Desktop->pDeskInfo->LastInputWasKbd = TRUE;
-
- // Post to hardware queue, based on the first part of wine "some GetMessage tests"
- // in test_PeekMessage()
- MsqPostMessage(FocusMessageQueue, &Msg, TRUE, QS_KEY);
- }
- else
- {
- TRACE("Invalid focus window handle\n");
- }
-
- return TRUE;
-}
-
-BOOL FASTCALL
-UserAttachThreadInput( PTHREADINFO pti, PTHREADINFO ptiTo, BOOL fAttach)
+UserAttachThreadInput(PTHREADINFO pti, PTHREADINFO ptiTo, BOOL fAttach)
{
PATTACHINFO pai;
LPINPUT pInput,
INT cbSize)
{
- PTHREADINFO W32Thread;
+ PTHREADINFO pti;
UINT cnt;
DECLARE_RETURN(UINT);
TRACE("Enter NtUserSendInput\n");
UserEnterExclusive();
- W32Thread = PsGetCurrentThreadWin32Thread();
- ASSERT(W32Thread);
+ pti = PsGetCurrentThreadWin32Thread();
+ ASSERT(pti);
- if(!W32Thread->rpdesk)
+ if (!pti->rpdesk)
{
RETURN( 0);
}
- if(!nInputs || !pInput || (cbSize != sizeof(INPUT)))
+ if (!nInputs || !pInput || cbSize != sizeof(INPUT))
{
EngSetLastError(ERROR_INVALID_PARAMETER);
RETURN( 0);
* FIXME - check access rights of the window station
* e.g. services running in the service window station cannot block input
*/
- if(!ThreadHasInputAccess(W32Thread) ||
- !IntIsActiveDesktop(W32Thread->rpdesk))
+ if (!ThreadHasInputAccess(pti) ||
+ !IntIsActiveDesktop(pti->rpdesk))
{
EngSetLastError(ERROR_ACCESS_DENIED);
RETURN( 0);
}
cnt = 0;
- while(nInputs--)
+ while (nInputs--)
{
INPUT SafeInput;
NTSTATUS Status;
Status = MmCopyFromCaller(&SafeInput, pInput++, sizeof(INPUT));
- if(!NT_SUCCESS(Status))
+ if (!NT_SUCCESS(Status))
{
SetLastNtError(Status);
RETURN( cnt);
}
- switch(SafeInput.type)
+ switch (SafeInput.type)
{
case INPUT_MOUSE:
- if(IntMouseInput(&SafeInput.mi, TRUE))
- {
+ if (IntMouseInput(&SafeInput.mi, TRUE))
cnt++;
- }
break;
case INPUT_KEYBOARD:
- if(IntKeyboardInput(&SafeInput.ki, TRUE))
- {
+ if (UserSendKeyboardInput(&SafeInput.ki, TRUE))
cnt++;
- }
break;
case INPUT_HARDWARE:
break;
-#ifndef NDEBUG
-
default:
ERR("SendInput(): Invalid input type: 0x%x\n", SafeInput.type);
break;
-#endif
-
}
}
EngUnloadImage(*phModule);
return FALSE;
}
+
+#if 0 // Dump keyboard layout
+ {
+ unsigned i;
+ PVK_TO_BIT pVkToBit = (*pKbdTables)->pCharModifiers->pVkToBit;
+ PVK_TO_WCHAR_TABLE pVkToWchTbl = (*pKbdTables)->pVkToWcharTable;
+ PVSC_VK pVscVk = (*pKbdTables)->pVSCtoVK_E0;
+ DbgPrint("Kbd layout: fLocaleFlags %x bMaxVSCtoVK %x\n", (*pKbdTables)->fLocaleFlags, (*pKbdTables)->bMaxVSCtoVK);
+ DbgPrint("wMaxModBits %x\n", (*pKbdTables)->pCharModifiers->wMaxModBits);
+ while(pVkToBit->Vk)
+ {
+ DbgPrint("VkToBit %x -> %x\n", pVkToBit->Vk, pVkToBit->ModBits);
+ ++pVkToBit;
+ }
+ for(i = 0; i <= (*pKbdTables)->pCharModifiers->wMaxModBits; ++i)
+ DbgPrint("ModNumber %x -> %x\n", i, (*pKbdTables)->pCharModifiers->ModNumber[i]);
+ while(pVkToWchTbl->pVkToWchars)
+ {
+ PVK_TO_WCHARS1 pVkToWch = pVkToWchTbl->pVkToWchars;
+ DbgPrint("pVkToWchTbl nModifications %x cbSize %x\n", pVkToWchTbl->nModifications, pVkToWchTbl->cbSize);
+ while(pVkToWch->VirtualKey)
+ {
+ DbgPrint("pVkToWch VirtualKey %x Attributes %x wc { ", pVkToWch->VirtualKey, pVkToWch->Attributes);
+ for(i = 0; i < pVkToWchTbl->nModifications; ++i)
+ DbgPrint("%x ", pVkToWch->wch[i]);
+ DbgPrint("}\n");
+ pVkToWch = (PVK_TO_WCHARS1)(((PBYTE)pVkToWch) + pVkToWchTbl->cbSize);
+ }
+ ++pVkToWchTbl;
+ }
+ DbgPrint("pusVSCtoVK: { ");
+ for(i = 0; i < (*pKbdTables)->bMaxVSCtoVK; ++i)
+ DbgPrint("%x -> %x, ", i, (*pKbdTables)->pusVSCtoVK[i]);
+ DbgPrint("}\n");
+ DbgPrint("pVSCtoVK_E0: { ");
+ while(pVscVk->Vsc)
+ {
+ DbgPrint("%x -> %x, ", pVscVk->Vsc, pVscVk->Vk);
+ ++pVscVk;
+ }
+ DbgPrint("}\n");
+ pVscVk = (*pKbdTables)->pVSCtoVK_E1;
+ DbgPrint("pVSCtoVK_E1: { ");
+ while(pVscVk->Vsc)
+ {
+ DbgPrint("%x -> %x, ", pVscVk->Vsc, pVscVk->Vk);
+ ++pVscVk;
+ }
+ DbgPrint("}\n");
+ }
+ DbgBreakPoint();
+#endif
}
else
{
* PROJECT: ReactOS kernel
* PURPOSE: Keyboard functions
* FILE: subsys/win32k/ntuser/keyboard.c
- * PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * PROGRAMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * Rafal Harabien (rafalh@reactos.org)
*/
#include <win32k.h>
DBG_DEFAULT_CHANNEL(UserKbd);
BYTE gKeyStateTable[0x100];
+static PKEYBOARD_INDICATOR_TRANSLATION gpKeyboardIndicatorTrans = NULL;
/* FUNCTIONS *****************************************************************/
-/* Initialization -- Right now, just zero the key state and init the lock */
+/*
+ * InitKeyboardImpl
+ *
+ * Initialization -- Right now, just zero the key state
+ */
INIT_FUNCTION
NTSTATUS
NTAPI
InitKeyboardImpl(VOID)
{
- RtlZeroMemory(&gKeyStateTable, 0x100);
+ RtlZeroMemory(&gKeyStateTable, sizeof(gKeyStateTable));
return STATUS_SUCCESS;
}
-/*** Statics used by TranslateMessage ***/
-
-/*** Shift state code was out of hand, sorry. --- arty */
-
-static UINT DontDistinguishShifts( UINT ret )
+/*
+ * IntKeyboardGetIndicatorTrans
+ *
+ * Asks the keyboard driver to send a small table that shows which
+ * lights should connect with which scancodes
+ */
+static
+NTSTATUS APIENTRY
+IntKeyboardGetIndicatorTrans(HANDLE hKeyboardDevice,
+ PKEYBOARD_INDICATOR_TRANSLATION *ppIndicatorTrans)
{
- if( ret == VK_LSHIFT || ret == VK_RSHIFT )
- ret = VK_SHIFT;
- if( ret == VK_LCONTROL || ret == VK_RCONTROL )
- ret = VK_CONTROL;
- if( ret == VK_LMENU || ret == VK_RMENU )
- ret = VK_MENU;
- return ret;
-}
+ NTSTATUS Status;
+ DWORD dwSize = 0;
+ IO_STATUS_BLOCK Block;
+ PKEYBOARD_INDICATOR_TRANSLATION pRet;
-static VOID APIENTRY SetKeyState(DWORD key, DWORD vk, DWORD ext, BOOL down)
-{
- ASSERT(vk <= 0xff);
+ dwSize = sizeof(KEYBOARD_INDICATOR_TRANSLATION);
- /* Special handling for toggles like numpad and caps lock */
- if (vk == VK_CAPITAL || vk == VK_NUMLOCK)
+ pRet = ExAllocatePoolWithTag(PagedPool,
+ dwSize,
+ USERTAG_KBDTABLE);
+
+ while (pRet)
{
- if (down)
- gKeyStateTable[vk] ^= KS_LOCK_BIT;
- }
+ Status = NtDeviceIoControlFile(hKeyboardDevice,
+ NULL,
+ NULL,
+ NULL,
+ &Block,
+ IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION,
+ NULL, 0,
+ pRet, dwSize);
+
+ if (Status != STATUS_BUFFER_TOO_SMALL)
+ break;
- if (vk == VK_SHIFT)
- vk = ext ? VK_RSHIFT : VK_LSHIFT;
- if (vk == VK_CONTROL)
- vk = ext ? VK_RCONTROL : VK_LCONTROL;
- if (vk == VK_MENU)
- vk = ext ? VK_RMENU : VK_LMENU;
+ ExFreePoolWithTag(pRet, USERTAG_KBDTABLE);
- if (down)
- gKeyStateTable[vk] |= KS_DOWN_BIT;
- else
- gKeyStateTable[vk] &= ~KS_DOWN_BIT;
+ dwSize += sizeof(KEYBOARD_INDICATOR_TRANSLATION);
- if (vk == VK_LSHIFT || vk == VK_RSHIFT)
- {
- if ((gKeyStateTable[VK_LSHIFT] & KS_DOWN_BIT) ||
- (gKeyStateTable[VK_RSHIFT] & KS_DOWN_BIT))
- {
- gKeyStateTable[VK_SHIFT] |= KS_DOWN_BIT;
- }
- else
- {
- gKeyStateTable[VK_SHIFT] &= ~KS_DOWN_BIT;
- }
+ pRet = ExAllocatePoolWithTag(PagedPool,
+ dwSize,
+ USERTAG_KBDTABLE);
}
- if (vk == VK_LCONTROL || vk == VK_RCONTROL)
+ if (!pRet)
+ return STATUS_INSUFFICIENT_RESOURCES;
+
+ if (!NT_SUCCESS(Status))
{
- if ((gKeyStateTable[VK_LCONTROL] & KS_DOWN_BIT) ||
- (gKeyStateTable[VK_RCONTROL] & KS_DOWN_BIT))
- {
- gKeyStateTable[VK_CONTROL] |= KS_DOWN_BIT;
- }
- else
- {
- gKeyStateTable[VK_CONTROL] &= ~KS_DOWN_BIT;
- }
+ ExFreePoolWithTag(pRet, USERTAG_KBDTABLE);
+ return Status;
}
- if (vk == VK_LMENU || vk == VK_RMENU)
+ *ppIndicatorTrans = pRet;
+ return Status;
+}
+
+/*
+ * IntKeyboardUpdateLeds
+ *
+ * Sends the keyboard commands to turn on/off the lights
+ */
+static
+NTSTATUS APIENTRY
+IntKeyboardUpdateLeds(HANDLE hKeyboardDevice,
+ WORD wScanCode,
+ BOOL bEnabled,
+ PKEYBOARD_INDICATOR_TRANSLATION pIndicatorTrans)
+{
+ NTSTATUS Status;
+ UINT i;
+ static KEYBOARD_INDICATOR_PARAMETERS Indicators;
+ IO_STATUS_BLOCK Block;
+
+ if (!pIndicatorTrans)
+ return STATUS_NOT_SUPPORTED;
+
+ for (i = 0; i < pIndicatorTrans->NumberOfIndicatorKeys; i++)
{
- if ((gKeyStateTable[VK_LMENU] & KS_DOWN_BIT) ||
- (gKeyStateTable[VK_RMENU] & KS_DOWN_BIT))
+ if (pIndicatorTrans->IndicatorList[i].MakeCode == wScanCode)
{
- gKeyStateTable[VK_MENU] |= KS_DOWN_BIT;
- }
- else
- {
- gKeyStateTable[VK_MENU] &= ~KS_DOWN_BIT;
+ if (bEnabled)
+ Indicators.LedFlags |= pIndicatorTrans->IndicatorList[i].IndicatorFlags;
+ else
+ Indicators.LedFlags = ~pIndicatorTrans->IndicatorList[i].IndicatorFlags;
+
+ /* Update the lights on the hardware */
+ Status = NtDeviceIoControlFile(hKeyboardDevice,
+ NULL,
+ NULL,
+ NULL,
+ &Block,
+ IOCTL_KEYBOARD_SET_INDICATORS,
+ &Indicators, sizeof(Indicators),
+ NULL, 0);
+
+ return Status;
}
}
+
+ return STATUS_SUCCESS;
}
-VOID DumpKeyState( PBYTE KeyState )
+/*
+ * IntSimplifyVk
+ *
+ * Changes virtual keys which distinguish between left and right hand, to keys which don't distinguish
+ */
+static
+WORD
+IntSimplifyVk(WORD wVk)
{
- int i;
-
- DbgPrint( "KeyState { " );
- for( i = 0; i < 0x100; i++ )
+ switch (wVk)
{
- if( KeyState[i] )
- DbgPrint( "%02x(%02x) ", i, KeyState[i] );
+ case VK_LSHIFT:
+ case VK_RSHIFT:
+ return VK_SHIFT;
+
+ case VK_LCONTROL:
+ case VK_RCONTROL:
+ return VK_CONTROL;
+
+ case VK_LMENU:
+ case VK_RMENU:
+ return VK_MENU;
+
+ default:
+ return wVk;
}
- DbgPrint( "};\n" );
}
-static BYTE KeysSet( PKBDTABLES pkKT, PBYTE KeyState,
- int FakeModLeft, int FakeModRight )
+/*
+ * IntFixVk
+ *
+ * Changes virtual keys which don't not distinguish between left and right hand to proper keys
+ */
+static
+WORD
+IntFixVk(WORD wVk, BOOL bExt)
{
- if( !KeyState || !pkKT )
- return 0;
+ switch (wVk)
+ {
+ case VK_SHIFT:
+ return bExt ? VK_RSHIFT : VK_LSHIFT;
- /* Search special codes first */
- if( FakeModLeft && KeyState[FakeModLeft] )
- return KeyState[FakeModLeft];
- else if( FakeModRight && KeyState[FakeModRight] )
- return KeyState[FakeModRight];
+ case VK_CONTROL:
+ return bExt ? VK_RCONTROL : VK_LCONTROL;
- return 0;
-}
+ case VK_MENU:
+ return bExt ? VK_RMENU : VK_LMENU;
-/* Search the keyboard layout modifiers table for the shift bit. I don't
- * want to count on the shift bit not moving, because it can be specified
- * in the layout */
+ default:
+ return wVk;
+ }
+}
-static DWORD FASTCALL GetShiftBit( PKBDTABLES pkKT, DWORD Vk )
+/*
+ * IntGetVkOtherSide
+ *
+ * Gets other side of vk: right -> left, left -> right
+ */
+static
+WORD
+IntGetVkOtherSide(WORD wVk)
{
- int i;
+ switch (wVk)
+ {
+ case VK_LSHIFT: return VK_RSHIFT;
+ case VK_RSHIFT: return VK_LSHIFT;
- for( i = 0; pkKT->pCharModifiers->pVkToBit[i].Vk; i++ )
- if( pkKT->pCharModifiers->pVkToBit[i].Vk == Vk )
- return pkKT->pCharModifiers->pVkToBit[i].ModBits;
+ case VK_LCONTROL: return VK_RCONTROL;
+ case VK_RCONTROL: return VK_LCONTROL;
- return 0;
+ case VK_LMENU: return VK_RMENU;
+ case VK_RMENU: return VK_LMENU;
+
+ default: return wVk;
+ }
}
-static DWORD ModBits( PKBDTABLES pkKT, PBYTE KeyState )
+/*
+ * IntTranslateNumpadKey
+ *
+ * Translates numpad keys when numlock is enabled
+ */
+static
+WORD
+IntTranslateNumpadKey(WORD wVk)
{
- DWORD ModBits = 0;
+ switch (wVk)
+ {
+ case VK_INSERT: return VK_NUMPAD0;
+ case VK_END: return VK_NUMPAD1;
+ case VK_DOWN: return VK_NUMPAD2;
+ case VK_NEXT: return VK_NUMPAD3;
+ case VK_LEFT: return VK_NUMPAD4;
+ case VK_CLEAR: return VK_NUMPAD5;
+ case VK_RIGHT: return VK_NUMPAD6;
+ case VK_HOME: return VK_NUMPAD7;
+ case VK_UP: return VK_NUMPAD8;
+ case VK_PRIOR: return VK_NUMPAD9;
+ case VK_DELETE: return VK_DECIMAL;
+ default: return wVk;
+ }
+}
- if( !KeyState )
- return 0;
+/*
+ * IntGetModifiers
+ *
+ * Returns a value that indicates if the key is a modifier key, and
+ * which one.
+ */
+static
+UINT FASTCALL
+IntGetModifiers(PBYTE pKeyState)
+{
+ UINT fModifiers = 0;
+
+ if (pKeyState[VK_SHIFT] & KS_DOWN_BIT)
+ fModifiers |= MOD_SHIFT;
- /* DumpKeyState( KeyState ); */
+ if (pKeyState[VK_CONTROL] & KS_DOWN_BIT)
+ fModifiers |= MOD_CONTROL;
- if (KeysSet( pkKT, KeyState, VK_LSHIFT, VK_RSHIFT ) &
- KS_DOWN_BIT)
- ModBits |= GetShiftBit( pkKT, VK_SHIFT );
+ if (pKeyState[VK_MENU] & KS_DOWN_BIT)
+ fModifiers |= MOD_ALT;
- if (KeysSet( pkKT, KeyState, VK_SHIFT, 0 ) &
- KS_DOWN_BIT)
- ModBits |= GetShiftBit( pkKT, VK_SHIFT );
+ if ((pKeyState[VK_LWIN] | pKeyState[VK_RWIN]) & KS_DOWN_BIT)
+ fModifiers |= MOD_WIN;
- if (KeysSet( pkKT, KeyState, VK_LCONTROL, VK_RCONTROL ) &
- KS_DOWN_BIT )
- ModBits |= GetShiftBit( pkKT, VK_CONTROL );
+ return fModifiers;
+}
- if (KeysSet( pkKT, KeyState, VK_CONTROL, 0 ) &
- KS_DOWN_BIT )
- ModBits |= GetShiftBit( pkKT, VK_CONTROL );
+/*
+ * IntGetShiftBit
+ *
+ * Search the keyboard layout modifiers table for the shift bit
+ */
+static
+DWORD FASTCALL
+IntGetShiftBit(PKBDTABLES pKbdTbl, WORD wVk)
+{
+ unsigned i;
- if (KeysSet( pkKT, KeyState, VK_LMENU, VK_RMENU ) &
- KS_DOWN_BIT )
- ModBits |= GetShiftBit( pkKT, VK_MENU );
+ for (i = 0; pKbdTbl->pCharModifiers->pVkToBit[i].Vk; i++)
+ if (pKbdTbl->pCharModifiers->pVkToBit[i].Vk == wVk)
+ return pKbdTbl->pCharModifiers->pVkToBit[i].ModBits;
- /* Handle Alt+Gr */
- if (pkKT->fLocalFlags & 0x1)
- if (KeysSet( pkKT, KeyState, VK_RMENU, 0 ) &
- KS_DOWN_BIT)
- ModBits |= GetShiftBit( pkKT, VK_CONTROL );
+ return 0;
+}
- /* Deal with VK_CAPITAL */
- if (KeysSet( pkKT, KeyState, VK_CAPITAL, 0 ) & KS_LOCK_BIT)
- {
- ModBits |= CAPITAL_BIT;
- }
+/*
+ * IntGetModBits
+ *
+ * Gets layout specific modification bits, for example KBDSHIFT, KBDCTRL, KBDALT
+ */
+static
+DWORD
+IntGetModBits(PKBDTABLES pKbdTbl, PBYTE pKeyState)
+{
+ DWORD i, dwModBits = 0;
- /* Deal with VK_NUMLOCK */
- if (KeysSet( pkKT, KeyState, VK_NUMLOCK, 0 ) & KS_LOCK_BIT)
- {
- ModBits |= NUMLOCK_BIT;
- }
+ /* DumpKeyState( KeyState ); */
- TRACE( "Current Mod Bits: %x\n", ModBits );
+ for (i = 0; pKbdTbl->pCharModifiers->pVkToBit[i].Vk; i++)
+ if (pKeyState[pKbdTbl->pCharModifiers->pVkToBit[i].Vk] & KS_DOWN_BIT)
+ dwModBits |= pKbdTbl->pCharModifiers->pVkToBit[i].ModBits;
- return ModBits;
+ /* Handle Alt+Gr */
+ if ((pKbdTbl->fLocaleFlags & KLLF_ALTGR) && (pKeyState[VK_RMENU] & KS_DOWN_BIT))
+ dwModBits |= IntGetShiftBit(pKbdTbl, VK_CONTROL); /* Don't use KBDCTRL here */
+
+ TRACE("Current Mod Bits: %lx\n", dwModBits);
+
+ return dwModBits;
}
-static BOOL TryToTranslateChar(WORD wVirtKey,
- DWORD ModBits,
- PBOOL pbDead,
- PBOOL pbLigature,
- PWCHAR pwcTranslatedChar,
- PKBDTABLES keyLayout )
+/*
+ * IntTranslateChar
+ *
+ * Translates virtual key to character
+ */
+static
+BOOL
+IntTranslateChar(WORD wVirtKey,
+ PBYTE pKeyState,
+ PBOOL pbDead,
+ PBOOL pbLigature,
+ PWCHAR pwcTranslatedChar,
+ PKBDTABLES pKbdTbl)
{
- PVK_TO_WCHAR_TABLE vtwTbl;
- PVK_TO_WCHARS10 vkPtr;
- size_t size_this_entry;
- int nMod;
- DWORD CapsMod = 0, CapsState = 0;
+ PVK_TO_WCHAR_TABLE pVkToVchTbl;
+ PVK_TO_WCHARS10 pVkToVch;
+ DWORD i, dwModBits, dwVkModBits, dwModNumber = 0;
+ WCHAR wch;
+ BOOL bAltGr;
+ WORD wCaplokAttr;
- CapsState = ModBits & ~MOD_BITS_MASK;
- ModBits = ModBits & MOD_BITS_MASK;
+ dwModBits = pKeyState ? IntGetModBits(pKbdTbl, pKeyState) : 0;
+ bAltGr = pKeyState && (pKbdTbl->fLocaleFlags & KLLF_ALTGR) && (pKeyState[VK_RMENU] & KS_DOWN_BIT);
+ wCaplokAttr = bAltGr ? CAPLOKALTGR : CAPLOK;
- TRACE ( "TryToTranslate: %04x %x\n", wVirtKey, ModBits );
+ TRACE("TryToTranslate: %04x %x\n", wVirtKey, dwModBits);
- if (ModBits > keyLayout->pCharModifiers->wMaxModBits)
+ if (dwModBits > pKbdTbl->pCharModifiers->wMaxModBits)
{
+ TRACE("dwModBits %x > wMaxModBits %x\n", dwModBits, pKbdTbl->pCharModifiers->wMaxModBits);
return FALSE;
}
- for (nMod = 0; keyLayout->pVkToWcharTable[nMod].nModifications; nMod++)
+ for (i = 0; pKbdTbl->pVkToWcharTable[i].pVkToWchars; i++)
{
- vtwTbl = &keyLayout->pVkToWcharTable[nMod];
- size_this_entry = vtwTbl->cbSize;
- vkPtr = (PVK_TO_WCHARS10)((BYTE *)vtwTbl->pVkToWchars);
- while(vkPtr->VirtualKey)
+ pVkToVchTbl = &pKbdTbl->pVkToWcharTable[i];
+ pVkToVch = (PVK_TO_WCHARS10)(pVkToVchTbl->pVkToWchars);
+ while (pVkToVch->VirtualKey)
{
- if( wVirtKey == (vkPtr->VirtualKey & 0xff) )
+ if (wVirtKey == (pVkToVch->VirtualKey & 0xFF))
{
- CapsMod = keyLayout->pCharModifiers->ModNumber
- [ModBits ^
- ((CapsState & CAPITAL_BIT) ? vkPtr->Attributes : 0)];
+ dwVkModBits = dwModBits;
- if( CapsMod >= keyLayout->pVkToWcharTable[nMod].nModifications )
+ /* If CapsLock is enabled for this key and locked, add SHIFT bit */
+ if ((pVkToVch->Attributes & wCaplokAttr) &&
+ pKeyState &&
+ (pKeyState[VK_CAPITAL] & KS_LOCK_BIT))
{
- return FALSE;
+ /* Note: we use special value here instead of getting VK_SHIFT mod bit - it's verified */
+ dwVkModBits ^= KBDSHIFT;
}
- if( vkPtr->wch[CapsMod] == WCH_NONE )
+ /* If ALT without CTRL has ben used, remove ALT flag */
+ if ((dwVkModBits & (KBDALT|KBDCTRL)) == KBDALT)
+ dwVkModBits &= ~KBDALT;
+
+ if (dwVkModBits > pKbdTbl->pCharModifiers->wMaxModBits)
+ break;
+
+ /* Get modification number */
+ dwModNumber = pKbdTbl->pCharModifiers->ModNumber[dwVkModBits];
+ if (dwModNumber >= pVkToVchTbl->nModifications)
{
- return FALSE;
+ TRACE("dwModNumber %u >= nModifications %u\n", dwModNumber, pVkToVchTbl->nModifications);
+ break;
}
- *pbDead = vkPtr->wch[CapsMod] == WCH_DEAD;
- *pbLigature = vkPtr->wch[CapsMod] == WCH_LGTR;
- *pwcTranslatedChar = vkPtr->wch[CapsMod];
+ /* Read character */
+ wch = pVkToVch->wch[dwModNumber];
+ if (wch == WCH_NONE)
+ break;
+
+ *pbDead = (wch == WCH_DEAD);
+ *pbLigature = (wch == WCH_LGTR);
+ *pwcTranslatedChar = wch;
- TRACE("%d %04x: CapsMod %08x CapsState %08x Char %04x\n",
- nMod, wVirtKey,
- CapsMod, CapsState, *pwcTranslatedChar);
+ TRACE("%d %04x: dwModNumber %08x Char %04x\n",
+ i, wVirtKey, dwModNumber, wch);
- if( *pbDead )
+ if (*pbDead)
{
- vkPtr = (PVK_TO_WCHARS10)(((BYTE *)vkPtr) + size_this_entry);
- if( vkPtr->VirtualKey != 0xff )
+ /* After WCH_DEAD, real character is located */
+ pVkToVch = (PVK_TO_WCHARS10)(((BYTE *)pVkToVch) + pVkToVchTbl->cbSize);
+ if (pVkToVch->VirtualKey != 0xFF)
{
- TRACE( "Found dead key with no trailer in the table.\n" );
- TRACE( "VK: %04x, ADDR: %p\n", wVirtKey, vkPtr );
- return FALSE;
+ WARN("Found dead key with no trailer in the table.\n");
+ WARN("VK: %04x, ADDR: %p\n", wVirtKey, pVkToVch);
+ break;
}
- *pwcTranslatedChar = vkPtr->wch[CapsMod];
+ *pwcTranslatedChar = pVkToVch->wch[dwModNumber];
}
return TRUE;
}
- vkPtr = (PVK_TO_WCHARS10)(((BYTE *)vkPtr) + size_this_entry);
+ pVkToVch = (PVK_TO_WCHARS10)(((BYTE *)pVkToVch) + pVkToVchTbl->cbSize);
}
}
+
+ /* If nothing has been found in layout, check if this is ASCII control character.
+ Note: we could add it to layout table, but windows does not have it there */
+ if (wVirtKey >= 'A' && wVirtKey <= 'Z' &&
+ (pKeyState[VK_CONTROL] & KS_DOWN_BIT) &&
+ !(pKeyState[VK_MENU] & KS_DOWN_BIT))
+ {
+ *pwcTranslatedChar = (wVirtKey - 'A') + 1; /* ASCII control character */
+ *pbDead = FALSE;
+ *pbLigature = FALSE;
+ return TRUE;
+ }
+
return FALSE;
}
+/*
+ * IntToUnicodeEx
+ *
+ * Translates virtual key to characters
+ */
static
int APIENTRY
-ToUnicodeInner(UINT wVirtKey,
+IntToUnicodeEx(UINT wVirtKey,
UINT wScanCode,
- PBYTE lpKeyState,
+ PBYTE pKeyState,
LPWSTR pwszBuff,
int cchBuff,
UINT wFlags,
- PKBDTABLES pkKT)
+ PKBDTABLES pKbdTbl)
{
- WCHAR wcTranslatedChar;
- BOOL bDead;
- BOOL bLigature;
+ WCHAR wchTranslatedChar;
+ BOOL bDead, bLigature;
+ static WCHAR wchDead = 0;
+ int iRet = 0;
+
+ ASSERT(pKbdTbl);
+
+ if (!IntTranslateChar(wVirtKey,
+ pKeyState,
+ &bDead,
+ &bLigature,
+ &wchTranslatedChar,
+ pKbdTbl))
+ {
+ return 0;
+ }
- if( !pkKT )
+ if (bLigature)
+ {
+ WARN("Not handling ligature (yet)\n" );
return 0;
+ }
- if( TryToTranslateChar( wVirtKey,
- ModBits( pkKT, lpKeyState ),
- &bDead,
- &bLigature,
- &wcTranslatedChar,
- pkKT ) )
+ /* If we got dead char in previous call check dead keys in keyboard layout */
+ if (wchDead)
{
- if( bLigature )
+ UINT i;
+ WCHAR wchFirst, wchSecond;
+ TRACE("PREVIOUS DEAD CHAR: %c\n", wchDead);
+
+ for (i = 0; pKbdTbl->pDeadKey[i].dwBoth; i++)
{
- WARN("Not handling ligature (yet)\n" );
- return 0;
+ wchFirst = pKbdTbl->pDeadKey[i].dwBoth >> 16;
+ wchSecond = pKbdTbl->pDeadKey[i].dwBoth & 0xFFFF;
+ if (wchFirst == wchDead && wchSecond == wchTranslatedChar)
+ {
+ wchTranslatedChar = pKbdTbl->pDeadKey[i].wchComposed;
+ wchDead = 0;
+ bDead = FALSE;
+ break;
+ }
}
- if( cchBuff > 0 )
- pwszBuff[0] = wcTranslatedChar;
+ TRACE("FINAL CHAR: %c\n", wchTranslatedChar);
+ }
+
+ /* dead char has not been not found */
+ if (wchDead)
+ {
+ /* Treat both characters normally */
+ if (cchBuff > iRet)
+ pwszBuff[iRet++] = wchDead;
+ bDead = FALSE;
+ }
+
+ /* add character to the buffer */
+ if (cchBuff > iRet)
+ pwszBuff[iRet++] = wchTranslatedChar;
+
+ /* Save dead character */
+ wchDead = bDead ? wchTranslatedChar : 0;
+
+ return bDead ? -iRet : iRet;
+}
+
+/*
+ * IntVkToVsc
+ *
+ * Translates virtual key to scan code
+ */
+static
+WORD FASTCALL
+IntVkToVsc(WORD wVk, PKBDTABLES pKbdTbl)
+{
+ unsigned i;
+
+ ASSERT(pKbdTbl);
- return bDead ? -1 : 1;
+ /* Check standard keys first */
+ for (i = 0; i < pKbdTbl->bMaxVSCtoVK; i++)
+ {
+ if ((pKbdTbl->pusVSCtoVK[i] & 0xFF) == wVk)
+ return i;
+ }
+
+ /* Check extended keys now */
+ for (i = 0; pKbdTbl->pVSCtoVK_E0[i].Vsc; i++)
+ {
+ if ((pKbdTbl->pVSCtoVK_E0[i].Vk & 0xFF) == wVk)
+ return 0xE000 | pKbdTbl->pVSCtoVK_E0[i].Vsc;
+ }
+
+ for (i = 0; pKbdTbl->pVSCtoVK_E1[i].Vsc; i++)
+ {
+ if ((pKbdTbl->pVSCtoVK_E1[i].Vk & 0xFF) == wVk)
+ return 0xE100 | pKbdTbl->pVSCtoVK_E1[i].Vsc;
}
+ /* Virtual key has not been found */
return 0;
}
+/*
+ * IntVscToVk
+ *
+ * Translates prefixed scancode to virtual key
+ */
+static
+WORD FASTCALL
+IntVscToVk(WORD wScanCode, PKBDTABLES pKbdTbl)
+{
+ unsigned i;
+ WORD wVk = 0;
+
+ ASSERT(pKbdTbl);
+
+ if ((wScanCode & 0xFF00) == 0xE000)
+ {
+ for (i = 0; pKbdTbl->pVSCtoVK_E0[i].Vsc; i++)
+ {
+ if (pKbdTbl->pVSCtoVK_E0[i].Vsc == (wScanCode & 0xFF))
+ {
+ wVk = pKbdTbl->pVSCtoVK_E0[i].Vk;
+ }
+ }
+ }
+ else if ((wScanCode & 0xFF00) == 0xE100)
+ {
+ for (i = 0; pKbdTbl->pVSCtoVK_E1[i].Vsc; i++)
+ {
+ if (pKbdTbl->pVSCtoVK_E1[i].Vsc == (wScanCode & 0xFF))
+ {
+ wVk = pKbdTbl->pVSCtoVK_E1[i].Vk;
+ }
+ }
+ }
+ else if (wScanCode < pKbdTbl->bMaxVSCtoVK)
+ {
+ wVk = pKbdTbl->pusVSCtoVK[wScanCode];
+ }
-DWORD FASTCALL UserGetAsyncKeyState(DWORD key)
+ /* 0xFF nad 0x00 are invalid VKs */
+ return wVk != 0xFF ? wVk : 0;
+}
+
+/*
+ * IntVkToChar
+ *
+ * Translates virtual key to character, ignoring shift state
+ */
+static
+WCHAR FASTCALL
+IntVkToChar(WORD wVk, PKBDTABLES pKbdTbl)
{
- DWORD ret = 0;
+ WCHAR wch;
+ BOOL bDead, bLigature;
+
+ ASSERT(pKbdTbl);
- if( key < 0x100 )
+ if (IntTranslateChar(wVk,
+ NULL,
+ &bDead,
+ &bLigature,
+ &wch,
+ pKbdTbl))
{
- ret = ((DWORD)(gKeyStateTable[key] & KS_DOWN_BIT) << 8 ) |
- (gKeyStateTable[key] & KS_LOCK_BIT);
- if ( ret & 0x8000 )
- ret |= 0xFFFF0000; // If down, windows returns 0xFFFF8000.
+ return wch;
}
- else
+
+ return 0;
+}
+
+#if 0
+static
+VOID
+DumpKeyState(PBYTE pKeyState)
+{
+ unsigned i;
+
+ DbgPrint("KeyState { ");
+ for (i = 0; i < 0x100; i++)
{
- EngSetLastError(ERROR_INVALID_PARAMETER);
+ if (pKeyState[i])
+ DbgPrint("%02x(%02x) ", i, pKeyState[i]);
}
- return ret;
+ DbgPrint("};\n");
}
+#endif
-/***********************************************************************
- * get_key_state
+/*
+ * IntGetAsyncKeyState
+ *
+ * Gets key state from global table
*/
-WORD FASTCALL get_key_state(void)
+static
+WORD FASTCALL
+IntGetAsyncKeyState(DWORD dwKey)
{
- WORD ret = 0;
+ WORD dwRet = 0;
- if (gpsi->aiSysMet[SM_SWAPBUTTON])
+ if (dwKey < 0x100)
{
- if (gKeyStateTable[VK_RBUTTON] & KS_DOWN_BIT) ret |= MK_LBUTTON;
- if (gKeyStateTable[VK_LBUTTON] & KS_DOWN_BIT) ret |= MK_RBUTTON;
+ if (gKeyStateTable[dwKey] & KS_DOWN_BIT)
+ dwRet |= 0xFFFF8000; // If down, windows returns 0xFFFF8000.
+ if (gKeyStateTable[dwKey] & KS_LOCK_BIT)
+ dwRet |= 0x1;
}
else
{
- if (gKeyStateTable[VK_LBUTTON] & KS_DOWN_BIT) ret |= MK_LBUTTON;
- if (gKeyStateTable[VK_RBUTTON] & KS_DOWN_BIT) ret |= MK_RBUTTON;
+ EngSetLastError(ERROR_INVALID_PARAMETER);
}
- if (gKeyStateTable[VK_MBUTTON] & KS_DOWN_BIT) ret |= MK_MBUTTON;
- if (gKeyStateTable[VK_SHIFT] & KS_DOWN_BIT) ret |= MK_SHIFT;
- if (gKeyStateTable[VK_CONTROL] & KS_DOWN_BIT) ret |= MK_CONTROL;
- if (gKeyStateTable[VK_XBUTTON1] & KS_DOWN_BIT) ret |= MK_XBUTTON1;
- if (gKeyStateTable[VK_XBUTTON2] & KS_DOWN_BIT) ret |= MK_XBUTTON2;
- return ret;
+ return dwRet;
}
SHORT
APIENTRY
-NtUserGetAsyncKeyState(
- INT key)
+NtUserGetAsyncKeyState(INT Key)
{
DECLARE_RETURN(SHORT);
TRACE("Enter NtUserGetAsyncKeyState\n");
UserEnterExclusive();
- RETURN((SHORT)UserGetAsyncKeyState(key));
+ RETURN(IntGetAsyncKeyState(Key));
CLEANUP:
TRACE("Leave NtUserGetAsyncKeyState, ret=%i\n", _ret_);
END_CLEANUP;
}
+/*
+ * IntKeyboardSendWinKeyMsg
+ *
+ * Sends syscommand to shell, when WIN key is pressed
+ */
+static
+VOID NTAPI
+IntKeyboardSendWinKeyMsg()
+{
+ PWND pWnd;
+ MSG Msg;
+ if (!(pWnd = UserGetWindowObject(InputWindowStation->ShellWindow)))
+ {
+ ERR("Couldn't find window to send Windows key message!\n");
+ return;
+ }
-BOOL FASTCALL
-IntTranslateKbdMessage(LPMSG lpMsg,
- UINT flags)
+ Msg.hwnd = InputWindowStation->ShellWindow;
+ Msg.message = WM_SYSCOMMAND;
+ Msg.wParam = SC_TASKLIST;
+ Msg.lParam = 0;
+
+ /* The QS_HOTKEY is just a guess */
+ MsqPostMessage(pWnd->head.pti->MessageQueue, &Msg, FALSE, QS_HOTKEY);
+}
+
+/*
+ * co_IntKeyboardSendAltKeyMsg
+ *
+ * Sends syscommand enabling window menu
+ */
+static
+VOID NTAPI
+co_IntKeyboardSendAltKeyMsg()
{
- PTHREADINFO pti;
- static INT dead_char = 0;
- LONG UState = 0;
- WCHAR wp[2] = { 0 };
- MSG NewMsg = { 0 };
- PKBDTABLES keyLayout;
- PWND pWndMsg;
- BOOL Result = FALSE;
+ FIXME("co_IntKeyboardSendAltKeyMsg\n");
+ //co_MsqPostKeyboardMessage(WM_SYSCOMMAND,SC_KEYMENU,0); // This sends everything into a msg loop!
+}
- pWndMsg = UserGetWindowObject(lpMsg->hwnd);
- if (!pWndMsg) // Must have a window!
+/*
+ * UserSendKeyboardInput
+ *
+ * Process keyboard input from input devices and SendInput API
+ */
+BOOL NTAPI
+UserSendKeyboardInput(KEYBDINPUT *pKbdInput, BOOL bInjected)
+{
+ WORD wScanCode, wVk, wSimpleVk, wVkOtherSide;
+ PKBL pKbl = NULL;
+ PKBDTABLES pKbdTbl;
+ PUSER_MESSAGE_QUEUE pFocusQueue;
+ struct _ETHREAD *pFocusThread;
+ UINT fModifiers;
+ BYTE PrevKeyState = 0;
+ HWND hWnd;
+ int HotkeyId;
+ struct _ETHREAD *Thread;
+ LARGE_INTEGER LargeTickCount;
+ BOOL bExt = pKbdInput->dwFlags & KEYEVENTF_EXTENDEDKEY;
+ BOOL bKeyUp = pKbdInput->dwFlags & KEYEVENTF_KEYUP;
+
+ /* Find the target thread whose locale is in effect */
+ pFocusQueue = IntGetFocusMessageQueue();
+
+ if (pFocusQueue)
{
- ERR("No Window for Translate.\n");
- return FALSE;
+ pFocusThread = pFocusQueue->Thread;
+ if (pFocusThread && pFocusThread->Tcb.Win32Thread)
+ pKbl = ((PTHREADINFO)pFocusThread->Tcb.Win32Thread)->KeyboardLayout;
}
- pti = pWndMsg->head.pti;
- keyLayout = pti->KeyboardLayout->KBTables;
- if( !keyLayout )
- return FALSE;
-
- if (lpMsg->message < WM_KEYFIRST || lpMsg->message > WM_KEYLAST)
- return FALSE;
- if (lpMsg->message != WM_KEYDOWN && lpMsg->message != WM_SYSKEYDOWN)
+ if (!pKbl)
+ pKbl = W32kGetDefaultKeyLayout();
+ if (!pKbl)
+ {
+ ERR("No keyboard layout!\n");
return FALSE;
+ }
- /* All messages have to contain the cursor point. */
- NewMsg.pt = gpsi->ptCursor;
+ pKbdTbl = pKbl->KBTables;
- TRACE("IntTranslateKbdMessage %s\n", lpMsg->message == WM_SYSKEYDOWN ? "WM_SYSKEYDOWN" : "WM_KEYDOWN");
+ /* Note: wScan field is always used */
+ wScanCode = pKbdInput->wScan & 0x7F;
- switch (lpMsg->wParam)
+ if (pKbdInput->dwFlags & KEYEVENTF_UNICODE)
{
- case VK_PACKET:
- NewMsg.message = (lpMsg->message == WM_KEYDOWN) ? WM_CHAR : WM_SYSCHAR;
- NewMsg.hwnd = lpMsg->hwnd;
- NewMsg.wParam = HIWORD(lpMsg->lParam);
- NewMsg.lParam = LOWORD(lpMsg->lParam);
- MsqPostMessage(pti->MessageQueue, &NewMsg, FALSE, QS_KEY);
- return TRUE;
+ /* Generate WM_KEYDOWN msg with wParam == VK_PACKET and
+ high order word of lParam == pKbdInput->wScan */
+ wVk = VK_PACKET;
}
+ else
+ {
+ if (bExt)
+ wScanCode |= 0xE000;
+
+ if (pKbdInput->dwFlags & KEYEVENTF_SCANCODE)
+ {
+ /* Don't ignore invalid scan codes */
+ wVk = IntVscToVk(wScanCode, pKbdTbl);
+ if (!wVk) /* use 0xFF if vsc is invalid */
+ wVk = 0xFF;
+ }
+ else
+ {
+ wVk = pKbdInput->wVk & 0xFF;
- UState = ToUnicodeInner( lpMsg->wParam,
- HIWORD(lpMsg->lParam) & 0xff,
- gKeyStateTable,
- wp,
- 2,
- 0,
- keyLayout );
+ /* LSHIFT + EXT = RSHIFT */
+ wVk = IntSimplifyVk(wVk);
+ wVk = IntFixVk(wVk, bExt);
+ }
+ }
- if (UState == 1)
+ if (!(pKbdInput->dwFlags & KEYEVENTF_UNICODE))
{
- NewMsg.message = (lpMsg->message == WM_KEYDOWN) ? WM_CHAR : WM_SYSCHAR;
- if (dead_char)
- {
- ULONG i;
- WCHAR first, second;
- TRACE("PREVIOUS DEAD CHAR: %c\n", dead_char);
+ /* Get virtual key without shifts (VK_(L|R)* -> VK_*) */
+ wSimpleVk = IntSimplifyVk(wVk);
+ wVkOtherSide = IntGetVkOtherSide(wVk);
+ PrevKeyState = gKeyStateTable[wSimpleVk];
+
+ /* Update global keyboard state. Begin from lock bit */
+ if (!bKeyUp && !(PrevKeyState & KS_DOWN_BIT))
+ gKeyStateTable[wVk] ^= KS_LOCK_BIT;
+
+ /* Update down bit */
+ if (bKeyUp)
+ gKeyStateTable[wVk] &= ~KS_DOWN_BIT;
+ else
+ gKeyStateTable[wVk] |= KS_DOWN_BIT;
- for( i = 0; keyLayout->pDeadKey[i].dwBoth; i++ )
- {
- first = keyLayout->pDeadKey[i].dwBoth >> 16;
- second = keyLayout->pDeadKey[i].dwBoth;
- if (first == dead_char && second == wp[0])
- {
- wp[0] = keyLayout->pDeadKey[i].wchComposed;
- dead_char = 0;
- break;
- }
- }
+ /* Update key without shifts */
+ gKeyStateTable[wSimpleVk] = gKeyStateTable[wVk] | gKeyStateTable[wVkOtherSide];
- TRACE("FINAL CHAR: %c\n", wp[0]);
+ if (!bKeyUp)
+ {
+ /* Update keyboard LEDs */
+ if (!gpKeyboardIndicatorTrans)
+ IntKeyboardGetIndicatorTrans(ghKeyboardDevice, &gpKeyboardIndicatorTrans);
+ if (gpKeyboardIndicatorTrans)
+ IntKeyboardUpdateLeds(ghKeyboardDevice,
+ wScanCode,
+ gKeyStateTable[wSimpleVk] & KS_LOCK_BIT,
+ gpKeyboardIndicatorTrans);
}
- if (dead_char)
+ /* Truncate scan code */
+ wScanCode &= 0x7F;
+
+ /* Support VK_*WIN and VK_*MENU keys */
+ if (bKeyUp)
{
- NewMsg.hwnd = lpMsg->hwnd;
- NewMsg.wParam = dead_char;
- NewMsg.lParam = lpMsg->lParam;
- dead_char = 0;
- MsqPostMessage(pti->MessageQueue, &NewMsg, FALSE, QS_KEY);
+ if (wVk == VK_LWIN || wVk == VK_RWIN)
+ IntKeyboardSendWinKeyMsg();
+ else if(wSimpleVk == VK_MENU && !(gKeyStateTable[VK_CONTROL] & KS_DOWN_BIT))
+ co_IntKeyboardSendAltKeyMsg();
}
- NewMsg.hwnd = lpMsg->hwnd;
- NewMsg.wParam = wp[0];
- NewMsg.lParam = lpMsg->lParam;
- TRACE( "CHAR='%c' %04x %08x\n", wp[0], wp[0], lpMsg->lParam );
- MsqPostMessage(pti->MessageQueue, &NewMsg, FALSE, QS_KEY);
- Result = TRUE;
+ /* Check if it is a hotkey */
+ fModifiers = IntGetModifiers(gKeyStateTable);
+ if (GetHotKey(fModifiers, wSimpleVk, &Thread, &hWnd, &HotkeyId))
+ {
+ if (!bKeyUp)
+ {
+ TRACE("Hot key pressed (hWnd %lx, id %d)\n", hWnd, HotkeyId);
+ MsqPostHotKeyMessage(Thread,
+ hWnd,
+ (WPARAM)HotkeyId,
+ MAKELPARAM((WORD)fModifiers, wSimpleVk));
+ }
+
+ return TRUE; /* Don't send any message */
+ }
}
- else if (UState == -1)
+
+ /* If we have a focus queue, post a keyboard message */
+ if (pFocusQueue)
{
- NewMsg.message =
- (lpMsg->message == WM_KEYDOWN) ? WM_DEADCHAR : WM_SYSDEADCHAR;
- NewMsg.hwnd = lpMsg->hwnd;
- NewMsg.wParam = wp[0];
- NewMsg.lParam = lpMsg->lParam;
- dead_char = wp[0];
- MsqPostMessage(pti->MessageQueue, &NewMsg, FALSE, QS_KEY);
- Result = TRUE;
- }
- TRACE("IntTranslateKbdMessage E %s\n", NewMsg.message == WM_CHAR ? "WM_CHAR" : "WM_SYSCHAR");
- return Result;
-}
+ MSG Msg;
-static UINT VkToScan( UINT Code, BOOL ExtCode, PKBDTABLES pkKT )
-{
- int i;
+ /* If it is F10 or ALT is down and CTRL is up, it's a system key */
+ if (wVk == VK_F10 ||
+ //uVkNoShift == VK_MENU || // FIXME: If only LALT is pressed WM_SYSKEYUP is generated instead of WM_KEYUP
+ ((gKeyStateTable[VK_MENU] & KS_DOWN_BIT) &&
+ !(gKeyStateTable[VK_CONTROL] & KS_DOWN_BIT)))
+ {
+ if (bKeyUp)
+ Msg.message = WM_SYSKEYUP;
+ else
+ Msg.message = WM_SYSKEYDOWN;
+ }
+ else
+ {
+ if (bKeyUp)
+ Msg.message = WM_KEYUP;
+ else
+ Msg.message = WM_KEYDOWN;
+ }
+ Msg.hwnd = pFocusQueue->FocusWindow;
+ Msg.lParam = MAKELPARAM(1, wScanCode);
+ /* If it is VK_PACKET, high word of wParam is used for wchar */
+ if (!(pKbdInput->dwFlags & KEYEVENTF_UNICODE))
+ {
+ if (bExt)
+ Msg.lParam |= LP_EXT_BIT;
+ if (gKeyStateTable[VK_MENU] & KS_DOWN_BIT)
+ Msg.lParam |= LP_CONTEXT_BIT;
+ if (PrevKeyState & KS_DOWN_BIT)
+ Msg.lParam |= LP_PREV_STATE_BIT;
+ if (bKeyUp)
+ Msg.lParam |= LP_TRANSITION_BIT;
+ }
- for( i = 0; i < pkKT->bMaxVSCtoVK; i++ )
- {
- if( pkKT->pusVSCtoVK[i] == Code )
+ Msg.wParam = wVk; // its "simplified" later
+ Msg.pt = gpsi->ptCursor;
+ if (pKbdInput->time)
+ Msg.time = pKbdInput->time;
+ else
{
- return i;
+ KeQueryTickCount(&LargeTickCount);
+ Msg.time = MsqCalculateMessageTime(&LargeTickCount);
}
+
+ /* Post a keyboard message */
+ TRACE("Posting keyboard msg %u wParam 0x%x lParam 0x%x\n", Msg.message, Msg.wParam, Msg.lParam);
+ co_MsqPostKeyboardMessage(Msg.message, Msg.wParam, Msg.lParam, bInjected);
}
- return 0;
+ return TRUE;
}
-UINT ScanToVk( UINT Code, BOOL ExtKey, PKBDTABLES pkKT )
+/*
+ * UserProcessKeyboardInput
+ *
+ * Process raw keyboard input data
+ */
+VOID NTAPI
+UserProcessKeyboardInput(
+ PKEYBOARD_INPUT_DATA pKbdInputData)
{
- if( !pkKT )
+ WORD wScanCode, wVk;
+ PKBL pKbl = NULL;
+ PKBDTABLES pKbdTbl;
+ PUSER_MESSAGE_QUEUE pFocusQueue;
+ struct _ETHREAD *pFocusThread;
+
+ /* Calculate scan code with prefix */
+ wScanCode = pKbdInputData->MakeCode & 0x7F;
+ if (pKbdInputData->Flags & KEY_E0)
+ wScanCode |= 0xE000;
+ if (pKbdInputData->Flags & KEY_E1)
+ wScanCode |= 0xE100;
+
+ /* Find the target thread whose locale is in effect */
+ pFocusQueue = IntGetFocusMessageQueue();
+
+ if (pFocusQueue)
{
- TRACE("ScanToVk: No layout\n");
- return 0;
+ pFocusThread = pFocusQueue->Thread;
+ if (pFocusThread && pFocusThread->Tcb.Win32Thread)
+ pKbl = ((PTHREADINFO)pFocusThread->Tcb.Win32Thread)->KeyboardLayout;
}
- if( ExtKey )
+ if (!pKbl)
+ pKbl = W32kGetDefaultKeyLayout();
+ if (!pKbl)
+ return;
+
+ pKbdTbl = pKbl->KBTables;
+
+ /* Convert scan code to virtual key.
+ Note: we could call UserSendKeyboardInput using scan code,
+ but it wouldn't interpret E1 key(s) properly */
+ wVk = IntVscToVk(wScanCode, pKbdTbl);
+ TRACE("UserProcessKeyboardInput: %x (break: %u) -> %x\n",
+ wScanCode, (pKbdInputData->Flags & KEY_BREAK) ? 1 : 0, wVk);
+
+ if (wVk)
{
- int i;
+ KEYBDINPUT KbdInput;
- for( i = 0; pkKT->pVSCtoVK_E0[i].Vsc; i++ )
+ /* Support numlock */
+ if ((wVk & KBDNUMPAD) && (gKeyStateTable[VK_NUMLOCK] & KS_LOCK_BIT))
{
- if( pkKT->pVSCtoVK_E0[i].Vsc == Code )
- return pkKT->pVSCtoVK_E0[i].Vk & 0xff;
+ wVk = IntTranslateNumpadKey(wVk & 0xFF);
}
- for( i = 0; pkKT->pVSCtoVK_E1[i].Vsc; i++ )
+
+ /* Send keyboard input */
+ KbdInput.wVk = wVk & 0xFF;
+ KbdInput.wScan = wScanCode & 0x7F;
+ KbdInput.dwFlags = 0;
+ if (pKbdInputData->Flags & KEY_BREAK)
+ KbdInput.dwFlags |= KEYEVENTF_KEYUP;
+ if (wVk & KBDEXT)
+ KbdInput.dwFlags |= KEYEVENTF_EXTENDEDKEY;
+ KbdInput.time = 0;
+ KbdInput.dwExtraInfo = pKbdInputData->ExtraInformation;
+ UserSendKeyboardInput(&KbdInput, FALSE);
+
+ /* E1 keys don't have break code */
+ if (pKbdInputData->Flags & KEY_E1)
{
- if( pkKT->pVSCtoVK_E1[i].Vsc == Code )
- return pkKT->pVSCtoVK_E1[i].Vk & 0xff;
+ /* Send key up event */
+ KbdInput.dwFlags |= KEYEVENTF_KEYUP;
+ UserSendKeyboardInput(&KbdInput, FALSE);
}
+ }
+}
- return 0;
+/*
+ * IntTranslateKbdMessage
+ *
+ * Addes WM_(SYS)CHAR messages to message queue if message
+ * describes key which produce character.
+ */
+BOOL FASTCALL
+IntTranslateKbdMessage(LPMSG lpMsg,
+ UINT flags)
+{
+ PTHREADINFO pti;
+ INT cch = 0, i;
+ WCHAR wch[3] = { 0 };
+ MSG NewMsg = { 0 };
+ PKBDTABLES pKbdTbl;
+ PWND pWnd;
+ LARGE_INTEGER LargeTickCount;
+ BOOL bResult = FALSE;
+
+ pWnd = UserGetWindowObject(lpMsg->hwnd);
+ if (!pWnd) // Must have a window!
+ {
+ ERR("No Window for Translate.\n");
+ return FALSE;
}
- else
+
+ pti = pWnd->head.pti;
+ pKbdTbl = pti->KeyboardLayout->KBTables;
+ if (!pKbdTbl)
+ return FALSE;
+
+ if (lpMsg->message != WM_KEYDOWN && lpMsg->message != WM_SYSKEYDOWN)
+ return FALSE;
+
+ /* Init pt, hwnd and time msg fields */
+ NewMsg.pt = gpsi->ptCursor;
+ NewMsg.hwnd = lpMsg->hwnd;
+ KeQueryTickCount(&LargeTickCount);
+ NewMsg.time = MsqCalculateMessageTime(&LargeTickCount);
+
+ TRACE("Enter IntTranslateKbdMessage msg %s, vk %x\n",
+ lpMsg->message == WM_SYSKEYDOWN ? "WM_SYSKEYDOWN" : "WM_KEYDOWN", lpMsg->wParam);
+
+ if (lpMsg->wParam == VK_PACKET)
{
- if( Code >= pkKT->bMaxVSCtoVK )
+ NewMsg.message = (lpMsg->message == WM_KEYDOWN) ? WM_CHAR : WM_SYSCHAR;
+ NewMsg.wParam = HIWORD(lpMsg->lParam);
+ NewMsg.lParam = LOWORD(lpMsg->lParam);
+ MsqPostMessage(pti->MessageQueue, &NewMsg, FALSE, QS_KEY);
+ return TRUE;
+ }
+
+ cch = IntToUnicodeEx(lpMsg->wParam,
+ HIWORD(lpMsg->lParam) & 0xFF,
+ pti->MessageQueue->KeyState,
+ wch,
+ sizeof(wch) / sizeof(wch[0]),
+ 0,
+ pKbdTbl);
+
+ if (cch)
+ {
+ if (cch > 0) /* Normal characters */
+ NewMsg.message = (lpMsg->message == WM_KEYDOWN) ? WM_CHAR : WM_SYSCHAR;
+ else /* Dead character */
{
- return 0;
+ cch = -cch;
+ NewMsg.message =
+ (lpMsg->message == WM_KEYDOWN) ? WM_DEADCHAR : WM_SYSDEADCHAR;
}
- return pkKT->pusVSCtoVK[Code] & 0xff;
+ NewMsg.lParam = lpMsg->lParam;
+
+ /* Send all characters */
+ for (i = 0; i < cch; ++i)
+ {
+ TRACE("CHAR='%c' %04x %08x\n", wch[i], wch[i], lpMsg->lParam);
+ NewMsg.wParam = wch[i];
+ MsqPostMessage(pti->MessageQueue, &NewMsg, FALSE, QS_KEY);
+ }
+ bResult = TRUE;
}
+
+ TRACE("Leave IntTranslateKbdMessage ret %u, cch %d, msg %x, wch %x\n",
+ bResult, cch, NewMsg.message, NewMsg.wParam);
+ return bResult;
}
/*
* character.
* 3 -- Code is a virtual scan code that is converted into a virtual key code
* that distinguishes left and right shift keys.
- * KeyLayout: Keyboard layout handle (currently, unused)
+ * KeyLayout: Keyboard layout handle
*
* @implemented
*/
-
-static UINT IntMapVirtualKeyEx( UINT Code, UINT Type, PKBDTABLES keyLayout )
+static UINT
+IntMapVirtualKeyEx(UINT uCode, UINT Type, PKBDTABLES pKbdTbl)
{
- UINT ret = 0;
+ UINT uRet = 0;
- switch( Type )
+ switch (Type)
{
case MAPVK_VK_TO_VSC:
- if( Code == VK_SHIFT )
- Code = VK_LSHIFT;
- if( Code == VK_MENU )
- Code = VK_LMENU;
- if( Code == VK_CONTROL )
- Code = VK_LCONTROL;
- ret = VkToScan( Code, FALSE, keyLayout );
+ uCode = IntFixVk(uCode, FALSE);
+ uRet = IntVkToVsc(uCode, pKbdTbl);
+ if (uRet > 0xFF) // fail for scancodes with prefix (e0, e1)
+ uRet = 0;
break;
case MAPVK_VSC_TO_VK:
- ret =
- DontDistinguishShifts
- (IntMapVirtualKeyEx( Code, MAPVK_VSC_TO_VK_EX, keyLayout ) );
+ uRet = IntVscToVk(uCode, pKbdTbl) & 0xFF;
+ uRet = IntSimplifyVk(uRet);
break;
case MAPVK_VK_TO_CHAR:
- {
- WCHAR wp[2] = {0};
-
- ret = VkToScan( Code, FALSE, keyLayout );
- ToUnicodeInner( Code, ret, 0, wp, 2, 0, keyLayout );
- ret = wp[0];
- }
+ uRet = (UINT)IntVkToChar(uCode, pKbdTbl);
break;
case MAPVK_VSC_TO_VK_EX:
-
- ret = ScanToVk( Code, FALSE, keyLayout );
+ uRet = IntVscToVk(uCode, pKbdTbl) & 0xFF;
break;
case MAPVK_VK_TO_VSC_EX:
- STUB;
+ uRet = IntVkToVsc(uCode, pKbdTbl);
break;
default:
+ EngSetLastError(ERROR_INVALID_PARAMETER);
ERR("Wrong type value: %u\n", Type);
}
- return ret;
+ return uRet;
}
+/*
+ * NtUserMapVirtualKeyEx
+ *
+ * Map a virtual key code, or virtual scan code, to a scan code, key code,
+ * or unshifted unicode character. See IntMapVirtualKeyEx.
+ */
UINT
APIENTRY
-NtUserMapVirtualKeyEx( UINT Code, UINT Type, DWORD keyboardId, HKL dwhkl )
+NtUserMapVirtualKeyEx(UINT uCode, UINT uType, DWORD keyboardId, HKL dwhkl)
{
- PTHREADINFO pti;
- PKBDTABLES keyLayout;
+ PKBDTABLES pKbdTbl = NULL;
DECLARE_RETURN(UINT);
TRACE("Enter NtUserMapVirtualKeyEx\n");
UserEnterExclusive();
- pti = PsGetCurrentThreadWin32Thread();
- keyLayout = pti ? pti->KeyboardLayout->KBTables : 0;
+ if (!dwhkl)
+ {
+ PTHREADINFO pti;
+
+ pti = PsGetCurrentThreadWin32Thread();
+ if (pti && pti->KeyboardLayout)
+ pKbdTbl = pti->KeyboardLayout->KBTables;
+ }
+ else
+ {
+ PKBL pKbl;
+
+ pKbl = UserHklToKbl(dwhkl);
+ if (pKbl)
+ pKbdTbl = pKbl->KBTables;
+ }
- if( !keyLayout )
+ if (!pKbdTbl)
RETURN(0);
- RETURN(IntMapVirtualKeyEx( Code, Type, keyLayout ));
+ RETURN(IntMapVirtualKeyEx(uCode, uType, pKbdTbl));
CLEANUP:
TRACE("Leave NtUserMapVirtualKeyEx, ret=%i\n", _ret_);
END_CLEANUP;
}
-
+/*
+ * NtUserToUnicodeEx
+ *
+ * Translates virtual key to characters
+ */
int
APIENTRY
NtUserToUnicodeEx(
UINT wVirtKey,
UINT wScanCode,
- PBYTE lpKeyState,
- LPWSTR pwszBuff,
+ PBYTE pKeyStateUnsafe,
+ LPWSTR pwszBuffUnsafe,
int cchBuff,
UINT wFlags,
- HKL dwhkl )
+ HKL dwhkl)
{
PTHREADINFO pti;
- BYTE KeyStateBuf[0x100];
- PWCHAR OutPwszBuff = 0;
- int ret = 0;
+ BYTE KeyState[0x100];
+ PWCHAR pwszBuff = NULL;
+ int iRet = 0;
+ PKBL pKbl = NULL;
DECLARE_RETURN(int);
TRACE("Enter NtUserSetKeyboardState\n");
- UserEnterShared();//fixme: this syscall doesnt seem to need any locking...
+ UserEnterShared();
/* Key up? */
if (wScanCode & SC_KEY_UP)
RETURN(0);
}
- if( !NT_SUCCESS(MmCopyFromCaller(KeyStateBuf,
- lpKeyState,
- sizeof(KeyStateBuf))) )
+ if (!NT_SUCCESS(MmCopyFromCaller(KeyState,
+ pKeyStateUnsafe,
+ sizeof(KeyState))))
{
- ERR( "Couldn't copy key state from caller.\n" );
+ ERR("Couldn't copy key state from caller.\n");
RETURN(0);
}
/* Virtual code is correct? */
if (wVirtKey < 0x100)
{
- OutPwszBuff = ExAllocatePoolWithTag(NonPagedPool, sizeof(WCHAR) * cchBuff, TAG_STRING);
- if( !OutPwszBuff )
+ pwszBuff = ExAllocatePoolWithTag(NonPagedPool, sizeof(WCHAR) * cchBuff, TAG_STRING);
+ if (!pwszBuff)
{
- ERR( "ExAllocatePoolWithTag(%d) failed\n", sizeof(WCHAR) * cchBuff);
+ ERR("ExAllocatePoolWithTag(%d) failed\n", sizeof(WCHAR) * cchBuff);
RETURN(0);
}
- RtlZeroMemory( OutPwszBuff, sizeof( WCHAR ) * cchBuff );
+ RtlZeroMemory(pwszBuff, sizeof(WCHAR) * cchBuff);
- pti = PsGetCurrentThreadWin32Thread();
- ret = ToUnicodeInner( wVirtKey,
+ if (dwhkl)
+ pKbl = UserHklToKbl(dwhkl);
+
+ if (!pKbl)
+ {
+ pti = PsGetCurrentThreadWin32Thread();
+ pKbl = pti->KeyboardLayout;
+ }
+
+ iRet = IntToUnicodeEx(wVirtKey,
wScanCode,
- KeyStateBuf,
- OutPwszBuff,
+ KeyState,
+ pwszBuff,
cchBuff,
wFlags,
- pti ? pti->KeyboardLayout->KBTables : 0 );
+ pKbl ? pKbl->KBTables : NULL);
- MmCopyToCaller(pwszBuff, OutPwszBuff, sizeof(WCHAR)*cchBuff);
- ExFreePoolWithTag(OutPwszBuff, TAG_STRING);
+ MmCopyToCaller(pwszBuffUnsafe, pwszBuff, cchBuff * sizeof(WCHAR));
+ ExFreePoolWithTag(pwszBuff, TAG_STRING);
}
- RETURN(ret);
+ RETURN(iRet);
CLEANUP:
TRACE("Leave NtUserSetKeyboardState, ret=%i\n", _ret_);
END_CLEANUP;
}
-static int W32kSimpleToupper( int ch )
-{
- if( ch >= 'a' && ch <= 'z' )
- ch = ch - 'a' + 'A';
- return ch;
-}
-
+/*
+ * NtUserGetKeyNameText
+ *
+ * Gets key name from keyboard layout
+ */
DWORD
APIENTRY
-NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize )
+NtUserGetKeyNameText(LONG lParam, LPWSTR lpString, int cchSize)
{
PTHREADINFO pti;
- int i;
- DWORD ret = 0;
- UINT CareVk = 0;
- UINT VkCode = 0;
- UINT ScanCode = (lParam >> 16) & 0xff;
- BOOL ExtKey = lParam & (1 << 24) ? TRUE : FALSE;
- PKBDTABLES keyLayout;
- VSC_LPWSTR *KeyNames;
+ DWORD i, cchKeyName, dwRet = 0;
+ WORD wScanCode = (lParam >> 16) & 0xFF;
+ BOOL bExtKey = (lParam & LP_EXT_BIT) ? TRUE : FALSE;
+ PKBDTABLES pKbdTbl;
+ VSC_LPWSTR *pKeyNames = NULL;
+ CONST WCHAR *pKeyName = NULL;
+ WCHAR KeyNameBuf[2];
DECLARE_RETURN(DWORD);
TRACE("Enter NtUserGetKeyNameText\n");
UserEnterShared();
+ /* Get current keyboard layout */
pti = PsGetCurrentThreadWin32Thread();
- keyLayout = pti ? pti->KeyboardLayout->KBTables : 0;
+ pKbdTbl = pti ? pti->KeyboardLayout->KBTables : 0;
- if( !keyLayout || nSize < 1 )
+ if (!pKbdTbl || cchSize < 1)
RETURN(0);
- if( lParam & (1 << 25) )
+ /* "Do not care" flag */
+ if(lParam & LP_DO_NOT_CARE_BIT)
{
- CareVk = VkCode = ScanToVk( ScanCode, ExtKey, keyLayout );
- switch (VkCode)
- {
- case VK_RSHIFT:
- ScanCode |= 0x100;
- case VK_LSHIFT:
- VkCode = VK_SHIFT;
- break;
- case VK_LCONTROL:
- case VK_RCONTROL:
- VkCode = VK_CONTROL;
- break;
- case VK_LMENU:
- case VK_RMENU:
- VkCode = VK_MENU;
- break;
- }
+ /* Note: we could do vsc -> vk -> vsc conversion, instead of using
+ hardcoded scan codes, but it's not what Windows does */
+ if (wScanCode == SCANCODE_RSHIFT && !bExtKey)
+ wScanCode = SCANCODE_LSHIFT;
+ else if (wScanCode == SCANCODE_CTRL || wScanCode == SCANCODE_ALT)
+ bExtKey = FALSE;
}
- else
- {
- VkCode = ScanToVk( ScanCode, ExtKey, keyLayout );
- }
-
- KeyNames = 0;
-
- if( CareVk != VkCode )
- ScanCode = VkToScan( VkCode, ExtKey, keyLayout );
- if( ExtKey )
- KeyNames = keyLayout->pKeyNamesExt;
+ if (bExtKey)
+ pKeyNames = pKbdTbl->pKeyNamesExt;
else
- KeyNames = keyLayout->pKeyNames;
+ pKeyNames = pKbdTbl->pKeyNames;
- for( i = 0; KeyNames[i].pwsz; i++ )
+ for (i = 0; pKeyNames[i].pwsz; i++)
{
- if( KeyNames[i].vsc == ScanCode )
+ if (pKeyNames[i].vsc == wScanCode)
{
- UINT StrLen = wcslen(KeyNames[i].pwsz);
- UINT StrMax = StrLen > (nSize - 1) ? (nSize - 1) : StrLen;
- WCHAR null_wc = 0;
- if( NT_SUCCESS( MmCopyToCaller( lpString,
- KeyNames[i].pwsz,
- StrMax * sizeof(WCHAR) ) ) &&
- NT_SUCCESS( MmCopyToCaller( lpString + StrMax,
- &null_wc,
- sizeof( WCHAR ) ) ) )
- {
- ret = StrMax;
- break;
- }
+ pKeyName = pKeyNames[i].pwsz;
+ break;
}
}
- if( ret == 0 )
- {
- WCHAR UCName[2];
-
- UCName[0] = W32kSimpleToupper(IntMapVirtualKeyEx( VkCode, MAPVK_VK_TO_CHAR, keyLayout ));
- UCName[1] = 0;
- ret = 1;
-
- if( !NT_SUCCESS(MmCopyToCaller( lpString, UCName, 2 * sizeof(WCHAR) )) )
- RETURN(0);
- }
-
- RETURN(ret);
-
-CLEANUP:
- TRACE("Leave NtUserGetKeyNameText, ret=%i\n", _ret_);
- UserLeave();
- END_CLEANUP;
-}
-
-/*
- * Filter this message according to the current key layout, setting wParam
- * appropriately.
- */
-
-VOID FASTCALL
-W32kKeyProcessMessage(LPMSG Msg,
- PKBDTABLES KeyboardLayout,
- BYTE Prefix)
-{
- DWORD ScanCode = 0, ModifierBits = 0;
- DWORD i = 0;
- DWORD BaseMapping = 0;
- DWORD RawVk = 0;
- static WORD NumpadConversion[][2] =
- { { VK_DELETE, VK_DECIMAL },
- { VK_INSERT, VK_NUMPAD0 },
- { VK_END, VK_NUMPAD1 },
- { VK_DOWN, VK_NUMPAD2 },
- { VK_NEXT, VK_NUMPAD3 },
- { VK_LEFT, VK_NUMPAD4 },
- { VK_CLEAR, VK_NUMPAD5 },
- { VK_RIGHT, VK_NUMPAD6 },
- { VK_HOME, VK_NUMPAD7 },
- { VK_UP, VK_NUMPAD8 },
- { VK_PRIOR, VK_NUMPAD9 },
- { 0, 0 }
- };
- PVSC_VK VscVkTable = NULL;
-
- if( !KeyboardLayout || !Msg ||
- (Msg->message != WM_KEYDOWN && Msg->message != WM_SYSKEYDOWN &&
- Msg->message != WM_KEYUP && Msg->message != WM_SYSKEYUP) )
+ if (!pKeyName)
{
- return;
- }
-
- /* arty -- handle numpad -- On real windows, the actual key produced
- * by the messaging layer is different based on the state of numlock. */
- ModifierBits = ModBits(KeyboardLayout, gKeyStateTable);
+ WORD wVk = IntVscToVk(wScanCode, pKbdTbl);
- /* Get the raw scan code, so we can look up whether the key is a numpad
- * key
- *
- * Shift and the LP_EXT_BIT cancel. */
- ScanCode = (Msg->lParam >> 16) & 0xff;
- TRACE("ScanCode %04x\n", ScanCode);
-
- BaseMapping = Msg->wParam =
- IntMapVirtualKeyEx( ScanCode, MAPVK_VSC_TO_VK, KeyboardLayout );
- if( Prefix == 0 )
- {
- if( ScanCode >= KeyboardLayout->bMaxVSCtoVK )
- RawVk = 0xff;
- else
- RawVk = KeyboardLayout->pusVSCtoVK[ScanCode];
- }
- else
- {
- if( Prefix == 0xE0 )
+ if (wVk)
{
- /* ignore shift codes */
- if( ScanCode == 0x2A || ScanCode == 0x36 )
- {
- return;
- }
- VscVkTable = KeyboardLayout->pVSCtoVK_E0;
- }
- else if( Prefix == 0xE1 )
- {
- VscVkTable = KeyboardLayout->pVSCtoVK_E1;
+ KeyNameBuf[0] = IntVkToChar(wVk, pKbdTbl);
+ KeyNameBuf[1] = 0;
+ if (KeyNameBuf[0])
+ pKeyName = KeyNameBuf;
}
+ }
- if (!VscVkTable)
- {
- ERR("somethings wrong, Prefix=0x%x", Prefix);
- return;
- }
+ if (pKeyName)
+ {
+ cchKeyName = wcslen(pKeyName);
+ if (cchKeyName > cchSize - 1)
+ cchKeyName = cchSize - 1; // don't count '\0'
- RawVk = 0xff;
- while (VscVkTable->Vsc)
+ _SEH2_TRY
{
- if( VscVkTable->Vsc == ScanCode )
- {
- RawVk = VscVkTable->Vk;
- }
- VscVkTable++;
+ ProbeForWrite(lpString, (cchKeyName + 1) * sizeof(WCHAR), 1);
+ RtlCopyMemory(lpString, pKeyName, cchKeyName * sizeof(WCHAR));
+ lpString[cchKeyName] = UNICODE_NULL;
+ dwRet = cchKeyName;
}
- }
-
- if ((ModifierBits & NUMLOCK_BIT) &&
- !(ModifierBits & GetShiftBit(KeyboardLayout, VK_SHIFT)) &&
- (RawVk & KNUMP) &&
- !(Msg->lParam & LP_EXT_BIT))
- {
- /* The key in question is a numpad key. Search for a translation. */
- for (i = 0; NumpadConversion[i][0]; i++)
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
- if ((BaseMapping & 0xff) == NumpadConversion[i][0]) /* RawVk? */
- {
- Msg->wParam = NumpadConversion[i][1];
- break;
- }
+ SetLastNtError(_SEH2_GetExceptionCode());
}
+ _SEH2_END;
}
-
- TRACE("Key: [%04x -> %04x]\n", BaseMapping, Msg->wParam);
-
- /* Now that we have the VK, we can set the keymap appropriately
- * This is a better place for this code, as it's guaranteed to be
- * run, unlike translate message. */
- if (Msg->message == WM_KEYDOWN || Msg->message == WM_SYSKEYDOWN)
- {
- SetKeyState( ScanCode, Msg->wParam, Msg->lParam & LP_EXT_BIT,
- TRUE ); /* Strike key */
- }
- else if (Msg->message == WM_KEYUP || Msg->message == WM_SYSKEYUP)
+ else
{
- SetKeyState( ScanCode, Msg->wParam, Msg->lParam & LP_EXT_BIT,
- FALSE ); /* Release key */
+ EngSetLastError(ERROR_INVALID_PARAMETER);
}
- /* We need to unset SYSKEYDOWN if the ALT key is an ALT+Gr */
- if( gKeyStateTable[VK_RMENU] & KS_DOWN_BIT )
- {
- if( Msg->message == WM_SYSKEYDOWN )
- Msg->message = WM_KEYDOWN;
- else
- Msg->message = WM_KEYUP;
- }
+ RETURN(dwRet);
+CLEANUP:
+ TRACE("Leave NtUserGetKeyNameText, ret=%i\n", _ret_);
+ UserLeave();
+ END_CLEANUP;
}
-
-
+/*
+ * UserGetKeyboardType
+ *
+ * Returns some keyboard specific information
+ */
DWORD FASTCALL
UserGetKeyboardType(
- DWORD TypeFlag)
+ DWORD dwTypeFlag)
{
- switch(TypeFlag)
+ switch (dwTypeFlag)
{
case 0: /* Keyboard type */
return 4; /* AT-101 */
return 12; /* We're doing an 101 for now, so return 12 F-keys */
default:
ERR("Unknown type!\n");
- return 0; /* The book says 0 here, so 0 */
+ return 0; /* Note: we don't have to set last error here */
}
}
-
/*
- Based on TryToTranslateChar, instead of processing VirtualKey match,
- look for wChar match.
+ * NtUserVkKeyScanEx
+ *
+ * Based on IntTranslateChar, instead of processing VirtualKey match,
+ * look for wChar match.
*/
DWORD
APIENTRY
NtUserVkKeyScanEx(
- WCHAR wChar,
- HKL hKeyboardLayout,
- BOOL UsehKL ) // TRUE from KeyboardLayout, FALSE from pkbl = (THREADINFO)->KeyboardLayout
+ WCHAR wch,
+ HKL dwhkl,
+ BOOL bUsehKL)
{
- PKBDTABLES KeyLayout;
- PVK_TO_WCHAR_TABLE vtwTbl;
- PVK_TO_WCHARS10 vkPtr;
- size_t size_this_entry;
- int nMod;
- PKBL pkbl = NULL;
- DWORD CapsMod = 0, CapsState = 0, Ret = -1;
-
- TRACE("NtUserVkKeyScanEx() wChar %d, KbdLayout 0x%p\n", wChar, hKeyboardLayout);
+ PKBDTABLES pKbdTbl;
+ PVK_TO_WCHAR_TABLE pVkToWchTbl;
+ PVK_TO_WCHARS10 pVkToWch;
+ PKBL pKbl = NULL;
+ DWORD i, dwModBits = 0, dwModNumber = 0, Ret = (DWORD)-1;
+
+ TRACE("NtUserVkKeyScanEx() wch %d, KbdLayout 0x%p\n", wch, dwhkl);
UserEnterShared();
- if (UsehKL)
+ if (bUsehKL)
{
- if ( !hKeyboardLayout || !(pkbl = UserHklToKbl(hKeyboardLayout)))
- goto Exit;
+ // Use given keyboard layout
+ if (dwhkl)
+ pKbl = UserHklToKbl(dwhkl);
}
- else // From VkKeyScanAW it is FALSE so KeyboardLayout is white noise.
+ else
{
- pkbl = ((PTHREADINFO)PsGetCurrentThreadWin32Thread())->KeyboardLayout;
+ // Use thread keyboard layout
+ pKbl = ((PTHREADINFO)PsGetCurrentThreadWin32Thread())->KeyboardLayout;
}
- KeyLayout = pkbl->KBTables;
+ if (!pKbl)
+ goto Exit;
+
+ pKbdTbl = pKbl->KBTables;
- for (nMod = 0; KeyLayout->pVkToWcharTable[nMod].nModifications; nMod++)
+ // Interate through all VkToWchar tables while pVkToWchars is not NULL
+ for (i = 0; pKbdTbl->pVkToWcharTable[i].pVkToWchars; i++)
{
- vtwTbl = &KeyLayout->pVkToWcharTable[nMod];
- size_this_entry = vtwTbl->cbSize;
- vkPtr = (PVK_TO_WCHARS10)((BYTE *)vtwTbl->pVkToWchars);
+ pVkToWchTbl = &pKbdTbl->pVkToWcharTable[i];
+ pVkToWch = (PVK_TO_WCHARS10)(pVkToWchTbl->pVkToWchars);
- while(vkPtr->VirtualKey)
+ // Interate through all virtual keys
+ while (pVkToWch->VirtualKey)
{
- /*
- 0x01 Shift key
- 0x02 Ctrl key
- 0x04 Alt key
- Should have only 8 valid possibilities. Including zero.
- */
- for(CapsState = 0; CapsState < vtwTbl->nModifications; CapsState++)
+ for (dwModNumber = 0; dwModNumber < pVkToWchTbl->nModifications; dwModNumber++)
{
- if(vkPtr->wch[CapsState] == wChar)
+ if (pVkToWch->wch[dwModNumber] == wch)
{
- CapsMod = KeyLayout->pCharModifiers->ModNumber[CapsState];
- TRACE("nMod %d wC %04x: CapsMod %08x CapsState %08x MaxModBits %08x\n",
- nMod, wChar, CapsMod, CapsState, KeyLayout->pCharModifiers->wMaxModBits);
- Ret = ((CapsMod << 8) | (vkPtr->VirtualKey & 0xff));
+ dwModBits = pKbdTbl->pCharModifiers->ModNumber[dwModNumber];
+ TRACE("i %d wC %04x: dwModBits %08x dwModNumber %08x MaxModBits %08x\n",
+ i, wch, dwModBits, dwModNumber, pKbdTbl->pCharModifiers->wMaxModBits);
+ Ret = (dwModBits << 8) | (pVkToWch->VirtualKey & 0xFF);
goto Exit;
}
}
- vkPtr = (PVK_TO_WCHARS10)(((BYTE *)vkPtr) + size_this_entry);
+ pVkToWch = (PVK_TO_WCHARS10)(((BYTE *)pVkToWch) + pVkToWchTbl->cbSize);
}
}
Exit:
return Ret;
}
+/*
+ * UserGetMouseButtonsState
+ *
+ * Returns bitfield used in mouse messages
+ */
+WORD FASTCALL
+UserGetMouseButtonsState(VOID)
+{
+ WORD ret = 0;
+
+ if (gpsi->aiSysMet[SM_SWAPBUTTON])
+ {
+ if (gKeyStateTable[VK_RBUTTON] & KS_DOWN_BIT) ret |= MK_LBUTTON;
+ if (gKeyStateTable[VK_LBUTTON] & KS_DOWN_BIT) ret |= MK_RBUTTON;
+ }
+ else
+ {
+ if (gKeyStateTable[VK_LBUTTON] & KS_DOWN_BIT) ret |= MK_LBUTTON;
+ if (gKeyStateTable[VK_RBUTTON] & KS_DOWN_BIT) ret |= MK_RBUTTON;
+ }
+ if (gKeyStateTable[VK_MBUTTON] & KS_DOWN_BIT) ret |= MK_MBUTTON;
+ if (gKeyStateTable[VK_SHIFT] & KS_DOWN_BIT) ret |= MK_SHIFT;
+ if (gKeyStateTable[VK_CONTROL] & KS_DOWN_BIT) ret |= MK_CONTROL;
+ if (gKeyStateTable[VK_XBUTTON1] & KS_DOWN_BIT) ret |= MK_XBUTTON1;
+ if (gKeyStateTable[VK_XBUTTON2] & KS_DOWN_BIT) ret |= MK_XBUTTON2;
+ return ret;
+}
/* EOF */
pti = PsGetCurrentThreadWin32Thread();
MessageQueue = pti->MessageQueue;
- if( key < 0x100 )
+ if (key < 0x100)
{
ret = (DWORD)MessageQueue->KeyState[key];
if (MessageQueue->KeyState[key] & KS_DOWN_BIT)
- ret |= 0xFF00; // If down, windows returns 0xFF80.
+ ret |= 0xFF80; // If down, windows returns 0xFF80.
+ if (MessageQueue->KeyState[key] & KS_LOCK_BIT)
+ ret |= 0x1;
}
else
{
// Note: Only called from input.c.
//
VOID FASTCALL
-co_MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+co_MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL bInjected)
{
PUSER_MESSAGE_QUEUE FocusMessageQueue;
MSG Msg;
KbdHookData.vkCode = Msg.wParam;
KbdHookData.scanCode = (Msg.lParam >> 16) & 0xff;
- KbdHookData.flags = (0 == (Msg.lParam & 0x01000000) ? 0 : LLKHF_EXTENDED) |
- (0 == (Msg.lParam & 0x20000000) ? 0 : LLKHF_ALTDOWN) |
- (0 == (Msg.lParam & 0x80000000) ? 0 : LLKHF_UP);
+ KbdHookData.flags = 0;
+ if (Msg.lParam & 0x01000000)
+ KbdHookData.flags |= LLKHF_EXTENDED;
+ if (Msg.lParam & 0x20000000)
+ KbdHookData.flags |= LLKHF_ALTDOWN;
+ if (Msg.lParam & 0x80000000)
+ KbdHookData.flags |= LLKHF_UP;
+ if (bInjected)
+ KbdHookData.flags |= LLKHF_INJECTED;
KbdHookData.time = Msg.time;
KbdHookData.dwExtraInfo = 0;
if (co_HOOK_CallHooks(WH_KEYBOARD_LL, HC_ACTION, Msg.message, (LPARAM) &KbdHookData))
MessageQueue->NewMessagesHandle = NULL;
MessageQueue->ShowingCursor = 0;
MessageQueue->CursorObject = NULL;
+ RtlCopyMemory(MessageQueue->KeyState, gKeyStateTable, sizeof(gKeyStateTable));
Status = ZwCreateEvent(&MessageQueue->NewMessagesHandle, EVENT_ALL_ACCESS,
NULL, SynchronizationEvent, FALSE);