7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright (c) 1999 by Sun Microsystems, Inc.
24 * All rights reserved.
25 */
26
27 #pragma ident "%Z%%M% %I% %E% SMI"
28
29 /*
30 * This file contains generic keytable information across all
31 * keyboard hardware.
32 */
33
34 #include <sys/param.h>
35 #include <sys/kbd.h>
36
37 /*
38 * Keyboard String Table
39 *
40 * This defines the strings sent by various keys (as selected in the
41 * tables above).
42 * The first byte of each string is its length, the rest is data.
43 */
44
45 #ifdef __STDC__
46 #define kstescinit(c) "\033[" #c
47 #else /* __STDC__ */
48 #define kstescinit(c) {'\033', '[', 'c', '\0'}
200 -1, /* 118 (v) */
201 -1, /* 119 (w) */
202 110, /* 120 (x) */
203 112, /* 121 (y) */
204 -1, /* 122 (z) */
205 -1, /* 123 ({) */
206 111, /* 124 (|) */
207 -1, /* 125 (}) */
208 112, /* 126 (~) */
209 -1, /* 127 (DEL) */
210 };
211
212 /*
213 * IMPORTANT NOTE: This table MUST be kept in proper sorted order:
214 * The first and second characters in each entry must be in ASCII
215 * collating sequence (left to right).
216 * The table must be in ASCII collating sequence by first character
217 * (top to bottom).
218 */
219
220 /* COMPOSE + first character + second character => ISO character */
221
222 struct compose_sequence_t kb_compose_table[] = {
223
224 {' ', ' ', 0xA0}, /* 000 */ /* NBSP (non-breaking space) */
225 {'!', '!', 0xA1}, /* 001 */ /* inverted ! */
226 {'!', 'P', 0xB6}, /* 002 */ /* paragraph mark */
227 {'!', 'p', 0xB6}, /* 003 */ /* paragraph mark */
228 {'"', '"', 0xA8}, /* 004 */ /* diaresis */
229 {'"', 'A', 0xC4}, /* 005 */ /* A with diaresis */
230 {'"', 'E', 0xCB}, /* 006 */ /* E with diaresis */
231 {'"', 'I', 0xCF}, /* 007 */ /* I with diaresis */
232 {'"', 'O', 0xD6}, /* 008 */ /* O with diaresis */
233 {'"', 'U', 0xDC}, /* 009 */ /* U with diaresis */
234 {'"', 'a', 0xE4}, /* 010 */ /* a with diaresis */
235 {'"', 'e', 0xEB}, /* 011 */ /* e with diaresis */
236 {'"', 'i', 0xEF}, /* 012 */ /* i with diaresis */
237 {'"', 'o', 0xF6}, /* 013 */ /* o with diaresis */
238 {'"', 'u', 0xFC}, /* 014 */ /* u with diaresis */
239 {'"', 'y', 0xFF}, /* 015 */ /* y with diaresis */
240 {'\'', 'A', 0xC1}, /* 016 */ /* A with acute accent */
324 {'a', '~', 0xE3}, /* 100 */ /* a with tilde */
325 {'c', 'o', 0xA9}, /* 101 */ /* copyright */
326 {'h', 't', 0xFE}, /* 102 */ /* Lower-case thorn */
327 {'n', '~', 0xF1}, /* 103 */ /* n with tilde */
328 {'o', 'r', 0xAE}, /* 104 */ /* registered */
329 {'o', 's', 0xA7}, /* 105 */ /* section mark */
330 {'o', 'x', 0xA4}, /* 106 */ /* currency symbol */
331 {'o', '~', 0xF5}, /* 107 */ /* o with tilde */
332 {'p', '|', 0xFE}, /* 108 */ /* Lower-case thorn */
333 {'s', 's', 0xDF}, /* 109 */ /* German double-s */
334 {'x', 'x', 0xD7}, /* 110 */ /* multiplication sign */
335 {'|', '|', 0xA6}, /* 111 */ /* broken bar */
336
337 {0, 0, 0}, /* end of table */
338 };
339
340 /*
341 * Floating Accent Sequence Table
342 */
343
344 /* FA + ASCII character => ISO character */
345 struct fltaccent_sequence_t kb_fltaccent_table[] = {
346
347 {FA_UMLAUT, 'A', 0xC4}, /* A with umlaut */
348 {FA_UMLAUT, 'E', 0xCB}, /* E with umlaut */
349 {FA_UMLAUT, 'I', 0xCF}, /* I with umlaut */
350 {FA_UMLAUT, 'O', 0xD6}, /* O with umlaut */
351 {FA_UMLAUT, 'U', 0xDC}, /* U with umlaut */
352 {FA_UMLAUT, 'a', 0xE4}, /* a with umlaut */
353 {FA_UMLAUT, 'e', 0xEB}, /* e with umlaut */
354 {FA_UMLAUT, 'i', 0xEF}, /* i with umlaut */
355 {FA_UMLAUT, 'o', 0xF6}, /* o with umlaut */
356 {FA_UMLAUT, 'u', 0xFC}, /* u with umlaut */
357 {FA_UMLAUT, 'y', 0xFF}, /* y with umlaut */
358
359 {FA_CFLEX, 'A', 0xC2}, /* A with circumflex */
360 {FA_CFLEX, 'E', 0xCA}, /* E with circumflex */
361 {FA_CFLEX, 'I', 0xCE}, /* I with circumflex */
362 {FA_CFLEX, 'O', 0xD4}, /* O with circumflex */
363 {FA_CFLEX, 'U', 0xDB}, /* U with circumflex */
364 {FA_CFLEX, 'a', 0xE2}, /* a with circumflex */
365 {FA_CFLEX, 'e', 0xEA}, /* e with circumflex */
366 {FA_CFLEX, 'i', 0xEE}, /* i with circumflex */
367 {FA_CFLEX, 'o', 0xF4}, /* o with circumflex */
368 {FA_CFLEX, 'u', 0xFB}, /* u with circumflex */
369
370 {FA_TILDE, 'A', 0xC3}, /* A with tilde */
371 {FA_TILDE, 'N', 0xD1}, /* N with tilde */
372 {FA_TILDE, 'O', 0xD5}, /* O with tilde */
373 {FA_TILDE, 'a', 0xE3}, /* a with tilde */
374 {FA_TILDE, 'n', 0xF1}, /* n with tilde */
375 {FA_TILDE, 'o', 0xF5}, /* o with tilde */
376
377 {FA_CEDILLA, 'C', 0xC7}, /* C with cedilla */
378 {FA_CEDILLA, 'c', 0xE7}, /* c with cedilla */
379
380 {FA_ACUTE, 'A', 0xC1}, /* A with acute accent */
381 {FA_ACUTE, 'E', 0xC9}, /* E with acute accent */
382 {FA_ACUTE, 'I', 0xCD}, /* I with acute accent */
383 {FA_ACUTE, 'O', 0xD3}, /* O with acute accent */
384 {FA_ACUTE, 'U', 0xDA}, /* U with acute accent */
385 {FA_ACUTE, 'a', 0xE1}, /* a with acute accent */
386 {FA_ACUTE, 'e', 0xE9}, /* e with acute accent */
387 {FA_ACUTE, 'i', 0xED}, /* i with acute accent */
388 {FA_ACUTE, 'o', 0xF3}, /* o with acute accent */
389 {FA_ACUTE, 'u', 0xFA}, /* u with acute accent */
390 {FA_ACUTE, 'y', 0xFD}, /* y with acute accent */
391
392 {FA_GRAVE, 'A', 0xC0}, /* A with grave accent */
393 {FA_GRAVE, 'E', 0xC8}, /* E with grave accent */
394 {FA_GRAVE, 'I', 0xCC}, /* I with grave accent */
395 {FA_GRAVE, 'O', 0xD2}, /* O with grave accent */
396 {FA_GRAVE, 'U', 0xD9}, /* U with grave accent */
397 {FA_GRAVE, 'a', 0xE0}, /* a with grave accent */
398 {FA_GRAVE, 'e', 0xE8}, /* e with grave accent */
399 {FA_GRAVE, 'i', 0xEC}, /* i with grave accent */
400 {FA_GRAVE, 'o', 0xF2}, /* o with grave accent */
401 {FA_GRAVE, 'u', 0xF9}, /* u with grave accent */
402
403 {0, 0, 0}, /* end of table */
404 };
405
406 /*
407 * Num Lock Table
408 */
409
410 /* Num Lock: pad key entry & 0x1F => ASCII character */
411 uchar_t kb_numlock_table[] = {
412 '=',
413 '/',
414 '*',
415 '-',
416 ',',
417
418 '7',
419 '8',
420 '9',
421 '+',
422
|
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright (c) 1999 by Sun Microsystems, Inc.
24 * All rights reserved.
25 */
26
27 /*
28 * This file contains generic keytable information across all
29 * keyboard hardware.
30 */
31
32 #include <sys/param.h>
33 #include <sys/kbd.h>
34
35 /*
36 * Keyboard String Table
37 *
38 * This defines the strings sent by various keys (as selected in the
39 * tables above).
40 * The first byte of each string is its length, the rest is data.
41 */
42
43 #ifdef __STDC__
44 #define kstescinit(c) "\033[" #c
45 #else /* __STDC__ */
46 #define kstescinit(c) {'\033', '[', 'c', '\0'}
198 -1, /* 118 (v) */
199 -1, /* 119 (w) */
200 110, /* 120 (x) */
201 112, /* 121 (y) */
202 -1, /* 122 (z) */
203 -1, /* 123 ({) */
204 111, /* 124 (|) */
205 -1, /* 125 (}) */
206 112, /* 126 (~) */
207 -1, /* 127 (DEL) */
208 };
209
210 /*
211 * IMPORTANT NOTE: This table MUST be kept in proper sorted order:
212 * The first and second characters in each entry must be in ASCII
213 * collating sequence (left to right).
214 * The table must be in ASCII collating sequence by first character
215 * (top to bottom).
216 */
217
218 /* COMPOSE + first character + second character => UTF-8 character */
219
220 struct compose_sequence_t kb_compose_table[] = {
221
222 {' ', ' ', 0xA0}, /* 000 */ /* NBSP (non-breaking space) */
223 {'!', '!', 0xA1}, /* 001 */ /* inverted ! */
224 {'!', 'P', 0xB6}, /* 002 */ /* paragraph mark */
225 {'!', 'p', 0xB6}, /* 003 */ /* paragraph mark */
226 {'"', '"', 0xA8}, /* 004 */ /* diaresis */
227 {'"', 'A', 0xC4}, /* 005 */ /* A with diaresis */
228 {'"', 'E', 0xCB}, /* 006 */ /* E with diaresis */
229 {'"', 'I', 0xCF}, /* 007 */ /* I with diaresis */
230 {'"', 'O', 0xD6}, /* 008 */ /* O with diaresis */
231 {'"', 'U', 0xDC}, /* 009 */ /* U with diaresis */
232 {'"', 'a', 0xE4}, /* 010 */ /* a with diaresis */
233 {'"', 'e', 0xEB}, /* 011 */ /* e with diaresis */
234 {'"', 'i', 0xEF}, /* 012 */ /* i with diaresis */
235 {'"', 'o', 0xF6}, /* 013 */ /* o with diaresis */
236 {'"', 'u', 0xFC}, /* 014 */ /* u with diaresis */
237 {'"', 'y', 0xFF}, /* 015 */ /* y with diaresis */
238 {'\'', 'A', 0xC1}, /* 016 */ /* A with acute accent */
322 {'a', '~', 0xE3}, /* 100 */ /* a with tilde */
323 {'c', 'o', 0xA9}, /* 101 */ /* copyright */
324 {'h', 't', 0xFE}, /* 102 */ /* Lower-case thorn */
325 {'n', '~', 0xF1}, /* 103 */ /* n with tilde */
326 {'o', 'r', 0xAE}, /* 104 */ /* registered */
327 {'o', 's', 0xA7}, /* 105 */ /* section mark */
328 {'o', 'x', 0xA4}, /* 106 */ /* currency symbol */
329 {'o', '~', 0xF5}, /* 107 */ /* o with tilde */
330 {'p', '|', 0xFE}, /* 108 */ /* Lower-case thorn */
331 {'s', 's', 0xDF}, /* 109 */ /* German double-s */
332 {'x', 'x', 0xD7}, /* 110 */ /* multiplication sign */
333 {'|', '|', 0xA6}, /* 111 */ /* broken bar */
334
335 {0, 0, 0}, /* end of table */
336 };
337
338 /*
339 * Floating Accent Sequence Table
340 */
341
342 /* FA + ASCII character => UTF-8 character */
343 struct fltaccent_sequence_t kb_fltaccent_table[] = {
344
345 {FA_UMLAUT, ' ', 0xA8}, /* umlaut/diaresis */
346 {FA_UMLAUT, 'A', 0xC4}, /* A with umlaut */
347 {FA_UMLAUT, 'E', 0xCB}, /* E with umlaut */
348 {FA_UMLAUT, 'I', 0xCF}, /* I with umlaut */
349 {FA_UMLAUT, 'O', 0xD6}, /* O with umlaut */
350 {FA_UMLAUT, 'U', 0xDC}, /* U with umlaut */
351 {FA_UMLAUT, 'a', 0xE4}, /* a with umlaut */
352 {FA_UMLAUT, 'e', 0xEB}, /* e with umlaut */
353 {FA_UMLAUT, 'i', 0xEF}, /* i with umlaut */
354 {FA_UMLAUT, 'o', 0xF6}, /* o with umlaut */
355 {FA_UMLAUT, 'u', 0xFC}, /* u with umlaut */
356 {FA_UMLAUT, 'y', 0xFF}, /* y with umlaut */
357
358 {FA_CFLEX, 'A', 0xC2}, /* A with circumflex */
359 {FA_CFLEX, 'E', 0xCA}, /* E with circumflex */
360 {FA_CFLEX, 'I', 0xCE}, /* I with circumflex */
361 {FA_CFLEX, 'O', 0xD4}, /* O with circumflex */
362 {FA_CFLEX, 'U', 0xDB}, /* U with circumflex */
363 {FA_CFLEX, 'a', 0xE2}, /* a with circumflex */
364 {FA_CFLEX, 'e', 0xEA}, /* e with circumflex */
365 {FA_CFLEX, 'i', 0xEE}, /* i with circumflex */
366 {FA_CFLEX, 'o', 0xF4}, /* o with circumflex */
367 {FA_CFLEX, 'u', 0xFB}, /* u with circumflex */
368
369 {FA_TILDE, ' ', '~'}, /* tilde */
370 {FA_TILDE, 'A', 0xC3}, /* A with tilde */
371 {FA_TILDE, 'N', 0xD1}, /* N with tilde */
372 {FA_TILDE, 'O', 0xD5}, /* O with tilde */
373 {FA_TILDE, 'a', 0xE3}, /* a with tilde */
374 {FA_TILDE, 'n', 0xF1}, /* n with tilde */
375 {FA_TILDE, 'o', 0xF5}, /* o with tilde */
376
377 {FA_CEDILLA, ' ', 0xB8}, /* cedilla */
378 {FA_CEDILLA, 'C', 0xC7}, /* C with cedilla */
379 {FA_CEDILLA, 'c', 0xE7}, /* c with cedilla */
380
381 {FA_ACUTE, ' ', '\''}, /* apostrophe */
382 {FA_ACUTE, 'A', 0xC1}, /* A with acute accent */
383 {FA_ACUTE, 'E', 0xC9}, /* E with acute accent */
384 {FA_ACUTE, 'I', 0xCD}, /* I with acute accent */
385 {FA_ACUTE, 'O', 0xD3}, /* O with acute accent */
386 {FA_ACUTE, 'U', 0xDA}, /* U with acute accent */
387 {FA_ACUTE, 'a', 0xE1}, /* a with acute accent */
388 {FA_ACUTE, 'e', 0xE9}, /* e with acute accent */
389 {FA_ACUTE, 'i', 0xED}, /* i with acute accent */
390 {FA_ACUTE, 'o', 0xF3}, /* o with acute accent */
391 {FA_ACUTE, 'u', 0xFA}, /* u with acute accent */
392 {FA_ACUTE, 'y', 0xFD}, /* y with acute accent */
393
394 {FA_GRAVE, ' ', '`'}, /* grave accent */
395 {FA_GRAVE, 'A', 0xC0}, /* A with grave accent */
396 {FA_GRAVE, 'E', 0xC8}, /* E with grave accent */
397 {FA_GRAVE, 'I', 0xCC}, /* I with grave accent */
398 {FA_GRAVE, 'O', 0xD2}, /* O with grave accent */
399 {FA_GRAVE, 'U', 0xD9}, /* U with grave accent */
400 {FA_GRAVE, 'a', 0xE0}, /* a with grave accent */
401 {FA_GRAVE, 'e', 0xE8}, /* e with grave accent */
402 {FA_GRAVE, 'i', 0xEC}, /* i with grave accent */
403 {FA_GRAVE, 'o', 0xF2}, /* o with grave accent */
404 {FA_GRAVE, 'u', 0xF9}, /* u with grave accent */
405
406 {FA_MACRON, ' ', 0xAF}, /* macron */
407
408 {FA_BREVE, ' ', 0x306}, /* combining breve */
409
410 {FA_DOT, ' ', 0x307}, /* combining dot above */
411
412 {FA_SLASH, 0, 0}, /* slash, invalid entry */
413
414 {FA_RING, ' ', 0x30A}, /* combining ring above */
415
416 {FA_APOSTROPHE, ' ', '\''}, /* apostrophe */
417
418 {FA_DACUTE, ' ', 0x30B}, /* combining double acute */
419
420 {FA_OGONEK, ' ', 0x328}, /* combining ogonek */
421
422 {FA_CARON, ' ', 0x2C7}, /* caron */
423 {FA_CARON, 'C', 0x10C}, /* C with caron */
424 {FA_CARON, 'S', 0x160}, /* S with caron */
425 {FA_CARON, 'Z', 0x17D}, /* Z with caron */
426 {FA_CARON, 'c', 0x10D}, /* c with caron */
427 {FA_CARON, 's', 0x161}, /* s with caron */
428 {FA_CARON, 'z', 0x17E}, /* z with caron */
429
430 {0, 0, 0}, /* end of table */
431 };
432
433 /*
434 * Num Lock Table
435 */
436
437 /* Num Lock: pad key entry & 0x1F => ASCII character */
438 uchar_t kb_numlock_table[] = {
439 '=',
440 '/',
441 '*',
442 '-',
443 ',',
444
445 '7',
446 '8',
447 '9',
448 '+',
449
|