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