[WIN32K]
authorRafal Harabien <rafalh@reactos.org>
Wed, 5 Oct 2011 14:09:51 +0000 (14:09 +0000)
committerRafal Harabien <rafalh@reactos.org>
Wed, 5 Oct 2011 14:09:51 +0000 (14:09 +0000)
- Rewrite keyboard input processing to match windows behavior
- Deduplicate code, add comments, mark functions static
- Support keyboard LEDs in SendInput API
- Set last error in more places
- Make keyboard layouts compatible with Windows
- Add some defines from keyboard layouts to kbd.h and use names from MS file
- Move kbd.h from ntoskrnl to NDK as it has nothing to do with kernel
- More fixes which I don't remember
- Please test CAPSLOCK key with AltGr characters (RALT+X) for layouts which support it. If something fails, report it to me on IRC

svn path=/trunk/; revision=54006

86 files changed:
reactos/dll/keyboard/kbda1/kbda1.c
reactos/dll/keyboard/kbda2/kbda2.c
reactos/dll/keyboard/kbda3/kbda3.c
reactos/dll/keyboard/kbdal/kbdal.c
reactos/dll/keyboard/kbdarme/kbdarme.c
reactos/dll/keyboard/kbdarmw/kbdarmw.c
reactos/dll/keyboard/kbdaze/kbdaze.c
reactos/dll/keyboard/kbdazel/kbdazel.c
reactos/dll/keyboard/kbdbe/kbdbe.c
reactos/dll/keyboard/kbdbga/kbdbga.c
reactos/dll/keyboard/kbdbgm/kbdbgm.c
reactos/dll/keyboard/kbdbgt/kbdbgt.c
reactos/dll/keyboard/kbdblr/kbdblr.c
reactos/dll/keyboard/kbdbr/kbdbr.c
reactos/dll/keyboard/kbdbur/kbdbur.c
reactos/dll/keyboard/kbdcan/kbdcan.c
reactos/dll/keyboard/kbdcr/kbdcr.c
reactos/dll/keyboard/kbdcz/kbdcz.c
reactos/dll/keyboard/kbdcz1/kbdcz1.c
reactos/dll/keyboard/kbdda/kbdda.c
reactos/dll/keyboard/kbddv/kbddv.c
reactos/dll/keyboard/kbdes/kbdes.c
reactos/dll/keyboard/kbdest/kbdest.c
reactos/dll/keyboard/kbdfc/kbdfc.c
reactos/dll/keyboard/kbdfi/kbdfi.c
reactos/dll/keyboard/kbdfr/kbdfr.c
reactos/dll/keyboard/kbdgeo/kbdgeo.c
reactos/dll/keyboard/kbdgerg/kbdgerg.c
reactos/dll/keyboard/kbdgneo/kbdgneo.c
reactos/dll/keyboard/kbdgr/kbdgr.c
reactos/dll/keyboard/kbdgrist/kbdgrist.c
reactos/dll/keyboard/kbdhe/kbdhe.c
reactos/dll/keyboard/kbdheb/kbdheb.c
reactos/dll/keyboard/kbdhu/kbdhu.c
reactos/dll/keyboard/kbdic/kbdic.c
reactos/dll/keyboard/kbdinasa/kbdinasa.c
reactos/dll/keyboard/kbdinben/kbdinben.c
reactos/dll/keyboard/kbdindev/kbdindev.c
reactos/dll/keyboard/kbdinguj/kbdinguj.c
reactos/dll/keyboard/kbdinmal/kbdinmal.c
reactos/dll/keyboard/kbdir/kbdir.c
reactos/dll/keyboard/kbdit/kbdit.c
reactos/dll/keyboard/kbdja/kbdja.c
reactos/dll/keyboard/kbdkaz/kbdkaz.c
reactos/dll/keyboard/kbdko/kbdko.c
reactos/dll/keyboard/kbdla/kbdla.c
reactos/dll/keyboard/kbdlt1/kbdlt1.c
reactos/dll/keyboard/kbdlv/kbdlv.c
reactos/dll/keyboard/kbdmac/kbdmac.c
reactos/dll/keyboard/kbdne/kbdne.c
reactos/dll/keyboard/kbdno/kbdno.c
reactos/dll/keyboard/kbdpl1/kbdpl1.c
reactos/dll/keyboard/kbdpo/kbdpo.c
reactos/dll/keyboard/kbdro/kbdro.c
reactos/dll/keyboard/kbdru/kbdru.c
reactos/dll/keyboard/kbdru1/kbdru1.c
reactos/dll/keyboard/kbdsg/kbdsg.c
reactos/dll/keyboard/kbdsk/kbdsk.c
reactos/dll/keyboard/kbdsk1/kbdsk1.c
reactos/dll/keyboard/kbdsw/kbdsw.c
reactos/dll/keyboard/kbdtat/kbdtat.c
reactos/dll/keyboard/kbdth0/kbdth0.c
reactos/dll/keyboard/kbdth1/kbdth1.c
reactos/dll/keyboard/kbdth2/kbdth2.c
reactos/dll/keyboard/kbdth3/kbdth3.c
reactos/dll/keyboard/kbdtuf/kbdtuf.c
reactos/dll/keyboard/kbdtuq/kbdtuq.c
reactos/dll/keyboard/kbduk/kbduk.c
reactos/dll/keyboard/kbdur/kbdur.c
reactos/dll/keyboard/kbdurs/kbdurs.c
reactos/dll/keyboard/kbdus/kbdus.c
reactos/dll/keyboard/kbdusa/kbdusa.c
reactos/dll/keyboard/kbdusl/kbdusl.c
reactos/dll/keyboard/kbdusr/kbdusr.c
reactos/dll/keyboard/kbdusx/kbdusx.c
reactos/dll/keyboard/kbduzb/kbduzb.c
reactos/dll/keyboard/kbdvntc/kbdvntc.c
reactos/dll/keyboard/kbdycc/kbdycc.c
reactos/dll/keyboard/kbdycl/kbdycl.c
reactos/include/ndk/kbd.h [moved from reactos/ntoskrnl/include/internal/kbd.h with 68% similarity]
reactos/subsystems/win32/win32k/include/input.h
reactos/subsystems/win32/win32k/include/msgqueue.h
reactos/subsystems/win32/win32k/ntuser/input.c
reactos/subsystems/win32/win32k/ntuser/kbdlayout.c
reactos/subsystems/win32/win32k/ntuser/keyboard.c
reactos/subsystems/win32/win32k/ntuser/msgqueue.c

