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