This file is indexed.

/usr/include/freerdp/kbd/vkcodes.h is in libfreerdp-dev 1.0.2-2ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
/**
 * FreeRDP: A Remote Desktop Protocol Client
 * Microsoft Virtual Key Code Definitions and Conversion Tables
 *
 * Copyright 2009 Marc-Andre Moreau <marcandre.moreau@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* Microsoft Windows Virtual Key Codes: http://msdn.microsoft.com/en-us/library/ms645540.aspx */

#ifndef __VKCODES_H
#define __VKCODES_H

#include <stddef.h>
#include <freerdp/api.h>
#include <freerdp/kbd/layouts.h>

/* Mouse buttons */

#define VK_LBUTTON	0x01 /* Left mouse button */
#define VK_RBUTTON	0x02 /* Right mouse button */
#define VK_CANCEL	0x03 /* Control-break processing */
#define VK_MBUTTON	0x04 /* Middle mouse button (three-button mouse) */
#define VK_XBUTTON1	0x05 /* Windows 2000/XP: X1 mouse button */
#define VK_XBUTTON2	0x06 /* Windows 2000/XP: X2 mouse button */

/* 0x07 is undefined */

#define VK_BACK		0x08 /* BACKSPACE key */
#define VK_TAB		0x09 /* TAB key */

/* 0x0A to 0x0B are reserved */

#define VK_CLEAR	0x0C /* CLEAR key */
#define VK_RETURN	0x0D /* ENTER key */

/* 0x0E to 0x0F are undefined */

#define VK_SHIFT	0x10 /* SHIFT key */
#define VK_CONTROL	0x11 /* CTRL key */
#define VK_MENU		0x12 /* ALT key */
#define VK_PAUSE	0x13 /* PAUSE key */
#define VK_CAPITAL	0x14 /* CAPS LOCK key */
#define VK_KANA		0x15 /* Input Method Editor (IME) Kana mode */
#define VK_HANGUEL	0x15 /* IME Hanguel mode (maintained for compatibility; use #define VK_HANGUL) */
#define VK_HANGUL	0x15 /* IME Hangul mode */

/* 0x16 is undefined */

#define VK_JUNJA	0x17 /* IME Junja mode */
#define VK_FINAL	0x18 /* IME final mode */
#define VK_HANJA	0x19 /* IME Hanja mode */
#define VK_KANJI	0x19 /* IME Kanji mode */

/* 0x1A is undefined */

#define VK_ESCAPE	0x1B /* ESC key */
#define VK_CONVERT	0x1C /* IME convert */
#define VK_NONCONVERT	0x1D /* IME nonconvert */
#define VK_ACCEPT	0x1E /* IME accept */
#define VK_MODECHANGE	0x1F /* IME mode change request */

#define VK_SPACE	0x20 /* SPACEBAR */
#define VK_PRIOR	0x21 /* PAGE UP key */
#define VK_NEXT		0x22 /* PAGE DOWN key */
#define VK_END		0x23 /* END key */
#define VK_HOME		0x24 /* HOME key */
#define VK_LEFT		0x25 /* LEFT ARROW key */
#define VK_UP		0x26 /* UP ARROW key */
#define VK_RIGHT	0x27 /* RIGHT ARROW key */
#define VK_DOWN		0x28 /* DOWN ARROW key */
#define VK_SELECT	0x29 /* SELECT key */
#define VK_PRINT	0x2A /* PRINT key */
#define VK_EXECUTE	0x2B /* EXECUTE key */
#define VK_SNAPSHOT	0x2C /* PRINT SCREEN key */
#define VK_INSERT	0x2D /* INS key */
#define VK_DELETE	0x2E /* DEL key */
#define VK_HELP		0x2F /* HELP key */

/* Digits, the last 4 bits of the code represent the corresponding digit */

#define VK_KEY_0	0x30 /* '0' key */
#define VK_KEY_1	0x31 /* '1' key */
#define VK_KEY_2	0x32 /* '2' key */
#define VK_KEY_3	0x33 /* '3' key */
#define VK_KEY_4	0x34 /* '4' key */
#define VK_KEY_5	0x35 /* '5' key */
#define VK_KEY_6	0x36 /* '6' key */
#define VK_KEY_7	0x37 /* '7' key */
#define VK_KEY_8	0x38 /* '8' key */
#define VK_KEY_9	0x39 /* '9' key */

