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