index 53594e0..971b8d9 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,77 +161,74 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -278,7 +267,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -378,7 +367,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   extcode0_to_vk,
   extcode1_to_vk,
 
-  MAKELONG(0,1), /* Version 1.0 */
+  MAKELONG(0, 1), /* Version 1.0 */
 
   /* Ligatures */
   2,
index a4e9082..9054bdc 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,81 +161,78 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -283,7 +272,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -395,7 +384,7 @@ 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 */
   2,
index 1e50a84..d446804 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,81 +161,78 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -283,7 +272,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -395,7 +384,7 @@ 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 */
   2,
index 480e8e1..74ff25f 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,97 +161,94 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -299,7 +288,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -392,7 +381,7 @@ 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 -- Albanian doesn't have any */
   0,
index 05cb1d0..f40cc4a 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,73 +161,70 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -273,7 +262,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -365,7 +354,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 82f583d..a67baba 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,73 +161,70 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -273,7 +262,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -353,7 +342,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index fb00593..8c5a1d2 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,77 +161,74 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -278,7 +267,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -370,7 +359,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   extcode0_to_vk,
   extcode1_to_vk,
 
-  MAKELONG(0,1), /* Version 1.0 */
+  MAKELONG(0, 1), /* Version 1.0 */
 
   /* Ligatures */
   0,
index f15d0ed..6e792c5 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,73 +161,70 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -273,7 +262,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -365,7 +354,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   extcode0_to_vk,
   extcode1_to_vk,
 
-  MAKELONG(0,1), /* Version 1.0 */
+  MAKELONG(0, 1), /* Version 1.0 */
 
   /* Ligatures */
   0,
index 21556ea..0263790 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -71,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -109,44 +101,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -156,9 +148,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -168,30 +160,27 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -199,71 +188,70 @@ 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_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 }
 };
 
@@ -305,7 +293,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -473,7 +461,7 @@ 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 -- None in Dutch */
   0,
index 2ddf3dc..0684ac1 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 Öèôðîâ ðåä*/
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,101 +161,96 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -302,7 +289,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -395,7 +382,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 02473d2..a81188e 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 Öèôðîâ ðåä*/
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,102 +161,97 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -303,7 +290,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -396,7 +383,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index aa966eb..eb9c182 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 Öèôðîâ ðåä*/
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,104 +149,97 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -262,29 +247,28 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
   /* 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'} },
@@ -321,7 +305,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -415,7 +399,7 @@ 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 -- Bulgarian doesn't have any */
   0,
index 45c4ba3..ac4ce5e 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,77 +161,74 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -278,7 +267,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -370,7 +359,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   extcode0_to_vk,
   extcode1_to_vk,
 
-  MAKELONG(0,1), /* Version 1.0 */
+  MAKELONG(0, 1), /* Version 1.0 */
 
   /* Ligatures */
   0,
index 5f4caa9..434b757 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,86 +161,83 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -288,7 +277,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -453,7 +442,7 @@ 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 */
   0,
index 18661a6..715657c 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #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 */
@@ -69,7 +61,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -107,44 +99,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -154,9 +146,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -166,9 +158,6 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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} },
@@ -279,7 +268,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -372,7 +361,7 @@ 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 */
   0,
index 65cc0b4..7d56dbf 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
@@ -170,94 +162,91 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -298,7 +287,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -586,7 +575,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   extcode0_to_vk,
   extcode1_to_vk,
 
-  MAKELONG(1,1), /* Version 1.0 */
+  MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
 
   0,
   0,
index b140744..509204d 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,92 +161,89 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -294,7 +283,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -500,7 +489,7 @@ 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 -- Croatian doesn't have any */
   0,
index 1b1a180..27f0afb 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -71,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -109,17 +101,56 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -130,102 +161,97 @@ ROSDATA MODIFIERS modifier_bits = {
   /* 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'} },
@@ -264,7 +290,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -422,8 +448,7 @@ 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 -- Czech keyboard doesn't have any */
   0,
index 246a8e2..94ad39b 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -71,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -109,17 +101,56 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -130,87 +161,82 @@ ROSDATA MODIFIERS modifier_bits = {
   /* 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'} },
@@ -249,7 +275,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -407,8 +433,7 @@ 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 -- Czech keyboard doesn't have any */
   0,
index e66af43..ed8e710 100644 (file)
@@ -3,7 +3,7 @@
  * 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 */
@@ -66,7 +58,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -104,44 +96,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -151,9 +143,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -163,32 +155,29 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -196,40 +185,40 @@ 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_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 }
 };
@@ -237,29 +226,29 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
 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 }
 };
 
@@ -301,7 +290,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -472,7 +461,7 @@ 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 -- Danish doesn't have any */
   0,
index 8de249c..a156cfa 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -69,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -107,17 +101,56 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -127,40 +160,65 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -176,39 +234,10 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
 
 ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
   /* Normal, Shifted, Ctrl, C-S-x */