/* 0x3A to 0x40 are undefined */

/* The alphabet, the code corresponds to the capitalized letter in the ASCII code */

#define VK_KEY_A	0x41 /* 'A' key */
#define VK_KEY_B	0x42 /* 'B' key */
#define VK_KEY_C	0x43 /* 'C' key */
#define VK_KEY_D	0x44 /* 'D' key */
#define VK_KEY_E	0x45 /* 'E' key */
#define VK_KEY_F	0x46 /* 'F' key */
#define VK_KEY_G	0x47 /* 'G' key */
#define VK_KEY_H	0x48 /* 'H' key */
#define VK_KEY_I	0x49 /* 'I' key */
#define VK_KEY_J	0x4A /* 'J' key */
#define VK_KEY_K	0x4B /* 'K' key */
#define VK_KEY_L	0x4C /* 'L' key */
#define VK_KEY_M	0x4D /* 'M' key */
#define VK_KEY_N	0x4E /* 'N' key */
#define VK_KEY_O	0x4F /* 'O' key */
#define VK_KEY_P	0x50 /* 'P' key */
#define VK_KEY_Q	0x51 /* 'Q' key */
#define VK_KEY_R	0x52 /* 'R' key */
#define VK_KEY_S	0x53 /* 'S' key */
#define VK_KEY_T	0x54 /* 'T' key */
#define VK_KEY_U	0x55 /* 'U' key */
#define VK_KEY_V	0x56 /* 'V' key */
#define VK_KEY_W	0x57 /* 'W' key */
#define VK_KEY_X	0x58 /* 'X' key */
#define VK_KEY_Y	0x59 /* 'Y' key */
#define VK_KEY_Z	0x5A /* 'Z' key */

#define VK_LWIN		0x5B /* Left Windows key (Microsoft Natural keyboard) */
#define VK_RWIN		0x5C /* Right Windows key (Natural keyboard) */
#define VK_APPS		0x5D /* Applications key (Natural keyboard) */

/* 0x5E is reserved */

#define VK_SLEEP	0x5F /* Computer Sleep key */

/* Numeric keypad digits, the last four bits of the code represent the corresponding digit */

#define VK_NUMPAD0	0x60 /* Numeric keypad '0' key */
#define VK_NUMPAD1	0x61 /* Numeric keypad '1' key */
#define VK_NUMPAD2	0x62 /* Numeric keypad '2' key */
#define VK_NUMPAD3	0x63 /* Numeric keypad '3' key */
#define VK_NUMPAD4	0x64 /* Numeric keypad '4' key */
#define VK_NUMPAD5	0x65 /* Numeric keypad '5' key */
#define VK_NUMPAD6	0x66 /* Numeric keypad '6' key */
#define VK_NUMPAD7	0x67 /* Numeric keypad '7' key */
#define VK_NUMPAD8	0x68 /* Numeric keypad '8' key */
#define VK_NUMPAD9	0x69 /* Numeric keypad '9' key */

/* Numeric keypad operators and special keys */

#define VK_MULTIPLY	0x6A /* Multiply key */
#define VK_ADD		0x6B /* Add key */
#define VK_SEPARATOR	0x6C /* Separator key */
#define VK_SUBTRACT	0x6D /* Subtract key */
#define VK_DECIMAL	0x6E /* Decimal key */
#define VK_DIVIDE	0x6F /* Divide key */

/* Function keys, from F1 to F24 */

