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