-
-  /* The alphabet */
-  { 'A',         CAPS,   {'a', 'A', 0x01, 0x01} },
-  { 'B',         CAPS,   {'b', 'B', 0x02, 0x02} },
-  { 'C',         CAPS,   {'c', 'C', 0x03, 0x03} },
-  { 'D',         CAPS,   {'d', 'D', 0x04, 0x04} },
-  { 'E',         CAPS,   {'e', 'E', 0x05, 0x05} },
-  { 'F',         CAPS,   {'f', 'F', 0x06, 0x06} },
-  { 'G',         CAPS,   {'g', 'G', 0x07, 0x07} },
-  { 'H',         CAPS,   {'h', 'H', 0x08, 0x08} },
-  { 'I',         CAPS,   {'i', 'I', 0x09, 0x09} },
-  { 'J',         CAPS,   {'j', 'J', 0x0a, 0x0a} },
-  { 'K',         CAPS,   {'k', 'K', 0x0b, 0x0b} },
-  { 'L',         CAPS,   {'l', 'L', 0x0c, 0x0c} },
-  { 'M',         CAPS,   {'m', 'M', 0x0d, 0x0d} },
-  { 'N',         CAPS,   {'n', 'N', 0x0e, 0x0e} },
-  { 'O',         CAPS,   {'o', 'O', 0x0f, 0x0f} },
-  { 'P',         CAPS,   {'p', 'P', 0x10, 0x10} },
-  { 'Q',         CAPS,   {'q', 'Q', 0x11, 0x11} },
-  { 'R',         CAPS,   {'r', 'R', 0x12, 0x12} },
-  { 'S',         CAPS,   {'s', 'S', 0x13, 0x13} },
-  { 'T',         CAPS,   {'t', 'T', 0x14, 0x14} },
-  { 'U',         CAPS,   {'u', 'U', 0x15, 0x15} },
-  { 'V',         CAPS,   {'v', 'V', 0x16, 0x16} },
-  { 'W',         CAPS,   {'w', 'W', 0x17, 0x17} },
-  { 'X',         CAPS,   {'x', 'X', 0x18, 0x18} },
-  { 'Y',         CAPS,   {'y', 'Y', 0x19, 0x19} },
-  { 'Z',         CAPS,   {'z', 'Z', 0x1a, 0x1a} },
-
   /* Legacy Ascii generators */
-  { '2', NOCAPS, {'2', '@', WCH_NONE, 0} },
-  { '6', NOCAPS, {'6', '^', WCH_NONE, 0x1e /* RS */} },
-  { 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 }
 };
 
@@ -250,7 +279,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -343,7 +372,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 6c41795..0891785 100644 (file)
@@ -12,9 +12,8 @@
  * 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,
@@ -112,7 +102,7 @@ ROSDATA USHORT scancode_to_vk[] = {
 /* 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,
@@ -175,56 +165,55 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -235,101 +224,94 @@ ROSDATA MODIFIERS modifier_bits = {
 /* 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'} },
@@ -346,10 +328,8 @@ ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
   { 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),
@@ -498,7 +478,6 @@ ROSDATA DEADKEY_LPWSTR dead_key_names[] = {
     NULL
 };
 
-
 /* Finally, the master table */
 ROSDATA KBDTABLES keyboard_layout_table = {
 
@@ -524,7 +503,7 @@ 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,
@@ -532,7 +511,6 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   NULL
 };
 
-
 PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
   return &keyboard_layout_table;
 }
index 1795573..e693eef 100644 (file)
@@ -1,7 +1,6 @@
 /*
- * 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
@@ -9,7 +8,7 @@
  */
 
 #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 */
@@ -60,10 +51,10 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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 */
@@ -72,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -86,8 +77,8 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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) */
@@ -95,162 +86,159 @@ ROSDATA USHORT scancode_to_vk[] = {
   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 }
 };
 
@@ -265,22 +253,23 @@ ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
   { 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" },
@@ -291,7 +280,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -332,12 +321,12 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -346,8 +335,8 @@ ROSDATA VSC_LPWSTR extended_key_names[] = {
   { 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" },
@@ -355,74 +344,10 @@ ROSDATA VSC_LPWSTR extended_key_names[] = {
   { 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 */
@@ -433,13 +358,14 @@ ROSDATA KBDTABLES keyboard_layout_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,
@@ -447,8 +373,9 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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
@@ -458,12 +385,3 @@ PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
   return &keyboard_layout_table;
 }
 
-INT WINAPI
-DllMain(
-  PVOID hinstDll,
-  ULONG dwReason,
-  PVOID reserved)
-{
-  return 1;
-}
-
index 26737d9..892287f 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,90 +161,87 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -293,7 +282,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -464,7 +453,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   extcode0_to_vk,
   extcode1_to_vk,
 
-  MAKELONG(1,1), /* Version 1.0 */
+  MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
 
   0,
   0,
index 3912846..88d1b11 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #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 */
@@ -69,7 +61,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -107,44 +99,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -154,9 +146,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -166,27 +158,24 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -194,68 +183,68 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
   /* Normal, Shifted, Ctrl */
 
   /* The alphabet */
-  { 'A',         CAPS,   {'a', 'A', 0x01} },
-  { 'B',         CAPS,   {'b', 'B', 0x02} },
-  { 'C',         CAPS,   {'c', 'C', 0x03} },
-  { 'D',         CAPS,   {'d', 'D', 0x04} },
-  { 'F',         CAPS,   {'f', 'F', 0x06} },
-  { 'G',         CAPS,   {'g', 'G', 0x07} },
-  { 'H',         CAPS,   {'h', 'H', 0x08} },
-  { 'I',         CAPS,   {'i', 'I', 0x09} },
-  { 'J',         CAPS,   {'j', 'J', 0x0a} },
-  { 'K',         CAPS,   {'k', 'K', 0x0b} },
-  { 'L',         CAPS,   {'l', 'L', 0x0c} },
-  { 'N',         CAPS,   {'n', 'N', 0x0e} },
-  { 'O',         CAPS,   {'o', 'O', 0x0f} },
-  { 'P',         CAPS,   {'p', 'P', 0x10} },
-  { 'Q',         CAPS,   {'q', 'Q', 0x11} },
-  { 'R',         CAPS,   {'r', 'R', 0x12} },
-  { 'S',         CAPS,   {'s', 'S', 0x13} },
-  { 'T',         CAPS,   {'t', 'T', 0x14} },
-  { 'U',         CAPS,   {'u', 'U', 0x15} },
-  { 'V',         CAPS,   {'v', 'V', 0x16} },
-  { 'W',         CAPS,   {'w', 'W', 0x17} },
-  { 'X',         CAPS,   {'x', 'X', 0x18} },
-  { 'Y',         CAPS,   {'y', 'Y', 0x19} },
-  { 'Z',         CAPS,   {'z', 'Z', 0x1a} },
+  { '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 }
 };
 
@@ -297,7 +286,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -463,7 +452,7 @@ 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 */
   0,
index 214a5d6..c71e0b1 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 /
@@ -76,7 +68,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -114,55 +106,56 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -173,29 +166,26 @@ ROSDATA MODIFIERS modifier_bits = {
   /* 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 }
 };
 
@@ -203,31 +193,31 @@ 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_OEM_102, 0, {'<', '>', 0x1c /* FS */} },
@@ -240,18 +230,18 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
 
 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 }
 };
 
@@ -351,7 +341,6 @@ ROSDATA DEADKEY  deadkey[] =
    { 0, 0, 0}
 };
 
