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