kbd_tables.c revision 1.10 1 /* $NetBSD: kbd_tables.c,v 1.10 2009/10/21 23:12:10 snj Exp $ */
2
3 /*
4 * Copyright (c) 1996 Gordon W. Ross
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28 /*
29 * Keyboard translation tables. (See kbd_tables.h)
30 */
31
32 #include <sys/cdefs.h>
33 __KERNEL_RCSID(0, "$NetBSD: kbd_tables.c,v 1.10 2009/10/21 23:12:10 snj Exp $");
34
35 #include <sys/types.h>
36
37 #define _KERNEL 1 /* XXX */
38 #include "kbd_tables.h"
39
40
41 /* The "compose" operations are not implemented. */
42 #define KEYSYM_COMPOSE KEYSYM_NOP
43
44
45 /*
46 * Key release codes are decoded in this map.
47 */
48 u_short keymap_release[KEYMAP_SIZE] = {
49 /* 0: */ KEYSYM_HOLE,
50 /* 1: L1/Stop */ KEYSYM_NOP,
51 /* 2: */ KEYSYM_HOLE,
52 /* 3: L2/Again */ KEYSYM_NOP,
53 /* 4: */ KEYSYM_HOLE,
54 /* 5: F1 */ KEYSYM_NOP,
55 /* 6: F2 */ KEYSYM_NOP,
56 /* 7: F10 */ KEYSYM_NOP,
57 /* 8: F3 */ KEYSYM_NOP,
58 /* 9: F11 */ KEYSYM_NOP,
59 /* 10: F4 */ KEYSYM_NOP,
60 /* 11: F12 */ KEYSYM_NOP,
61 /* 12: F5 */ KEYSYM_NOP,
62 /* 13: AltGraph */ KEYSYM_CLRMOD | KBMOD_ALTGRAPH,
63 /* 14: F6 */ KEYSYM_NOP,
64 /* 15: */ KEYSYM_HOLE,
65 /* 16: F7 */ KEYSYM_NOP,
66 /* 17: F8 */ KEYSYM_NOP,
67 /* 18: F9 */ KEYSYM_NOP,
68 /* 19: Alt_L */ KEYSYM_CLRMOD | KBMOD_ALT_L,
69 /* 20: T5_Up */ KEYSYM_NOP,
70 /* 21: R1/Pause */ KEYSYM_NOP,
71 /* 22: R2/Print */ KEYSYM_NOP,
72 /* 23: R3/Break */ KEYSYM_NOP,
73 /* 24: T5_Left */ KEYSYM_NOP,
74 /* 25: L3/Props */ KEYSYM_NOP,
75 /* 26: L4/Undo */ KEYSYM_NOP,
76 /* 27: T5_Down */ KEYSYM_NOP,
77 /* 28: T5_Right */ KEYSYM_NOP,
78 /* 29: Esc */ KEYSYM_NOP,
79 /* 30: 1 */ KEYSYM_NOP,
80 /* 31: 2 */ KEYSYM_NOP,
81 /* 32: 3 */ KEYSYM_NOP,
82 /* 33: 4 */ KEYSYM_NOP,
83 /* 34: 5 */ KEYSYM_NOP,
84 /* 35: 6 */ KEYSYM_NOP,
85 /* 36: 7 */ KEYSYM_NOP,
86 /* 37: 8 */ KEYSYM_NOP,
87 /* 38: 9 */ KEYSYM_NOP,
88 /* 39: 0 */ KEYSYM_NOP,
89 /* 40: minus */ KEYSYM_NOP,
90 /* 41: equal */ KEYSYM_NOP,
91 /* 42: grave/tilde */ KEYSYM_NOP,
92 /* 43: BackSpace */ KEYSYM_NOP,
93 /* 44: T5_Insert */ KEYSYM_NOP,
94 /* 45: R4/KP_Equal */ KEYSYM_NOP,
95 /* 46: R5/KP_Div */ KEYSYM_NOP,
96 /* 47: R6/KP_Mult */ KEYSYM_NOP,
97 /* 48: */ KEYSYM_NOP,
98 /* 49: L5/Front */ KEYSYM_NOP,
99 /* 50: KP_Delete */ KEYSYM_NOP,
100 /* 51: L6/Copy */ KEYSYM_NOP,
101 /* 52: T5_Home */ KEYSYM_NOP,
102 /* 53: Tab */ KEYSYM_NOP,
103 /* 54: Q */ KEYSYM_NOP,
104 /* 55: W */ KEYSYM_NOP,
105 /* 56: E */ KEYSYM_NOP,
106 /* 57: R */ KEYSYM_NOP,
107 /* 58: T */ KEYSYM_NOP,
108 /* 59: Y */ KEYSYM_NOP,
109 /* 60: U */ KEYSYM_NOP,
110 /* 61: I */ KEYSYM_NOP,
111 /* 62: O */ KEYSYM_NOP,
112 /* 63: P */ KEYSYM_NOP,
113 /* 64: [ */ KEYSYM_NOP,
114 /* 65: ] */ KEYSYM_NOP,
115 /* 66: Delete */ KEYSYM_NOP,
116 /* 67: Compose */ KEYSYM_NOP,
117 /* 68: R7/Home */ KEYSYM_NOP,
118 /* 69: R8/Up */ KEYSYM_NOP,
119 /* 70: R9/PgUp */ KEYSYM_NOP,
120 /* 71: KP_Minus */ KEYSYM_NOP,
121 /* 72: L7/Open */ KEYSYM_NOP,
122 /* 73: L8/Paste */ KEYSYM_NOP,
123 /* 74: T5_End */ KEYSYM_NOP,
124 /* 75: */ KEYSYM_HOLE,
125 /* 76: Ctrl_L */ KEYSYM_CLRMOD | KBMOD_CTRL_L,
126 /* 77: A */ KEYSYM_NOP,
127 /* 78: S */ KEYSYM_NOP,
128 /* 79: D */ KEYSYM_NOP,
129 /* 80: F */ KEYSYM_NOP,
130 /* 81: G */ KEYSYM_NOP,
131 /* 82: H */ KEYSYM_NOP,
132 /* 83: J */ KEYSYM_NOP,
133 /* 84: K */ KEYSYM_NOP,
134 /* 85: L */ KEYSYM_NOP,
135 /* 86: ; */ KEYSYM_NOP,
136 /* 87: apostr. */ KEYSYM_NOP,
137 /* 88: backslash */ KEYSYM_NOP,
138 /* 89: Return */ KEYSYM_NOP,
139 /* 90: KP_Enter */ KEYSYM_NOP,
140 /* 91: R10/Left */ KEYSYM_NOP,
141 /* 92: R11/KP_5 */ KEYSYM_NOP,
142 /* 93: R12/Right */ KEYSYM_NOP,
143 /* 94: KP_Insert */ KEYSYM_NOP,
144 /* 95: L9/Find */ KEYSYM_NOP,
145 /* 96: T5_PgUp */ KEYSYM_NOP,
146 /* 97: L10/Cut */ KEYSYM_NOP,
147 /* 98: Num_Lock */ KEYSYM_NOP,
148 /* 99: Shift_L */ KEYSYM_CLRMOD | KBMOD_SHIFT_L,
149 /* 100: Z */ KEYSYM_NOP,
150 /* 101: X */ KEYSYM_NOP,
151 /* 102: C */ KEYSYM_NOP,
152 /* 103: V */ KEYSYM_NOP,
153 /* 104: B */ KEYSYM_NOP,
154 /* 105: N */ KEYSYM_NOP,
155 /* 106: M */ KEYSYM_NOP,
156 /* 107: , */ KEYSYM_NOP,
157 /* 108: . */ KEYSYM_NOP,
158 /* 109: / */ KEYSYM_NOP,
159 /* 110: Shift_R */ KEYSYM_CLRMOD | KBMOD_SHIFT_R,
160 /* 111: Linefeed */ KEYSYM_NOP,
161 /* 112: R13/End */ KEYSYM_NOP,
162 /* 113: R14/Down */ KEYSYM_NOP,
163 /* 114: R15/PgDn */ KEYSYM_NOP,
164 /* 115: */ KEYSYM_HOLE,
165 /* 116: */ KEYSYM_HOLE,
166 /* 117: */ KEYSYM_HOLE,
167 /* 118: L16/Help */ KEYSYM_NOP,
168 /* 119: CapsLock */ KEYSYM_NOP,
169 /* 120: Meta_L */ KEYSYM_CLRMOD | KBMOD_META_L,
170 /* 121: SpaceBar */ KEYSYM_NOP,
171 /* 122: Meta_R */ KEYSYM_CLRMOD | KBMOD_META_R,
172 /* 123: T5_PgDn */ KEYSYM_NOP,
173 /* 124: */ KEYSYM_HOLE,
174 /* 125: KP_Add */ KEYSYM_NOP,
175 /* 126: */ KEYSYM_LAYOUT, /* layout next */
176 /* 127: */ KEYSYM_RESET, /* kbd ID next */
177 };
178
179
180 /*
182 * This map is used when a control key is down.
183 */
184 #define CTL(c) ((c)&0x1F)
185 u_short keymap_control[KEYMAP_SIZE] = {
186 /* 0: */ KEYSYM_HOLE,
187 /* 1: L1/Stop */ KEYSYM_NOP,
188 /* 2: */ KEYSYM_HOLE,
189 /* 3: L2/Again */ KEYSYM_NOP,
190 /* 4: */ KEYSYM_HOLE,
191 /* 5: F1 */ KEYSYM_NOP,
192 /* 6: F2 */ KEYSYM_NOP,
193 /* 7: F10 */ KEYSYM_NOP,
194 /* 8: F3 */ KEYSYM_NOP,
195 /* 9: F11 */ KEYSYM_NOP,
196 /* 10: F4 */ KEYSYM_NOP,
197 /* 11: F12 */ KEYSYM_NOP,
198 /* 12: F5 */ KEYSYM_NOP,
199 /* 13: AltGraph */ KEYSYM_SETMOD | KBMOD_ALTGRAPH,
200 /* 14: F6 */ KEYSYM_NOP,
201 /* 15: */ KEYSYM_HOLE,
202 /* 16: F7 */ KEYSYM_NOP,
203 /* 17: F8 */ KEYSYM_NOP,
204 /* 18: F9 */ KEYSYM_NOP,
205 /* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L,
206 /* 20: T5_Up */ KEYSYM_NOP,
207 /* 21: R1/Pause */ KEYSYM_NOP,
208 /* 22: R2/Print */ KEYSYM_NOP,
209 /* 23: R3/Break */ KEYSYM_NOP,
210 /* 24: T5_Left */ KEYSYM_NOP,
211 /* 25: L3/Props */ KEYSYM_NOP,
212 /* 26: L4/Undo */ KEYSYM_NOP,
213 /* 27: T5_Down */ KEYSYM_NOP,
214 /* 28: T5_Right */ KEYSYM_NOP,
215 /* 29: Esc */ 0x1b,
216 /* 30: 1 */ KEYSYM_NOP,
217 /* 31: 2 */ CTL('@'),
218 /* 32: 3 */ KEYSYM_NOP,
219 /* 33: 4 */ KEYSYM_NOP,
220 /* 34: 5 */ KEYSYM_NOP,
221 /* 35: 6 */ CTL('^'),
222 /* 36: 7 */ KEYSYM_NOP,
223 /* 37: 8 */ KEYSYM_NOP,
224 /* 38: 9 */ KEYSYM_NOP,
225 /* 39: 0 */ KEYSYM_NOP,
226 /* 40: minus _ */ CTL('_'),
227 /* 41: equal */ KEYSYM_NOP,
228 /* 42: grave/tilde */ CTL('~'),
229 /* 43: BackSpace */ '\b',
230 /* 44: T5_Insert */ KEYSYM_NOP,
231 /* 45: R4/KP_Equal */ KEYSYM_NOP,
232 /* 46: R5/KP_Div */ KEYSYM_NOP,
233 /* 47: R6/KP_Mult */ KEYSYM_NOP,
234 /* 48: */ KEYSYM_NOP,
235 /* 49: L5/Front */ KEYSYM_NOP,
236 /* 50: KP_Delete */ KEYSYM_NOP,
237 /* 51: L6/Copy */ KEYSYM_NOP,
238 /* 52: T5_Home */ KEYSYM_NOP,
239 /* 53: Tab */ '\t',
240 /* 54: Q */ CTL('Q'),
241 /* 55: W */ CTL('W'),
242 /* 56: E */ CTL('E'),
243 /* 57: R */ CTL('R'),
244 /* 58: T */ CTL('T'),
245 /* 59: Y */ CTL('Y'),
246 /* 60: U */ CTL('U'),
247 /* 61: I */ CTL('I'),
248 /* 62: O */ CTL('O'),
249 /* 63: P */ CTL('P'),
250 /* 64: [ */ CTL('['),
251 /* 65: ] */ CTL(']'),
252 /* 66: Delete */ 0x7f,
253 /* 67: Compose */ KEYSYM_COMPOSE,
254 /* 68: R7/Home */ CTL('A'), /* emacs */
255 /* 69: R8/Up */ CTL('P'), /* emacs */
256 /* 70: R9/PgUp */ 0x80|'v', /* emacs */
257 /* 71: KP_Minus */ KEYSYM_NOP,
258 /* 72: L7/Open */ KEYSYM_NOP,
259 /* 73: L8/Paste */ KEYSYM_NOP,
260 /* 74: T5_End */ KEYSYM_NOP,
261 /* 75: */ KEYSYM_HOLE,
262 /* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L,
263 /* 77: A */ CTL('A'),
264 /* 78: S */ CTL('S'),
265 /* 79: D */ CTL('D'),
266 /* 80: F */ CTL('F'),
267 /* 81: G */ CTL('G'),
268 /* 82: H */ CTL('H'),
269 /* 83: J */ CTL('J'),
270 /* 84: K */ CTL('K'),
271 /* 85: L */ CTL('L'),
272 /* 86: ; */ KEYSYM_NOP,
273 /* 87: apostr. */ KEYSYM_NOP,
274 /* 88: backslash */ CTL('\\'),
275 /* 89: Return */ '\r',
276 /* 90: KP_Enter */ KEYSYM_NOP,
277 /* 91: R10/Left */ CTL('B'), /* emacs */
278 /* 92: R11/KP_5 */ KEYSYM_NOP,
279 /* 93: R12/Right */ CTL('F'), /* emacs */
280 /* 94: KP_Insert */ KEYSYM_NOP,
281 /* 95: L9/Find */ KEYSYM_NOP,
282 /* 96: T5_PgUp */ KEYSYM_NOP,
283 /* 97: L10/Cut */ KEYSYM_NOP,
284 /* 98: Num_Lock */ KEYSYM_INVMOD | KBMOD_NUMLOCK,
285 /* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L,
286 /* 100: Z */ CTL('Z'),
287 /* 101: X */ CTL('X'),
288 /* 102: C */ CTL('C'),
289 /* 103: V */ CTL('V'),
290 /* 104: B */ CTL('B'),
291 /* 105: N */ CTL('N'),
292 /* 106: M */ CTL('M'),
293 /* 107: , */ KEYSYM_NOP,
294 /* 108: . */ KEYSYM_NOP,
295 /* 109: / ? */ CTL('?'),
296 /* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R,
297 /* 111: Linefeed */ '\n',
298 /* 112: R13/End */ CTL('E'), /* emacs */
299 /* 113: R14/Down */ CTL('N'), /* emacs */
300 /* 114: R15/PgDn */ CTL('V'), /* emacs */
301 /* 115: */ KEYSYM_HOLE,
302 /* 116: */ KEYSYM_HOLE,
303 /* 117: */ KEYSYM_HOLE,
304 /* 118: L16/Help */ KEYSYM_NOP,
305 /* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK,
306 /* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L,
307 /* 121: SpaceBar */ CTL(' '),
308 /* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R,
309 /* 123: T5_PgDn */ KEYSYM_NOP,
310 /* 124: */ KEYSYM_HOLE,
311 /* 125: KP_Add */ KEYSYM_NOP,
312 /* 126: */ KEYSYM_HW_ERR,
313 /* 127: */ KEYSYM_ALL_UP,
314 };
315 #undef CTL
316
317
318 /*
320 * Keymaps for the "type 3" keyboard.
321 * (lower-case, upper-case)
322 */
323
324 u_short keymap_s3_lc[KEYMAP_SIZE] = {
325 /* 0: */ KEYSYM_HOLE,
326 /* 1: L1/Stop */ KEYSYM_FUNC_L(1),
327 /* 2: */ KEYSYM_HOLE,
328 /* 3: L2/Again */ KEYSYM_FUNC_L(2),
329 /* 4: */ KEYSYM_HOLE,
330 /* 5: F1 */ KEYSYM_FUNC_F(1),
331 /* 6: F2 */ KEYSYM_FUNC_F(2),
332 /* 7: F10 */ KEYSYM_HOLE,
333 /* 8: F3 */ KEYSYM_FUNC_F(3),
334 /* 9: F11 */ KEYSYM_HOLE,
335 /* 10: F4 */ KEYSYM_FUNC_F(4),
336 /* 11: F12 */ KEYSYM_HOLE,
337 /* 12: F5 */ KEYSYM_FUNC_F(5),
338 /* 13: AltGraph */ KEYSYM_HOLE,
339 /* 14: F6 */ KEYSYM_FUNC_F(6),
340 /* 15: */ KEYSYM_HOLE,
341 /* 16: F7 */ KEYSYM_FUNC_F(7),
342 /* 17: F8 */ KEYSYM_FUNC_F(8),
343 /* 18: F9 */ KEYSYM_FUNC_F(9),
344 /* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L,
345 /* 20: T5_Up */ KEYSYM_HOLE,
346 /* 21: R1/Pause */ KEYSYM_FUNC_R(1),
347 /* 22: R2/Print */ KEYSYM_FUNC_R(2),
348 /* 23: R3/Break */ KEYSYM_FUNC_R(3),
349 /* 24: T5_Left */ KEYSYM_HOLE,
350 /* 25: L3/Props */ KEYSYM_FUNC_L(3),
351 /* 26: L4/Undo */ KEYSYM_FUNC_L(4),
352 /* 27: T5_Down */ KEYSYM_HOLE,
353 /* 28: T5_Right */ KEYSYM_HOLE,
354 /* 29: Esc */ 0x1b,
355 /* 30: 1 */ '1',
356 /* 31: 2 */ '2',
357 /* 32: 3 */ '3',
358 /* 33: 4 */ '4',
359 /* 34: 5 */ '5',
360 /* 35: 6 */ '6',
361 /* 36: 7 */ '7',
362 /* 37: 8 */ '8',
363 /* 38: 9 */ '9',
364 /* 39: 0 */ '0',
365 /* 40: minus */ '-',
366 /* 41: equal */ '=',
367 /* 42: grave/tilde */ '`',
368 /* 43: BackSpace */ '\b',
369 /* 44: */ KEYSYM_HOLE,
370 /* 45: R4/KP_Equal */ KEYSYM_FUNC_R(4),
371 /* 46: R5/KP_Div */ KEYSYM_FUNC_R(5),
372 /* 47: R6/KP_Mult */ KEYSYM_FUNC_R(6),
373 /* 48: */ KEYSYM_HOLE,
374 /* 49: L5/Front */ KEYSYM_FUNC_L(5),
375 /* 50: KP_Delete */ KEYSYM_HOLE,
376 /* 51: L6/Copy */ KEYSYM_FUNC_L(6),
377 /* 52: */ KEYSYM_HOLE,
378 /* 53: Tab */ '\t',
379 /* 54: Q */ 'q',
380 /* 55: W */ 'w',
381 /* 56: E */ 'e',
382 /* 57: R */ 'r',
383 /* 58: T */ 't',
384 /* 59: Y */ 'y',
385 /* 60: U */ 'u',
386 /* 61: I */ 'i',
387 /* 62: O */ 'o',
388 /* 63: P */ 'p',
389 /* 64: [ */ '[',
390 /* 65: ] */ ']',
391 /* 66: Delete */ 0x7f,
392 /* 67: Compose */ KEYSYM_HOLE,
393 /* 68: R7/Home */ KEYSYM_FUNC_R(7),
394 /* 69: R8/Up */ KEYSYM_FUNC_R(8),
395 /* 70: R9/PgUp */ KEYSYM_FUNC_R(9),
396 /* 71: KP_Minus */ KEYSYM_HOLE,
397 /* 72: L7/Open */ KEYSYM_FUNC_L(7),
398 /* 73: L8/Paste */ KEYSYM_FUNC_L(8),
399 /* 74: */ KEYSYM_HOLE,
400 /* 75: */ KEYSYM_HOLE,
401 /* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L,
402 /* 77: A */ 'a',
403 /* 78: S */ 's',
404 /* 79: D */ 'd',
405 /* 80: F */ 'f',
406 /* 81: G */ 'g',
407 /* 82: H */ 'h',
408 /* 83: J */ 'j',
409 /* 84: K */ 'k',
410 /* 85: L */ 'l',
411 /* 86: ; */ ';',
412 /* 87: apostr. */ '\'',
413 /* 88: backslash */ '\\',
414 /* 89: Return */ '\r',
415 /* 90: KP_Enter */ KEYSYM_HOLE,
416 /* 91: R10/Left */ KEYSYM_FUNC_R(10),
417 /* 92: R11/KP_5 */ KEYSYM_FUNC_R(11),
418 /* 93: R12/Right */ KEYSYM_FUNC_R(12),
419 /* 94: KP_Insert */ KEYSYM_HOLE,
420 /* 95: L9/Find */ KEYSYM_FUNC_L(9),
421 /* 96: */ KEYSYM_HOLE,
422 /* 97: L10/Cut */ KEYSYM_FUNC_L(10),
423 /* 98: Num_Lock */ KEYSYM_HOLE,
424 /* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L,
425 /* 100: Z */ 'z',
426 /* 101: X */ 'x',
427 /* 102: C */ 'c',
428 /* 103: V */ 'v',
429 /* 104: B */ 'b',
430 /* 105: N */ 'n',
431 /* 106: M */ 'm',
432 /* 107: , */ ',',
433 /* 108: . */ '.',
434 /* 109: / */ '/',
435 /* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R,
436 /* 111: Linefeed */ '\n',
437 /* 112: R13/End */ KEYSYM_FUNC_R(13),
438 /* 113: R14/Down */ KEYSYM_FUNC_R(14),
439 /* 114: R15/PgDn */ KEYSYM_FUNC_R(15),
440 /* 115: */ KEYSYM_HOLE,
441 /* 116: */ KEYSYM_HOLE,
442 /* 117: */ KEYSYM_HOLE,
443 /* 118: L16/Help */ KEYSYM_HOLE,
444 /* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK,
445 /* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L,
446 /* 121: SpaceBar */ ' ',
447 /* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R,
448 /* 123: */ KEYSYM_HOLE,
449 /* 124: */ KEYSYM_HOLE,
450 /* 125: KP_Add */ KEYSYM_HOLE,
451 /* 126: */ KEYSYM_HW_ERR,
452 /* 127: */ KEYSYM_ALL_UP,
453 };
454
455
456 u_short keymap_s3_uc[KEYMAP_SIZE] = {
458 /* 0: */ KEYSYM_HOLE,
459 /* 1: L1/Stop */ KEYSYM_FUNC_L(1),
460 /* 2: */ KEYSYM_HOLE,
461 /* 3: L2/Again */ KEYSYM_FUNC_L(2),
462 /* 4: */ KEYSYM_HOLE,
463 /* 5: F1 */ KEYSYM_FUNC_F(1),
464 /* 6: F2 */ KEYSYM_FUNC_F(2),
465 /* 7: F10 */ KEYSYM_HOLE,
466 /* 8: F3 */ KEYSYM_FUNC_F(3),
467 /* 9: F11 */ KEYSYM_HOLE,
468 /* 10: F4 */ KEYSYM_FUNC_F(4),
469 /* 11: F12 */ KEYSYM_HOLE,
470 /* 12: F5 */ KEYSYM_FUNC_F(5),
471 /* 13: AltGraph */ KEYSYM_HOLE,
472 /* 14: F6 */ KEYSYM_FUNC_F(6),
473 /* 15: */ KEYSYM_HOLE,
474 /* 16: F7 */ KEYSYM_FUNC_F(7),
475 /* 17: F8 */ KEYSYM_FUNC_F(8),
476 /* 18: F9 */ KEYSYM_FUNC_F(9),
477 /* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L,
478 /* 20: T5_Up */ KEYSYM_HOLE,
479 /* 21: R1/Pause */ KEYSYM_FUNC_R(1),
480 /* 22: R2/Print */ KEYSYM_FUNC_R(2),
481 /* 23: R3/Break */ KEYSYM_FUNC_R(3),
482 /* 24: T5_Left */ KEYSYM_HOLE,
483 /* 25: L3/Props */ KEYSYM_FUNC_L(3),
484 /* 26: L4/Undo */ KEYSYM_FUNC_L(4),
485 /* 27: T5_Down */ KEYSYM_HOLE,
486 /* 28: T5_Right */ KEYSYM_HOLE,
487 /* 29: Esc */ 0x1b,
488 /* 30: 1 */ '!',
489 /* 31: 2 */ '@',
490 /* 32: 3 */ '#',
491 /* 33: 4 */ '$',
492 /* 34: 5 */ '%',
493 /* 35: 6 */ '^',
494 /* 36: 7 */ '&',
495 /* 37: 8 */ '*',
496 /* 38: 9 */ '(',
497 /* 39: 0 */ ')',
498 /* 40: minus */ '_',
499 /* 41: equal */ '+',
500 /* 42: grave/tilde */ '~',
501 /* 43: BackSpace */ '\b',
502 /* 44: */ KEYSYM_HOLE,
503 /* 45: R4/KP_Equal */ KEYSYM_FUNC_R(4),
504 /* 46: R5/KP_Div */ KEYSYM_FUNC_R(5),
505 /* 47: R6/KP_Mult */ KEYSYM_FUNC_R(6),
506 /* 48: */ KEYSYM_HOLE,
507 /* 49: L5/Front */ KEYSYM_FUNC_L(5),
508 /* 50: KP_Delete */ KEYSYM_HOLE,
509 /* 51: L6/Copy */ KEYSYM_FUNC_L(6),
510 /* 52: */ KEYSYM_HOLE,
511 /* 53: Tab */ '\t',
512 /* 54: Q */ 'Q',
513 /* 55: W */ 'W',
514 /* 56: E */ 'E',
515 /* 57: R */ 'R',
516 /* 58: T */ 'T',
517 /* 59: Y */ 'Y',
518 /* 60: U */ 'U',
519 /* 61: I */ 'I',
520 /* 62: O */ 'O',
521 /* 63: P */ 'P',
522 /* 64: [ */ '{',
523 /* 65: ] */ '}',
524 /* 66: Delete */ 0x7f,
525 /* 67: Compose */ KEYSYM_HOLE,
526 /* 68: R7/Home */ KEYSYM_FUNC_R(7),
527 /* 69: R8/Up */ KEYSYM_FUNC_R(8),
528 /* 70: R9/PgUp */ KEYSYM_FUNC_R(9),
529 /* 71: KP_Minus */ KEYSYM_HOLE,
530 /* 72: L7/Open */ KEYSYM_FUNC_L(7),
531 /* 73: L8/Paste */ KEYSYM_FUNC_L(8),
532 /* 74: */ KEYSYM_HOLE,
533 /* 75: */ KEYSYM_HOLE,
534 /* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L,
535 /* 77: A */ 'A',
536 /* 78: S */ 'S',
537 /* 79: D */ 'D',
538 /* 80: F */ 'F',
539 /* 81: G */ 'G',
540 /* 82: H */ 'H',
541 /* 83: J */ 'J',
542 /* 84: K */ 'K',
543 /* 85: L */ 'L',
544 /* 86: ; */ ':',
545 /* 87: apostr. */ '"',
546 /* 88: backslash */ '|',
547 /* 89: Return */ '\r',
548 /* 90: KP_Enter */ KEYSYM_HOLE,
549 /* 91: R10/Left */ KEYSYM_FUNC_R(10),
550 /* 92: R11/KP_5 */ KEYSYM_FUNC_R(11),
551 /* 93: R12/Right */ KEYSYM_FUNC_R(12),
552 /* 94: KP_Insert */ KEYSYM_HOLE,
553 /* 95: L9/Find */ KEYSYM_FUNC_L(9),
554 /* 96: */ KEYSYM_HOLE,
555 /* 97: L10/Cut */ KEYSYM_FUNC_L(10),
556 /* 98: Num_Lock */ KEYSYM_HOLE,
557 /* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L,
558 /* 100: Z */ 'Z',
559 /* 101: X */ 'X',
560 /* 102: C */ 'C',
561 /* 103: V */ 'V',
562 /* 104: B */ 'B',
563 /* 105: N */ 'N',
564 /* 106: M */ 'M',
565 /* 107: , */ '<',
566 /* 108: . */ '>',
567 /* 109: / */ '?',
568 /* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R,
569 /* 111: Linefeed */ '\n',
570 /* 112: R13/End */ KEYSYM_FUNC_R(13),
571 /* 113: R14/Down */ KEYSYM_FUNC_R(14),
572 /* 114: R15/PgDn */ KEYSYM_FUNC_R(15),
573 /* 115: */ KEYSYM_HOLE,
574 /* 116: */ KEYSYM_HOLE,
575 /* 117: */ KEYSYM_HOLE,
576 /* 118: L16/Help */ KEYSYM_HOLE,
577 /* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK,
578 /* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L,
579 /* 121: SpaceBar */ ' ',
580 /* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R,
581 /* 123: */ KEYSYM_HOLE,
582 /* 124: */ KEYSYM_HOLE,
583 /* 125: KP_Add */ KEYSYM_HOLE,
584 /* 126: */ KEYSYM_HW_ERR,
585 /* 127: */ KEYSYM_ALL_UP,
586 };
587
588
589 /*
591 * Keymaps for the "type 4" keyboard.
592 * (lower-case, upper-case)
593 */
594
595 u_short keymap_s4_lc[KEYMAP_SIZE] = {
596 /* 0: */ KEYSYM_HOLE,
597 /* 1: L1/Stop */ KEYSYM_FUNC_L(1),
598 /* 2: */ KEYSYM_HOLE,
599 /* 3: L2/Again */ KEYSYM_FUNC_L(2),
600 /* 4: */ KEYSYM_HOLE,
601 /* 5: F1 */ KEYSYM_FUNC_F(1),
602 /* 6: F2 */ KEYSYM_FUNC_F(2),
603 /* 7: F10 */ KEYSYM_FUNC_F(10),
604 /* 8: F3 */ KEYSYM_FUNC_F(3),
605 /* 9: F11 */ KEYSYM_FUNC_F(11),
606 /* 10: F4 */ KEYSYM_FUNC_F(4),
607 /* 11: F12 */ KEYSYM_FUNC_F(12),
608 /* 12: F5 */ KEYSYM_FUNC_F(5),
609 /* 13: AltGraph */ KEYSYM_SETMOD | KBMOD_ALTGRAPH,
610 /* 14: F6 */ KEYSYM_FUNC_F(6),
611 /* 15: */ KEYSYM_HOLE,
612 /* 16: F7 */ KEYSYM_FUNC_F(7),
613 /* 17: F8 */ KEYSYM_FUNC_F(8),
614 /* 18: F9 */ KEYSYM_FUNC_F(9),
615 /* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L,
616 /* 20: T5_Up */ KEYSYM_STRING | 1,
617 /* 21: R1/Pause */ KEYSYM_FUNC_R(1),
618 /* 22: R2/Print */ KEYSYM_FUNC_R(2),
619 /* 23: R3/Break */ KEYSYM_FUNC_R(3),
620 /* 24: T5_Left */ KEYSYM_STRING | 3,
621 /* 25: L3/Props */ KEYSYM_FUNC_L(3),
622 /* 26: L4/Undo */ KEYSYM_FUNC_L(4),
623 /* 27: T5_Down */ KEYSYM_STRING | 2,
624 /* 28: T5_Right */ KEYSYM_STRING | 4,
625 /* 29: Esc */ 0x1b,
626 /* 30: 1 */ '1',
627 /* 31: 2 */ '2',
628 /* 32: 3 */ '3',
629 /* 33: 4 */ '4',
630 /* 34: 5 */ '5',
631 /* 35: 6 */ '6',
632 /* 36: 7 */ '7',
633 /* 37: 8 */ '8',
634 /* 38: 9 */ '9',
635 /* 39: 0 */ '0',
636 /* 40: minus */ '-',
637 /* 41: equal */ '=',
638 /* 42: grave/tilde */ '`',
639 /* 43: BackSpace */ '\b',
640 /* 44: T5_Insert */ KEYSYM_FUNC_N(8),
641 /* 45: R4/KP_Equal */ KEYSYM_FUNC_R(4),
642 /* 46: R5/KP_Div */ KEYSYM_FUNC_R(5),
643 /* 47: R6/KP_Mult */ KEYSYM_FUNC_R(6),
644 /* 48: */ KEYSYM_FUNC_N(13),
645 /* 49: L5/Front */ KEYSYM_FUNC_L(5),
646 /* 50: KP_Delete */ KEYSYM_FUNC_N(10),
647 /* 51: L6/Copy */ KEYSYM_FUNC_L(6),
648 /* 52: T5_Home */ KEYSYM_FUNC_R(7),
649 /* 53: Tab */ '\t',
650 /* 54: Q */ 'q',
651 /* 55: W */ 'w',
652 /* 56: E */ 'e',
653 /* 57: R */ 'r',
654 /* 58: T */ 't',
655 /* 59: Y */ 'y',
656 /* 60: U */ 'u',
657 /* 61: I */ 'i',
658 /* 62: O */ 'o',
659 /* 63: P */ 'p',
660 /* 64: [ */ '[',
661 /* 65: ] */ ']',
662 /* 66: Delete */ 0x7f,
663 /* 67: Compose */ KEYSYM_COMPOSE,
664 /* 68: R7/Home */ KEYSYM_FUNC_R(7),
665 /* 69: R8/Up */ KEYSYM_FUNC_R(8),
666 /* 70: R9/PgUp */ KEYSYM_FUNC_R(9),
667 /* 71: KP_Minus */ KEYSYM_FUNC_N(15),
668 /* 72: L7/Open */ KEYSYM_FUNC_L(7),
669 /* 73: L8/Paste */ KEYSYM_FUNC_L(8),
670 /* 74: T5_End */ KEYSYM_FUNC_R(13),
671 /* 75: */ KEYSYM_HOLE,
672 /* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L,
673 /* 77: A */ 'a',
674 /* 78: S */ 's',
675 /* 79: D */ 'd',
676 /* 80: F */ 'f',
677 /* 81: G */ 'g',
678 /* 82: H */ 'h',
679 /* 83: J */ 'j',
680 /* 84: K */ 'k',
681 /* 85: L */ 'l',
682 /* 86: ; */ ';',
683 /* 87: apostr. */ '\'',
684 /* 88: backslash */ '\\',
685 /* 89: Return */ '\r',
686 /* 90: KP_Enter */ KEYSYM_FUNC_N(11),
687 /* 91: R10/Left */ KEYSYM_FUNC_R(10),
688 /* 92: R11/KP_5 */ KEYSYM_FUNC_R(11),
689 /* 93: R12/Right */ KEYSYM_FUNC_R(12),
690 /* 94: KP_Insert */ KEYSYM_FUNC_N(8),
691 /* 95: L9/Find */ KEYSYM_FUNC_L(9),
692 /* 96: T5_PgUp */ KEYSYM_FUNC_R(9),
693 /* 97: L10/Cut */ KEYSYM_FUNC_L(10),
694 /* 98: Num_Lock */ KEYSYM_INVMOD | KBMOD_NUMLOCK,
695 /* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L,
696 /* 100: Z */ 'z',
697 /* 101: X */ 'x',
698 /* 102: C */ 'c',
699 /* 103: V */ 'v',
700 /* 104: B */ 'b',
701 /* 105: N */ 'n',
702 /* 106: M */ 'm',
703 /* 107: , */ ',',
704 /* 108: . */ '.',
705 /* 109: / */ '/',
706 /* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R,
707 /* 111: Linefeed */ '\n',
708 /* 112: R13/End */ KEYSYM_FUNC_R(13),
709 /* 113: R14/Down */ KEYSYM_FUNC_R(14),
710 /* 114: R15/PgDn */ KEYSYM_FUNC_R(15),
711 /* 115: */ KEYSYM_HOLE,
712 /* 116: */ KEYSYM_HOLE,
713 /* 117: */ KEYSYM_HOLE,
714 /* 118: L16/Help */ KEYSYM_FUNC_L(16),
715 /* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK,
716 /* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L,
717 /* 121: SpaceBar */ ' ',
718 /* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R,
719 /* 123: T5_PgDn */ KEYSYM_FUNC_R(15),
720 /* 124: */ KEYSYM_HOLE,
721 /* 125: KP_Add */ KEYSYM_FUNC_N(14),
722 /* 126: */ KEYSYM_HW_ERR,
723 /* 127: */ KEYSYM_ALL_UP,
724 };
725
726
727 u_short keymap_s4_uc[KEYMAP_SIZE] = {
729 /* 0: */ KEYSYM_HOLE,
730 /* 1: L1/Stop */ KEYSYM_FUNC_L(1),
731 /* 2: */ KEYSYM_HOLE,
732 /* 3: L2/Again */ KEYSYM_FUNC_L(2),
733 /* 4: */ KEYSYM_HOLE,
734 /* 5: F1 */ KEYSYM_FUNC_F(1),
735 /* 6: F2 */ KEYSYM_FUNC_F(2),
736 /* 7: F10 */ KEYSYM_FUNC_F(10),
737 /* 8: F3 */ KEYSYM_FUNC_F(3),
738 /* 9: F11 */ KEYSYM_FUNC_F(11),
739 /* 10: F4 */ KEYSYM_FUNC_F(4),
740 /* 11: F12 */ KEYSYM_FUNC_F(12),
741 /* 12: F5 */ KEYSYM_FUNC_F(5),
742 /* 13: AltGraph */ KEYSYM_SETMOD | KBMOD_ALTGRAPH,
743 /* 14: F6 */ KEYSYM_FUNC_F(6),
744 /* 15: */ KEYSYM_HOLE,
745 /* 16: F7 */ KEYSYM_FUNC_F(7),
746 /* 17: F8 */ KEYSYM_FUNC_F(8),
747 /* 18: F9 */ KEYSYM_FUNC_F(9),
748 /* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L,
749 /* 20: T5_Up */ KEYSYM_STRING | 1,
750 /* 21: R1/Pause */ KEYSYM_FUNC_R(1),
751 /* 22: R2/Print */ KEYSYM_FUNC_R(2),
752 /* 23: R3/Break */ KEYSYM_FUNC_R(3),
753 /* 24: T5_Left */ KEYSYM_STRING | 3,
754 /* 25: L3/Props */ KEYSYM_FUNC_L(3),
755 /* 26: L4/Undo */ KEYSYM_FUNC_L(4),
756 /* 27: T5_Down */ KEYSYM_STRING | 2,
757 /* 28: T5_Right */ KEYSYM_STRING | 4,
758 /* 29: Esc */ 0x1b,
759 /* 30: 1 */ '!',
760 /* 31: 2 */ '@',
761 /* 32: 3 */ '#',
762 /* 33: 4 */ '$',
763 /* 34: 5 */ '%',
764 /* 35: 6 */ '^',
765 /* 36: 7 */ '&',
766 /* 37: 8 */ '*',
767 /* 38: 9 */ '(',
768 /* 39: 0 */ ')',
769 /* 40: minus */ '_',
770 /* 41: equal */ '+',
771 /* 42: grave/tilde */ '~',
772 /* 43: BackSpace */ '\b',
773 /* 44: T5_Insert */ KEYSYM_FUNC_N(8),
774 /* 45: R4/KP_Equal */ KEYSYM_FUNC_R(4),
775 /* 46: R5/KP_Div */ KEYSYM_FUNC_R(5),
776 /* 47: R6/KP_Mult */ KEYSYM_FUNC_R(6),
777 /* 48: */ KEYSYM_FUNC_N(13),
778 /* 49: L5/Front */ KEYSYM_FUNC_L(5),
779 /* 50: KP_Delete */ KEYSYM_FUNC_N(10),
780 /* 51: L6/Copy */ KEYSYM_FUNC_L(6),
781 /* 52: T5_Home */ KEYSYM_FUNC_R(7),
782 /* 53: Tab */ '\t',
783 /* 54: Q */ 'Q',
784 /* 55: W */ 'W',
785 /* 56: E */ 'E',
786 /* 57: R */ 'R',
787 /* 58: T */ 'T',
788 /* 59: Y */ 'Y',
789 /* 60: U */ 'U',
790 /* 61: I */ 'I',
791 /* 62: O */ 'O',
792 /* 63: P */ 'P',
793 /* 64: [ */ '{',
794 /* 65: ] */ '}',
795 /* 66: Delete */ 0x7f,
796 /* 67: Compose */ KEYSYM_COMPOSE,
797 /* 68: R7/Home */ KEYSYM_FUNC_R(7),
798 /* 69: R8/Up */ KEYSYM_FUNC_R(8),
799 /* 70: R9/PgUp */ KEYSYM_FUNC_R(9),
800 /* 71: KP_Minus */ KEYSYM_FUNC_N(15),
801 /* 72: L7/Open */ KEYSYM_FUNC_L(7),
802 /* 73: L8/Paste */ KEYSYM_FUNC_L(8),
803 /* 74: T5_End */ KEYSYM_FUNC_R(13),
804 /* 75: */ KEYSYM_HOLE,
805 /* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L,
806 /* 77: A */ 'A',
807 /* 78: S */ 'S',
808 /* 79: D */ 'D',
809 /* 80: F */ 'F',
810 /* 81: G */ 'G',
811 /* 82: H */ 'H',
812 /* 83: J */ 'J',
813 /* 84: K */ 'K',
814 /* 85: L */ 'L',
815 /* 86: ; */ ':',
816 /* 87: apostr. */ '"',
817 /* 88: backslash */ '|',
818 /* 89: Return */ '\r',
819 /* 90: KP_Enter */ KEYSYM_FUNC_N(11),
820 /* 91: R10/Left */ KEYSYM_FUNC_R(10),
821 /* 92: R11/KP_5 */ KEYSYM_FUNC_R(11),
822 /* 93: R12/Right */ KEYSYM_FUNC_R(12),
823 /* 94: KP_Insert */ KEYSYM_FUNC_N(8),
824 /* 95: L9/Find */ KEYSYM_FUNC_L(9),
825 /* 96: T5_PgUp */ KEYSYM_FUNC_R(9),
826 /* 97: L10/Cut */ KEYSYM_FUNC_L(10),
827 /* 98: Num_Lock */ KEYSYM_INVMOD | KBMOD_NUMLOCK,
828 /* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L,
829 /* 100: Z */ 'Z',
830 /* 101: X */ 'X',
831 /* 102: C */ 'C',
832 /* 103: V */ 'V',
833 /* 104: B */ 'B',
834 /* 105: N */ 'N',
835 /* 106: M */ 'M',
836 /* 107: , */ '<',
837 /* 108: . */ '>',
838 /* 109: / */ '?',
839 /* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R,
840 /* 111: Linefeed */ '\n',
841 /* 112: R13/End */ KEYSYM_FUNC_R(13),
842 /* 113: R14/Down */ KEYSYM_FUNC_R(14),
843 /* 114: R15/PgDn */ KEYSYM_FUNC_R(15),
844 /* 115: */ KEYSYM_HOLE,
845 /* 116: */ KEYSYM_HOLE,
846 /* 117: */ KEYSYM_HOLE,
847 /* 118: L16/Help */ KEYSYM_FUNC_L(16),
848 /* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK,
849 /* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L,
850 /* 121: SpaceBar */ ' ',
851 /* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R,
852 /* 123: T5_PgDn */ KEYSYM_FUNC_R(15),
853 /* 124: */ KEYSYM_HOLE,
854 /* 125: KP_Add */ KEYSYM_FUNC_N(14),
855 /* 126: */ KEYSYM_HW_ERR,
856 /* 127: */ KEYSYM_ALL_UP,
857 };
858
859
860
862 /*
863 * Strings indexed by: (KEYSYM_STRING | idx)
864 */
865 char kbd_stringtab[16][10] = {
866 { 0x1b, '[', 'H', 0 }, /* 0: Home */
867 { 0x1b, '[', 'A', 0 }, /* 1: Up */
868 { 0x1b, '[', 'B', 0 }, /* 2: Down */
869 { 0x1b, '[', 'D', 0 }, /* 3: Left */
870 { 0x1b, '[', 'C', 0 }, /* 4: Right */
871 };
872
873 /*
874 * The "NumLock" map, which is used to remap
875 * function keysyms when NumLock is on.
876 */
877 unsigned short kbd_numlock_map[64] = {
878 /* KEYSYM_FUNC_L: Identity map */
879 0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607,
880 0x608, 0x609, 0x60a, 0x60b, 0x60c, 0x60d, 0x60e, 0x60f,
881
882 /* KEYSYM_FUNC_R: remap to numbers... */
883 0x610, 0x611, 0x612,
884 '=', '/', '*',
885 '7', '8', '9',
886 '4', '5', '6',
887 '1', '2', '3',
888 0x61f,
889
890 /* KEYSYM_FUNC_F: Identity map */
891 0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627,
892 0x628, 0x629, 0x62a, 0x62b, 0x62c, 0x62d, 0x62e, 0x62f,
893
894 /* KEYSYM_FUNC_N: remap just a few... */
895 0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, '0',
896 0x638, '.', '\r', 0x63b, 0x63c, '+', '-', 0x63f,
897 };
898
899
900 /*
901 * Keyboard descriptions for each type.
902 */
903
904 /* Treat type 2 as type 3 (close enough) */
905 #define kbd_type2 kbd_type3
906
907 static struct keyboard kbd_type3 = {
908 keymap_release,
909 keymap_control,
910 keymap_s3_lc,
911 keymap_s3_uc,
912 };
913
914 static struct keyboard kbd_type4 = {
915 keymap_release,
916 keymap_control,
917 keymap_s4_lc,
918 keymap_s4_uc,
919 };
920
921 /* Treat type 5 as type 4 (close enough) */
922 #define kbd_type5 kbd_type4
923
924 struct keyboard * keyboards[] = {
925 0, /* type 0 */
926 0, /* type 1 */
927 &kbd_type2,
928 &kbd_type3,
929 &kbd_type4,
930 &kbd_type5,
931 };
932 int kbd_max_type = 5;
933