-
 ROSDATA VSC_LPWSTR key_names[] = {
   { 0x00, L"" },
   { 0x01, L"Esc" },
@@ -364,7 +353,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -463,7 +452,7 @@ 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 -- French doesn't have any */
   0,
index ec5dcec..9932947 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,77 +161,74 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -278,7 +267,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -370,7 +359,7 @@ 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 -- Georgian doesn't have any */
   0,
index 7bc8633..df55f18 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -71,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -109,44 +101,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -156,9 +148,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -168,98 +160,95 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -442,7 +431,7 @@ 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 -- German doesn't have any */
   0,
index 3a4d9d8..bb10077 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -71,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -109,44 +101,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -156,9 +148,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -168,98 +160,95 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -442,7 +431,7 @@ 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 -- German doesn't have any */
   0,
index a870303..0e7cc16 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -71,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -109,44 +101,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -156,9 +148,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -168,98 +160,95 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -442,7 +431,7 @@ 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 -- German doesn't have any */
   0,
index 7039fb9..31a1002 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -71,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -109,44 +101,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -156,9 +148,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -168,98 +160,95 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -442,7 +431,7 @@ 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 -- German doesn't have any */
   0,
index 74427c2..68f5165 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -70,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -108,17 +102,56 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -128,50 +161,47 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 */} },
@@ -183,37 +213,37 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
   /* 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 }
 };
 
@@ -269,7 +299,6 @@ ROSDATA DEADKEY  deadkey[] =
   { 0, 0, 0}
 };
 
-
 ROSDATA VSC_LPWSTR key_names[] = {
   { 0x00, L"" },
   { 0x01, L"Esc" },
@@ -282,7 +311,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -374,7 +403,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 93dba69..bf34038 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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
 {
@@ -172,7 +166,7 @@ ROSDATA USHORT scancode_to_vk[] =
   VK_MULTIPLY,  // 37: ?
   VK_LMENU,     // 38: lalt
   VK_SPACE,     // 39: space
-  VK_CAPITAL,   // 3A: caps lock?
+  VK_CAPITAL,   // 3A: CAPLOK lock?
 
   /* - 3b - */
   /* F-Keys */
@@ -181,7 +175,7 @@ ROSDATA USHORT scancode_to_vk[] =
   /* - 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,
@@ -219,17 +213,56 @@ ROSDATA USHORT scancode_to_vk[] =
 };
 
 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 }
 };
 
@@ -239,42 +272,39 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -292,37 +322,37 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
   /* 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 }
 };
 
@@ -367,7 +397,7 @@ ROSDATA VSC_LPWSTR key_names[] =
   { 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" },
@@ -461,7 +491,7 @@ ROSDATA KBDTABLES keyboard_layout_table =
   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,
index 554bc8d..3acdffa 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -69,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -107,17 +101,56 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -127,69 +160,66 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -206,9 +236,9 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
 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 }
 };
 
@@ -250,7 +280,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -342,7 +372,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 34c58a1..a75fc9c 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,90 +161,87 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -292,7 +281,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -454,7 +443,7 @@ 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 -- Icelandic doesn't have any */
   0,
index ee1f066..ac38417 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,85 +161,82 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -288,7 +277,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -391,7 +380,7 @@ 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 */
   3,
index 38adf7a..e31bb93 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,81 +161,78 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -283,7 +272,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -386,7 +375,7 @@ 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 */
   3,
index a52cde3..9d14cc7 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,85 +161,82 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -288,7 +277,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -391,7 +380,7 @@ 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 */
   3,
index 56e21c3..c0648b8 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,85 +161,82 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -288,7 +277,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -391,7 +380,7 @@ 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 */
   3,
index a435720..a8e270d 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,85 +161,82 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -288,7 +277,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -387,7 +376,7 @@ 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 */
   3,
index cadef78..c28e2de 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,87 +161,84 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -290,7 +279,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -419,7 +408,7 @@ 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 */
   0,