#define VK_F1		0x70 /* F1 key */
#define VK_F2		0x71 /* F2 key */
#define VK_F3		0x72 /* F3 key */
#define VK_F4		0x73 /* F4 key */
#define VK_F5		0x74 /* F5 key */
#define VK_F6		0x75 /* F6 key */
#define VK_F7		0x76 /* F7 key */
#define VK_F8		0x77 /* F8 key */
#define VK_F9		0x78 /* F9 key */
#define VK_F10		0x79 /* F10 key */
#define VK_F11		0x7A /* F11 key */
#define VK_F12		0x7B /* F12 key */
#define VK_F13		0x7C /* F13 key */
#define VK_F14		0x7D /* F14 key */
#define VK_F15		0x7E /* F15 key */
#define VK_F16		0x7F /* F16 key */
#define VK_F17		0x80 /* F17 key */
#define VK_F18		0x81 /* F18 key */
#define VK_F19		0x82 /* F19 key */
#define VK_F20		0x83 /* F20 key */
#define VK_F21		0x84 /* F21 key */
#define VK_F22		0x85 /* F22 key */
#define VK_F23		0x86 /* F23 key */
#define VK_F24		0x87 /* F24 key */

/* 0x88 to 0x8F are unassigned */

#define VK_NUMLOCK	0x90 /* NUM LOCK key */
#define VK_SCROLL	0x91 /* SCROLL LOCK key */

/* 0x92 to 0x96 are OEM specific */
/* 0x97 to 0x9F are unassigned */

/* Modifier keys */

#define VK_LSHIFT	0xA0 /* Left SHIFT key */
#define VK_RSHIFT	0xA1 /* Right SHIFT key */
#define VK_LCONTROL	0xA2 /* Left CONTROL key */
#define VK_RCONTROL	0xA3 /* Right CONTROL key */
#define VK_LMENU	0xA4 /* Left MENU key */
#define VK_RMENU	0xA5 /* Right MENU key */

/* Browser related keys */

#define VK_BROWSER_BACK		0xA6 /* Windows 2000/XP: Browser Back key */
#define VK_BROWSER_FORWARD	0xA7 /* Windows 2000/XP: Browser Forward key */
#define VK_BROWSER_REFRESH	0xA8 /* Windows 2000/XP: Browser Refresh key */
#define VK_BROWSER_STOP		0xA9 /* Windows 2000/XP: Browser Stop key */
#define VK_BROWSER_SEARCH	0xAA /* Windows 2000/XP: Browser Search key */
#define VK_BROWSER_FAVORITES	0xAB /* Windows 2000/XP: Browser Favorites key */
#define VK_BROWSER_HOME		0xAC /* Windows 2000/XP: Browser Start and Home key */

/* Volume related keys */

#define VK_VOLUME_MUTE		0xAD /* Windows 2000/XP: Volume Mute key */
#define VK_VOLUME_DOWN		0xAE /* Windows 2000/XP: Volume Down key */
#define VK_VOLUME_UP		0xAF /* Windows 2000/XP: Volume Up key */

/* Media player related keys */

#define VK_MEDIA_NEXT_TRACK	0xB0 /* Windows 2000/XP: Next Track key */
#define VK_MEDIA_PREV_TRACK	0xB1 /* Windows 2000/XP: Previous Track key */
#define VK_MEDIA_STOP		0xB2 /* Windows 2000/XP: Stop Media key */
#define VK_MEDIA_PLAY_PAUSE	0xB3 /* Windows 2000/XP: Play/Pause Media key */

/* Application launcher keys */

#define VK_LAUNCH_MAIL		0xB4 /* Windows 2000/XP: Start Mail key */
#define VK_LAUNCH_MEDIA_SELECT	0xB5 /* Windows 2000/XP: Select Media key */
#define VK_LAUNCH_APP1		0xB6 /* Windows 2000/XP: Start Application 1 key */
#define VK_LAUNCH_APP2		0xB7 /* Windows 2000/XP: Start Application 2 key */

/* 0xB8 and 0xB9 are reserved */

/* OEM keys */

#define VK_OEM_1	0xBA /* Used for miscellaneous characters; it can vary by keyboard. */
			     /* Windows 2000/XP: For the US standard keyboard, the ';:' key */

#define VK_OEM_PLUS	0xBB /* Windows 2000/XP: For any country/region, the '+' key */
#define VK_OEM_COMMA	0xBC /* Windows 2000/XP: For any country/region, the ',' key */
#define VK_OEM_MINUS	0xBD /* Windows 2000/XP: For any country/region, the '-' key */
#define VK_OEM_PERIOD	0xBE /* Windows 2000/XP: For any country/region, the '.' key */

