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
|
#include "keyboard.h"
#include "cocoa/keycodes.h"
#include <string.h>
/* Numeric Linux evdev codes; no platform headers are needed by this table. */
enum yasl_key yasl_key_from_evdev(uint32_t code)
{
switch (code) {
case 1: return YASL_KEY_ESCAPE; /* KEY_ESC */
case 2: return YASL_KEY_1; /* KEY_1 */
case 3: return YASL_KEY_2; /* KEY_2 */
case 4: return YASL_KEY_3; /* KEY_3 */
case 5: return YASL_KEY_4; /* KEY_4 */
case 6: return YASL_KEY_5; /* KEY_5 */
case 7: return YASL_KEY_6; /* KEY_6 */
case 8: return YASL_KEY_7; /* KEY_7 */
case 9: return YASL_KEY_8; /* KEY_8 */
case 10: return YASL_KEY_9; /* KEY_9 */
case 11: return YASL_KEY_0; /* KEY_0 */
case 12: return YASL_KEY_MINUS; /* KEY_MINUS */
case 13: return YASL_KEY_EQUAL; /* KEY_EQUAL */
case 14: return YASL_KEY_BACKSPACE; /* KEY_BACKSPACE */
case 15: return YASL_KEY_TAB; /* KEY_TAB */
case 16: return YASL_KEY_Q; /* KEY_Q */
case 17: return YASL_KEY_W; /* KEY_W */
case 18: return YASL_KEY_E; /* KEY_E */
case 19: return YASL_KEY_R; /* KEY_R */
case 20: return YASL_KEY_T; /* KEY_T */
case 21: return YASL_KEY_Y; /* KEY_Y */
case 22: return YASL_KEY_U; /* KEY_U */
case 23: return YASL_KEY_I; /* KEY_I */
case 24: return YASL_KEY_O; /* KEY_O */
case 25: return YASL_KEY_P; /* KEY_P */
case 26: return YASL_KEY_LEFT_BRACKET; /* KEY_LEFTBRACE */
case 27: return YASL_KEY_RIGHT_BRACKET; /* KEY_RIGHTBRACE */
case 28: return YASL_KEY_ENTER; /* KEY_ENTER */
case 29: return YASL_KEY_LEFT_CONTROL; /* KEY_LEFTCTRL */
case 30: return YASL_KEY_A; /* KEY_A */
case 31: return YASL_KEY_S; /* KEY_S */
case 32: return YASL_KEY_D; /* KEY_D */
case 33: return YASL_KEY_F; /* KEY_F */
case 34: return YASL_KEY_G; /* KEY_G */
case 35: return YASL_KEY_H; /* KEY_H */
case 36: return YASL_KEY_J; /* KEY_J */
case 37: return YASL_KEY_K; /* KEY_K */
case 38: return YASL_KEY_L; /* KEY_L */
case 39: return YASL_KEY_SEMICOLON; /* KEY_SEMICOLON */
case 40: return YASL_KEY_APOSTROPHE; /* KEY_APOSTROPHE */
case 41: return YASL_KEY_GRAVE; /* KEY_GRAVE */
case 42: return YASL_KEY_LEFT_SHIFT; /* KEY_LEFTSHIFT */
case 43: return YASL_KEY_BACKSLASH; /* KEY_BACKSLASH */
case 44: return YASL_KEY_Z; /* KEY_Z */
case 45: return YASL_KEY_X; /* KEY_X */
case 46: return YASL_KEY_C; /* KEY_C */
case 47: return YASL_KEY_V; /* KEY_V */
case 48: return YASL_KEY_B; /* KEY_B */
case 49: return YASL_KEY_N; /* KEY_N */
case 50: return YASL_KEY_M; /* KEY_M */
case 51: return YASL_KEY_COMMA; /* KEY_COMMA */
case 52: return YASL_KEY_PERIOD; /* KEY_DOT */
case 53: return YASL_KEY_SLASH; /* KEY_SLASH */
case 54: return YASL_KEY_RIGHT_SHIFT; /* KEY_RIGHTSHIFT */
case 55: return YASL_KEY_KP_MULTIPLY; /* KEY_KPASTERISK */
case 56: return YASL_KEY_LEFT_ALT; /* KEY_LEFTALT */
case 57: return YASL_KEY_SPACE; /* KEY_SPACE */
case 58: return YASL_KEY_CAPS_LOCK; /* KEY_CAPSLOCK */
case 59: return YASL_KEY_F1; /* KEY_F1 */
case 60: return YASL_KEY_F2; /* KEY_F2 */
case 61: return YASL_KEY_F3; /* KEY_F3 */
case 62: return YASL_KEY_F4; /* KEY_F4 */
case 63: return YASL_KEY_F5; /* KEY_F5 */
case 64: return YASL_KEY_F6; /* KEY_F6 */
case 65: return YASL_KEY_F7; /* KEY_F7 */
case 66: return YASL_KEY_F8; /* KEY_F8 */
case 67: return YASL_KEY_F9; /* KEY_F9 */
case 68: return YASL_KEY_F10; /* KEY_F10 */
case 69: return YASL_KEY_NUM_LOCK; /* KEY_NUMLOCK */
case 70: return YASL_KEY_SCROLL_LOCK; /* KEY_SCROLLLOCK */
case 71: return YASL_KEY_KP_7; /* KEY_KP7 */
case 72: return YASL_KEY_KP_8; /* KEY_KP8 */
case 73: return YASL_KEY_KP_9; /* KEY_KP9 */
case 74: return YASL_KEY_KP_SUBTRACT; /* KEY_KPMINUS */
case 75: return YASL_KEY_KP_4; /* KEY_KP4 */
case 76: return YASL_KEY_KP_5; /* KEY_KP5 */
case 77: return YASL_KEY_KP_6; /* KEY_KP6 */
case 78: return YASL_KEY_KP_ADD; /* KEY_KPPLUS */
case 79: return YASL_KEY_KP_1; /* KEY_KP1 */
case 80: return YASL_KEY_KP_2; /* KEY_KP2 */
case 81: return YASL_KEY_KP_3; /* KEY_KP3 */
case 82: return YASL_KEY_KP_0; /* KEY_KP0 */
case 83: return YASL_KEY_KP_DECIMAL; /* KEY_KPDOT */
case 86: return YASL_KEY_ISO_BACKSLASH; /* KEY_102ND */
case 87: return YASL_KEY_F11; /* KEY_F11 */
case 88: return YASL_KEY_F12; /* KEY_F12 */
case 89: return YASL_KEY_RO; /* KEY_RO */
case 92: return YASL_KEY_CONVERT; /* KEY_HENKAN */
case 93: return YASL_KEY_KANA; /* KEY_KATAKANAHIRAGANA */
case 94: return YASL_KEY_NONCONVERT; /* KEY_MUHENKAN */
case 96: return YASL_KEY_KP_ENTER; /* KEY_KPENTER */
case 97: return YASL_KEY_RIGHT_CONTROL; /* KEY_RIGHTCTRL */
case 98: return YASL_KEY_KP_DIVIDE; /* KEY_KPSLASH */
case 99: return YASL_KEY_PRINT_SCREEN; /* KEY_SYSRQ */
case 100: return YASL_KEY_RIGHT_ALT; /* KEY_RIGHTALT */
case 102: return YASL_KEY_HOME; /* KEY_HOME */
case 103: return YASL_KEY_UP; /* KEY_UP */
case 104: return YASL_KEY_PAGE_UP; /* KEY_PAGEUP */
case 105: return YASL_KEY_LEFT; /* KEY_LEFT */
case 106: return YASL_KEY_RIGHT; /* KEY_RIGHT */
case 107: return YASL_KEY_END; /* KEY_END */
case 108: return YASL_KEY_DOWN; /* KEY_DOWN */
case 109: return YASL_KEY_PAGE_DOWN; /* KEY_PAGEDOWN */
case 110: return YASL_KEY_INSERT; /* KEY_INSERT */
case 111: return YASL_KEY_DELETE; /* KEY_DELETE */
case 113: return YASL_KEY_MUTE; /* KEY_MUTE */
case 114: return YASL_KEY_VOLUME_DOWN; /* KEY_VOLUMEDOWN */
case 115: return YASL_KEY_VOLUME_UP; /* KEY_VOLUMEUP */
case 117: return YASL_KEY_KP_EQUAL; /* KEY_KPEQUAL */
case 119: return YASL_KEY_PAUSE; /* KEY_PAUSE */
case 121: return YASL_KEY_KP_COMMA; /* KEY_KPCOMMA */
case 124: return YASL_KEY_YEN; /* KEY_YEN */
case 125: return YASL_KEY_LEFT_SUPER; /* KEY_LEFTMETA */
case 126: return YASL_KEY_RIGHT_SUPER; /* KEY_RIGHTMETA */
case 127: return YASL_KEY_MENU; /* KEY_COMPOSE */
case 183: return YASL_KEY_F13; /* KEY_F13 */
case 184: return YASL_KEY_F14; /* KEY_F14 */
case 185: return YASL_KEY_F15; /* KEY_F15 */
case 186: return YASL_KEY_F16; /* KEY_F16 */
case 187: return YASL_KEY_F17; /* KEY_F17 */
case 188: return YASL_KEY_F18; /* KEY_F18 */
case 189: return YASL_KEY_F19; /* KEY_F19 */
case 190: return YASL_KEY_F20; /* KEY_F20 */
case 191: return YASL_KEY_F21; /* KEY_F21 */
case 192: return YASL_KEY_F22; /* KEY_F22 */
case 193: return YASL_KEY_F23; /* KEY_F23 */
case 194: return YASL_KEY_F24; /* KEY_F24 */
default: return YASL_KEY_UNKNOWN;
}
}
enum yasl_key yasl_key_from_cocoa(uint32_t code)
{
switch (code) {
case kVK_ANSI_A: return YASL_KEY_A;
case kVK_ANSI_B: return YASL_KEY_B;
case kVK_ANSI_C: return YASL_KEY_C;
case kVK_ANSI_D: return YASL_KEY_D;
case kVK_ANSI_E: return YASL_KEY_E;
case kVK_ANSI_F: return YASL_KEY_F;
case kVK_ANSI_G: return YASL_KEY_G;
case kVK_ANSI_H: return YASL_KEY_H;
case kVK_ANSI_I: return YASL_KEY_I;
case kVK_ANSI_J: return YASL_KEY_J;
case kVK_ANSI_K: return YASL_KEY_K;
case kVK_ANSI_L: return YASL_KEY_L;
case kVK_ANSI_M: return YASL_KEY_M;
case kVK_ANSI_N: return YASL_KEY_N;
case kVK_ANSI_O: return YASL_KEY_O;
case kVK_ANSI_P: return YASL_KEY_P;
case kVK_ANSI_Q: return YASL_KEY_Q;
case kVK_ANSI_R: return YASL_KEY_R;
case kVK_ANSI_S: return YASL_KEY_S;
case kVK_ANSI_T: return YASL_KEY_T;
case kVK_ANSI_U: return YASL_KEY_U;
case kVK_ANSI_V: return YASL_KEY_V;
case kVK_ANSI_W: return YASL_KEY_W;
case kVK_ANSI_X: return YASL_KEY_X;
case kVK_ANSI_Y: return YASL_KEY_Y;
case kVK_ANSI_Z: return YASL_KEY_Z;
case kVK_ANSI_0: return YASL_KEY_0;
case kVK_ANSI_1: return YASL_KEY_1;
case kVK_ANSI_2: return YASL_KEY_2;
case kVK_ANSI_3: return YASL_KEY_3;
case kVK_ANSI_4: return YASL_KEY_4;
case kVK_ANSI_5: return YASL_KEY_5;
case kVK_ANSI_6: return YASL_KEY_6;
case kVK_ANSI_7: return YASL_KEY_7;
case kVK_ANSI_8: return YASL_KEY_8;
case kVK_ANSI_9: return YASL_KEY_9;
case kVK_Return: return YASL_KEY_ENTER;
case kVK_Tab: return YASL_KEY_TAB;
case kVK_Space: return YASL_KEY_SPACE;
case kVK_Escape: return YASL_KEY_ESCAPE;
case kVK_Home: return YASL_KEY_HOME;
case kVK_End: return YASL_KEY_END;
case kVK_Delete: return YASL_KEY_BACKSPACE;
case kVK_ForwardDelete: return YASL_KEY_DELETE;
case kVK_PageUp: return YASL_KEY_PAGE_UP;
case kVK_PageDown: return YASL_KEY_PAGE_DOWN;
case kVK_Help: return YASL_KEY_INSERT;
case kVK_LeftArrow: return YASL_KEY_LEFT;
case kVK_RightArrow: return YASL_KEY_RIGHT;
case kVK_DownArrow: return YASL_KEY_DOWN;
case kVK_UpArrow: return YASL_KEY_UP;
case kVK_Command: return YASL_KEY_LEFT_SUPER;
case kVK_Shift: return YASL_KEY_LEFT_SHIFT;
case kVK_CapsLock: return YASL_KEY_CAPS_LOCK;
case kVK_Option: return YASL_KEY_LEFT_ALT;
case kVK_Control: return YASL_KEY_LEFT_CONTROL;
case kVK_RightCommand: return YASL_KEY_RIGHT_SUPER;
case kVK_RightShift: return YASL_KEY_RIGHT_SHIFT;
case kVK_RightOption: return YASL_KEY_RIGHT_ALT;
case kVK_RightControl: return YASL_KEY_RIGHT_CONTROL;
case kVK_ContextualMenu: return YASL_KEY_MENU;
case kVK_VolumeUp: return YASL_KEY_VOLUME_UP;
case kVK_VolumeDown: return YASL_KEY_VOLUME_DOWN;
case kVK_Mute: return YASL_KEY_MUTE;
case kVK_ISO_Section: return YASL_KEY_ISO_BACKSLASH;
case kVK_JIS_Yen: return YASL_KEY_YEN;
case kVK_JIS_Underscore: return YASL_KEY_RO;
case kVK_JIS_Eisu: return YASL_KEY_EISU;
case kVK_JIS_Kana: return YASL_KEY_KANA;
case kVK_JIS_KeypadComma: return YASL_KEY_KP_COMMA;
case kVK_ANSI_Equal: return YASL_KEY_EQUAL;
case kVK_ANSI_Minus: return YASL_KEY_MINUS;
case kVK_ANSI_LeftBracket: return YASL_KEY_LEFT_BRACKET;
case kVK_ANSI_RightBracket: return YASL_KEY_RIGHT_BRACKET;
case kVK_ANSI_Quote: return YASL_KEY_APOSTROPHE;
case kVK_ANSI_Semicolon: return YASL_KEY_SEMICOLON;
case kVK_ANSI_Backslash: return YASL_KEY_BACKSLASH;
case kVK_ANSI_Comma: return YASL_KEY_COMMA;
case kVK_ANSI_Slash: return YASL_KEY_SLASH;
case kVK_ANSI_Period: return YASL_KEY_PERIOD;
case kVK_ANSI_Grave: return YASL_KEY_GRAVE;
case kVK_F1: return YASL_KEY_F1;
case kVK_F2: return YASL_KEY_F2;
case kVK_F3: return YASL_KEY_F3;
case kVK_F4: return YASL_KEY_F4;
case kVK_F5: return YASL_KEY_F5;
case kVK_F6: return YASL_KEY_F6;
case kVK_F7: return YASL_KEY_F7;
case kVK_F8: return YASL_KEY_F8;
case kVK_F9: return YASL_KEY_F9;
case kVK_F10: return YASL_KEY_F10;
case kVK_F11: return YASL_KEY_F11;
case kVK_F12: return YASL_KEY_F12;
case kVK_F13: return YASL_KEY_F13;
case kVK_F14: return YASL_KEY_F14;
case kVK_F15: return YASL_KEY_F15;
case kVK_F16: return YASL_KEY_F16;
case kVK_F17: return YASL_KEY_F17;
case kVK_F18: return YASL_KEY_F18;
case kVK_F19: return YASL_KEY_F19;
case kVK_F20: return YASL_KEY_F20;
case kVK_ANSI_Keypad0: return YASL_KEY_KP_0;
case kVK_ANSI_Keypad1: return YASL_KEY_KP_1;
case kVK_ANSI_Keypad2: return YASL_KEY_KP_2;
case kVK_ANSI_Keypad3: return YASL_KEY_KP_3;
case kVK_ANSI_Keypad4: return YASL_KEY_KP_4;
case kVK_ANSI_Keypad5: return YASL_KEY_KP_5;
case kVK_ANSI_Keypad6: return YASL_KEY_KP_6;
case kVK_ANSI_Keypad7: return YASL_KEY_KP_7;
case kVK_ANSI_Keypad8: return YASL_KEY_KP_8;
case kVK_ANSI_Keypad9: return YASL_KEY_KP_9;
case kVK_ANSI_KeypadDecimal: return YASL_KEY_KP_DECIMAL;
case kVK_ANSI_KeypadMultiply: return YASL_KEY_KP_MULTIPLY;
case kVK_ANSI_KeypadPlus: return YASL_KEY_KP_ADD;
case kVK_ANSI_KeypadClear: return YASL_KEY_KP_CLEAR;
case kVK_ANSI_KeypadDivide: return YASL_KEY_KP_DIVIDE;
case kVK_ANSI_KeypadEnter: return YASL_KEY_KP_ENTER;
case kVK_ANSI_KeypadMinus: return YASL_KEY_KP_SUBTRACT;
case kVK_ANSI_KeypadEquals: return YASL_KEY_KP_EQUAL;
default: return YASL_KEY_UNKNOWN;
}
}
/* XKB standard physical key names, independent of server numeric keycodes. */
enum yasl_key yasl_key_from_xkb_name(const char name[4])
{
static const struct { char name[4]; enum yasl_key key; } keys[] = {
{{'T', 'L', 'D', 'E'}, YASL_KEY_GRAVE},
{{'A', 'E', '0', '1'}, YASL_KEY_1},
{{'A', 'E', '0', '2'}, YASL_KEY_2},
{{'A', 'E', '0', '3'}, YASL_KEY_3},
{{'A', 'E', '0', '4'}, YASL_KEY_4},
{{'A', 'E', '0', '5'}, YASL_KEY_5},
{{'A', 'E', '0', '6'}, YASL_KEY_6},
{{'A', 'E', '0', '7'}, YASL_KEY_7},
{{'A', 'E', '0', '8'}, YASL_KEY_8},
{{'A', 'E', '0', '9'}, YASL_KEY_9},
{{'A', 'E', '1', '0'}, YASL_KEY_0},
{{'A', 'E', '1', '1'}, YASL_KEY_MINUS},
{{'A', 'E', '1', '2'}, YASL_KEY_EQUAL},
{{'B', 'K', 'S', 'P'}, YASL_KEY_BACKSPACE},
{{'T', 'A', 'B', 0}, YASL_KEY_TAB},
{{'A', 'D', '0', '1'}, YASL_KEY_Q},
{{'A', 'D', '0', '2'}, YASL_KEY_W},
{{'A', 'D', '0', '3'}, YASL_KEY_E},
{{'A', 'D', '0', '4'}, YASL_KEY_R},
{{'A', 'D', '0', '5'}, YASL_KEY_T},
{{'A', 'D', '0', '6'}, YASL_KEY_Y},
{{'A', 'D', '0', '7'}, YASL_KEY_U},
{{'A', 'D', '0', '8'}, YASL_KEY_I},
{{'A', 'D', '0', '9'}, YASL_KEY_O},
{{'A', 'D', '1', '0'}, YASL_KEY_P},
{{'A', 'D', '1', '1'}, YASL_KEY_LEFT_BRACKET},
{{'A', 'D', '1', '2'}, YASL_KEY_RIGHT_BRACKET},
{{'B', 'K', 'S', 'L'}, YASL_KEY_BACKSLASH},
{{'R', 'T', 'R', 'N'}, YASL_KEY_ENTER},
{{'C', 'A', 'P', 'S'}, YASL_KEY_CAPS_LOCK},
{{'A', 'C', '0', '1'}, YASL_KEY_A},
{{'A', 'C', '0', '2'}, YASL_KEY_S},
{{'A', 'C', '0', '3'}, YASL_KEY_D},
{{'A', 'C', '0', '4'}, YASL_KEY_F},
{{'A', 'C', '0', '5'}, YASL_KEY_G},
{{'A', 'C', '0', '6'}, YASL_KEY_H},
{{'A', 'C', '0', '7'}, YASL_KEY_J},
{{'A', 'C', '0', '8'}, YASL_KEY_K},
{{'A', 'C', '0', '9'}, YASL_KEY_L},
{{'A', 'C', '1', '0'}, YASL_KEY_SEMICOLON},
{{'A', 'C', '1', '1'}, YASL_KEY_APOSTROPHE},
{{'L', 'F', 'S', 'H'}, YASL_KEY_LEFT_SHIFT},
{{'L', 'S', 'G', 'T'}, YASL_KEY_ISO_BACKSLASH},
{{'A', 'B', '0', '1'}, YASL_KEY_Z},
{{'A', 'B', '0', '2'}, YASL_KEY_X},
{{'A', 'B', '0', '3'}, YASL_KEY_C},
{{'A', 'B', '0', '4'}, YASL_KEY_V},
{{'A', 'B', '0', '5'}, YASL_KEY_B},
{{'A', 'B', '0', '6'}, YASL_KEY_N},
{{'A', 'B', '0', '7'}, YASL_KEY_M},
{{'A', 'B', '0', '8'}, YASL_KEY_COMMA},
{{'A', 'B', '0', '9'}, YASL_KEY_PERIOD},
{{'A', 'B', '1', '0'}, YASL_KEY_SLASH},
{{'R', 'T', 'S', 'H'}, YASL_KEY_RIGHT_SHIFT},
{{'L', 'C', 'T', 'L'}, YASL_KEY_LEFT_CONTROL},
{{'L', 'W', 'I', 'N'}, YASL_KEY_LEFT_SUPER},
{{'L', 'A', 'L', 'T'}, YASL_KEY_LEFT_ALT},
{{'S', 'P', 'C', 'E'}, YASL_KEY_SPACE},
{{'R', 'A', 'L', 'T'}, YASL_KEY_RIGHT_ALT},
{{'R', 'W', 'I', 'N'}, YASL_KEY_RIGHT_SUPER},
{{'C', 'O', 'M', 'P'}, YASL_KEY_MENU},
{{'R', 'C', 'T', 'L'}, YASL_KEY_RIGHT_CONTROL},
{{'E', 'S', 'C', 0}, YASL_KEY_ESCAPE},
{{'F', 'K', '0', '1'}, YASL_KEY_F1},
{{'F', 'K', '0', '2'}, YASL_KEY_F2},
{{'F', 'K', '0', '3'}, YASL_KEY_F3},
{{'F', 'K', '0', '4'}, YASL_KEY_F4},
{{'F', 'K', '0', '5'}, YASL_KEY_F5},
{{'F', 'K', '0', '6'}, YASL_KEY_F6},
{{'F', 'K', '0', '7'}, YASL_KEY_F7},
{{'F', 'K', '0', '8'}, YASL_KEY_F8},
{{'F', 'K', '0', '9'}, YASL_KEY_F9},
{{'F', 'K', '1', '0'}, YASL_KEY_F10},
{{'F', 'K', '1', '1'}, YASL_KEY_F11},
{{'F', 'K', '1', '2'}, YASL_KEY_F12},
{{'P', 'R', 'S', 'C'}, YASL_KEY_PRINT_SCREEN},
{{'S', 'C', 'L', 'K'}, YASL_KEY_SCROLL_LOCK},
{{'P', 'A', 'U', 'S'}, YASL_KEY_PAUSE},
{{'I', 'N', 'S', 0}, YASL_KEY_INSERT},
{{'H', 'O', 'M', 'E'}, YASL_KEY_HOME},
{{'P', 'G', 'U', 'P'}, YASL_KEY_PAGE_UP},
{{'D', 'E', 'L', 'E'}, YASL_KEY_DELETE},
{{'E', 'N', 'D', 0}, YASL_KEY_END},
{{'P', 'G', 'D', 'N'}, YASL_KEY_PAGE_DOWN},
{{'U', 'P', 0, 0}, YASL_KEY_UP},
{{'L', 'E', 'F', 'T'}, YASL_KEY_LEFT},
{{'D', 'O', 'W', 'N'}, YASL_KEY_DOWN},
{{'R', 'G', 'H', 'T'}, YASL_KEY_RIGHT},
{{'N', 'M', 'L', 'K'}, YASL_KEY_NUM_LOCK},
{{'K', 'P', 'D', 'V'}, YASL_KEY_KP_DIVIDE},
{{'K', 'P', 'M', 'U'}, YASL_KEY_KP_MULTIPLY},
{{'K', 'P', 'S', 'U'}, YASL_KEY_KP_SUBTRACT},
{{'K', 'P', '7', 0}, YASL_KEY_KP_7},
{{'K', 'P', '8', 0}, YASL_KEY_KP_8},
{{'K', 'P', '9', 0}, YASL_KEY_KP_9},
{{'K', 'P', 'A', 'D'}, YASL_KEY_KP_ADD},
{{'K', 'P', '4', 0}, YASL_KEY_KP_4},
{{'K', 'P', '5', 0}, YASL_KEY_KP_5},
{{'K', 'P', '6', 0}, YASL_KEY_KP_6},
{{'K', 'P', '1', 0}, YASL_KEY_KP_1},
{{'K', 'P', '2', 0}, YASL_KEY_KP_2},
{{'K', 'P', '3', 0}, YASL_KEY_KP_3},
{{'K', 'P', 'E', 'N'}, YASL_KEY_KP_ENTER},
{{'K', 'P', '0', 0}, YASL_KEY_KP_0},
{{'K', 'P', 'D', 'L'}, YASL_KEY_KP_DECIMAL},
{{'K', 'P', 'E', 'Q'}, YASL_KEY_KP_EQUAL},
{{'F', 'K', '1', '3'}, YASL_KEY_F13},
{{'F', 'K', '1', '4'}, YASL_KEY_F14},
{{'F', 'K', '1', '5'}, YASL_KEY_F15},
{{'F', 'K', '1', '6'}, YASL_KEY_F16},
{{'F', 'K', '1', '7'}, YASL_KEY_F17},
{{'F', 'K', '1', '8'}, YASL_KEY_F18},
{{'F', 'K', '1', '9'}, YASL_KEY_F19},
{{'F', 'K', '2', '0'}, YASL_KEY_F20},
{{'F', 'K', '2', '1'}, YASL_KEY_F21},
{{'F', 'K', '2', '2'}, YASL_KEY_F22},
{{'F', 'K', '2', '3'}, YASL_KEY_F23},
{{'F', 'K', '2', '4'}, YASL_KEY_F24},
{{'H', 'K', 'T', 'G'}, YASL_KEY_KANA},
{{'A', 'B', '1', '1'}, YASL_KEY_RO},
{{'H', 'E', 'N', 'K'}, YASL_KEY_CONVERT},
{{'M', 'U', 'H', 'E'}, YASL_KEY_NONCONVERT},
{{'A', 'E', '1', '3'}, YASL_KEY_YEN},
{{'M', 'U', 'T', 'E'}, YASL_KEY_MUTE},
{{'I', '1', '2', '9'}, YASL_KEY_KP_COMMA},
};
for (size_t i = 0; i < sizeof(keys) / sizeof(keys[0]); i++)
if (memcmp(keys[i].name, name, 4) == 0) return keys[i].key;
return YASL_KEY_UNKNOWN;
}
|