index 99ebdaf..66fc2f8 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #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,
@@ -103,7 +95,7 @@ ROSDATA USHORT scancode_to_vk[] = {
 /* 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,
@@ -166,17 +158,56 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -186,40 +217,64 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -232,43 +287,18 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
 
 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 }
 };
 
@@ -310,7 +340,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -403,7 +433,7 @@ 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 */
   0,
index b44e6cd..c17853a 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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
@@ -75,7 +69,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -113,17 +107,56 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -133,97 +166,93 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -265,7 +294,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -357,7 +386,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index c625209..fbf33be 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,77 +161,74 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -278,7 +267,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -370,7 +359,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   extcode0_to_vk,
   extcode1_to_vk,
 
-  MAKELONG(0,1), /* Version 1.0 */
+  MAKELONG(0, 1), /* Version 1.0 */
 
   /* Ligatures */
   0,
index a6859ad..896e502 100644 (file)
@@ -14,7 +14,7 @@
  */
 
 #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 */
@@ -75,7 +69,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -113,17 +107,56 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -133,40 +166,65 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -183,39 +241,10 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
 
 ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
   /* Normal, Shifted, Ctrl, C-S-x */
-
-  /* The alphabet */
-  { 'A',         CAPS,   {'a', 'A', 0x01, 0x01} },
-  { 'B',         CAPS,   {'b', 'B', 0x02, 0x02} },
-  { 'C',         CAPS,   {'c', 'C', 0x03, 0x03} },
-  { 'D',         CAPS,   {'d', 'D', 0x04, 0x04} },
-  { 'E',         CAPS,   {'e', 'E', 0x05, 0x05} },
-  { 'F',         CAPS,   {'f', 'F', 0x06, 0x06} },
-  { 'G',         CAPS,   {'g', 'G', 0x07, 0x07} },
-  { 'H',         CAPS,   {'h', 'H', 0x08, 0x08} },
-  { 'I',         CAPS,   {'i', 'I', 0x09, 0x09} },
-  { 'J',         CAPS,   {'j', 'J', 0x0a, 0x0a} },
-  { 'K',         CAPS,   {'k', 'K', 0x0b, 0x0b} },
-  { 'L',         CAPS,   {'l', 'L', 0x0c, 0x0c} },
-  { 'M',         CAPS,   {'m', 'M', 0x0d, 0x0d} },
-  { 'N',         CAPS,   {'n', 'N', 0x0e, 0x0e} },
-  { 'O',         CAPS,   {'o', 'O', 0x0f, 0x0f} },
-  { 'P',         CAPS,   {'p', 'P', 0x10, 0x10} },
-  { 'Q',         CAPS,   {'q', 'Q', 0x11, 0x11} },
-  { 'R',         CAPS,   {'r', 'R', 0x12, 0x12} },
-  { 'S',         CAPS,   {'s', 'S', 0x13, 0x13} },
-  { 'T',         CAPS,   {'t', 'T', 0x14, 0x14} },
-  { 'U',         CAPS,   {'u', 'U', 0x15, 0x15} },
-  { 'V',         CAPS,   {'v', 'V', 0x16, 0x16} },
-  { 'W',         CAPS,   {'w', 'W', 0x17, 0x17} },
-  { 'X',         CAPS,   {'x', 'X', 0x18, 0x18} },
-  { 'Y',         CAPS,   {'y', 'Y', 0x19, 0x19} },
-  { 'Z',         CAPS,   {'z', 'Z', 0x1a, 0x1a} },
-
   /* Legacy Ascii generators */
-  { '2', NOCAPS, {'2', '@', WCH_NONE, 0} },
-  { '6', NOCAPS, {'6', '^', WCH_NONE, 0x1e /* RS */} },
-  { 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 }
 };
 
@@ -257,7 +286,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -349,7 +378,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 60cc74d..ba33457 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,84 +161,81 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -286,7 +275,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -440,7 +429,7 @@ 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 */
   0,
index a716e48..8cf8a37 100644 (file)
@@ -10,7 +10,7 @@
  */
 
 #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 */
@@ -73,7 +65,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -111,44 +103,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -158,9 +150,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -170,83 +162,80 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -289,7 +278,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -381,7 +370,7 @@ 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 -- Lithuanian doesn't have any */
   0,
index a995437..ca85921 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -70,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -108,17 +102,56 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -128,40 +161,37 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -180,37 +210,37 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
   /* 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 }
 };
 
@@ -252,7 +282,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -344,7 +374,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 321bd48..8b21e96 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,81 +161,78 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -283,7 +272,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -376,7 +365,7 @@ 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 */
   0,
index f6def18..2b33fec 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,84 +161,81 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -286,7 +275,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -458,7 +447,7 @@ 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 */
   0,
index 32f9070..a3c9dfd 100644 (file)
@@ -3,7 +3,7 @@
  * 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 */
@@ -66,7 +58,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -104,44 +96,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -151,9 +143,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -163,32 +155,29 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -196,40 +185,40 @@ 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_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 }
 };
@@ -237,29 +226,29 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
 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 }
 };
 
@@ -301,7 +290,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -472,7 +461,7 @@ 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 -- Norwegian doesn't have any (æ is not a ligature!)*/
   0,
index 97681ab..7acfe8c 100644 (file)
@@ -6,12 +6,10 @@
  *
  * 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 */