#define VK_OEM_2	0xBF /* Used for miscellaneous characters; it can vary by keyboard. */
			     /* Windows 2000/XP: For the US standard keyboard, the '/?' key */

#define VK_OEM_3	0xC0 /* Used for miscellaneous characters; it can vary by keyboard. */
			     /* Windows 2000/XP: For the US standard keyboard, the '`~' key */

/* 0xC1 to 0xD7 are reserved */
#define VK_ABNT_C1	0xC1 /* Brazilian (ABNT) Keyboard */
#define VK_ABNT_C2	0xC2 /* Brazilian (ABNT) Keyboard */

/* 0xD8 to 0xDA are unassigned */

#define VK_OEM_4	0xDB /* Used for miscellaneous characters; it can vary by keyboard. */
			     /* Windows 2000/XP: For the US standard keyboard, the '[{' key */

#define VK_OEM_5	0xDC /* Used for miscellaneous characters; it can vary by keyboard. */
			     /* Windows 2000/XP: For the US standard keyboard, the '\|' key */

#define VK_OEM_6	0xDD /* Used for miscellaneous characters; it can vary by keyboard. */
			     /* Windows 2000/XP: For the US standard keyboard, the ']}' key */

#define VK_OEM_7	0xDE /* Used for miscellaneous characters; it can vary by keyboard. */
			     /* Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key */

#define VK_OEM_8	0xDF /* Used for miscellaneous characters; it can vary by keyboard. */

/* 0xE0 is reserved */
/* 0xE1 is OEM specific */

#define VK_OEM_102	0xE2 /* Windows 2000/XP: Either the angle bracket key or */
			     /* the backslash key on the RT 102-key keyboard */

/* 0xE3 and 0xE4 are OEM specific */

#define VK_PROCESSKEY	0xE5 /* Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key */

/* 0xE6 is OEM specific */

#define VK_PACKET	0xE7	/* Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. */
				/* The #define VK_PACKET key is the low word of a 32-bit Virtual Key value used */
				/* for non-keyboard input methods. For more information, */
				/* see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP */

/* 0xE8 is unassigned */
/* 0xE9 to 0xF5 are OEM specific */

#define VK_ATTN		0xF6 /* Attn key */
#define VK_CRSEL	0xF7 /* CrSel key */
#define VK_EXSEL	0xF8 /* ExSel key */
#define VK_EREOF	0xF9 /* Erase EOF key */
#define VK_PLAY		0xFA /* Play key */
#define VK_ZOOM		0xFB /* Zoom key */
#define VK_NONAME	0xFC /* Reserved */
#define VK_PA1		0xFD /* PA1 key */
#define VK_OEM_CLEAR	0xFE /* Clear key */

/* Use the virtual key code as an index in this array in order to get its associated scan code */

typedef struct _virtualKey
{
	/* Windows "scan code", aka keycode in RDP */
	unsigned char scancode;

	/* Windows "extended" flag, boolean */
	unsigned char extended;

	/* Windows virtual key name */
	char *name;

	/* XKB keyname */
	char *x_keyname;
} virtualKey;

