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