@@ -74,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -112,115 +102,154 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -237,22 +266,22 @@ ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
   { 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" },
@@ -333,6 +362,35 @@ ROSDATA VSC_LPWSTR extended_key_names[] = {
   { 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 */
@@ -342,12 +400,12 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
@@ -355,7 +413,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   extcode0_to_vk,
   extcode1_to_vk,
 
-  MAKELONG(1,1), /* Version 1.0 */
+  MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
 
   0,
   0,
index 3e078f1..b639bbc 100644 (file)
@@ -16,7 +16,7 @@
  */
 
 #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,
@@ -114,7 +105,7 @@ ROSDATA USHORT scancode_to_vk[] = {
 /* 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,
@@ -177,44 +168,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -222,7 +213,6 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
    { 0, 0 },
 };
 
-
 #define        TIDLE_CIRC              VK_OEM_2
 #define        ACUTE_GRAVE             VK_OEM_1
 #define        ORDERN_SUPERSCRIPT      VK_OEM_7
@@ -232,20 +222,18 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 #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 }
 };
 
@@ -256,10 +244,6 @@ ROSDATA MODIFIERS modifier_bits = {
   /* 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'} },
@@ -279,99 +263,96 @@ ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
   /* 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[] = {
@@ -382,7 +363,6 @@ 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[] =
@@ -453,7 +433,6 @@ ROSDATA DEADKEY  deadkey[] =
             { 0, 0, 0}
 };
 
-
 ROSDATA VSC_LPWSTR key_names[] = {
   { 0x01, L"Escape" },
   { 0x0e, L"BackSpace" },
@@ -465,7 +444,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -550,7 +529,6 @@ ROSDATA DEADKEY_LPWSTR dead_key_names[] = {
     NULL
 };
 
-
 /* Finally, the master table */
 ROSDATA KBDTABLES keyboard_layout_table = {
 
@@ -576,7 +554,7 @@ 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,
@@ -585,7 +563,6 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   NULL
 };
 
-
 PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
   return &keyboard_layout_table;
 }
index d3f316d..793ffec 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,81 +161,78 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -283,7 +272,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -375,7 +364,7 @@ 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 */
   0,
index 47ecab7..c8d3e8d 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,89 +161,86 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -290,7 +279,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -383,7 +372,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 88d77d0..34bdbd4 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,89 +161,86 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -290,7 +279,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -383,7 +372,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 2d0e6cb..e3a5000 100644 (file)
@@ -8,9 +8,8 @@
  * 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 */
@@ -73,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -111,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -158,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -170,107 +161,103 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -313,7 +300,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -472,7 +459,7 @@ 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 -- German doesn't have any */
   0,
index 5cfa336..892302a 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -59,7 +51,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -71,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -109,44 +101,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -155,9 +147,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -168,22 +160,19 @@ ROSDATA MODIFIERS modifier_bits = {
   /* 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 }
 };
 
@@ -198,66 +187,66 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
   /* 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 }
 };
 
@@ -299,7 +288,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -457,8 +446,7 @@ 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 -- Slovak doesn't have any */
   0,
index a8d1038..20bc91d 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -59,7 +51,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -71,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -109,44 +101,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -155,9 +147,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -168,22 +160,19 @@ ROSDATA MODIFIERS modifier_bits = {
   /* 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 }
 };
 
@@ -198,66 +187,66 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
   /* 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 }
 };
 
@@ -299,7 +288,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -457,8 +446,7 @@ 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 -- Slovak doesn't have any */
   0,
index 02c7b42..970d6d8 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -71,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -109,44 +101,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -156,9 +148,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -168,30 +160,27 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -199,41 +188,41 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
   /* Normal, Shifted, Ctrl */
 
   /* The alphabet */
-  { 'A',         CAPS,   {'a', 'A', 0x01} },
-  { 'B',         CAPS,   {'b', 'B', 0x02} },
-  { 'C',         CAPS,   {'c', 'C', 0x03} },
-  { 'D',         CAPS,   {'d', 'D', 0x04} },
-  { 'F',         CAPS,   {'f', 'F', 0x06} },
-  { 'G',         CAPS,   {'g', 'G', 0x07} },
-  { 'H',         CAPS,   {'h', 'H', 0x08} },
-  { 'I',         CAPS,   {'i', 'I', 0x09} },
-  { 'J',         CAPS,   {'j', 'J', 0x0a} },
-  { 'K',         CAPS,   {'k', 'K', 0x0b} },
-  { 'L',         CAPS,   {'l', 'L', 0x0c} },
-  { 'N',         CAPS,   {'n', 'N', 0x0e} },
-  { 'O',         CAPS,   {'o', 'O', 0x0f} },
-  { 'P',         CAPS,   {'p', 'P', 0x10} },
-  { 'Q',         CAPS,   {'q', 'Q', 0x11} },
-  { 'R',         CAPS,   {'r', 'R', 0x12} },
-  { 'S',         CAPS,   {'s', 'S', 0x13} },
-  { 'T',         CAPS,   {'t', 'T', 0x14} },
-  { 'U',         CAPS,   {'u', 'U', 0x15} },
-  { 'V',         CAPS,   {'v', 'V', 0x16} },
-  { 'W',         CAPS,   {'w', 'W', 0x17} },
-  { 'X',         CAPS,   {'x', 'X', 0x18} },
-  { 'Y',         CAPS,   {'y', 'Y', 0x19} },
-  { 'Z',         CAPS,   {'z', 'Z', 0x1a} },
+  { '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 }
 };
@@ -242,25 +231,25 @@ 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, 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 }
 };
 
@@ -302,7 +291,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -468,7 +457,7 @@ 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 -- Swedish doesn't have any */
   0,
index 267858b..9bf67a3 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,85 +161,82 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -288,7 +277,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -380,7 +369,7 @@ 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 -- Tatar doesn't have any */
   0,
index 27f404d..08fd824 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,77 +161,74 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -278,7 +267,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -370,7 +359,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 6784286..e9b0f35 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,77 +161,74 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -278,7 +267,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -370,7 +359,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 6ed7998..562b9a8 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #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 */
@@ -55,7 +49,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -67,7 +61,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -105,44 +99,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -152,9 +146,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -164,9 +158,6 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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, '+'   } },
@@ -276,7 +267,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -369,7 +360,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   extcode0_to_vk,
   extcode1_to_vk,
 
-  MAKELONG(0,1), /* Version 1.0 */
+  MAKELONG(0, 1), /* Version 1.0 */
 
   /* Ligatures */
   0,
index 3d9b6d8..76c5f71 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,77 +161,74 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -278,7 +267,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -370,7 +359,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 6eec926..4057558 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,90 +161,87 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -293,7 +282,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -465,7 +454,7 @@ 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 */
   0,
index f57e694..b3e33a0 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,90 +161,87 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -293,7 +282,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -465,7 +454,7 @@ 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 */
   0,
index 692c25d..d0f3f03 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -59,7 +51,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -71,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -109,21 +101,56 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -134,44 +161,63 @@ ROSDATA MODIFIERS modifier_bits = {
   /* 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 }
@@ -179,54 +225,29 @@ ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
 
 ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
   /* Normal, Shifted, Ctrl, C-Shift */
-
-  /* The alphabet */
-  { 'B',         CAPS,   {'b', 'B', 0x02, 0x02} },
-  { 'C',         CAPS,   {'c', 'C', 0x03, 0x03} },
-  { 'D',         CAPS,   {'d', 'D', 0x04, 0x04} },
-  { 'F',         CAPS,   {'f', 'F', 0x06, 0x06} },
-  { 'G',         CAPS,   {'g', 'G', 0x07, 0x07} },
-  { 'H',         CAPS,   {'h', 'H', 0x08, 0x08} },
-  { 'J',         CAPS,   {'j', 'J', 0x0a, 0x0a} },
-  { 'K',         CAPS,   {'k', 'K', 0x0b, 0x0b} },
-  { 'L',         CAPS,   {'l', 'L', 0x0c, 0x0c} },
-  { 'M',         CAPS,   {'m', 'M', 0x0d, 0x0d} },
-  { 'N',         CAPS,   {'n', 'N', 0x0e, 0x0e} },
-  { 'P',         CAPS,   {'p', 'P', 0x10, 0x10} },
-  { 'Q',         CAPS,   {'q', 'Q', 0x11, 0x11} },
-  { 'R',         CAPS,   {'r', 'R', 0x12, 0x12} },
-  { 'S',         CAPS,   {'s', 'S', 0x13, 0x13} },
-  { 'T',         CAPS,   {'t', 'T', 0x14, 0x14} },
-  { 'V',         CAPS,   {'v', 'V', 0x16, 0x16} },
-  { 'W',         CAPS,   {'w', 'W', 0x17, 0x17} },
-  { 'X',         CAPS,   {'x', 'X', 0x18, 0x18} },
-  { 'Y',         CAPS,   {'y', 'Y', 0x19, 0x19} },
-  { 'Z',         CAPS,   {'z', 'Z', 0x1a, 0x1a} },
-
   /* Legacy Ascii generators */
-
- { '6', NOCAPS, {'6', '^', WCH_NONE, 0x1e} },
- { 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 }
 };
 
@@ -270,7 +291,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -363,8 +384,7 @@ 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 -- English doesn't have any */
   0,
index 7488151..f8bf005 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,90 +161,87 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -291,7 +280,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -384,7 +373,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index bd69750..6726f73 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -170,81 +162,78 @@ ROSDATA MODIFIERS modifier_bits = {
   /* 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 }
 };
 
@@ -284,7 +273,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -376,7 +365,7 @@ 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 */
   0,
index a58b7f0..053cedc 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #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 */
@@ -69,7 +63,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -107,109 +101,151 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 }
 };
 