static const virtualKey virtualKeyboard[256 + 2] =
{
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, "VK_LBUTTON"          , NULL   },
	{ 0x00, 0, "VK_RBUTTON"          , NULL   },
	{ 0x00, 0, "VK_CANCEL"           , NULL   },
	{ 0x00, 0, "VK_MBUTTON"          , NULL   },
	{ 0x00, 0, "VK_XBUTTON1"         , NULL   },
	{ 0x00, 0, "VK_XBUTTON2"         , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x0E, 0, "VK_BACK"             , "BKSP" },
	{ 0x0F, 0, "VK_TAB"              , "TAB"  },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, "VK_CLEAR"            , NULL   },
	{ 0x1C, 0, "VK_RETURN"           , "RTRN" },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x2A, 0, "VK_SHIFT"            , "LFSH" },
	{ 0x00, 0, "VK_CONTROL"          , NULL   },
	{ 0x38, 0, "VK_MENU"             , "LALT" },
	{ 0x46, 1, "VK_PAUSE"            , "PAUS" },
	{ 0x3A, 0, "VK_CAPITAL"          , "CAPS" },
	{ 0x72, 0, "VK_KANA / VK_HANGUL" , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, "VK_JUNJA"            , NULL   },
	{ 0x00, 0, "VK_FINAL"            , NULL   },
	{ 0x71, 0, "VK_HANJA / VK_KANJI" , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x01, 0, "VK_ESCAPE"           , "ESC"  },
	{ 0x00, 0, "VK_CONVERT"          , NULL   },
	{ 0x00, 0, "VK_NONCONVERT"       , NULL   },
	{ 0x00, 0, "VK_ACCEPT"           , NULL   },
	{ 0x00, 0, "VK_MODECHANGE"       , NULL   },
	{ 0x39, 0, "VK_SPACE"            , "SPCE" },
	{ 0x49, 1, "VK_PRIOR"            , "PGUP" },
	{ 0x51, 1, "VK_NEXT"             , "PGDN" },
	{ 0x4F, 1, "VK_END"              , "END"  },
	{ 0x47, 1, "VK_HOME"             , "HOME" },
	{ 0x4B, 1, "VK_LEFT"             , "LEFT" },
	{ 0x48, 1, "VK_UP"               , "UP"   },
	{ 0x4D, 1, "VK_RIGHT"            , "RGHT" },
	{ 0x50, 1, "VK_DOWN"             , "DOWN" },
	{ 0x00, 0, "VK_SELECT"           , NULL   },
	{ 0x37, 1, "VK_PRINT"            , "PRSC" },
	{ 0x37, 1, "VK_EXECUTE"          , NULL   },
	{ 0x37, 1, "VK_SNAPSHOT"         , NULL   },
	{ 0x52, 1, "VK_INSERT"           , "INS"  },
	{ 0x53, 1, "VK_DELETE"           , "DELE" },
	{ 0x63, 0, "VK_HELP"             , NULL   },
	{ 0x0B, 0, "VK_KEY_0"            , "AE10" },
	{ 0x02, 0, "VK_KEY_1"            , "AE01" },
	{ 0x03, 0, "VK_KEY_2"            , "AE02" },
	{ 0x04, 0, "VK_KEY_3"            , "AE03" },
	{ 0x05, 0, "VK_KEY_4"            , "AE04" },
	{ 0x06, 0, "VK_KEY_5"            , "AE05" },
	{ 0x07, 0, "VK_KEY_6"            , "AE06" },
	{ 0x08, 0, "VK_KEY_7"            , "AE07" },
	{ 0x09, 0, "VK_KEY_8"            , "AE08" },
	{ 0x0A, 0, "VK_KEY_9"            , "AE09" },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x1E, 0, "VK_KEY_A"            , "AC01" },
	{ 0x30, 0, "VK_KEY_B"            , "AB05" },
	{ 0x2E, 0, "VK_KEY_C"            , "AB03" },
	{ 0x20, 0, "VK_KEY_D"            , "AC03" },
	{ 0x12, 0, "VK_KEY_E"            , "AD03" },
	{ 0x21, 0, "VK_KEY_F"            , "AC04" },
	{ 0x22, 0, "VK_KEY_G"            , "AC05" },
	{ 0x23, 0, "VK_KEY_H"            , "AC06" },
	{ 0x17, 0, "VK_KEY_I"            , "AD08" },
	{ 0x24, 0, "VK_KEY_J"            , "AC07" },
	{ 0x25, 0, "VK_KEY_K"            , "AC08" },
	{ 0x26, 0, "VK_KEY_L"            , "AC09" },
	{ 0x32, 0, "VK_KEY_M"            , "AB07" },
	{ 0x31, 0, "VK_KEY_N"            , "AB06" },
	{ 0x18, 0, "VK_KEY_O"            , "AD09" },
	{ 0x19, 0, "VK_KEY_P"            , "AD10" },
	{ 0x10, 0, "VK_KEY_Q"            , "AD01" },
	{ 0x13, 0, "VK_KEY_R"            , "AD04" },
	{ 0x1F, 0, "VK_KEY_S"            , "AC02" },
	{ 0x14, 0, "VK_KEY_T"            , "AD05" },
	{ 0x16, 0, "VK_KEY_U"            , "AD07" },
	{ 0x2F, 0, "VK_KEY_V"            , "AB04" },
	{ 0x11, 0, "VK_KEY_W"            , "AD02" },
	{ 0x2D, 0, "VK_KEY_X"            , "AB02" },
	{ 0x15, 0, "VK_KEY_Y"            , "AD06" },
	{ 0x2C, 0, "VK_KEY_Z"            , "AB01" },
	{ 0x5B, 1, "VK_LWIN"             , "LWIN" },
	{ 0x5C, 1, "VK_RWIN"             , "RWIN" },
	{ 0x5D, 1, "VK_APPS"             , "COMP" },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x5F, 0, "VK_SLEEP"            , NULL   },
	{ 0x52, 0, "VK_NUMPAD0"          , "KP0"  },
	{ 0x4F, 0, "VK_NUMPAD1"          , "KP1"  },
	{ 0x50, 0, "VK_NUMPAD2"          , "KP2"  },
	{ 0x51, 0, "VK_NUMPAD3"          , "KP3"  },
	{ 0x4B, 0, "VK_NUMPAD4"          , "KP4"  },
	{ 0x4C, 0, "VK_NUMPAD5"          , "KP5"  },
	{ 0x4D, 0, "VK_NUMPAD6"          , "KP6"  },
	{ 0x47, 0, "VK_NUMPAD7"          , "KP7"  },
	{ 0x48, 0, "VK_NUMPAD8"          , "KP8"  },
	{ 0x49, 0, "VK_NUMPAD9"          , "KP9"  },
	{ 0x37, 0, "VK_MULTIPLY"         , "KPMU" },
	{ 0x4E, 0, "VK_ADD"              , "KPAD" },
	{ 0x00, 0, "VK_SEPARATOR"        , NULL   },
	{ 0x4A, 0, "VK_SUBTRACT"         , "KPSU" },
	{ 0x53, 0, "VK_DECIMAL"          , "KPDL" },
	{ 0x35, 0, "VK_DIVIDE"           , "KPDV" },
	{ 0x3B, 0, "VK_F1"               , "FK01" },
	{ 0x3C, 0, "VK_F2"               , "FK02" },
	{ 0x3D, 0, "VK_F3"               , "FK03" },
	{ 0x3E, 0, "VK_F4"               , "FK04" },
	{ 0x3F, 0, "VK_F5"               , "FK05" },
	{ 0x40, 0, "VK_F6"               , "FK06" },
	{ 0x41, 0, "VK_F7"               , "FK07" },
	{ 0x42, 0, "VK_F8"               , "FK08" },
	{ 0x43, 0, "VK_F9"               , "FK09" },
	{ 0x44, 0, "VK_F10"              , "FK10" },
	{ 0x57, 0, "VK_F11"              , "FK11" },
	{ 0x58, 0, "VK_F12"              , "FK12" },
	{ 0x64, 0, "VK_F13"              , NULL   },
	{ 0x65, 0, "VK_F14"              , NULL   },
	{ 0x66, 0, "VK_F15"              , NULL   },
	{ 0x67, 0, "VK_F16"              , NULL   },
	{ 0x68, 0, "VK_F17"              , NULL   },
	{ 0x69, 0, "VK_F18"              , NULL   },
	{ 0x6A, 0, "VK_F19"              , NULL   },
	{ 0x6B, 0, "VK_F20"              , NULL   },
	{ 0x6C, 0, "VK_F21"              , NULL   },
	{ 0x6D, 0, "VK_F22"              , NULL   },
	{ 0x6E, 0, "VK_F23"              , NULL   },
	{ 0x6F, 0, "VK_F24"              , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x45, 0, "VK_NUMLOCK"          , "NMLK" },
	{ 0x46, 0, "VK_SCROLL"           , "SCLK" },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x2A, 0, "VK_LSHIFT"           , NULL   },
	{ 0x36, 0, "VK_RSHIFT"           , "RTSH" },
	{ 0x1D, 0, "VK_LCONTROL"         , "LCTL" },
	{ 0x1D, 1, "VK_RCONTROL"         , "RCTL" },
	{ 0x38, 0, "VK_LMENU"            , NULL   },
	{ 0x38, 1, "VK_RMENU"            , "RALT" },
	{ 0x00, 0, "VK_BROWSER_BACK"     , NULL   },
	{ 0x00, 0, "VK_BROWSER_FORWARD"  , NULL   },
	{ 0x00, 0, "VK_BROWSER_REFRESH"  , NULL   },
	{ 0x00, 0, "VK_BROWSER_STOP"     , NULL   },
	{ 0x00, 0, "VK_BROWSER_SEARCH"   , NULL   },
	{ 0x00, 0, "VK_BROWSER_FAVORITES", NULL   },
	{ 0x00, 0, "VK_BROWSER_HOME"     , NULL   },
	{ 0x00, 0, "VK_VOLUME_MUTE"      , NULL   },
	{ 0x00, 0, "VK_VOLUME_DOWN"      , NULL   },
	{ 0x00, 0, "VK_VOLUME_UP"        , NULL   },
	{ 0x00, 0, "VK_MEDIA_NEXT_TRACK" , NULL   },
	{ 0x00, 0, "VK_MEDIA_PREV_TRACK" , NULL   },
	{ 0x00, 0, "VK_MEDIA_STOP"       , NULL   },
	{ 0x00, 0, "VK_MEDIA_PLAY_PAUSE" , NULL   },
	{ 0x00, 0, "VK_LAUNCH_MAIL"      , NULL   },
	{ 0x00, 0, "VK_MEDIA_SELECT"     , NULL   },
	{ 0x00, 0, "VK_LAUNCH_APP1"      , NULL   },
	{ 0x00, 0, "VK_LAUNCH_APP2"      , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x27, 0, "VK_OEM_1"            , "AC10" },
	{ 0x0D, 0, "VK_OEM_PLUS"         , "AE12" },
	{ 0x33, 0, "VK_OEM_COMMA"        , "AB08" },
	{ 0x0C, 0, "VK_OEM_MINUS"        , "AE11" },
	{ 0x34, 0, "VK_OEM_PERIOD"       , "AB09" },
	{ 0x35, 0, "VK_OEM_2"            , "AB10" },
	{ 0x29, 0, "VK_OEM_3"            , "TLDE" },
	{ 0x73, 0, "VK_ABNT_C1"          , "AB11" },
	{ 0x7E, 0, "VK_ABNT_C2"          , "I129" },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x1A, 0, "VK_OEM_4"            , "AD11" },
	{ 0x2B, 0, "VK_OEM_5"            , "BKSL" },
	{ 0x1B, 0, "VK_OEM_6"            , "AD12" },
	{ 0x28, 0, "VK_OEM_7"            , "AC11" },
	{ 0x1D, 0, "VK_OEM_8"            , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x56, 0, "VK_OEM_102"          , "LSGT" },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, "VK_PROCESSKEY"       , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, "VK_PACKET"           , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	{ 0x00, 0, "VK_ATTN"             , NULL   },
	{ 0x00, 0, "VK_CRSEL"            , NULL   },
	{ 0x00, 0, "VK_EXSEL"            , NULL   },
	{ 0x00, 0, "VK_EREOF"            , NULL   },
	{ 0x00, 0, "VK_PLAY"             , NULL   },
	{ 0x62, 0, "VK_ZOOM"             , NULL   },
	{ 0x00, 0, "VK_NONAME"           , NULL   },
	{ 0x00, 0, "VK_PA1"              , NULL   },
	{ 0x00, 0, "VK_OEM_CLEAR"        , NULL   },
	{ 0x00, 0, ""                    , NULL   },
	/* end of 256 VK entries */
	{ 0x54, 0, ""                    , "LVL3" },
	{ 0x1C, 1, ""                    , "KPEN" },
};

#endif /* __VKCODES_H */