ReactOS 0.4.16-dev-1946-g52006dd
kbdcmk.c
Go to the documentation of this file.
1/*
2 * ReactOS Colemak Keyboard layout
3 * Copyright (C) 2025 ReactOS
4 * License: LGPL, see: LGPL.txt
5 *
6 * Thanks to: http://www.barcodeman.com/altek/mule/scandoc.php
7 * and http://win.tue.nl/~aeb/linux/kbd/scancodes-1.html
8 */
9
10#define WIN32_NO_STATUS
11#include <stdarg.h>
12#include <windef.h>
13#include <winuser.h>
14#include <ndk/kbd.h>
15
16#ifdef _M_IA64
17#define ROSDATA static __declspec(allocate(".data"))
18#else
19#ifdef _MSC_VER
20#pragma data_seg(".data")
21#define ROSDATA static
22#else
23#define ROSDATA static __attribute__((section(".data")))
24#endif
25#endif
26
27#define VK_EMPTY 0xff /* The non-existent VK */
28
29#define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */
30#define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */
31
33 /* Numbers Row */
34 /* - 00 - */
35 /* 1 ... 2 ... 3 ... 4 ... */
36 VK_EMPTY, VK_ESCAPE, '1', '2',
37 '3', '4', '5', '6',
38 '7', '8', '9', '0',
39 VK_OEM_MINUS, VK_OEM_PLUS, VK_BACK,
40 /* - 0f - */
41 /* First Letters Row */
42 VK_TAB, 'Q', 'W', 'F',
43 'P', 'G', 'J', 'L',
44 'U', 'Y', VK_OEM_1,
46 /* - 1d - */
47 /* Second Letters Row */
49 'A', 'R', 'S', 'T',
50 'D', 'H', 'N', 'E',
51 'I', 'O', VK_OEM_7, VK_OEM_3,
53 /* - 2c - */
54 /* Third letters row */
55 'Z', 'X', 'C', 'V',
56 'B', 'K', 'M', VK_OEM_COMMA,
57 VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT,
58 /* - 37 - */
59 /* Bottom Row */
61
62 /* - 3b - */
63 /* F-Keys */
66 /* - 45 - */
67 /* Locks */
70 /* - 47 - */
71 /* Number-Pad */
76 /* - 54 - */
77 /* Presumably PrtSc */
79 /* - 55 - */
80 /* Oddities, and the remaining standard F-Keys */
81 VK_EMPTY, VK_OEM_102, VK_F11, VK_F12,
82 /* - 59 - */
85 VK_HELP,
86 /* - 64 - */
87 /* Even more F-Keys (for example, NCR keyboards from the early 90's) */
90 /* - 6f - */
91 /* Not sure who uses these codes */
93 /* - 72 - */
95 /* - 76 - */
96 /* One more f-key */
97 VK_F24,
98 /* - 77 - */
100 VK_OEM_PA1, VK_TAB, 0xc2, VK_EMPTY, /* PA1 */
101 VK_EMPTY,
102};
103
105 { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
106 { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
107 { 0x1D, VK_RCONTROL | KBDEXT },
108 { 0x20, VK_VOLUME_MUTE | KBDEXT },
109 { 0x21, VK_LAUNCH_APP2 | KBDEXT },
110 { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
111 { 0x24, VK_MEDIA_STOP | KBDEXT },
112 { 0x2E, VK_VOLUME_DOWN | KBDEXT },
113 { 0x30, VK_VOLUME_UP | KBDEXT },
114 { 0x32, VK_BROWSER_HOME | KBDEXT },
115 { 0x35, VK_DIVIDE | KBDEXT },
116 { 0x37, VK_SNAPSHOT | KBDEXT },
117 { 0x38, VK_RMENU | KBDEXT },
118 { 0x47, VK_HOME | KBDEXT },
119 { 0x48, VK_UP | KBDEXT },
120 { 0x49, VK_PRIOR | KBDEXT },
121 { 0x4B, VK_LEFT | KBDEXT },
122 { 0x4D, VK_RIGHT | KBDEXT },
123 { 0x4F, VK_END | KBDEXT },
124 { 0x50, VK_DOWN | KBDEXT },
125 { 0x51, VK_NEXT | KBDEXT },
126 { 0x52, VK_INSERT | KBDEXT },
127 { 0x53, VK_DELETE | KBDEXT },
128 { 0x5B, VK_LWIN | KBDEXT },
129 { 0x5C, VK_RWIN | KBDEXT },
130 { 0x5D, VK_APPS | KBDEXT },
131 { 0x5F, VK_SLEEP | KBDEXT },
132 { 0x65, VK_BROWSER_SEARCH | KBDEXT },
133 { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
134 { 0x67, VK_BROWSER_REFRESH | KBDEXT },
135 { 0x68, VK_BROWSER_STOP | KBDEXT },
136 { 0x69, VK_BROWSER_FORWARD | KBDEXT },
137 { 0x6A, VK_BROWSER_BACK | KBDEXT },
138 { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
139 { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
140 { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
141 { 0x1C, VK_RETURN | KBDEXT },
142 { 0x46, VK_CANCEL | KBDEXT },
143 { 0, 0 },
144};
145
147 { 0x1d, VK_PAUSE },
148 { 0, 0 },
149};
150
152 { VK_SHIFT, KBDSHIFT },
153 { VK_CONTROL, KBDCTRL },
154 { VK_MENU, KBDALT },
155 { 0, 0 }
156};
157
160 8,
161 /* Modifier bit order, NONE, SHIFT, CTRL, SHIFT+CTRL, ALT, SHIFT+ALT, CTRL+ALT, SHIFT+CTRL+ALT */
162 { 0, 1, 4, 5, SHFT_INVALID, SHFT_INVALID, 2, 3 }
163};
164
165ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
166 /* Normal, Shift */
167 { VK_DECIMAL, 0, {'.', '.' } },
168 { VK_TAB, 0, {'\t', '\t'} },
169 { VK_ADD, 0, {'+', '+' } },
170 { VK_DIVIDE, 0, {'/', '/' } },
171 { VK_MULTIPLY, 0, {'*', '*' } },
172 { VK_SUBTRACT, 0, {'-', '-' } },
173 { 0, 0 }
174};
175
176ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
177 /* Normal, Shift, Ctrl+Alt */
178 { VK_OEM_3, 0, {'`', '~', WCH_DEAD} },
179 { 0xff, 0, {WCH_NONE, WCH_NONE, '~' } },
180 { 'G', CAPLOK, {'g', 'G', WCH_DEAD} },
181 { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02DB } },
182 { 'R', CAPLOK, {'r', 'R', WCH_DEAD} },
183 { 0xff, 0, {WCH_NONE, WCH_NONE, '`' } },
184 { 'D', CAPLOK, {'d', 'D', WCH_DEAD} },
185 { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00a8 } },
186 { 'H', CAPLOK, {'h', 'H', WCH_DEAD} },
187 { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02c7 } },
188 { 'X', CAPLOK, {'x', 'X', WCH_DEAD} },
189 { 0xff, 0, {WCH_NONE, WCH_NONE, '^' } },
190 { 'B', CAPLOK, {'b', 'B', WCH_DEAD} },
191 { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02d8 } },
192 { 'K', CAPLOK, {'k', 'K', WCH_DEAD} },
193 { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02da } },
194 { 'M', CAPLOK, {'m', 'M', WCH_DEAD} },
195 { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00af } },
196 { VK_OEM_COMMA, 0, {',', '<', WCH_DEAD} },
197 { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b8 } },
198 { VK_OEM_PERIOD, 0, {'.', '>', WCH_DEAD} },
199 { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02d9 } },
200 { VK_OEM_2, 0, {'/', '?', 0x00bf } },
201 { 0, 0 }
202};
203
204ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
205 /* Normal, Shift, Ctrl+Alt, Shift+Ctrl+Alt */
206 { '1', 0, {'1', '!', 0x00a1, 0x00b9 } },
207 { '3', 0, {'3', '#', 0x00aa, 0x00b3 } },
208 { '4', 0, {'4', '$', 0x00a2, 0x00a3 } },
209 { '5', 0, {'5', '%', 0x20ac, 0x00a5 } },
210 { '7', CAPLOKALTGR, {'7', '&', 0x00f0, 0x00d0 } },
211 { '8', CAPLOKALTGR, {'8', '*', 0x00fe, 0x00de } },
212 { '9', 0, {'9', '(', 0x2018, 0x201c } },
213 { '0', 0, {'0', ')', 0x2019, 0x201d } },
214 { VK_OEM_PLUS, 0, {'=', '+', 0x00d7, 0x00f7 } },
215 { 'Q', CAPLOK|CAPLOKALTGR, {'q', 'Q', 0x00e4, 0x00c4 } },
216 { 'W', CAPLOK|CAPLOKALTGR, {'w', 'W', 0x00e5, 0x00c5 } },
217 { 'F', CAPLOK|CAPLOKALTGR, {'f', 'F', 0x00e3, 0x00c3 } },
218 { 'P', CAPLOK|CAPLOKALTGR, {'p', 'P', 0x00f8, 0x00d8 } },
219 { 'J', CAPLOK|CAPLOKALTGR, {'j', 'J', 0x0111, 0x0110 } },
220 { 'L', CAPLOK|CAPLOKALTGR, {'l', 'L', 0x0142, 0x0141 } },
221 { 'U', CAPLOK|CAPLOKALTGR, {'u', 'U', 0x00fa, 0x00da } },
222 { 'Y', CAPLOK|CAPLOKALTGR, {'y', 'Y', 0x00fc, 0x00dc } },
223 { VK_OEM_1, CAPLOKALTGR, {';', ':', 0x00f6, 0x00d6 } },
224 { 'A', CAPLOK|CAPLOKALTGR, {'a', 'A', 0x00e1, 0x00c1 } },
225 { 'S', CAPLOK|CAPLOKALTGR, {'s', 'S', 0x00df, 0x1e9e } },
226 { 'T', CAPLOK, {'t', 'T', WCH_DEAD, WCH_DEAD} },
227 { 0xff, 0, {WCH_NONE, WCH_NONE, '\'', 0x02dd } },
228 { 'N', CAPLOK|CAPLOKALTGR, {'n', 'N', 0x00f1, 0x00d1 } },
229 { 'E', CAPLOK|CAPLOKALTGR, {'e', 'E', 0x00e9, 0x00c9 } },
230 { 'I', CAPLOK|CAPLOKALTGR, {'i', 'I', 0x00ed, 0x00cd } },
231 { 'O', CAPLOK|CAPLOKALTGR, {'o', 'O', 0x00f3, 0x00d3 } },
232 { VK_OEM_7, CAPLOKALTGR, {'\'', '\"', 0x00f5, 0x00d5 } },
233 { VK_OEM_102, 0, {'-', '_', 0x2013, 0x2014 } },
234 { 'Z', CAPLOK|CAPLOKALTGR, {'z', 'Z', 0x00e6, 0x00c6 } },
235 { 'C', CAPLOK|CAPLOKALTGR, {'c', 'C', 0x00e7, 0x00c7 } },
236 { 'V', CAPLOK|CAPLOKALTGR, {'v', 'V', 0x0153, 0x0152 } },
237 { 0, 0 }
238};
239
240ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
241 /* Normal, Shift, Ctrl+Alt, Shift+Ctrl+Alt, Ctrl */
242 { VK_OEM_4, 0, {'[', '{', 0x00ab, 0x2039, 0x001b } },
243 { VK_OEM_6, 0, {']', '}', 0x00bb, 0x203A, 0x001d } },
244 { VK_OEM_5, 0, {'\\', '|', WCH_DEAD, WCH_NONE, 0x001c } },
245 { 0xff, 0, {WCH_NONE, WCH_NONE, '*', WCH_NONE, WCH_NONE} },
246 { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f } },
247 { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b } },
248 { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } },
249 { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } },
250 { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003 } },
251 { 0, 0 }
252};
253
254ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
255 /* Normal, Shift, Ctrl+Alt, Shift+Ctrl+Alt, Ctrl, Shift+Ctrl */
256 { '2', 0, {'2', '@', 0x00ba, 0x00b2, WCH_NONE, 0x0000 } },
257 { '6', CAPLOKALTGR, {'6', '^', 0x0127, 0x0126, WCH_NONE, 0x001e } },
258 { VK_OEM_MINUS, 0, {'-', '_', 0x2013, 0x2014, WCH_NONE, 0x001f } },
259 { 0, 0 }
260};
261
262ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
263 { VK_NUMPAD0, 0, {'0'} },
264 { VK_NUMPAD1, 0, {'1'} },
265 { VK_NUMPAD2, 0, {'2'} },
266 { VK_NUMPAD3, 0, {'3'} },
267 { VK_NUMPAD4, 0, {'4'} },
268 { VK_NUMPAD5, 0, {'5'} },
269 { VK_NUMPAD6, 0, {'6'} },
270 { VK_NUMPAD7, 0, {'7'} },
271 { VK_NUMPAD8, 0, {'8'} },
272 { VK_NUMPAD9, 0, {'9'} },
273 { 0, 0 }
274};
275
276#define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
277
285 { 0,0,0 }
286};
287
289 { 0x01, L"Esc" },
290 { 0x0e, L"Backspace" },
291 { 0x0f, L"Tab" },
292 { 0x1c, L"Enter" },
293 { 0x1d, L"Ctrl" },
294 { 0x2a, L"Shift" },
295 { 0x36, L"Right Shift" },
296 { 0x37, L"Num *" },
297 { 0x38, L"Alt" },
298 { 0x39, L"Space" },
299 { 0x3a, L"CAPLOK Lock" },
300 { 0x3b, L"F1" },
301 { 0x3c, L"F2" },
302 { 0x3d, L"F3" },
303 { 0x3e, L"F4" },
304 { 0x3f, L"F5" },
305 { 0x40, L"F6" },
306 { 0x41, L"F7" },
307 { 0x42, L"F8" },
308 { 0x43, L"F9" },
309 { 0x44, L"F10" },
310 { 0x45, L"Pause" },
311 { 0x46, L"Scroll Lock" },
312 { 0x47, L"Num 7" },
313 { 0x48, L"Num 8" },
314 { 0x49, L"Num 9" },
315 { 0x4a, L"Num -" },
316 { 0x4b, L"Num 4" },
317 { 0x4c, L"Num 5" },
318 { 0x4d, L"Num 6" },
319 { 0x4e, L"Num +" },
320 { 0x4f, L"Num 1" },
321 { 0x50, L"Num 2" },
322 { 0x51, L"Num 3" },
323 { 0x52, L"Num 0" },
324 { 0x53, L"Num Del" },
325 { 0x54, L"Sys Req" },
326 { 0x57, L"F11" },
327 { 0x58, L"F12" },
328 { 0x7c, L"F13" },
329 { 0x7d, L"F14" },
330 { 0x7e, L"F15" },
331 { 0x7f, L"F16" },
332 { 0x80, L"F17" },
333 { 0x81, L"F18" },
334 { 0x82, L"F19" },
335 { 0x83, L"F20" },
336 { 0x84, L"F21" },
337 { 0x85, L"F22" },
338 { 0x86, L"F23" },
339 { 0x87, L"F24" },
340 { 0, NULL }
341};
342
344 { 0x1c, L"Num Enter" },
345 { 0x1d, L"Right Control" },
346 { 0x35, L"Num /" },
347 { 0x37, L"Prnt Scrn" },
348 { 0x38, L"Right Alt" },
349 { 0x45, L"Num Lock" },
350 { 0x46, L"Break" },
351 { 0x47, L"Home" },
352 { 0x48, L"Up" },
353 { 0x49, L"Page Up" },
354 { 0x4b, L"Left" },
355 { 0x4d, L"Right" },
356 { 0x4f, L"End" },
357 { 0x50, L"Down" },
358 { 0x51, L"Page Down" },
359 { 0x52, L"Insert" },
360 { 0x53, L"Delete" },
361 { 0x54, L"<ReactOS>" },
362 { 0x56, L"Help" },
363 { 0x5b, L"Left <ReactOS>" },
364 { 0x5c, L"Right <ReactOS>" },
365 { 0x5d, L"Application" },
366 { 0, NULL }
367};
368
370 L"\'" L"ACUTE ACCENT",
371 L"`" L"GRAVE ACCENT",
372 L"^" L"CIRCUMFLEX ACCENT",
373 L"~" L"TILDE",
374 L"\x02db" L"OGONEK",
375 L"*" L"SPECIAL",
376 L"\x02dd" L"DOUBLE ACUTE ACCENT",
377 L"\x00a8" L"DIAERESIS",
378 L"\x02c7" L"CARON",
379 L"\x02d8" L"BREVE",
380 L"\x02da" L"RING ABOVE",
381 L"\x00af" L"MACRON",
382 L"\x00b8" L"CEDILLA",
383 L"\x02d9" L"DOT ABOVE",
384 NULL
385};
386
387#define DEADTRANS(ch, accent, comp, flags) MAKELONG(ch, accent), comp, flags
388
390 { DEADTRANS(L'a', '\'', 0x00e1, 0x0000) }, /* ACUTE */
391 { DEADTRANS(L'c', '\'', 0x00e7, 0x0000) },
392 { DEADTRANS(L'e', '\'', 0x00e9, 0x0000) },
393 { DEADTRANS(L'g', '\'', 0x01f5, 0x0000) },
394 { DEADTRANS(L'i', '\'', 0x00ed, 0x0000) },
395 { DEADTRANS(L'k', '\'', 0x1e31, 0x0000) },
396 { DEADTRANS(L'l', '\'', 0x013a, 0x0000) },
397 { DEADTRANS(L'm', '\'', 0x1e3f, 0x0000) },
398 { DEADTRANS(L'n', '\'', 0x0144, 0x0000) },
399 { DEADTRANS(L'o', '\'', 0x00f3, 0x0000) },
400 { DEADTRANS(L'p', '\'', 0x1e55, 0x0000) },
401 { DEADTRANS(L'r', '\'', 0x0155, 0x0000) },
402 { DEADTRANS(L's', '\'', 0x015b, 0x0000) },
403 { DEADTRANS(L'u', '\'', 0x00fa, 0x0000) },
404 { DEADTRANS(L'w', '\'', 0x1e83, 0x0000) },
405 { DEADTRANS(L'y', '\'', 0x00fd, 0x0000) },
406 { DEADTRANS(L'z', '\'', 0x017a, 0x0000) },
407 { DEADTRANS(0x00e5, '\'', 0x01fb, 0x0000) },
408 { DEADTRANS(0x00e6, '\'', 0x01fd, 0x0000) },
409 { DEADTRANS(0x00e7, '\'', 0x1e09, 0x0000) },
410 { DEADTRANS(0x00f5, '\'', 0x1e4d, 0x0000) },
411 { DEADTRANS(0x00f8, '\'', 0x01ff, 0x0000) },
412 { DEADTRANS(0x00fc, '\'', 0x01d8, 0x0000) },
413 { DEADTRANS(L'A', '\'', 0x00c1, 0x0000) },
414 { DEADTRANS(L'C', '\'', 0x00c7, 0x0000) },
415 { DEADTRANS(L'E', '\'', 0x00c9, 0x0000) },
416 { DEADTRANS(L'G', '\'', 0x01f4, 0x0000) },
417 { DEADTRANS(L'I', '\'', 0x00cd, 0x0000) },
418 { DEADTRANS(L'K', '\'', 0x1e30, 0x0000) },
419 { DEADTRANS(L'L', '\'', 0x0139, 0x0000) },
420 { DEADTRANS(L'M', '\'', 0x1e3e, 0x0000) },
421 { DEADTRANS(L'N', '\'', 0x00cd, 0x0000) },
422 { DEADTRANS(L'O', '\'', 0x00d3, 0x0000) },
423 { DEADTRANS(L'P', '\'', 0x1e54, 0x0000) },
424 { DEADTRANS(L'R', '\'', 0x0154, 0x0000) },
425 { DEADTRANS(L'S', '\'', 0x015a, 0x0000) },
426 { DEADTRANS(L'U', '\'', 0x00da, 0x0000) },
427 { DEADTRANS(L'W', '\'', 0x1e82, 0x0000) },
428 { DEADTRANS(L'Y', '\'', 0x00dd, 0x0000) },
429 { DEADTRANS(L'Z', '\'', 0x0179, 0x0000) },
430 { DEADTRANS(0x00c5, '\'', 0x01fa, 0x0000) },
431 { DEADTRANS(0x00c6, '\'', 0x01fc, 0x0000) },
432 { DEADTRANS(0x00c7, '\'', 0x1e08, 0x0000) },
433 { DEADTRANS(0x00d8, '\'', 0x01fe, 0x0000) },
434 { DEADTRANS(0x00dc, '\'', 0x01d7, 0x0000) },
435 { DEADTRANS(L' ', '\'', '\'', 0x0000) },
436 { DEADTRANS(L'\'', '\'', '\'', 0x0000) },
437
438 { DEADTRANS(L'a', L'^', 0x00e2, 0x0000) }, /* CIRCUMFLEX */
439 { DEADTRANS(L'c', L'^', 0x0109, 0x0000) },
440 { DEADTRANS(L'e', L'^', 0x00ea, 0x0000) },
441 { DEADTRANS(L'g', L'^', 0x011d, 0x0000) },
442 { DEADTRANS(L'h', L'^', 0x0125, 0x0000) },
443 { DEADTRANS(L'i', L'^', 0x00ee, 0x0000) },
444 { DEADTRANS(L'j', L'^', 0x0135, 0x0000) },
445 { DEADTRANS(L'o', L'^', 0x00f4, 0x0000) },
446 { DEADTRANS(L's', L'^', 0x015d, 0x0000) },
447 { DEADTRANS(L'u', L'^', 0x00fb, 0x0000) },
448 { DEADTRANS(L'w', L'^', 0x0175, 0x0000) },
449 { DEADTRANS(L'y', L'^', 0x0177, 0x0000) },
450 { DEADTRANS(L'z', L'^', 0x1e91, 0x0000) },
451 { DEADTRANS(0x00e1, L'^', 0x1ea5, 0x0000) },
452 { DEADTRANS(0x00e3, L'^', 0x1eab, 0x0000) },
453 { DEADTRANS(0x00e9, L'^', 0x1ebf, 0x0000) },
454 { DEADTRANS(0x00f3, L'^', 0x1ed1, 0x0000) },
455 { DEADTRANS(0x00f5, L'^', 0x1ed7, 0x0000) },
456 { DEADTRANS(L'A', L'^', 0x00c2, 0x0000) },
457 { DEADTRANS(L'C', L'^', 0x0108, 0x0000) },
458 { DEADTRANS(L'E', L'^', 0x00ca, 0x0000) },
459 { DEADTRANS(L'G', L'^', 0x011c, 0x0000) },
460 { DEADTRANS(L'H', L'^', 0x0124, 0x0000) },
461 { DEADTRANS(L'I', L'^', 0x00ce, 0x0000) },
462 { DEADTRANS(L'J', L'^', 0x0134, 0x0000) },
463 { DEADTRANS(L'O', L'^', 0x00d4, 0x0000) },
464 { DEADTRANS(L'S', L'^', 0x015c, 0x0000) },
465 { DEADTRANS(L'U', L'^', 0x00db, 0x0000) },
466 { DEADTRANS(L'W', L'^', 0x0174, 0x0000) },
467 { DEADTRANS(L'Y', L'^', 0x0176, 0x0000) },
468 { DEADTRANS(L'Z', L'^', 0x1e90, 0x0000) },
469 { DEADTRANS(0x00c1, L'^', 0x1ea4, 0x0000) },
470 { DEADTRANS(0x00c3, L'^', 0x1eaa, 0x0000) },
471 { DEADTRANS(0x00c9, L'^', 0x1ebe, 0x0000) },
472 { DEADTRANS(0x00d3, L'^', 0x1ed0, 0x0000) },
473 { DEADTRANS(0x00d5, L'^', 0x1ed6, 0x0000) },
474 { DEADTRANS(L' ', L'^', L'^', 0x0000) },
475 { DEADTRANS(L'^', L'^', L'^', 0x0000) },
476
477 { DEADTRANS(L'a', L'~', 0x00e3, 0x0000) }, /* TILDE */
478 { DEADTRANS(L'e', L'~', 0x1ebd, 0x0000) },
479 { DEADTRANS(L'i', L'~', 0x0129, 0x0000) },
480 { DEADTRANS(L'n', L'~', 0x00f1, 0x0000) },
481 { DEADTRANS(L'o', L'~', 0x00f5, 0x0000) },
482 { DEADTRANS(L'u', L'~', 0x0169, 0x0000) },
483 { DEADTRANS(L'v', L'~', 0x1e7d, 0x0000) },
484 { DEADTRANS(L'y', L'~', 0x1ef9, 0x0000) },
485 { DEADTRANS(0x00f3, L'~', 0x1e4d, 0x0000) },
486 { DEADTRANS(0x00f6, L'~', 0x1e4f, 0x0000) },
487 { DEADTRANS(0x00fa, L'~', 0x1e79, 0x0000) },
488 { DEADTRANS(L'A', L'~', 0x00c3, 0x0000) },
489 { DEADTRANS(L'E', L'~', 0x1ebc, 0x0000) },
490 { DEADTRANS(L'I', L'~', 0x0128, 0x0000) },
491 { DEADTRANS(L'N', L'~', 0x00d1, 0x0000) },
492 { DEADTRANS(L'O', L'~', 0x00d5, 0x0000) },
493 { DEADTRANS(L'U', L'~', 0x0168, 0x0000) },
494 { DEADTRANS(L'V', L'~', 0x1e7c, 0x0000) },
495 { DEADTRANS(L'Y', L'~', 0x1ef8, 0x0000) },
496 { DEADTRANS(0x00d3, L'~', 0x1e4c, 0x0000) },
497 { DEADTRANS(0x00d6, L'~', 0x1e4e, 0x0000) },
498 { DEADTRANS(0x00da, L'~', 0x1e78, 0x0000) },
499 { DEADTRANS(L' ', L'~', L'~', 0x0000) },
500 { DEADTRANS(L'~', L'~', L'~', 0x0000) },
501
502 { DEADTRANS(L'a', 0x02db, 0x0105, 0x0000) }, /* OGONEK */
503 { DEADTRANS(L'e', 0x02db, 0x0119, 0x0000) },
504 { DEADTRANS(L'i', 0x02db, 0x012f, 0x0000) },
505 { DEADTRANS(L'o', 0x02db, 0x01eb, 0x0000) },
506 { DEADTRANS(L'u', 0x02db, 0x0173, 0x0000) },
507 { DEADTRANS(L'A', 0x02db, 0x0104, 0x0000) },
508 { DEADTRANS(L'E', 0x02db, 0x0118, 0x0000) },
509 { DEADTRANS(L'I', 0x02db, 0x012e, 0x0000) },
510 { DEADTRANS(L'O', 0x02db, 0x01ea, 0x0000) },
511 { DEADTRANS(L'U', 0x02db, 0x0173, 0x0000) },
512 { DEADTRANS(L' ', 0x02db, 0x02db, 0x0000) },
513 { DEADTRANS(0x02db, 0x02db, 0x02db, 0x0000) },
514
515 { DEADTRANS(L'c', L'*', 0x00a9, 0x0000) }, /* SPECIAL */
516 { DEADTRANS(L'd', L'*', 0x00b0, 0x0000) },
517 { DEADTRANS(L'm', L'*', 0x00b5, 0x0000) },
518 { DEADTRANS(L'n', L'*', 0x2116, 0x0000) },
519 { DEADTRANS(L'p', L'*', 0x00b6, 0x0000) },
520 { DEADTRANS(L'r', L'*', 0x00ae, 0x0000) },
521 { DEADTRANS(L's', L'*', 0x00a7, 0x0000) },
522 { DEADTRANS(L't', L'*', 0x2122, 0x0000) },
523 { DEADTRANS(L'%', L'*', 0x2030, 0x0000) },
524 { DEADTRANS(L'+', L'*', 0x00b1, 0x0000) },
525 { DEADTRANS(L'.', L'*', 0x2026, 0x0000) },
526 { DEADTRANS(L'<', L'*', 0x2264, 0x0000) },
527 { DEADTRANS(L'>', L'*', 0x2265, 0x0000) },
528 { DEADTRANS(L'=', L'*', 0x2260, 0x0000) },
529 { DEADTRANS(L'|', L'*', 0x00a6, 0x0000) },
530 { DEADTRANS(L'~', L'*', 0x2248, 0x0000) },
531 { DEADTRANS(L' ', L'*', L'*', 0x0000) },
532 { DEADTRANS(L'*', L'*', L'*', 0x0000) },
533
534 { DEADTRANS(L'a', L'`', 0x00e0, 0x0000) }, /* GRAVE ACCENT */
535 { DEADTRANS(L'e', L'`', 0x00e8, 0x0000) },
536 { DEADTRANS(L'i', L'`', 0x00ec, 0x0000) },
537 { DEADTRANS(L'n', L'`', 0x01f9, 0x0000) },
538 { DEADTRANS(L'o', L'`', 0x00f2, 0x0000) },
539 { DEADTRANS(L'u', L'`', 0x00f9, 0x0000) },
540 { DEADTRANS(L'w', L'`', 0x1e81, 0x0000) },
541 { DEADTRANS(L'y', L'`', 0x1ef3, 0x0000) },
542 { DEADTRANS(0x00fc, L'`', 0x01dc, 0x0000) },
543 { DEADTRANS(L'A', L'`', 0x00c0, 0x0000) },
544 { DEADTRANS(L'E', L'`', 0x00c8, 0x0000) },
545 { DEADTRANS(L'I', L'`', 0x00cc, 0x0000) },
546 { DEADTRANS(L'N', L'`', 0x01f8, 0x0000) },
547 { DEADTRANS(L'O', L'`', 0x00d2, 0x0000) },
548 { DEADTRANS(L'U', L'`', 0x00d9, 0x0000) },
549 { DEADTRANS(L'W', L'`', 0x1e80, 0x0000) },
550 { DEADTRANS(L'Y', L'`', 0x1ef2, 0x0000) },
551 { DEADTRANS(0x00dc, L'`', 0x01db, 0x0000) },
552 { DEADTRANS(L' ', L'`', L'`', 0x0000) },
553 { DEADTRANS(L'`', L'`', L'`', 0x0000) },
554
555 { DEADTRANS(L'o', 0x02dd, 0x0151, 0x0000) }, /* DOUBLE ACUTE */
556 { DEADTRANS(L'u', 0x02dd, 0x0171, 0x0000) },
557 { DEADTRANS(L'O', 0x02dd, 0x0150, 0x0000) },
558 { DEADTRANS(L'U', 0x02dd, 0x0170, 0x0000) },
559 { DEADTRANS(L' ', 0x02dd, 0x02dd, 0x0000) },
560 { DEADTRANS(0x02dd, 0x02dd, 0x02dd, 0x0000) },
561
562 { DEADTRANS(L'a', 0x00a8, 0x00e4, 0x0000) }, /* DIAERESIS */
563 { DEADTRANS(L'e', 0x00a8, 0x00eb, 0x0000) },
564 { DEADTRANS(L'h', 0x00a8, 0x1e27, 0x0000) },
565 { DEADTRANS(L'i', 0x00a8, 0x00ef, 0x0000) },
566 { DEADTRANS(L'o', 0x00a8, 0x00e6, 0x0000) },
567 { DEADTRANS(L't', 0x00a8, 0x1e97, 0x0000) },
568 { DEADTRANS(L'u', 0x00a8, 0x00fc, 0x0000) },
569 { DEADTRANS(L'w', 0x00a8, 0x1e85, 0x0000) },
570 { DEADTRANS(L'x', 0x00a8, 0x1e8d, 0x0000) },
571 { DEADTRANS(L'y', 0x00a8, 0x00ff, 0x0000) },
572 { DEADTRANS(0x00ed, 0x00a8, 0x1e2f, 0x0000) },
573 { DEADTRANS(0x00fa, 0x00a8, 0x01d8, 0x0000) },
574 { DEADTRANS(L'A', 0x00a8, 0x00c4, 0x0000) },
575 { DEADTRANS(L'E', 0x00a8, 0x00cb, 0x0000) },
576 { DEADTRANS(L'H', 0x00a8, 0x1e26, 0x0000) },
577 { DEADTRANS(L'I', 0x00a8, 0x00cf, 0x0000) },
578 { DEADTRANS(L'O', 0x00a8, 0x00d6, 0x0000) },
579 { DEADTRANS(L'U', 0x00a8, 0x00dc, 0x0000) },
580 { DEADTRANS(L'W', 0x1e84, 0x00dc, 0x0000) },
581 { DEADTRANS(L'X', 0x1e8c, 0x00dc, 0x0000) },
582 { DEADTRANS(L'Y', 0x0178, 0x00dc, 0x0000) },
583 { DEADTRANS(0x00cd, 0x00a8, 0x1e2e, 0x0000) },
584 { DEADTRANS(0x00da, 0x00a8, 0x01d7, 0x0000) },
585 { DEADTRANS(L' ', 0x00a8, 0x00a8, 0x0000) },
586 { DEADTRANS(0x00a8, 0x00a8, 0x00a8, 0x0000) },
587
588 { DEADTRANS(L' ', 0x02c7, 0x02c7, 0x0000) }, /* CARON */
589 { DEADTRANS(L'a', 0x02c7, 0x01ce, 0x0000) },
590 { DEADTRANS(L'c', 0x02c7, 0x010d, 0x0000) },
591 { DEADTRANS(L'd', 0x02c7, 0x010f, 0x0000) },
592 { DEADTRANS(L'e', 0x02c7, 0x011b, 0x0000) },
593 { DEADTRANS(L'g', 0x02c7, 0x01e7, 0x0000) },
594 { DEADTRANS(L'h', 0x02c7, 0x021f, 0x0000) },
595 { DEADTRANS(L'i', 0x02c7, 0x01d0, 0x0000) },
596 { DEADTRANS(L'j', 0x02c7, 0x01f0, 0x0000) },
597 { DEADTRANS(L'k', 0x02c7, 0x01e9, 0x0000) },
598 { DEADTRANS(L'l', 0x02c7, 0x013e, 0x0000) },
599 { DEADTRANS(L'n', 0x02c7, 0x0148, 0x0000) },
600 { DEADTRANS(L'o', 0x02c7, 0x01d2, 0x0000) },
601 { DEADTRANS(L'r', 0x02c7, 0x0159, 0x0000) },
602 { DEADTRANS(L's', 0x02c7, 0x0161, 0x0000) },
603 { DEADTRANS(L't', 0x02c7, 0x0165, 0x0000) },
604 { DEADTRANS(L'u', 0x02c7, 0x01d4, 0x0000) },
605 { DEADTRANS(L'z', 0x02c7, 0x017e, 0x0000) },
606 { DEADTRANS(0x00fc, 0x02c7, 0x01da, 0x0000) },
607 { DEADTRANS(L'A', 0x02c7, 0x01cd, 0x0000) },
608 { DEADTRANS(L'C', 0x02c7, 0x010c, 0x0000) },
609 { DEADTRANS(L'D', 0x02c7, 0x010e, 0x0000) },
610 { DEADTRANS(L'E', 0x02c7, 0x011a, 0x0000) },
611 { DEADTRANS(L'G', 0x02c7, 0x01e6, 0x0000) },
612 { DEADTRANS(L'H', 0x02c7, 0x021e, 0x0000) },
613 { DEADTRANS(L'I', 0x02c7, 0x01cf, 0x0000) },
614 { DEADTRANS(L'K', 0x02c7, 0x01e8, 0x0000) },
615 { DEADTRANS(L'L', 0x02c7, 0x013d, 0x0000) },
616 { DEADTRANS(L'N', 0x02c7, 0x0147, 0x0000) },
617 { DEADTRANS(L'O', 0x02c7, 0x01d1, 0x0000) },
618 { DEADTRANS(L'R', 0x02c7, 0x0158, 0x0000) },
619 { DEADTRANS(L'S', 0x02c7, 0x0160, 0x0000) },
620 { DEADTRANS(L'T', 0x02c7, 0x0164, 0x0000) },
621 { DEADTRANS(L'U', 0x02c7, 0x01d3, 0x0000) },
622 { DEADTRANS(L'Z', 0x02c7, 0x017d, 0x0000) },
623 { DEADTRANS(0x00dc, 0x02c7, 0x01d9, 0x0000) },
624 { DEADTRANS(L' ', 0x02c7, 0x02c7, 0x0000) },
625 { DEADTRANS(0x02c7, 0x02c7, 0x02c7, 0x0000) },
626
627 { DEADTRANS(L' ', 0x02d8, 0x02d8, 0x0000) }, /* BREVE */
628 { DEADTRANS(L'a', 0x02d8, 0x0103, 0x0000) },
629 { DEADTRANS(L'e', 0x02d8, 0x0115, 0x0000) },
630 { DEADTRANS(L'g', 0x02d8, 0x011f, 0x0000) },
631 { DEADTRANS(L'i', 0x02d8, 0x012d, 0x0000) },
632 { DEADTRANS(L'o', 0x02d8, 0x014f, 0x0000) },
633 { DEADTRANS(L'u', 0x02d8, 0x016d, 0x0000) },
634 { DEADTRANS(0x00e1, 0x02d8, 0x1eaf, 0x0000) },
635 { DEADTRANS(0x00e3, 0x02d8, 0x1eb5, 0x0000) },
636 { DEADTRANS(L'A', 0x02d8, 0x0102, 0x0000) },
637 { DEADTRANS(L'E', 0x02d8, 0x0114, 0x0000) },
638 { DEADTRANS(L'G', 0x02d8, 0x011e, 0x0000) },
639 { DEADTRANS(L'I', 0x02d8, 0x012c, 0x0000) },
640 { DEADTRANS(L'O', 0x02d8, 0x014e, 0x0000) },
641 { DEADTRANS(L'U', 0x02d8, 0x016c, 0x0000) },
642 { DEADTRANS(0x00c1, 0x02d8, 0x1eae, 0x0000) },
643 { DEADTRANS(0x00c3, 0x02d8, 0x1eb4, 0x0000) },
644 { DEADTRANS(L' ', 0x02d8, 0x02d8, 0x0000) },
645 { DEADTRANS(0x02d8, 0x02d8, 0x02d8, 0x0000) },
646
647 { DEADTRANS(L'a', 0x02da, 0x00e5, 0x0000) }, /* RING ABOVE */
648 { DEADTRANS(L'u', 0x02da, 0x016f, 0x0000) },
649 { DEADTRANS(L'w', 0x02da, 0x1e98, 0x0000) },
650 { DEADTRANS(L'y', 0x02da, 0x1e99, 0x0000) },
651 { DEADTRANS(0x00e1, 0x02da, 0x01fb, 0x0000) },
652 { DEADTRANS(L'A', 0x02da, 0x00c5, 0x0000) },
653 { DEADTRANS(L'U', 0x02da, 0x016e, 0x0000) },
654 { DEADTRANS(0x00c1, 0x02da, 0x01fa, 0x0000) },
655 { DEADTRANS(L' ', 0x02da, 0x02da, 0x0000) },
656 { DEADTRANS(0x02da, 0x02da, 0x02da, 0x0000) },
657
658 { DEADTRANS(L'a', 0x00af, 0x0101, 0x0000) }, /* MACRON */
659 { DEADTRANS(L'e', 0x00af, 0x0113, 0x0000) },
660 { DEADTRANS(L'g', 0x00af, 0x1e21, 0x0000) },
661 { DEADTRANS(L'i', 0x00af, 0x012b, 0x0000) },
662 { DEADTRANS(L'o', 0x00af, 0x014d, 0x0000) },
663 { DEADTRANS(L'u', 0x00af, 0x016b, 0x0000) },
664 { DEADTRANS(L'y', 0x00af, 0x0233, 0x0000) },
665 { DEADTRANS(0x00e4, 0x00af, 0x01df, 0x0000) },
666 { DEADTRANS(0x00e6, 0x00af, 0x01e3, 0x0000) },
667 { DEADTRANS(0x00e9, 0x00af, 0x1e17, 0x0000) },
668 { DEADTRANS(0x00f3, 0x00af, 0x1e53, 0x0000) },
669 { DEADTRANS(0x00f5, 0x00af, 0x022d, 0x0000) },
670 { DEADTRANS(0x00f6, 0x00af, 0x022b, 0x0000) },
671 { DEADTRANS(0x00fc, 0x00af, 0x01d6, 0x0000) },
672 { DEADTRANS(L'A', 0x00af, 0x0100, 0x0000) },
673 { DEADTRANS(L'E', 0x00af, 0x0112, 0x0000) },
674 { DEADTRANS(L'G', 0x00af, 0x1e20, 0x0000) },
675 { DEADTRANS(L'I', 0x00af, 0x012a, 0x0000) },
676 { DEADTRANS(L'O', 0x00af, 0x014c, 0x0000) },
677 { DEADTRANS(L'U', 0x00af, 0x016a, 0x0000) },
678 { DEADTRANS(L'Y', 0x00af, 0x0232, 0x0000) },
679 { DEADTRANS(0x00c4, 0x00af, 0x01de, 0x0000) },
680 { DEADTRANS(0x00c6, 0x00af, 0x01e2, 0x0000) },
681 { DEADTRANS(0x00c9, 0x00af, 0x1e16, 0x0000) },
682 { DEADTRANS(0x00d3, 0x00af, 0x1e52, 0x0000) },
683 { DEADTRANS(0x00d5, 0x00af, 0x022c, 0x0000) },
684 { DEADTRANS(0x00d6, 0x00af, 0x022a, 0x0000) },
685 { DEADTRANS(0x00dc, 0x00af, 0x01d5, 0x0000) },
686 { DEADTRANS(L' ', 0x00af, 0x00af, 0x0000) },
687 { DEADTRANS(0x00af, 0x00af, 0x00af, 0x0000) },
688
689 { DEADTRANS(L'c', 0x00b8, 0x00e7, 0x0000) }, /* CEDILLA */
690 { DEADTRANS(L'd', 0x00b8, 0x1e11, 0x0000) },
691 { DEADTRANS(L'e', 0x00b8, 0x0229, 0x0000) },
692 { DEADTRANS(L'g', 0x00b8, 0x0123, 0x0000) },
693 { DEADTRANS(L'h', 0x00b8, 0x1e29, 0x0000) },
694 { DEADTRANS(L'k', 0x00b8, 0x0137, 0x0000) },
695 { DEADTRANS(L'l', 0x00b8, 0x013c, 0x0000) },
696 { DEADTRANS(L'n', 0x00b8, 0x0146, 0x0000) },
697 { DEADTRANS(L'r', 0x00b8, 0x0157, 0x0000) },
698 { DEADTRANS(L's', 0x00b8, 0x015f, 0x0000) },
699 { DEADTRANS(L't', 0x00b8, 0x0163, 0x0000) },
700 { DEADTRANS(0x0107, 0x00b8, 0x1e09, 0x0000) },
701 { DEADTRANS(L'C', 0x00b8, 0x00c7, 0x0000) },
702 { DEADTRANS(L'D', 0x00b8, 0x1e10, 0x0000) },
703 { DEADTRANS(L'E', 0x00b8, 0x0228, 0x0000) },
704 { DEADTRANS(L'G', 0x00b8, 0x0122, 0x0000) },
705 { DEADTRANS(L'H', 0x00b8, 0x1e28, 0x0000) },
706 { DEADTRANS(L'K', 0x00b8, 0x0136, 0x0000) },
707 { DEADTRANS(L'L', 0x00b8, 0x013b, 0x0000) },
708 { DEADTRANS(L'N', 0x00b8, 0x0145, 0x0000) },
709 { DEADTRANS(L'R', 0x00b8, 0x0156, 0x0000) },
710 { DEADTRANS(L'S', 0x00b8, 0x015e, 0x0000) },
711 { DEADTRANS(L'T', 0x00b8, 0x0162, 0x0000) },
712 { DEADTRANS(0x0106, 0x00b8, 0x1e08, 0x0000) },
713 { DEADTRANS(L' ', 0x00b8, 0x00b8, 0x0000) },
714 { DEADTRANS(0x00b8, 0x00b8, 0x00b8, 0x0000) },
715
716 { DEADTRANS(L'a', 0x02d9, 0x0227, 0x0000) }, /* DOT ABOVE */
717 { DEADTRANS(L'b', 0x02d9, 0x1e03, 0x0000) },
718 { DEADTRANS(L'c', 0x02d9, 0x010b, 0x0000) },
719 { DEADTRANS(L'd', 0x02d9, 0x1e0b, 0x0000) },
720 { DEADTRANS(L'e', 0x02d9, 0x0117, 0x0000) },
721 { DEADTRANS(L'f', 0x02d9, 0x1e1f, 0x0000) },
722 { DEADTRANS(L'g', 0x02d9, 0x0121, 0x0000) },
723 { DEADTRANS(L'h', 0x02d9, 0x1e23, 0x0000) },
724 { DEADTRANS(L'i', 0x02d9, 0x0131, 0x0000) },
725 { DEADTRANS(L'l', 0x02d9, 0x0140, 0x0000) },
726 { DEADTRANS(L'm', 0x02d9, 0x1e41, 0x0000) },
727 { DEADTRANS(L'n', 0x02d9, 0x1e45, 0x0000) },
728 { DEADTRANS(L'o', 0x02d9, 0x022f, 0x0000) },
729 { DEADTRANS(L'p', 0x02d9, 0x1e57, 0x0000) },
730 { DEADTRANS(L'r', 0x02d9, 0x1e59, 0x0000) },
731 { DEADTRANS(L's', 0x02d9, 0x1e61, 0x0000) },
732 { DEADTRANS(L't', 0x02d9, 0x1e6b, 0x0000) },
733 { DEADTRANS(L'w', 0x02d9, 0x1e87, 0x0000) },
734 { DEADTRANS(L'x', 0x02d9, 0x1e8b, 0x0000) },
735 { DEADTRANS(L'y', 0x02d9, 0x1e8f, 0x0000) },
736 { DEADTRANS(L'z', 0x02d9, 0x017c, 0x0000) },
737 { DEADTRANS(0x015b, 0x02d9, 0x1e65, 0x0000) },
738 { DEADTRANS(L'A', 0x02d9, 0x0226, 0x0000) },
739 { DEADTRANS(L'B', 0x02d9, 0x1e02, 0x0000) },
740 { DEADTRANS(L'C', 0x02d9, 0x010a, 0x0000) },
741 { DEADTRANS(L'D', 0x02d9, 0x1e0a, 0x0000) },
742 { DEADTRANS(L'E', 0x02d9, 0x0116, 0x0000) },
743 { DEADTRANS(L'F', 0x02d9, 0x1e1e, 0x0000) },
744 { DEADTRANS(L'G', 0x02d9, 0x0120, 0x0000) },
745 { DEADTRANS(L'H', 0x02d9, 0x1e22, 0x0000) },
746 { DEADTRANS(L'I', 0x02d9, 0x0130, 0x0000) },
747 { DEADTRANS(L'L', 0x02d9, 0x013f, 0x0000) },
748 { DEADTRANS(L'M', 0x02d9, 0x1e40, 0x0000) },
749 { DEADTRANS(L'N', 0x02d9, 0x1e44, 0x0000) },
750 { DEADTRANS(L'O', 0x02d9, 0x022e, 0x0000) },
751 { DEADTRANS(L'P', 0x02d9, 0x1e56, 0x0000) },
752 { DEADTRANS(L'R', 0x02d9, 0x1e58, 0x0000) },
753 { DEADTRANS(L'S', 0x02d9, 0x1e60, 0x0000) },
754 { DEADTRANS(L'T', 0x02d9, 0x1e6a, 0x0000) },
755 { DEADTRANS(L'W', 0x02d9, 0x1e86, 0x0000) },
756 { DEADTRANS(L'X', 0x02d9, 0x1e8a, 0x0000) },
757 { DEADTRANS(L'Y', 0x02d9, 0x1e8e, 0x0000) },
758 { DEADTRANS(L'Z', 0x02d9, 0x017b, 0x0000) },
759 { DEADTRANS(0x015a, 0x02d9, 0x1e64, 0x0000) },
760 { DEADTRANS(L' ', 0x02d9, 0x02d9, 0x0000) },
761 { DEADTRANS(0x02d9, 0x02d9, 0x02d9, 0x0000) },
762
763 {0, 0}
764};
765
766/* Finally, the master table */
768 /* modifier assignments */
770
771 /* character from vk tables */
773
774 /* diacritical marks */
775 dead_key,
776
777 /* Key names */
780 dead_key_names, /* Dead key names */
781
782 /* scan code to virtual key maps */
787
788 MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
789
790 /* Ligatures */
791 0,
792 0,
793 NULL
794};
795
797 return &keyboard_layout_table;
798}
#define RTL_NUMBER_OF(x)
Definition: RtlRegistry.c:12
#define NULL
Definition: types.h:112
#define L(x)
Definition: resources.c:13
#define WCH_DEAD
Definition: kbd.h:114
#define CAPLOK
Definition: kbd.h:118
#define KBDALT
Definition: kbd.h:16
#define WCH_NONE
Definition: kbd.h:113
#define CAPLOKALTGR
Definition: kbd.h:120
#define SHFT_INVALID
Definition: kbd.h:19
#define KBDCTRL
Definition: kbd.h:15
#define KBDEXT
Definition: kbd.h:8
#define KLLF_ALTGR
Definition: kbd.h:91
WCHAR * DEADKEY_LPWSTR
Definition: kbd.h:62
#define KBDSHIFT
Definition: kbd.h:14
#define KBDMULTIVK
Definition: kbd.h:9
#define DEADTRANS(ch, accent, comp, flags)
Definition: kbdcmk.c:387
ROSDATA DEADKEY dead_key[]
Definition: kbdcmk.c:389
#define KNUMS
Definition: kbdcmk.c:29
ROSDATA VSC_LPWSTR extended_key_names[]
Definition: kbdcmk.c:343
#define KMEXT
Definition: kbdcmk.c:30
ROSDATA USHORT scancode_to_vk[]
Definition: kbdcmk.c:32
ROSDATA VK_TO_WCHARS1 keypad_numbers[]
Definition: kbdcmk.c:262
ROSDATA MODIFIERS modifier_bits
Definition: kbdcmk.c:158
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[]
Definition: kbdcmk.c:204
ROSDATA VSC_LPWSTR key_names[]
Definition: kbdcmk.c:288
#define vk_master(n, x)
Definition: kbdcmk.c:276
ROSDATA VSC_VK extcode0_to_vk[]
Definition: kbdcmk.c:104
ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[]
Definition: kbdcmk.c:278
ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[]
Definition: kbdcmk.c:176
ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[]
Definition: kbdcmk.c:240
#define ROSDATA
Definition: kbdcmk.c:23
ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[]
Definition: kbdcmk.c:165
ROSDATA DEADKEY_LPWSTR dead_key_names[]
Definition: kbdcmk.c:369
ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[]
Definition: kbdcmk.c:254
#define VK_EMPTY
Definition: kbdcmk.c:27
ROSDATA VK_TO_BIT modifier_keys[]
Definition: kbdcmk.c:151
ROSDATA VSC_VK extcode1_to_vk[]
Definition: kbdcmk.c:146
ROSDATA KBDTABLES keyboard_layout_table
Definition: kbdcmk.c:767
PKBDTABLES WINAPI KbdLayerDescriptor()
Definition: kbdjpn.c:390
unsigned short USHORT
Definition: pedump.c:61
Definition: kbd.h:56
Definition: kbd.h:95
Definition: kbd.h:26
Definition: kbd.h:21
Definition: kbd.h:71
#define MAKELONG(a, b)
Definition: typedefs.h:249
#define WINAPI
Definition: msvc.h:6
#define VK_OEM_AUTO
Definition: winuser.h:2377
#define VK_CLEAR
Definition: winuser.h:2236
#define VK_OEM_5
Definition: winuser.h:2354
#define VK_NUMPAD3
Definition: winuser.h:2278
#define VK_SNAPSHOT
Definition: winuser.h:2267
#define VK_F12
Definition: winuser.h:2302
#define VK_TAB
Definition: winuser.h:2235
#define VK_F9
Definition: winuser.h:2299
#define VK_APPS
Definition: winuser.h:2273
#define VK_MULTIPLY
Definition: winuser.h:2285
#define VK_ZOOM
Definition: winuser.h:2385
#define VK_NUMPAD1
Definition: winuser.h:2276
#define VK_F10
Definition: winuser.h:2300
#define VK_OEM_7
Definition: winuser.h:2356
#define VK_F15
Definition: winuser.h:2305
#define VK_NUMPAD2
Definition: winuser.h:2277
#define VK_OEM_JUMP
Definition: winuser.h:2368
#define VK_SPACE
Definition: winuser.h:2255
#define VK_CAPITAL
Definition: winuser.h:2242
#define VK_OEM_4
Definition: winuser.h:2353
#define VK_NUMPAD4
Definition: winuser.h:2279
#define VK_SCROLL
Definition: winuser.h:2316
#define VK_F23
Definition: winuser.h:2313
#define VK_CONTROL
Definition: winuser.h:2239
#define VK_EREOF
Definition: winuser.h:2383
#define VK_OEM_PA1
Definition: winuser.h:2369
#define VK_F22
Definition: winuser.h:2312
#define VK_RSHIFT
Definition: winuser.h:2319
#define VK_CANCEL
Definition: winuser.h:2228
#define VK_UP
Definition: winuser.h:2261
#define VK_F18
Definition: winuser.h:2308
#define VK_F16
Definition: winuser.h:2306
#define VK_OEM_FINISH
Definition: winuser.h:2375
#define VK_LSHIFT
Definition: winuser.h:2318
#define VK_LCONTROL
Definition: winuser.h:2320
#define VK_NUMPAD0
Definition: winuser.h:2275
#define VK_F1
Definition: winuser.h:2291
#define VK_F6
Definition: winuser.h:2296
#define VK_F24
Definition: winuser.h:2314
#define VK_PAUSE
Definition: winuser.h:2241
#define VK_OEM_PA3
Definition: winuser.h:2371
#define VK_NUMPAD6
Definition: winuser.h:2281
#define VK_F21
Definition: winuser.h:2311
#define VK_NEXT
Definition: winuser.h:2257
#define VK_RCONTROL
Definition: winuser.h:2321
#define VK_F14
Definition: winuser.h:2304
#define VK_F20
Definition: winuser.h:2310
#define VK_RETURN
Definition: winuser.h:2237
#define VK_OEM_6
Definition: winuser.h:2355
#define VK_SLEEP
Definition: winuser.h:2274
#define VK_OEM_BACKTAB
Definition: winuser.h:2379
#define VK_F5
Definition: winuser.h:2295
#define VK_F11
Definition: winuser.h:2301
#define VK_F8
Definition: winuser.h:2298
#define VK_RMENU
Definition: winuser.h:2323
#define VK_NUMPAD9
Definition: winuser.h:2284
#define VK_END
Definition: winuser.h:2258
#define VK_HOME
Definition: winuser.h:2259
#define VK_ADD
Definition: winuser.h:2286
#define VK_OEM_RESET
Definition: winuser.h:2367
#define VK_OEM_2
Definition: winuser.h:2351
#define VK_BACK
Definition: winuser.h:2234
#define VK_F3
Definition: winuser.h:2293
#define VK_LWIN
Definition: winuser.h:2271
#define VK_F4
Definition: winuser.h:2294
#define VK_NUMPAD5
Definition: winuser.h:2280
#define VK_LEFT
Definition: winuser.h:2260
#define VK_F17
Definition: winuser.h:2307
#define VK_NUMPAD7
Definition: winuser.h:2282
#define VK_RIGHT
Definition: winuser.h:2262
#define VK_OEM_1
Definition: winuser.h:2344
#define VK_DOWN
Definition: winuser.h:2263
#define VK_NUMLOCK
Definition: winuser.h:2315
#define VK_SHIFT
Definition: winuser.h:2238
#define VK_PRIOR
Definition: winuser.h:2256
#define VK_F19
Definition: winuser.h:2309
#define VK_DELETE
Definition: winuser.h:2269
#define VK_OEM_WSCTRL
Definition: winuser.h:2372
#define VK_DIVIDE
Definition: winuser.h:2290
#define VK_NUMPAD8
Definition: winuser.h:2283
#define VK_F13
Definition: winuser.h:2303
#define VK_DECIMAL
Definition: winuser.h:2289
#define VK_ESCAPE
Definition: winuser.h:2250
#define VK_OEM_3
Definition: winuser.h:2352
#define VK_HELP
Definition: winuser.h:2270
#define VK_F7
Definition: winuser.h:2297
#define VK_INSERT
Definition: winuser.h:2268
#define VK_RWIN
Definition: winuser.h:2272
#define VK_SUBTRACT
Definition: winuser.h:2288
#define VK_LMENU
Definition: winuser.h:2322
#define VK_MENU
Definition: winuser.h:2240
#define VK_F2
Definition: winuser.h:2292