@@ -224,23 +260,20 @@ ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
   { 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" },
@@ -251,7 +284,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -278,6 +311,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 0x52, L"Num 0" },
   { 0x53, L"Num Del" },
   { 0x54, L"Sys Req" },
+  { 0x56, L"\\" },
   { 0x57, L"F11" },
   { 0x58, L"F12" },
   { 0x7c, L"F13" },
@@ -306,18 +340,19 @@ ROSDATA VSC_LPWSTR extended_key_names[] = {
   { 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 },
 };
 
@@ -344,7 +379,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index 052e8f5..b448fc6 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,81 +161,78 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -282,7 +271,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -375,7 +364,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   extcode0_to_vk,
   extcode1_to_vk,
 
-  MAKELONG(0,1), /* Version 1.0 */
+  MAKELONG(0, 1), /* Version 1.0 */
 
   /* Ligatures */
   0,
index 7470325..da822d6 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,77 +161,74 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -278,7 +267,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -370,7 +359,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index bbb153e..6554000 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,77 +161,74 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -278,7 +267,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -370,7 +359,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   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,
index f582f6f..5090836 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,88 +161,85 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -291,7 +280,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -459,7 +448,7 @@ 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 */
   0,
index 9bb95b3..d6fcf34 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,77 +161,74 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -278,7 +267,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -370,7 +359,7 @@ ROSDATA KBDTABLES keyboard_layout_table = {
   extcode0_to_vk,
   extcode1_to_vk,
 
-  MAKELONG(0,1), /* Version 1.0 */
+  MAKELONG(0, 1), /* Version 1.0 */
 
   /* Ligatures */
   0,
index 5c99f4f..970b99f 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,81 +161,78 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -283,7 +272,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -375,7 +364,7 @@ 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 */
   0,
index b2a4748..6554c91 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,81 +161,78 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -283,7 +272,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -391,7 +380,7 @@ 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 */
   0,
index fb3778f..9886dec 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #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 */
@@ -60,7 +52,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* 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,
@@ -72,7 +64,7 @@ ROSDATA USHORT scancode_to_vk[] = {
   /* - 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,
@@ -110,44 +102,44 @@ ROSDATA USHORT scancode_to_vk[] = {
 };
 
 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 },
 };
 
@@ -157,9 +149,9 @@ ROSDATA VSC_VK extcode1_to_vk[] = {
 };
 
 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 }
 };
 
@@ -169,91 +161,88 @@ ROSDATA MODIFIERS modifier_bits = {
   { 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 }
 };
 
@@ -293,7 +282,7 @@ ROSDATA VSC_LPWSTR key_names[] = {
   { 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" },
@@ -485,7 +474,7 @@ ROSDATA DEADKEY dead_key[] = {
 };
 
 ROSDATA LIGATURE2 Ligature[] = {
-  { VK_OEM_3, NOCAPS, {0x201a, 0x201a } },
+  { VK_OEM_3, 0, {0x201a, 0x201a } },
   {0, 0}
 };
 
@@ -511,7 +500,7 @@ 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 */
   2,
similarity index 68%
rename from reactos/ntoskrnl/include/internal/kbd.h
rename to reactos/include/ndk/kbd.h
index 3a58ef9..b6ece07 100644 (file)
@@ -4,6 +4,20 @@
 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;
@@ -74,9 +88,9 @@ typedef struct _LIGATURE ## i { \
 
 #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;
@@ -89,26 +103,32 @@ typedef struct _LIGATURE ## i { \
     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
 };
index 264e098..36d7f23 100644 (file)
@@ -1,13 +1,13 @@
 #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;
@@ -30,30 +30,30 @@ extern PATTACHINFO gpai;
 /* 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];
index 092fe3d..fac3131 100644 (file)
@@ -220,7 +220,7 @@ co_MsqSendMessageAsync(PTHREADINFO ptiReceiver,
 
 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);
index 7b86810..0842e22 100644 (file)
@@ -3,7 +3,8 @@
  * 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>
@@ -20,6 +21,7 @@ PTHREADINFO ptiKeyboard;
 PTHREADINFO ptiMouse;
 PKTIMER MasterTimer = NULL;
 PATTACHINFO gpai = NULL;
+HANDLE ghKeyboardDevice;
 
 static DWORD LastInputTick = 0;
 static HANDLE MouseDeviceHandle;
@@ -27,16 +29,12 @@ static HANDLE MouseThreadHandle;
 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; \
@@ -51,10 +49,10 @@ DWORD IntLastInputTick(BOOL LastInputTickSetGet);
     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);
@@ -64,8 +62,8 @@ DWORD IntLastInputTick(BOOL LastInputTickSetGet)
     return LastInputTick;
 }
 
-
-VOID FASTCALL DoTheScreenSaver(VOID)
+VOID FASTCALL
+DoTheScreenSaver(VOID)
 {
     LARGE_INTEGER TickCount;
     DWORD Test, TO;
@@ -100,8 +98,8 @@ VOID FASTCALL DoTheScreenSaver(VOID)
     }
 }
 
-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;
@@ -191,10 +189,7 @@ ProcessMouseInputData(PMOUSE_INPUT_DATA Data, ULONG InputCount)
     SendMouseEvent(mi);
 }
 
-
-
-
-VOID APIENTRY
+static VOID APIENTRY
 MouseThreadMain(PVOID StartContext)
 {
     UNICODE_STRING MouseDeviceName = RTL_CONSTANT_STRING(L"\\Device\\PointerClass0");
@@ -302,7 +297,7 @@ MouseThreadMain(PVOID StartContext)
 
             UserEnterExclusive();
 
-            ProcessMouseInputData(&MouseInput, Iosb.Information / sizeof(MOUSE_INPUT_DATA));
+            IntProcessMouseInputData(&MouseInput, Iosb.Information / sizeof(MOUSE_INPUT_DATA));
 
             UserLeave();
         }
@@ -310,178 +305,6 @@ MouseThreadMain(PVOID StartContext)
     }
 }
 
-/* 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)
 {
@@ -489,15 +312,6 @@ 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,
@@ -511,7 +325,7 @@ KeyboardThreadMain(PVOID StartContext)
         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,
@@ -542,8 +356,8 @@ KeyboardThreadMain(PVOID StartContext)
     KeSetPriorityThread(&PsGetCurrentThread()->Tcb,
                         LOW_REALTIME_PRIORITY + 3);
 
-    IntKeyboardGetIndicatorTrans(KeyboardDeviceHandle,
-                                 &IndicatorTrans);
+    //IntKeyboardGetIndicatorTrans(ghKeyboardDevice,
+   //                              &IndicatorTrans);
 
     for (;;)
     {
@@ -563,19 +377,11 @@ KeyboardThreadMain(PVOID StartContext)
          */
         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,
@@ -591,7 +397,7 @@ KeyboardThreadMain(PVOID StartContext)
             }
             if(Status == STATUS_PENDING)
             {
-                NtWaitForSingleObject(KeyboardDeviceHandle, FALSE, NULL);
+                NtWaitForSingleObject(ghKeyboardDevice, FALSE, NULL);
                 Status = Iosb.Status;
             }
             if(!NT_SUCCESS(Status))
