xref: /reactos/dll/keyboard/kbdazel/kbdazel.c (revision c2c66aff)
1*c2c66affSColin Finck /*
2*c2c66affSColin Finck  * ReactOS Azeri Latin Keyboard layout
3*c2c66affSColin Finck  * Copyright (C) 2008 ReactOS
4*c2c66affSColin Finck  * Author: Dmitry Chapyshev
5*c2c66affSColin Finck  * License: LGPL, see: LGPL.txt
6*c2c66affSColin Finck  *
7*c2c66affSColin Finck  * Thanks to: http://www.barcodeman.com/altek/mule/scandoc.php
8*c2c66affSColin Finck  * and http://win.tue.nl/~aeb/linux/kbd/scancodes-1.html
9*c2c66affSColin Finck  */
10*c2c66affSColin Finck 
11*c2c66affSColin Finck #define WIN32_NO_STATUS
12*c2c66affSColin Finck #include <stdarg.h>
13*c2c66affSColin Finck #include <windef.h>
14*c2c66affSColin Finck #include <winuser.h>
15*c2c66affSColin Finck #include <ndk/kbd.h>
16*c2c66affSColin Finck 
17*c2c66affSColin Finck #ifdef _M_IA64
18*c2c66affSColin Finck #define ROSDATA static __declspec(allocate(".data"))
19*c2c66affSColin Finck #else
20*c2c66affSColin Finck #ifdef _MSC_VER
21*c2c66affSColin Finck #pragma data_seg(".data")
22*c2c66affSColin Finck #define ROSDATA static
23*c2c66affSColin Finck #else
24*c2c66affSColin Finck #define ROSDATA static __attribute__((section(".data")))
25*c2c66affSColin Finck #endif
26*c2c66affSColin Finck #endif
27*c2c66affSColin Finck 
28*c2c66affSColin Finck #define VK_EMPTY  0xff   /* The non-existent VK */
29*c2c66affSColin Finck 
30*c2c66affSColin Finck #define KNUMS     KBDNUMPAD|KBDSPECIAL /* Special + number pad */
31*c2c66affSColin Finck #define KMEXT     KBDEXT|KBDMULTIVK    /* Multi + ext */
32*c2c66affSColin Finck 
33*c2c66affSColin Finck ROSDATA USHORT scancode_to_vk[] = {
34*c2c66affSColin Finck   /* Numbers Row */
35*c2c66affSColin Finck   /* - 00 - */
36*c2c66affSColin Finck   /* 1 ...         2 ...         3 ...         4 ... */
37*c2c66affSColin Finck   VK_EMPTY,     VK_ESCAPE,    '1',          '2',
38*c2c66affSColin Finck   '3',          '4',          '5',          '6',
39*c2c66affSColin Finck   '7',          '8',          '9',          '0',
40*c2c66affSColin Finck   VK_OEM_MINUS, VK_OEM_PLUS,  VK_BACK,
41*c2c66affSColin Finck   /* - 0f - */
42*c2c66affSColin Finck   /* First Letters Row */
43*c2c66affSColin Finck   VK_TAB,       'Q',          'W',          'E',
44*c2c66affSColin Finck   'R',          'T',          'Y',          'U',
45*c2c66affSColin Finck   'I',          'O',          'P',
46*c2c66affSColin Finck   VK_OEM_4,     VK_OEM_6,     VK_RETURN,
47*c2c66affSColin Finck   /* - 1d - */
48*c2c66affSColin Finck   /* Second Letters Row */
49*c2c66affSColin Finck   VK_LCONTROL,
50*c2c66affSColin Finck   'A',          'S',          'D',          'F',
51*c2c66affSColin Finck   'G',          'H',          'J',          'K',
52*c2c66affSColin Finck   'L',          VK_OEM_1,     VK_OEM_7,     VK_OEM_3,
53*c2c66affSColin Finck   VK_LSHIFT,    VK_OEM_5,
54*c2c66affSColin Finck   /* - 2c - */
55*c2c66affSColin Finck   /* Third letters row */
56*c2c66affSColin Finck   'Z',          'X',          'C',          'V',
57*c2c66affSColin Finck   'B',          'N',          'M',          VK_OEM_COMMA,
58*c2c66affSColin Finck   VK_OEM_PERIOD,VK_OEM_2,     VK_RSHIFT | KBDEXT,
59*c2c66affSColin Finck   /* - 37 - */
60*c2c66affSColin Finck   /* Bottom Row */
61*c2c66affSColin Finck   0x26a,  VK_LMENU,     VK_SPACE,     VK_CAPITAL,
62*c2c66affSColin Finck 
63*c2c66affSColin Finck   /* - 3b - */
64*c2c66affSColin Finck   /* F-Keys */
65*c2c66affSColin Finck   VK_F1, VK_F2, VK_F3, VK_F4, VK_F5, VK_F6,
66*c2c66affSColin Finck   VK_F7, VK_F8, VK_F9, VK_F10,
67*c2c66affSColin Finck   /* - 45 - */
68*c2c66affSColin Finck   /* Locks */
69*c2c66affSColin Finck   VK_NUMLOCK | KMEXT,
70*c2c66affSColin Finck   VK_SCROLL | KBDMULTIVK,
71*c2c66affSColin Finck   /* - 47 - */
72*c2c66affSColin Finck   /* Number-Pad */
73*c2c66affSColin Finck   VK_HOME | KNUMS,      VK_UP | KNUMS,         VK_PRIOR | KNUMS, VK_SUBTRACT,
74*c2c66affSColin Finck   VK_LEFT | KNUMS,      VK_CLEAR | KNUMS,      VK_RIGHT | KNUMS, VK_ADD,
75*c2c66affSColin Finck   VK_END | KNUMS,       VK_DOWN | KNUMS,       VK_NEXT | KNUMS,
76*c2c66affSColin Finck   VK_INSERT | KNUMS,    VK_DELETE | KNUMS,
77*c2c66affSColin Finck   /* - 54 - */
78*c2c66affSColin Finck   /* Presumably PrtSc */
79*c2c66affSColin Finck   VK_SNAPSHOT,
80*c2c66affSColin Finck   /* - 55 - */
81*c2c66affSColin Finck   /* Oddities, and the remaining standard F-Keys */
82*c2c66affSColin Finck   VK_EMPTY,     VK_OEM_102,     VK_F11,       VK_F12,
83*c2c66affSColin Finck   /* - 59 - */
84*c2c66affSColin Finck   VK_CLEAR,     VK_OEM_WSCTRL,VK_OEM_FINISH,VK_OEM_JUMP,  VK_EREOF, /* EREOF */
85*c2c66affSColin Finck   VK_OEM_BACKTAB,    VK_OEM_AUTO,  VK_EMPTY,    VK_ZOOM,            /* ZOOM */
86*c2c66affSColin Finck   VK_HELP,
87*c2c66affSColin Finck   /* - 64 - */
88*c2c66affSColin Finck   /* Even more F-Keys (for example, NCR keyboards from the early 90's) */
89*c2c66affSColin Finck   VK_F13, VK_F14, VK_F15, VK_F16, VK_F17, VK_F18, VK_F19, VK_F20,
90*c2c66affSColin Finck   VK_F21, VK_F22, VK_F23,
91*c2c66affSColin Finck   /* - 6f - */
92*c2c66affSColin Finck   /* Not sure who uses these codes */
93*c2c66affSColin Finck   VK_OEM_PA3, VK_EMPTY, VK_OEM_RESET,
94*c2c66affSColin Finck   /* - 72 - */
95*c2c66affSColin Finck   VK_EMPTY, 0xc1, VK_EMPTY, VK_EMPTY,
96*c2c66affSColin Finck   /* - 76 - */
97*c2c66affSColin Finck   /* One more f-key */
98*c2c66affSColin Finck   VK_F24,
99*c2c66affSColin Finck   /* - 77 - */
100*c2c66affSColin Finck   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY,
101*c2c66affSColin Finck   VK_OEM_PA1, VK_TAB, 0xc2, 0, /* PA1 */
102*c2c66affSColin Finck   0,
103*c2c66affSColin Finck   /* - 80 - */
104*c2c66affSColin Finck   0
105*c2c66affSColin Finck };
106*c2c66affSColin Finck 
107*c2c66affSColin Finck ROSDATA VSC_VK extcode0_to_vk[] = {
108*c2c66affSColin Finck   { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
109*c2c66affSColin Finck   { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
110*c2c66affSColin Finck   { 0x1D, VK_RCONTROL | KBDEXT },
111*c2c66affSColin Finck   { 0x20, VK_VOLUME_MUTE | KBDEXT },
112*c2c66affSColin Finck   { 0x21, VK_LAUNCH_APP2 | KBDEXT },
113*c2c66affSColin Finck   { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
114*c2c66affSColin Finck   { 0x24, VK_MEDIA_STOP | KBDEXT },
115*c2c66affSColin Finck   { 0x2E, VK_VOLUME_DOWN | KBDEXT },
116*c2c66affSColin Finck   { 0x30, VK_VOLUME_UP | KBDEXT },
117*c2c66affSColin Finck   { 0x32, VK_BROWSER_HOME | KBDEXT },
118*c2c66affSColin Finck   { 0x35, VK_DIVIDE | KBDEXT },
119*c2c66affSColin Finck   { 0x37, VK_SNAPSHOT | KBDEXT },
120*c2c66affSColin Finck   { 0x38, VK_RMENU | KBDEXT },
121*c2c66affSColin Finck   { 0x47, VK_HOME | KBDEXT },
122*c2c66affSColin Finck   { 0x48, VK_UP | KBDEXT },
123*c2c66affSColin Finck   { 0x49, VK_PRIOR | KBDEXT },
124*c2c66affSColin Finck   { 0x4B, VK_LEFT | KBDEXT },
125*c2c66affSColin Finck   { 0x4D, VK_RIGHT | KBDEXT },
126*c2c66affSColin Finck   { 0x4F, VK_END | KBDEXT },
127*c2c66affSColin Finck   { 0x50, VK_DOWN | KBDEXT },
128*c2c66affSColin Finck   { 0x51, VK_NEXT | KBDEXT },
129*c2c66affSColin Finck   { 0x52, VK_INSERT | KBDEXT },
130*c2c66affSColin Finck   { 0x53, VK_DELETE | KBDEXT },
131*c2c66affSColin Finck   { 0x5B, VK_LWIN | KBDEXT },
132*c2c66affSColin Finck   { 0x5C, VK_RWIN | KBDEXT },
133*c2c66affSColin Finck   { 0x5D, VK_APPS | KBDEXT },
134*c2c66affSColin Finck   { 0x5F, VK_SLEEP | KBDEXT },
135*c2c66affSColin Finck   { 0x65, VK_BROWSER_SEARCH | KBDEXT },
136*c2c66affSColin Finck   { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
137*c2c66affSColin Finck   { 0x67, VK_BROWSER_REFRESH | KBDEXT },
138*c2c66affSColin Finck   { 0x68, VK_BROWSER_STOP | KBDEXT },
139*c2c66affSColin Finck   { 0x69, VK_BROWSER_FORWARD | KBDEXT },
140*c2c66affSColin Finck   { 0x6A, VK_BROWSER_BACK | KBDEXT },
141*c2c66affSColin Finck   { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
142*c2c66affSColin Finck   { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
143*c2c66affSColin Finck   { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
144*c2c66affSColin Finck   { 0x1C, VK_RETURN | KBDEXT },
145*c2c66affSColin Finck   { 0x46, VK_CANCEL | KBDEXT },
146*c2c66affSColin Finck   { 0, 0 },
147*c2c66affSColin Finck };
148*c2c66affSColin Finck 
149*c2c66affSColin Finck ROSDATA VSC_VK extcode1_to_vk[] = {
150*c2c66affSColin Finck   { 0x1d, VK_PAUSE},
151*c2c66affSColin Finck   { 0, 0 },
152*c2c66affSColin Finck };
153*c2c66affSColin Finck 
154*c2c66affSColin Finck ROSDATA VK_TO_BIT modifier_keys[] = {
155*c2c66affSColin Finck   { VK_SHIFT,   KBDSHIFT },
156*c2c66affSColin Finck   { VK_CONTROL, KBDCTRL },
157*c2c66affSColin Finck   { VK_MENU,    KBDALT },
158*c2c66affSColin Finck   { 0,          0 }
159*c2c66affSColin Finck };
160*c2c66affSColin Finck 
161*c2c66affSColin Finck ROSDATA MODIFIERS modifier_bits = {
162*c2c66affSColin Finck   modifier_keys,
163*c2c66affSColin Finck   3,
164*c2c66affSColin Finck   { 0, 1, 3, 2 }
165*c2c66affSColin Finck };
166*c2c66affSColin Finck 
167*c2c66affSColin Finck ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
168*c2c66affSColin Finck   { VK_OEM_8,     0, {'`',    '~'   } },
169*c2c66affSColin Finck   { '1',          0, {'1',    '!'   } },
170*c2c66affSColin Finck   { '2',          0, {'2',    '\"'  } },
171*c2c66affSColin Finck   { '3',          0, {'3',    0x2166} },
172*c2c66affSColin Finck   { '4',          0, {'4',    ';'   } },
173*c2c66affSColin Finck   { '5',          0, {'5',    '%'   } },
174*c2c66affSColin Finck   { '6',          0, {'6',    ':'   } },
175*c2c66affSColin Finck   { '7',          0, {'7',    '?'   } },
176*c2c66affSColin Finck   { '8',          0, {'8',    '*'   } },
177*c2c66affSColin Finck   { '9',          0, {'9',    '('   } },
178*c2c66affSColin Finck   { '0',          0, {'0',    ')'   } },
179*c2c66affSColin Finck   { VK_OEM_MINUS, 0, {'-',    '_'   } },
180*c2c66affSColin Finck   { VK_OEM_PLUS,  0, {'=',    '+'   } },
181*c2c66affSColin Finck   { 'Q',          CAPLOK,   {'q',    'Q'   } },
182*c2c66affSColin Finck   { 'W',          CAPLOK,   {0x00fc, 0x00dc} },
183*c2c66affSColin Finck   { 'E',          CAPLOK,   {'e',    'E'   } },
184*c2c66affSColin Finck   { 'R',          CAPLOK,   {'r',    'R'   } },
185*c2c66affSColin Finck   { 'T',          CAPLOK,   {'t',    'T'   } },
186*c2c66affSColin Finck   { 'Y',          CAPLOK,   {'y',    'Y'   } },
187*c2c66affSColin Finck   { 'U',          CAPLOK,   {'u',    'U'   } },
188*c2c66affSColin Finck   { 'I',          CAPLOK,   {'i',    0x0130} },
189*c2c66affSColin Finck   { 'O',          CAPLOK,   {'o',    'O'   } },
190*c2c66affSColin Finck   { 'P',          CAPLOK,   {'p',    'P'   } },
191*c2c66affSColin Finck   { VK_OEM_4,     CAPLOK,   {0x00f6, 0x00d6} },
192*c2c66affSColin Finck   { VK_OEM_6,     CAPLOK,   {0x011f, 0x011e} },
193*c2c66affSColin Finck   { VK_OEM_7,     0, {'\\',   '/'   } },
194*c2c66affSColin Finck   { 'A',          CAPLOK,   {'a',    'A'   } },
195*c2c66affSColin Finck   { 'S',          CAPLOK,   {'s',    'S'   } },
196*c2c66affSColin Finck   { 'D',          CAPLOK,   {'d',    'D'   } },
197*c2c66affSColin Finck   { 'F',          CAPLOK,   {'f',    'F'   } },
198*c2c66affSColin Finck   { 'G',          CAPLOK,   {'g',    'G'   } },
199*c2c66affSColin Finck   { 'H',          CAPLOK,   {'h',    'H'   } },
200*c2c66affSColin Finck   { 'J',          CAPLOK,   {'j',    'J'   } },
201*c2c66affSColin Finck   { 'K',          CAPLOK,   {'k',    'K'   } },
202*c2c66affSColin Finck   { 'L',          CAPLOK,   {'l',    'L'   } },
203*c2c66affSColin Finck   { VK_OEM_1,     CAPLOK,   {0x0131, 'I'   } },
204*c2c66affSColin Finck   { VK_OEM_3,     CAPLOK,   {0x0259, 0x018f} },
205*c2c66affSColin Finck   { 'Z',          CAPLOK,   {'z',    'Z'   } },
206*c2c66affSColin Finck   { 'X',          CAPLOK,   {'x',    'X'   } },
207*c2c66affSColin Finck   { 'C',          CAPLOK,   {'c',    'C'   } },
208*c2c66affSColin Finck   { 'V',          CAPLOK,   {'v',    'V'   } },
209*c2c66affSColin Finck   { 'B',          CAPLOK,   {'b',    'B'   } },
210*c2c66affSColin Finck   { 'N',          CAPLOK,   {'n',    'N'   } },
211*c2c66affSColin Finck   { 'M',          CAPLOK,   {'m',    'M'   } },
212*c2c66affSColin Finck   { VK_OEM_COMMA, CAPLOK,   {0x00e7, 0x00c7} },
213*c2c66affSColin Finck   { VK_OEM_PERIOD,CAPLOK,   {0x015f, 0x015e} },
214*c2c66affSColin Finck   { VK_OEM_2,     0, {'.',    ','   } },
215*c2c66affSColin Finck   { VK_OEM_5,     0, {'\\',   '/'   } },
216*c2c66affSColin Finck   { VK_DECIMAL,   0, {'.',    '.'   } },
217*c2c66affSColin Finck   { VK_TAB,       0, {'\t',   '\t'  } },
218*c2c66affSColin Finck   { VK_ADD,       0, {'+',    '+'   } },
219*c2c66affSColin Finck   { VK_DIVIDE,    0, {'/',    '/'   } },
220*c2c66affSColin Finck   { VK_MULTIPLY,  0, {'*',    '*'   } },
221*c2c66affSColin Finck   { VK_SUBTRACT,  0, {'-',    '-'   } },
222*c2c66affSColin Finck   { 0, 0 }
223*c2c66affSColin Finck };
224*c2c66affSColin Finck 
225*c2c66affSColin Finck ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
226*c2c66affSColin Finck   { VK_BACK,   0, {'\b',   '\b',   WCH_NONE, 0x007f} },
227*c2c66affSColin Finck   { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, 0x001b} },
228*c2c66affSColin Finck   { VK_RETURN, 0, {'\r',   '\r',   WCH_NONE, '\n'  } },
229*c2c66affSColin Finck   { VK_SPACE,  0, {' ',    ' ',    WCH_NONE, ' '   } },
230*c2c66affSColin Finck   { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, 0x0003} },
231*c2c66affSColin Finck   { 0, 0 }
232*c2c66affSColin Finck };
233*c2c66affSColin Finck 
234*c2c66affSColin Finck ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
235*c2c66affSColin Finck   { VK_NUMPAD0, 0, {'0'} },
236*c2c66affSColin Finck   { VK_NUMPAD1, 0, {'1'} },
237*c2c66affSColin Finck   { VK_NUMPAD2, 0, {'2'} },
238*c2c66affSColin Finck   { VK_NUMPAD3, 0, {'3'} },
239*c2c66affSColin Finck   { VK_NUMPAD4, 0, {'4'} },
240*c2c66affSColin Finck   { VK_NUMPAD5, 0, {'5'} },
241*c2c66affSColin Finck   { VK_NUMPAD6, 0, {'6'} },
242*c2c66affSColin Finck   { VK_NUMPAD7, 0, {'7'} },
243*c2c66affSColin Finck   { VK_NUMPAD8, 0, {'8'} },
244*c2c66affSColin Finck   { VK_NUMPAD9, 0, {'9'} },
245*c2c66affSColin Finck   { 0,0 }
246*c2c66affSColin Finck };
247*c2c66affSColin Finck 
248*c2c66affSColin Finck #define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
249*c2c66affSColin Finck 
250*c2c66affSColin Finck ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
251*c2c66affSColin Finck   vk_master(4,key_to_chars_4mod),
252*c2c66affSColin Finck   vk_master(2,key_to_chars_2mod),
253*c2c66affSColin Finck   vk_master(1,keypad_numbers),
254*c2c66affSColin Finck   { 0,0,0 }
255*c2c66affSColin Finck };
256*c2c66affSColin Finck 
257*c2c66affSColin Finck ROSDATA VSC_LPWSTR key_names[] = {
258*c2c66affSColin Finck   { 0x01, L"Esc" },
259*c2c66affSColin Finck   { 0x0e, L"Backspace" },
260*c2c66affSColin Finck   { 0x0f, L"Tab" },
261*c2c66affSColin Finck   { 0x1c, L"Enter" },
262*c2c66affSColin Finck   { 0x1d, L"Ctrl" },
263*c2c66affSColin Finck   { 0x2a, L"Shift" },
264*c2c66affSColin Finck   { 0x36, L"Right Shift" },
265*c2c66affSColin Finck   { 0x37, L"Num *" },
266*c2c66affSColin Finck   { 0x38, L"Alt" },
267*c2c66affSColin Finck   { 0x39, L"Space" },
268*c2c66affSColin Finck   { 0x3a, L"CAPLOK Lock" },
269*c2c66affSColin Finck   { 0x3b, L"F1" },
270*c2c66affSColin Finck   { 0x3c, L"F2" },
271*c2c66affSColin Finck   { 0x3d, L"F3" },
272*c2c66affSColin Finck   { 0x3e, L"F4" },
273*c2c66affSColin Finck   { 0x3f, L"F5" },
274*c2c66affSColin Finck   { 0x40, L"F6" },
275*c2c66affSColin Finck   { 0x41, L"F7" },
276*c2c66affSColin Finck   { 0x42, L"F8" },
277*c2c66affSColin Finck   { 0x43, L"F9" },
278*c2c66affSColin Finck   { 0x44, L"F10" },
279*c2c66affSColin Finck   { 0x45, L"Pause" },
280*c2c66affSColin Finck   { 0x46, L"Scroll Lock" },
281*c2c66affSColin Finck   { 0x47, L"Num 7" },
282*c2c66affSColin Finck   { 0x48, L"Num 8" },
283*c2c66affSColin Finck   { 0x49, L"Num 9" },
284*c2c66affSColin Finck   { 0x4a, L"Num -" },
285*c2c66affSColin Finck   { 0x4b, L"Num 4" },
286*c2c66affSColin Finck   { 0x4c, L"Num 5" },
287*c2c66affSColin Finck   { 0x4d, L"Num 6" },
288*c2c66affSColin Finck   { 0x4e, L"Num +" },
289*c2c66affSColin Finck   { 0x4f, L"Num 1" },
290*c2c66affSColin Finck   { 0x50, L"Num 2" },
291*c2c66affSColin Finck   { 0x51, L"Num 3" },
292*c2c66affSColin Finck   { 0x52, L"Num 0" },
293*c2c66affSColin Finck   { 0x53, L"Num Del" },
294*c2c66affSColin Finck   { 0x54, L"Sys Req" },
295*c2c66affSColin Finck   { 0x57, L"F11" },
296*c2c66affSColin Finck   { 0x58, L"F12" },
297*c2c66affSColin Finck   { 0x7c, L"F13" },
298*c2c66affSColin Finck   { 0x7d, L"F14" },
299*c2c66affSColin Finck   { 0x7e, L"F15" },
300*c2c66affSColin Finck   { 0x7f, L"F16" },
301*c2c66affSColin Finck   { 0x80, L"F17" },
302*c2c66affSColin Finck   { 0x81, L"F18" },
303*c2c66affSColin Finck   { 0x82, L"F19" },
304*c2c66affSColin Finck   { 0x83, L"F20" },
305*c2c66affSColin Finck   { 0x84, L"F21" },
306*c2c66affSColin Finck   { 0x85, L"F22" },
307*c2c66affSColin Finck   { 0x86, L"F23" },
308*c2c66affSColin Finck   { 0x87, L"F24" },
309*c2c66affSColin Finck   { 0, NULL }
310*c2c66affSColin Finck };
311*c2c66affSColin Finck 
312*c2c66affSColin Finck ROSDATA VSC_LPWSTR extended_key_names[] = {
313*c2c66affSColin Finck   { 0x1c, L"Num Enter" },
314*c2c66affSColin Finck   { 0x1d, L"Right Control" },
315*c2c66affSColin Finck   { 0x35, L"Num /" },
316*c2c66affSColin Finck   { 0x37, L"Prnt Scrn" },
317*c2c66affSColin Finck   { 0x38, L"Right Alt" },
318*c2c66affSColin Finck   { 0x45, L"Num Lock" },
319*c2c66affSColin Finck   { 0x46, L"Break" },
320*c2c66affSColin Finck   { 0x47, L"Home" },
321*c2c66affSColin Finck   { 0x48, L"Up" },
322*c2c66affSColin Finck   { 0x49, L"Page Up" },
323*c2c66affSColin Finck   { 0x4b, L"Left" },
324*c2c66affSColin Finck   { 0x4d, L"Right" },
325*c2c66affSColin Finck   { 0x4f, L"End" },
326*c2c66affSColin Finck   { 0x50, L"Down" },
327*c2c66affSColin Finck   { 0x51, L"Page Down" },
328*c2c66affSColin Finck   { 0x52, L"Insert" },
329*c2c66affSColin Finck   { 0x53, L"Delete" },
330*c2c66affSColin Finck   { 0x54, L"<ReactOS>" },
331*c2c66affSColin Finck   { 0x56, L"Help" },
332*c2c66affSColin Finck   { 0x5b, L"Left <ReactOS>" },
333*c2c66affSColin Finck   { 0x5c, L"Right <ReactOS>" },
334*c2c66affSColin Finck   { 0x5d, L"Application" },
335*c2c66affSColin Finck   { 0, NULL }
336*c2c66affSColin Finck };
337*c2c66affSColin Finck 
338*c2c66affSColin Finck /* Finally, the master table */
339*c2c66affSColin Finck ROSDATA KBDTABLES keyboard_layout_table = {
340*c2c66affSColin Finck   /* modifier assignments */
341*c2c66affSColin Finck   &modifier_bits,
342*c2c66affSColin Finck 
343*c2c66affSColin Finck   /* character from vk tables */
344*c2c66affSColin Finck   vk_to_wchar_master_table,
345*c2c66affSColin Finck 
346*c2c66affSColin Finck   /* diacritical marks */
347*c2c66affSColin Finck   NULL,
348*c2c66affSColin Finck 
349*c2c66affSColin Finck   /* Key names */
350*c2c66affSColin Finck   (VSC_LPWSTR *)key_names,
351*c2c66affSColin Finck   (VSC_LPWSTR *)extended_key_names,
352*c2c66affSColin Finck   NULL, /* Dead key names */
353*c2c66affSColin Finck 
354*c2c66affSColin Finck   /* scan code to virtual key maps */
355*c2c66affSColin Finck   scancode_to_vk,
356*c2c66affSColin Finck   sizeof(scancode_to_vk) / sizeof(scancode_to_vk[0]),
357*c2c66affSColin Finck   extcode0_to_vk,
358*c2c66affSColin Finck   extcode1_to_vk,
359*c2c66affSColin Finck 
360*c2c66affSColin Finck   MAKELONG(0, 1), /* Version 1.0 */
361*c2c66affSColin Finck 
362*c2c66affSColin Finck   /* Ligatures */
363*c2c66affSColin Finck   0,
364*c2c66affSColin Finck   0,
365*c2c66affSColin Finck   NULL
366*c2c66affSColin Finck };
367*c2c66affSColin Finck 
368*c2c66affSColin Finck PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
369*c2c66affSColin Finck   return &keyboard_layout_table;
370*c2c66affSColin Finck }
371*c2c66affSColin Finck 
372*c2c66affSColin Finck INT WINAPI
373*c2c66affSColin Finck DllMain(
374*c2c66affSColin Finck   PVOID hinstDll,
375*c2c66affSColin Finck   ULONG dwReason,
376*c2c66affSColin Finck   PVOID reserved)
377*c2c66affSColin Finck {
378*c2c66affSColin Finck   return 1;
379*c2c66affSColin Finck }
380*c2c66affSColin Finck 
381