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