@@ -616,266 +422,12 @@ KeyboardThreadMain(PVOID StartContext)
             /* 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" );
     }
 }
@@ -1019,12 +571,12 @@ CleanupInputImp(VOID)
 }
 
 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
@@ -1037,27 +589,27 @@ IntBlockInput(PTHREADINFO W32Thread, BOOL BlockIt)
      * 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;
 }
 
@@ -1249,176 +801,7 @@ IntMouseInput(MOUSEINPUT *mi, BOOL Injected)
 }
 
 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;
 
@@ -1475,22 +858,22 @@ NtUserSendInput(
     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);
@@ -1500,49 +883,41 @@ NtUserSendInput(
      * 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
-
         }
     }
 
index 7fe07bf..ff35a1c 100644 (file)
@@ -168,6 +168,58 @@ static BOOL UserLoadKbdDll(WCHAR *wsKLID,
          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
    {
index 821a11f..ea3a0c3 100644 (file)
  * 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_);
@@ -370,165 +665,399 @@ CLEANUP:
     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;
 }
 
 /*
@@ -545,77 +1074,86 @@ UINT ScanToVk( UINT Code, BOOL ExtKey, PKBDTABLES pkKT )
  *      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_);
@@ -623,26 +1161,31 @@ CLEANUP:
     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)
@@ -650,39 +1193,47 @@ NtUserToUnicodeEx(
         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_);
@@ -690,252 +1241,115 @@ CLEANUP:
     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 */
@@ -945,71 +1359,70 @@ UserGetKeyboardType(
             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:
@@ -1017,5 +1430,32 @@ 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 */
index ad635a9..3a4a9d4 100644 (file)
@@ -221,11 +221,13 @@ DWORD FASTCALL UserGetKeyState(DWORD key)
    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
    {
@@ -629,7 +631,7 @@ co_MsqInsertMouseMessage(MSG* Msg, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Hook
 // 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;
@@ -661,9 +663,15 @@ co_MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 
    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))
@@ -1922,6 +1930,7 @@ MsqInitializeMessageQueue(struct _ETHREAD *Thread, PUSER_MESSAGE_QUEUE MessageQu
    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);