Merge commit '37e84ab74e939caf52150fc3352081786ecc0c29' into merges
[unleashed.git] / usr / src / uts / common / io / keytables.c
blobd3a830a09394a3867f00a5884700b111e42c28b2
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #pragma ident "%Z%%M% %I% %E% SMI"
27 /* SunOS-4.0 1.19 */
30 * This module contains the translation tables for the up-down encoded
31 * Sun keyboards.
34 #include <sys/param.h>
35 #include <sys/kbd.h>
37 /* handy way to define control characters in the tables */
38 #define c(c_char) (c_char&0x1F)
39 #define ESC 0x1B
40 #define DEL 0x7F
43 /* Unshifted keyboard table for Type 3 keyboard */
45 static struct keymap keytab_s3_lc = {
46 /* BEGIN CSTYLED */
47 /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
48 HOLE, LF(2), HOLE, TF(1), TF(2), HOLE,
49 /* 8 */ TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE,
50 /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
51 HOLE, RF(1), RF(2), RF(3),
52 /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', '2',
53 /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0',
54 /* 40 */ '-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6),
55 /* 48 */ HOLE, LF(5), HOLE, LF(6), HOLE, '\t', 'q', 'w',
56 /* 56 */ 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p',
57 /* 64 */ '[', ']', DEL, HOLE, RF(7), STRING+UPARROW,
58 RF(9), HOLE,
59 /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
60 'a', 's', 'd',
61 /* 80 */ 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'',
62 /* 88 */ '\\', '\r', HOLE, STRING+LEFTARROW,
63 RF(11), STRING+RIGHTARROW,
64 HOLE, LF(9),
65 /* 96 */ HOLE, LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
66 'z', 'x', 'c', 'v',
67 /*104 */ 'b', 'n', 'm', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
68 '\n',
69 /*112 */ RF(13), STRING+DOWNARROW,
70 RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK,
71 /*120 */ BUCKYBITS+METABIT,
72 ' ', BUCKYBITS+METABIT,
73 HOLE, HOLE, HOLE, ERROR, IDLE,
74 /* END CSTYLED */
77 /* Shifted keyboard table for Type 3 keyboard */
79 static struct keymap keytab_s3_uc = {
80 /* BEGIN CSTYLED */
81 /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
82 HOLE, LF(2), HOLE, TF(1), TF(2), HOLE,
83 /* 8 */ TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE,
84 /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
85 HOLE, RF(1), RF(2), RF(3),
86 /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '!', '@',
87 /* 32 */ '#', '$', '%', '^', '&', '*', '(', ')',
88 /* 40 */ '_', '+', '~', '\b', HOLE, RF(4), RF(5), RF(6),
89 /* 48 */ HOLE, LF(5), HOLE, LF(6), HOLE, '\t', 'Q', 'W',
90 /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
91 /* 64 */ '{', '}', DEL, HOLE, RF(7), STRING+UPARROW,
92 RF(9), HOLE,
93 /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
94 'A', 'S', 'D',
95 /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ':', '"',
96 /* 88 */ '|', '\r', HOLE, STRING+LEFTARROW,
97 RF(11), STRING+RIGHTARROW,
98 HOLE, LF(9),
99 /* 96 */ HOLE, LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
100 'Z', 'X', 'C', 'V',
101 /*104 */ 'B', 'N', 'M', '<', '>', '?', SHIFTKEYS+RIGHTSHIFT,
102 '\n',
103 /*112 */ RF(13), STRING+DOWNARROW,
104 RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK,
105 /*120 */ BUCKYBITS+METABIT,
106 ' ', BUCKYBITS+METABIT,
107 HOLE, HOLE, HOLE, ERROR, IDLE,
108 /* END CSTYLED */
111 /* Caps Locked keyboard table for Type 3 keyboard */
113 static struct keymap keytab_s3_cl = {
114 /* BEGIN CSTYLED */
115 /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
116 HOLE, LF(2), HOLE, TF(1), TF(2), HOLE,
117 /* 8 */ TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE,
118 /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
119 HOLE, RF(1), RF(2), RF(3),
120 /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', '2',
121 /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0',
122 /* 40 */ '-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6),
123 /* 48 */ HOLE, LF(5), HOLE, LF(6), HOLE, '\t', 'Q', 'W',
124 /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
125 /* 64 */ '[', ']', DEL, HOLE, RF(7), STRING+UPARROW,
126 RF(9), HOLE,
127 /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
128 'A', 'S', 'D',
129 /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ';', '\'',
130 /* 88 */ '\\', '\r', HOLE, STRING+LEFTARROW,
131 RF(11), STRING+RIGHTARROW,
132 HOLE, LF(9),
133 /* 96 */ HOLE, LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
134 'Z', 'X', 'C', 'V',
135 /*104 */ 'B', 'N', 'M', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
136 '\n',
137 /*112 */ RF(13), STRING+DOWNARROW,
138 RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK,
139 /*120 */ BUCKYBITS+METABIT,
140 ' ', BUCKYBITS+METABIT,
141 HOLE, HOLE, HOLE, ERROR, IDLE,
142 /* END CSTYLED */
145 /* Controlled keyboard table for Type 3 keyboard */
147 static struct keymap keytab_s3_ct = {
148 /* BEGIN CSTYLED */
149 /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
150 HOLE, LF(2), HOLE, TF(1), TF(2), HOLE,
151 /* 8 */ TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE,
152 /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
153 HOLE, RF(1), RF(2), RF(3),
154 /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', c('@'),
155 /* 32 */ '3', '4', '5', c('^'), '7', '8', '9', '0',
156 /* 40 */ c('_'), '=', c('^'), '\b', HOLE, RF(4), RF(5), RF(6),
157 /* 48 */ HOLE, LF(5), HOLE, LF(6), HOLE, '\t', c('q'), c('w'),
158 /* 56 */ c('e'), c('r'), c('t'), c('y'), c('u'), c('i'), c('o'), c('p'),
159 /* 64 */ c('['), c(']'), DEL, HOLE, RF(7), STRING+UPARROW,
160 RF(9), HOLE,
161 /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
162 c('a'), c('s'), c('d'),
163 /* 80 */ c('f'), c('g'), c('h'), c('j'), c('k'), c('l'), ';', '\'',
164 /* 88 */ c('\\'),
165 '\r', HOLE, STRING+LEFTARROW,
166 RF(11), STRING+RIGHTARROW,
167 HOLE, LF(9),
168 /* 96 */ HOLE, LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
169 c('z'), c('x'), c('c'), c('v'),
170 /*104 */ c('b'), c('n'), c('m'), ',', '.', c('_'), SHIFTKEYS+RIGHTSHIFT,
171 '\n',
172 /*112 */ RF(13), STRING+DOWNARROW,
173 RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK,
174 /*120 */ BUCKYBITS+METABIT,
175 c(' '), BUCKYBITS+METABIT,
176 HOLE, HOLE, HOLE, ERROR, IDLE,
177 /* END CSTYLED */
180 /* "Key Up" keyboard table for Type 3 keyboard */
182 static struct keymap keytab_s3_up = {
183 /* BEGIN CSTYLED */
184 /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
185 HOLE, NOP, HOLE, NOP, NOP, HOLE,
186 /* 8 */ NOP, HOLE, NOP, HOLE, NOP, HOLE, NOP, HOLE,
187 /* 16 */ NOP, NOP, NOP, SHIFTKEYS+ALT,
188 HOLE, NOP, NOP, NOP,
189 /* 24 */ HOLE, NOP, NOP, HOLE, HOLE, NOP, NOP, NOP,
190 /* 32 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
191 /* 40 */ NOP, NOP, NOP, NOP, HOLE, NOP, NOP, NOP,
192 /* 48 */ HOLE, NOP, HOLE, NOP, HOLE, NOP, NOP, NOP,
193 /* 56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
194 /* 64 */ NOP, NOP, NOP, HOLE, NOP, NOP, NOP, HOLE,
195 /* 72 */ NOP, NOP, HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
196 NOP, NOP, NOP,
197 /* 80 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
198 /* 88 */ NOP, NOP, HOLE, NOP, NOP, NOP, HOLE, NOP,
199 /* 96 */ HOLE, NOP, HOLE, SHIFTKEYS+LEFTSHIFT,
200 NOP, NOP, NOP, NOP,
201 /*104 */ NOP, NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+RIGHTSHIFT,
202 NOP,
203 /*112 */ NOP, NOP, NOP, HOLE, HOLE, HOLE, HOLE, NOP,
204 /*120 */ BUCKYBITS+METABIT,
205 NOP, BUCKYBITS+METABIT,
206 HOLE, HOLE, HOLE, HOLE, RESET,
207 /* END CSTYLED */
210 /* Index to keymaps for Type 3 keyboard */
211 static struct keyboard keyindex_s3 = {
212 &keytab_s3_lc,
213 &keytab_s3_uc,
214 &keytab_s3_cl,
215 0, /* no Alt Graph key, no Alt Graph table */
216 0, /* no Num Lock key, no Num Lock table */
217 &keytab_s3_ct,
218 &keytab_s3_up,
219 0x0000, /* Shift bits which stay on with idle keyboard */
220 0x0000, /* Bucky bits which stay on with idle keyboard */
221 1, 0, 77, /* abort keys */
222 CAPSMASK, /* Shift bits which toggle on down event */
223 NULL,
224 99, 110, 21, /* New abort keys */
228 /* Unshifted keyboard table for Type 4 keyboard */
230 static struct keymap keytab_s4_lc = {
231 /* BEGIN CSTYLED */
232 /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
233 HOLE, LF(2), HOLE, TF(1), TF(2), TF(10),
234 /* 8 */ TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH,
235 TF(6), HOLE,
236 /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
237 HOLE, RF(1), RF(2), RF(3),
238 /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', '2',
239 /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0',
240 /* 40 */ '-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6),
241 /* 48 */ BF(13), LF(5), BF(10), LF(6), HOLE, '\t', 'q', 'w',
242 /* 56 */ 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p',
243 /* 64 */ '[', ']', DEL, COMPOSE,
244 RF(7), STRING+UPARROW,
245 RF(9), BF(15),
246 /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
247 'a', 's', 'd',
248 /* 80 */ 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'',
249 /* 88 */ '\\', '\r', BF(11), STRING+LEFTARROW,
250 RF(11), STRING+RIGHTARROW,
251 BF(8), LF(9),
252 /* 96 */ HOLE, LF(10), SHIFTKEYS+NUMLOCK,
253 SHIFTKEYS+LEFTSHIFT,
254 'z', 'x', 'c', 'v',
255 /*104 */ 'b', 'n', 'm', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
256 '\n',
257 /*112 */ RF(13), STRING+DOWNARROW,
258 RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK,
259 /*120 */ BUCKYBITS+METABIT,
260 ' ', BUCKYBITS+METABIT,
261 HOLE, HOLE, BF(14), ERROR, IDLE,
262 /* END CSTYLED */
265 /* Shifted keyboard table for Type 4 keyboard */
267 static struct keymap keytab_s4_uc = {
268 /* BEGIN CSTYLED */
269 /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
270 HOLE, LF(2), HOLE, TF(1), TF(2), TF(10),
271 /* 8 */ TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH,
272 TF(6), HOLE,
273 /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
274 HOLE, RF(1), RF(2), RF(3),
275 /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '!', '@',
276 /* 32 */ '#', '$', '%', '^', '&', '*', '(', ')',
277 /* 40 */ '_', '+', '~', '\b', HOLE, RF(4), RF(5), RF(6),
278 /* 48 */ BF(13), LF(5), BF(10), LF(6), HOLE, '\t', 'Q', 'W',
279 /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
280 /* 64 */ '{', '}', DEL, COMPOSE,
281 RF(7), STRING+UPARROW,
282 RF(9), BF(15),
283 /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
284 'A', 'S', 'D',
285 /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ':', '"',
286 /* 88 */ '|', '\r', BF(11), STRING+LEFTARROW,
287 RF(11), STRING+RIGHTARROW,
288 BF(8), LF(9),
289 /* 96 */ HOLE, LF(10), SHIFTKEYS+NUMLOCK,
290 SHIFTKEYS+LEFTSHIFT,
291 'Z', 'X', 'C', 'V',
292 /*104 */ 'B', 'N', 'M', '<', '>', '?', SHIFTKEYS+RIGHTSHIFT,
293 '\n',
294 /*112 */ RF(13), STRING+DOWNARROW,
295 RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK,
296 /*120 */ BUCKYBITS+METABIT,
297 ' ', BUCKYBITS+METABIT,
298 HOLE, HOLE, BF(14), ERROR, IDLE,
299 /* END CSTYLED */
302 /* Caps Locked keyboard table for Type 4 keyboard */
304 static struct keymap keytab_s4_cl = {
305 /* BEGIN CSTYLED */
306 /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
307 HOLE, LF(2), HOLE, TF(1), TF(2), TF(10),
308 /* 8 */ TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH,
309 TF(6), HOLE,
310 /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
311 HOLE, RF(1), RF(2), RF(3),
312 /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', '2',
313 /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0',
314 /* 40 */ '-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6),
315 /* 48 */ BF(13), LF(5), BF(10), LF(6), HOLE, '\t', 'Q', 'W',
316 /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
317 /* 64 */ '[', ']', DEL, COMPOSE,
318 RF(7), STRING+UPARROW,
319 RF(9), BF(15),
320 /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
321 'A', 'S', 'D',
322 /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ';', '\'',
323 /* 88 */ '\\', '\r', BF(11), STRING+LEFTARROW,
324 RF(11), STRING+RIGHTARROW,
325 BF(8), LF(9),
326 /* 96 */ HOLE, LF(10), SHIFTKEYS+NUMLOCK,
327 SHIFTKEYS+LEFTSHIFT,
328 'Z', 'X', 'C', 'V',
329 /*104 */ 'B', 'N', 'M', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
330 '\n',
331 /*112 */ RF(13), STRING+DOWNARROW,
332 RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK,
333 /*120 */ BUCKYBITS+METABIT,
334 ' ', BUCKYBITS+METABIT,
335 HOLE, HOLE, BF(14), ERROR, IDLE,
336 /* END CSTYLED */
339 /* Alt Graph keyboard table for Type 4 keyboard */
341 static struct keymap keytab_s4_ag = {
342 /* BEGIN CSTYLED */
343 /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
344 HOLE, LF(2), HOLE, TF(1), TF(2), TF(10),
345 /* 8 */ TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH,
346 TF(6), HOLE,
347 /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
348 HOLE, RF(1), RF(2), RF(3),
349 /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, NOP, NOP,
350 /* 32 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
351 /* 40 */ NOP, NOP, NOP, '\b', HOLE, RF(4), RF(5), RF(6),
352 /* 48 */ BF(13), LF(5), BF(10), LF(6), HOLE, '\t', NOP, NOP,
353 /* 56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
354 /* 64 */ NOP, NOP, DEL, COMPOSE,
355 RF(7), STRING+UPARROW,
356 RF(9), BF(15),
357 /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
358 NOP, NOP, NOP,
359 /* 80 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
360 /* 88 */ NOP, '\r', BF(11), STRING+LEFTARROW,
361 RF(11), STRING+RIGHTARROW,
362 BF(8), LF(9),
363 /* 96 */ HOLE, LF(10), SHIFTKEYS+NUMLOCK,
364 SHIFTKEYS+LEFTSHIFT,
365 NOP, NOP, NOP, NOP,
366 /*104 */ NOP, NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+RIGHTSHIFT,
367 '\n',
368 /*112 */ RF(13), STRING+DOWNARROW,
369 RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK,
370 /*120 */ BUCKYBITS+METABIT,
371 ' ', BUCKYBITS+METABIT,
372 HOLE, HOLE, BF(14), ERROR, IDLE,
373 /* END CSTYLED */
376 /* Num Locked keyboard table for Type 4 keyboard */
378 static struct keymap keytab_s4_nl = {
379 /* BEGIN CSTYLED */
380 /* 0 */ HOLE, NONL, HOLE, NONL, HOLE, NONL, NONL, NONL,
381 /* 8 */ NONL, NONL, NONL, NONL, NONL, NONL, NONL, HOLE,
382 /* 16 */ NONL, NONL, NONL, NONL, HOLE, NONL, NONL, NONL,
383 /* 24 */ HOLE, NONL, NONL, HOLE, HOLE, NONL, NONL, NONL,
384 /* 32 */ NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
385 /* 40 */ NONL, NONL, NONL, NONL, HOLE, PADEQUAL,
386 PADSLASH,
387 PADSTAR,
388 /* 48 */ NONL, NONL, PADDOT, NONL, HOLE, NONL, NONL, NONL,
389 /* 56 */ NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
390 /* 64 */ NONL, NONL, NONL, NONL,
391 PAD7, PAD8, PAD9, PADMINUS,
392 /* 72 */ NONL, NONL, HOLE, HOLE, NONL, NONL, NONL, NONL,
393 /* 80 */ NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
394 /* 88 */ NONL, NONL, PADENTER,
395 PAD4, PAD5, PAD6, PAD0, NONL,
396 /* 96 */ HOLE, NONL, NONL, NONL, NONL, NONL, NONL, NONL,
397 /*104 */ NONL, NONL, NONL, NONL, NONL, NONL, NONL,
398 NONL,
399 /*112 */ PAD1, PAD2, PAD3, HOLE, HOLE, HOLE, NONL, NONL,
400 /*120 */ NONL, NONL, NONL, HOLE, HOLE, PADPLUS,
401 ERROR, IDLE,
402 /* END CSTYLED */
405 /* Controlled keyboard table for Type 4 keyboard */
407 static struct keymap keytab_s4_ct = {
408 /* BEGIN CSTYLED */
409 /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
410 HOLE, LF(2), HOLE, TF(1), TF(2), TF(10),
411 /* 8 */ TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH,
412 TF(6), HOLE,
413 /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT,
414 HOLE, RF(1), RF(2), RF(3),
415 /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', c('@'),
416 /* 32 */ '3', '4', '5', c('^'), '7', '8', '9', '0',
417 /* 40 */ c('_'), '=', c('^'), '\b', HOLE, RF(4), RF(5), RF(6),
418 /* 48 */ BF(13), LF(5), BF(10), LF(6), HOLE, '\t', c('q'), c('w'),
419 /* 56 */ c('e'), c('r'), c('t'), c('y'), c('u'), c('i'), c('o'), c('p'),
420 /* 64 */ c('['), c(']'), DEL, COMPOSE,
421 RF(7), STRING+UPARROW,
422 RF(9), BF(15),
423 /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
424 c('a'), c('s'), c('d'),
425 /* 80 */ c('f'), c('g'), c('h'), c('j'), c('k'), c('l'), ';', '\'',
426 /* 88 */ c('\\'),
427 '\r', BF(11), STRING+LEFTARROW,
428 RF(11), STRING+RIGHTARROW,
429 BF(8), LF(9),
430 /* 96 */ HOLE, LF(10), SHIFTKEYS+NUMLOCK,
431 SHIFTKEYS+LEFTSHIFT,
432 c('z'), c('x'), c('c'), c('v'),
433 /*104 */ c('b'), c('n'), c('m'), ',', '.', c('_'), SHIFTKEYS+RIGHTSHIFT,
434 '\n',
435 /*112 */ RF(13), STRING+DOWNARROW,
436 RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK,
437 /*120 */ BUCKYBITS+METABIT,
438 c(' '), BUCKYBITS+METABIT,
439 HOLE, HOLE, BF(14), ERROR, IDLE,
440 /* END CSTYLED */
443 /* "Key Up" keyboard table for Type 4 keyboard */
445 static struct keymap keytab_s4_up = {
446 /* BEGIN CSTYLED */
447 /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
448 HOLE, NOP, HOLE, NOP, NOP, NOP,
449 /* 8 */ NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+ALTGRAPH,
450 NOP, HOLE,
451 /* 16 */ NOP, NOP, NOP, SHIFTKEYS+ALT,
452 HOLE, NOP, NOP, NOP,
453 /* 24 */ HOLE, NOP, NOP, HOLE, HOLE, NOP, NOP, NOP,
454 /* 32 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
455 /* 40 */ NOP, NOP, NOP, NOP, HOLE, NOP, NOP, NOP,
456 /* 48 */ NOP, NOP, NOP, NOP, HOLE, NOP, NOP, NOP,
457 /* 56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
458 /* 64 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
459 /* 72 */ NOP, NOP, HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
460 NOP, NOP, NOP,
461 /* 80 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
462 /* 88 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
463 /* 96 */ HOLE, NOP, NOP,
464 SHIFTKEYS+LEFTSHIFT,
465 NOP, NOP, NOP, NOP,
466 /*104 */ NOP, NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+RIGHTSHIFT,
467 NOP,
468 /*112 */ NOP, NOP, NOP, HOLE, HOLE, HOLE, NOP, NOP,
469 /*120 */ BUCKYBITS+METABIT,
470 NOP, BUCKYBITS+METABIT,
471 HOLE, HOLE, NOP, HOLE, RESET,
472 /* END CSTYLED */
475 /* Index to keymaps for Type 4 keyboard */
476 static struct keyboard keyindex_s4 = {
477 &keytab_s4_lc,
478 &keytab_s4_uc,
479 &keytab_s4_cl,
480 &keytab_s4_ag,
481 &keytab_s4_nl,
482 &keytab_s4_ct,
483 &keytab_s4_up,
484 0x0000, /* Shift bits which stay on with idle keyboard */
485 0x0000, /* Bucky bits which stay on with idle keyboard */
486 1, 0, 77, /* abort keys */
487 CAPSMASK|NUMLOCKMASK, /* Shift bits which toggle on down event */
488 NULL,
489 99, 110, 21, /* New abort keys */
494 * Index table for the whole shebang
495 * The first entry is used as the default if the id isn't recognized.
497 struct keyboards keytables[] = {
498 KB_SUN3, &keyindex_s3,
499 KB_SUN4, &keyindex_s4,
500 0, NULL,
504 * Keyboard String Table
506 * This defines the strings sent by various keys (as selected in the
507 * tables above).
508 * The first byte of each string is its length, the rest is data.
511 #ifdef __STDC__
513 * XXX This is here to silence compiler warnings. The non-ansi-c form
514 * is retained if somebody can figure out how to replicate it in
515 * ansi-c.
517 char keystringtab[16][KTAB_STRLEN] = {
518 { '\033', '[', 'H', '\0' }, /* home */
519 { '\033', '[', 'A', '\0' }, /* up */
520 { '\033', '[', 'B', '\0' }, /* down */
521 { '\033', '[', 'D', '\0' }, /* left */
522 { '\033', '[', 'C', '\0' }, /* right */
524 #else /* __STDC__ */
525 #define kstescinit(c) {'\033', '[', 'c', '\0'}
526 char keystringtab[16][KTAB_STRLEN] = {
527 kstescinit(H) /* home */,
528 kstescinit(A) /* up */,
529 kstescinit(B) /* down */,
530 kstescinit(D) /* left */,
531 kstescinit(C) /* right */,
533 #endif /* __STDC__ */
537 * Compose Key Sequence Table
539 * Taken from Suncompose.h of openwindows.
541 * The idea here is to create a simple index into a table of
542 * compose key sequences. The purpose is to provide a fast
543 * lookup mechanism using as little space as possible (while
544 * still using a table of triplets).
546 * For reference, here is the set of all composable characters:
547 * SP !\"\'*+,-./01234:<>?ACDEHILNOPRSTUXY\\^_`acdehilnoprstuxy|~
549 * if ascii_char[i] is not composable,
550 * kb_compose_map[i] is -1
551 * else
552 * if ascii_char[i] appears as a first char in compose_table,
553 * kb_compose_map[i] is the index of it's first appearance
554 * else
555 * kb_compose_map[i] is 112 (end of table)
558 signed char kb_compose_map[ASCII_SET_SIZE] = {
559 /* BEGIN CSTYLED */
560 -1, /* 000 (^@) */
561 -1, /* 001 (^A) */
562 -1, /* 002 (^B) */
563 -1, /* 003 (^C) */
564 -1, /* 004 (^D) */
565 -1, /* 005 (^E) */
566 -1, /* 006 (^F) */
567 -1, /* 007 (^G) */
568 -1, /* 008 (^H) */
569 -1, /* 009 (^I) */
570 -1, /* 010 (^J) */
571 -1, /* 011 (^K) */
572 -1, /* 012 (^L) */
573 -1, /* 013 (^M) */
574 -1, /* 014 (^N) */
575 -1, /* 015 (^O) */
576 -1, /* 016 (^P) */
577 -1, /* 017 (^Q) */
578 -1, /* 018 (^R) */
579 -1, /* 019 (^S) */
580 -1, /* 020 (^T) */
581 -1, /* 021 (^U) */
582 -1, /* 022 (^V) */
583 -1, /* 023 (^W) */
584 -1, /* 024 (^X) */
585 -1, /* 025 (^Y) */
586 -1, /* 026 (^Z) */
587 -1, /* 027 (^[) */
588 -1, /* 028 (^\) */
589 -1, /* 029 (^]) */
590 -1, /* 030 (^^) */
591 -1, /* 031 (^_) */
592 0, /* 032 (SP) */
593 1, /* 033 (!) */
594 4, /* 034 (") */
595 -1, /* 035 (#) */
596 -1, /* 036 ($) */
597 -1, /* 037 (%) */
598 -1, /* 038 (&) */
599 16, /* 039 (') */
600 -1, /* 040 (() */
601 -1, /* 041 ()) */
602 28, /* 042 (*) */
603 31, /* 043 (+) */
604 32, /* 044 (,) */
605 36, /* 045 (-) */
606 48, /* 046 (.) */
607 49, /* 047 (/) */
608 54, /* 048 (0) */
609 57, /* 049 (1) */
610 60, /* 050 (2) */
611 61, /* 051 (3) */
612 112, /* 052 (4) */
613 -1, /* 053 (5) */
614 -1, /* 054 (6) */
615 -1, /* 055 (7) */
616 -1, /* 056 (8) */
617 -1, /* 057 (9) */
618 112, /* 058 (:) */
619 -1, /* 059 (;) */
620 63, /* 060 (<) */
621 -1, /* 061 (=) */
622 64, /* 062 (>) */
623 65, /* 063 (?) */
624 -1, /* 064 (@) */
625 66, /* 065 (A) */
626 -1, /* 066 (B) */
627 70, /* 067 (C) */
628 112, /* 068 (D) */
629 71, /* 069 (E) */
630 -1, /* 070 (F) */
631 -1, /* 071 (G) */
632 73, /* 072 (H) */
633 74, /* 073 (I) */
634 -1, /* 074 (J) */
635 -1, /* 075 (K) */
636 112, /* 076 (L) */
637 -1, /* 077 (M) */
638 76, /* 078 (N) */
639 77, /* 079 (O) */
640 84, /* 080 (P) */
641 -1, /* 081 (Q) */
642 112, /* 082 (R) */
643 112, /* 083 (S) */
644 112, /* 084 (T) */
645 85, /* 085 (U) */
646 -1, /* 086 (V) */
647 -1, /* 087 (W) */
648 112, /* 088 (X) */
649 112, /* 089 (Y) */
650 -1, /* 090 (Z) */
651 -1, /* 091 ([) */
652 87, /* 092 (\) */
653 -1, /* 093 (]) */
654 88, /* 094 (^) */
655 93, /* 095 (_) */
656 94, /* 096 (`) */
657 99, /* 097 (a) */
658 -1, /* 098 (b) */
659 101, /* 099 (c) */
660 112, /* 100 (d) */
661 112, /* 101 (e) */
662 -1, /* 102 (f) */
663 -1, /* 103 (g) */
664 102, /* 104 (h) */
665 112, /* 105 (i) */
666 -1, /* 106 (j) */
667 -1, /* 107 (k) */
668 112, /* 108 (l) */
669 -1, /* 109 (m) */
670 103, /* 110 (n) */
671 104, /* 111 (o) */
672 108, /* 112 (p) */
673 -1, /* 113 (q) */
674 112, /* 114 (r) */
675 109, /* 115 (s) */
676 112, /* 116 (t) */
677 112, /* 117 (u) */
678 -1, /* 118 (v) */
679 -1, /* 119 (w) */
680 110, /* 120 (x) */
681 112, /* 121 (y) */
682 -1, /* 122 (z) */
683 -1, /* 123 ({) */
684 111, /* 124 (|) */
685 -1, /* 125 (}) */
686 112, /* 126 (~) */
687 -1, /* 127 (DEL) */
688 /* END CSTYLED */
692 * IMPORTANT NOTE: This table MUST be kept in proper sorted order:
693 * The first and second characters in each entry must be in ASCII
694 * collating sequence (left to right).
695 * The table must be in ASCII collating sequence by first character
696 * (top to bottom).
699 /* COMPOSE + first character + second character => ISO character */
701 struct compose_sequence_t kb_compose_table[] = {
703 /* BEGIN CSTYLED */
704 {' ', ' ', 0xA0}, /* 000 */ /* NBSP (non-breaking space) */
705 {'!', '!', 0xA1}, /* 001 */ /* inverted ! */
706 {'!', 'P', 0xB6}, /* 002 */ /* paragraph mark */
707 {'!', 'p', 0xB6}, /* 003 */ /* paragraph mark */
708 {'"', '"', 0xA8}, /* 004 */ /* diaresis */
709 {'"', 'A', 0xC4}, /* 005 */ /* A with diaresis */
710 {'"', 'E', 0xCB}, /* 006 */ /* E with diaresis */
711 {'"', 'I', 0xCF}, /* 007 */ /* I with diaresis */
712 {'"', 'O', 0xD6}, /* 008 */ /* O with diaresis */
713 {'"', 'U', 0xDC}, /* 009 */ /* U with diaresis */
714 {'"', 'a', 0xE4}, /* 010 */ /* a with diaresis */
715 {'"', 'e', 0xEB}, /* 011 */ /* e with diaresis */
716 {'"', 'i', 0xEF}, /* 012 */ /* i with diaresis */
717 {'"', 'o', 0xF6}, /* 013 */ /* o with diaresis */
718 {'"', 'u', 0xFC}, /* 014 */ /* u with diaresis */
719 {'"', 'y', 0xFF}, /* 015 */ /* y with diaresis */
720 {'\'','A', 0xC1}, /* 016 */ /* A with acute accent */
721 {'\'','E', 0xC9}, /* 017 */ /* E with acute accent */
722 {'\'','I', 0xCD}, /* 018 */ /* I with acute accent */
723 {'\'','O', 0xD3}, /* 019 */ /* O with acute accent */
724 {'\'','U', 0xDA}, /* 020 */ /* U with acute accent */
725 {'\'','Y', 0xDD}, /* 021 */ /* Y with acute accent */
726 {'\'','a', 0xE1}, /* 022 */ /* a with acute accent */
727 {'\'','e', 0xE9}, /* 023 */ /* e with acute accent */
728 {'\'','i', 0xED}, /* 024 */ /* i with acute accent */
729 {'\'','o', 0xF3}, /* 025 */ /* o with acute accent */
730 {'\'','u', 0xFA}, /* 026 */ /* u with acute accent */
731 {'\'','y', 0xFD}, /* 027 */ /* y with acute accent */
732 {'*', 'A', 0xC5}, /* 028 */ /* A with ring */
733 {'*', '^', 0xB0}, /* 029 */ /* degree */
734 {'*', 'a', 0xE5}, /* 030 */ /* a with ring */
735 {'+', '-', 0xB1}, /* 031 */ /* plus/minus */
736 {',', ',', 0xB8}, /* 032 */ /* cedilla */
737 {',', '-', 0xAC}, /* 033 */ /* not sign */
738 {',', 'C', 0xC7}, /* 034 */ /* C with cedilla */
739 {',', 'c', 0xE7}, /* 035 */ /* c with cedilla */
740 {'-', '-', 0xAD}, /* 036 */ /* soft hyphen */
741 {'-', ':', 0xF7}, /* 037 */ /* division sign */
742 {'-', 'A', 0xAA}, /* 038 */ /* feminine superior numeral */
743 {'-', 'D', 0xD0}, /* 039 */ /* Upper-case eth */
744 {'-', 'L', 0xA3}, /* 040 */ /* pounds sterling */
745 {'-', 'Y', 0xA5}, /* 041 */ /* yen */
746 {'-', '^', 0xAF}, /* 042 */ /* macron */
747 {'-', 'a', 0xAA}, /* 043 */ /* feminine superior numeral */
748 {'-', 'd', 0xF0}, /* 044 */ /* Lower-case eth */
749 {'-', 'l', 0xA3}, /* 045 */ /* pounds sterling */
750 {'-', 'y', 0xA5}, /* 046 */ /* yen */
751 {'-', '|', 0xAC}, /* 047 */ /* not sign */
752 {'.', '^', 0xB7}, /* 048 */ /* centered dot */
753 {'/', 'C', 0xA2}, /* 049 */ /* cent sign */
754 {'/', 'O', 0xD8}, /* 050 */ /* O with slash */
755 {'/', 'c', 0xA2}, /* 051 */ /* cent sign */
756 {'/', 'o', 0xF8}, /* 052 */ /* o with slash */
757 {'/', 'u', 0xB5}, /* 053 */ /* mu */
758 {'0', 'X', 0xA4}, /* 054 */ /* currency symbol */
759 {'0', '^', 0xB0}, /* 055 */ /* degree */
760 {'0', 'x', 0xA4}, /* 056 */ /* currency symbol */
761 {'1', '2', 0xBD}, /* 057 */ /* 1/2 */
762 {'1', '4', 0xBC}, /* 058 */ /* 1/4 */
763 {'1', '^', 0xB9}, /* 059 */ /* superior '1' */
764 {'2', '^', 0xB2}, /* 060 */ /* superior '2' */
765 {'3', '4', 0xBE}, /* 061 */ /* 3/4 */
766 {'3', '^', 0xB3}, /* 062 */ /* superior '3' */
767 {'<', '<', 0xAB}, /* 063 */ /* left guillemot */
768 {'>', '>', 0xBB}, /* 064 */ /* right guillemot */
769 {'?', '?', 0xBF}, /* 065 */ /* inverted ? */
770 {'A', 'E', 0xC6}, /* 066 */ /* AE dipthong */
771 {'A', '^', 0xC2}, /* 067 */ /* A with circumflex accent */
772 {'A', '`', 0xC0}, /* 068 */ /* A with grave accent */
773 {'A', '~', 0xC3}, /* 069 */ /* A with tilde */
774 {'C', 'O', 0xA9}, /* 060 */ /* copyright */
775 {'E', '^', 0xCA}, /* 071 */ /* E with circumflex accent */
776 {'E', '`', 0xC8}, /* 072 */ /* E with grave accent */
777 {'H', 'T', 0xDE}, /* 073 */ /* Upper-case thorn */
778 {'I', '^', 0xCE}, /* 074 */ /* I with circumflex accent */
779 {'I', '`', 0xCC}, /* 075 */ /* I with grave accent */
780 {'N', '~', 0xD1}, /* 076 */ /* N with tilde */
781 {'O', 'R', 0xAE}, /* 077 */ /* registered */
782 {'O', 'S', 0xA7}, /* 078 */ /* section mark */
783 {'O', 'X', 0xA4}, /* 079 */ /* currency symbol */
784 {'O', '^', 0xD4}, /* 080 */ /* O with circumflex accent */
785 {'O', '_', 0xBA}, /* 081 */ /* masculine superior numeral */
786 {'O', '`', 0xD2}, /* 082 */ /* O with grave accent */
787 {'O', '~', 0xD5}, /* 083 */ /* O with tilde */
788 {'P', '|', 0xDE}, /* 084 */ /* Upper-case thorn */
789 {'U', '^', 0xDB}, /* 085 */ /* U with circumflex accent */
790 {'U', '`', 0xD9}, /* 086 */ /* U with grave accent */
791 {'\\','\\',0xB4}, /* 087 */ /* acute accent */
792 {'^', 'a', 0xE2}, /* 088 */ /* a with circumflex accent */
793 {'^', 'e', 0xEA}, /* 089 */ /* e with circumflex accent */
794 {'^', 'i', 0xEE}, /* 090 */ /* i with circumflex accent */
795 {'^', 'o', 0xF4}, /* 091 */ /* o with circumflex accent */
796 {'^', 'u', 0xFB}, /* 092 */ /* u with circumflex accent */
797 {'_', 'o', 0xBA}, /* 093 */ /* masculine superior numeral */
798 {'`', 'a', 0xE0}, /* 094 */ /* a with grave accent */
799 {'`', 'e', 0xE8}, /* 095 */ /* e with grave accent */
800 {'`', 'i', 0xEC}, /* 096 */ /* i with grave accent */
801 {'`', 'o', 0xF2}, /* 097 */ /* o with grave accent */
802 {'`', 'u', 0xF9}, /* 098 */ /* u with grave accent */
803 {'a', 'e', 0xE6}, /* 099 */ /* ae dipthong */
804 {'a', '~', 0xE3}, /* 100 */ /* a with tilde */
805 {'c', 'o', 0xA9}, /* 101 */ /* copyright */
806 {'h', 't', 0xFE}, /* 102 */ /* Lower-case thorn */
807 {'n', '~', 0xF1}, /* 103 */ /* n with tilde */
808 {'o', 'r', 0xAE}, /* 104 */ /* registered */
809 {'o', 's', 0xA7}, /* 105 */ /* section mark */
810 {'o', 'x', 0xA4}, /* 106 */ /* currency symbol */
811 {'o', '~', 0xF5}, /* 107 */ /* o with tilde */
812 {'p', '|', 0xFE}, /* 108 */ /* Lower-case thorn */
813 {'s', 's', 0xDF}, /* 109 */ /* German double-s */
814 {'x', 'x', 0xD7}, /* 110 */ /* multiplication sign */
815 {'|', '|', 0xA6}, /* 111 */ /* broken bar */
817 {0, 0, 0}, /* end of table */
819 /* END CSTYLED */
822 * Floating Accent Sequence Table
825 /* FA + ASCII character => ISO character */
826 struct fltaccent_sequence_t kb_fltaccent_table[] = {
828 {FA_UMLAUT, 'A', 0xC4}, /* A with umlaut */
829 {FA_UMLAUT, 'E', 0xCB}, /* E with umlaut */
830 {FA_UMLAUT, 'I', 0xCF}, /* I with umlaut */
831 {FA_UMLAUT, 'O', 0xD6}, /* O with umlaut */
832 {FA_UMLAUT, 'U', 0xDC}, /* U with umlaut */
833 {FA_UMLAUT, 'a', 0xE4}, /* a with umlaut */
834 {FA_UMLAUT, 'e', 0xEB}, /* e with umlaut */
835 {FA_UMLAUT, 'i', 0xEF}, /* i with umlaut */
836 {FA_UMLAUT, 'o', 0xF6}, /* o with umlaut */
837 {FA_UMLAUT, 'u', 0xFC}, /* u with umlaut */
838 {FA_UMLAUT, 'y', 0xFC}, /* y with umlaut */
840 {FA_CFLEX, 'A', 0xC2}, /* A with circumflex */
841 {FA_CFLEX, 'E', 0xCA}, /* E with circumflex */
842 {FA_CFLEX, 'I', 0xCE}, /* I with circumflex */
843 {FA_CFLEX, 'O', 0xD4}, /* O with circumflex */
844 {FA_CFLEX, 'U', 0xDB}, /* U with circumflex */
845 {FA_CFLEX, 'a', 0xE2}, /* a with circumflex */
846 {FA_CFLEX, 'e', 0xEA}, /* e with circumflex */
847 {FA_CFLEX, 'i', 0xEE}, /* i with circumflex */
848 {FA_CFLEX, 'o', 0xF4}, /* o with circumflex */
849 {FA_CFLEX, 'u', 0xFB}, /* u with circumflex */
851 {FA_TILDE, 'A', 0xC3}, /* A with tilde */
852 {FA_TILDE, 'N', 0xD1}, /* N with tilde */
853 {FA_TILDE, 'O', 0xD5}, /* O with tilde */
854 {FA_TILDE, 'a', 0xE3}, /* a with tilde */
855 {FA_TILDE, 'n', 0xF1}, /* n with tilde */
856 {FA_TILDE, 'o', 0xF5}, /* o with tilde */
858 {FA_CEDILLA, 'C', 0xC7}, /* C with cedilla */
859 {FA_CEDILLA, 'c', 0xE7}, /* c with cedilla */
861 {FA_ACUTE, 'A', 0xC1}, /* A with acute accent */
862 {FA_ACUTE, 'E', 0xC9}, /* E with acute accent */
863 {FA_ACUTE, 'I', 0xCD}, /* I with acute accent */
864 {FA_ACUTE, 'O', 0xD3}, /* O with acute accent */
865 {FA_ACUTE, 'U', 0xDA}, /* U with acute accent */
866 {FA_ACUTE, 'a', 0xE1}, /* a with acute accent */
867 {FA_ACUTE, 'e', 0xE9}, /* e with acute accent */
868 {FA_ACUTE, 'i', 0xED}, /* i with acute accent */
869 {FA_ACUTE, 'o', 0xF3}, /* o with acute accent */
870 {FA_ACUTE, 'u', 0xFA}, /* u with acute accent */
871 {FA_ACUTE, 'y', 0xFD}, /* y with acute accent */
873 {FA_GRAVE, 'A', 0xC0}, /* A with grave accent */
874 {FA_GRAVE, 'E', 0xC8}, /* E with grave accent */
875 {FA_GRAVE, 'I', 0xCC}, /* I with grave accent */
876 {FA_GRAVE, 'O', 0xD2}, /* O with grave accent */
877 {FA_GRAVE, 'U', 0xD9}, /* U with grave accent */
878 {FA_GRAVE, 'a', 0xE0}, /* a with grave accent */
879 {FA_GRAVE, 'e', 0xE8}, /* e with grave accent */
880 {FA_GRAVE, 'i', 0xEC}, /* i with grave accent */
881 {FA_GRAVE, 'o', 0xF2}, /* o with grave accent */
882 {FA_GRAVE, 'u', 0xF9}, /* u with grave accent */
884 {0, 0, 0}, /* end of table */
888 * Num Lock Table
891 /* Num Lock: pad key entry & 0x1F => ASCII character */
892 uchar_t kb_numlock_table[] = {
893 '=',
894 '/',
895 '*',
896 '-',
897 ',',
899 '7',
900 '8',
901 '9',
902 '+',
904 '4',
905 '5',
906 '6',
908 '1',
909 '2',
910 '3',
912 '0',
913 '.',
914 '\n', /* Enter */