xref: /illumos-gate/usr/src/uts/common/io/keytables.c (revision 2d6eb4a5)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*e4603304Sqz  * Common Development and Distribution License (the "License").
6*e4603304Sqz  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
22*e4603304Sqz  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23*e4603304Sqz  * Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate /*
277c478bd9Sstevel@tonic-gate  * This module contains the translation tables for the up-down encoded
287c478bd9Sstevel@tonic-gate  * Sun keyboards.
297c478bd9Sstevel@tonic-gate  */
307c478bd9Sstevel@tonic-gate 
317c478bd9Sstevel@tonic-gate #include <sys/param.h>
327c478bd9Sstevel@tonic-gate #include <sys/kbd.h>
337c478bd9Sstevel@tonic-gate 
347c478bd9Sstevel@tonic-gate /* handy way to define control characters in the tables */
357c478bd9Sstevel@tonic-gate #define	c(c_char)	(c_char&0x1F)
367c478bd9Sstevel@tonic-gate #define	ESC 0x1B
377c478bd9Sstevel@tonic-gate #define	DEL 0x7F
387c478bd9Sstevel@tonic-gate 
397c478bd9Sstevel@tonic-gate 
407c478bd9Sstevel@tonic-gate /* Unshifted keyboard table for Type 3 keyboard */
417c478bd9Sstevel@tonic-gate 
427c478bd9Sstevel@tonic-gate static struct keymap keytab_s3_lc = {
437c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
447c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	BUCKYBITS+SYSTEMBIT,
457c478bd9Sstevel@tonic-gate 				HOLE,	LF(2),	HOLE,	TF(1),	TF(2),	HOLE,
467c478bd9Sstevel@tonic-gate /*  8 */	TF(3), 	HOLE,	TF(4),	HOLE,	TF(5),	HOLE,	TF(6),	HOLE,
477c478bd9Sstevel@tonic-gate /* 16 */	TF(7),	TF(8),	TF(9),	SHIFTKEYS+ALT,
487c478bd9Sstevel@tonic-gate 						HOLE,	RF(1),	RF(2),	RF(3),
497c478bd9Sstevel@tonic-gate /* 24 */	HOLE, 	LF(3), 	LF(4),	HOLE,	HOLE,	ESC,	'1',	'2',
507c478bd9Sstevel@tonic-gate /* 32 */	'3',	'4',	'5',	'6',	'7',	'8',	'9',	'0',
517c478bd9Sstevel@tonic-gate /* 40 */	'-',	'=',	'`',	'\b',	HOLE,	RF(4),	RF(5),	RF(6),
527c478bd9Sstevel@tonic-gate /* 48 */	HOLE,	LF(5),	HOLE,	LF(6),	HOLE,	'\t',	'q',	'w',
537c478bd9Sstevel@tonic-gate /* 56 */	'e',	'r',	't',	'y',	'u',	'i',	'o',	'p',
547c478bd9Sstevel@tonic-gate /* 64 */	'[',	']',	DEL,	HOLE,	RF(7),	STRING+UPARROW,
557c478bd9Sstevel@tonic-gate 								RF(9),	HOLE,
567c478bd9Sstevel@tonic-gate /* 72 */	LF(7),	LF(8),	HOLE,	HOLE,	SHIFTKEYS+LEFTCTRL,
577c478bd9Sstevel@tonic-gate 							'a', 	's',	'd',
587c478bd9Sstevel@tonic-gate /* 80 */	'f',	'g',	'h',	'j',	'k',	'l',	';',	'\'',
597c478bd9Sstevel@tonic-gate /* 88 */	'\\',	'\r',	HOLE,	STRING+LEFTARROW,
607c478bd9Sstevel@tonic-gate 						RF(11),	STRING+RIGHTARROW,
617c478bd9Sstevel@tonic-gate 								HOLE,	LF(9),
627c478bd9Sstevel@tonic-gate /* 96 */	HOLE,	LF(10),	HOLE,	SHIFTKEYS+LEFTSHIFT,
637c478bd9Sstevel@tonic-gate 						'z',	'x',	'c',	'v',
647c478bd9Sstevel@tonic-gate /*104 */	'b',	'n',	'm',	',',	'.',	'/',	SHIFTKEYS+RIGHTSHIFT,
657c478bd9Sstevel@tonic-gate 									'\n',
667c478bd9Sstevel@tonic-gate /*112 */	RF(13),	STRING+DOWNARROW,
677c478bd9Sstevel@tonic-gate 				RF(15),	HOLE,	HOLE,	HOLE,	HOLE,	SHIFTKEYS+CAPSLOCK,
687c478bd9Sstevel@tonic-gate /*120 */	BUCKYBITS+METABIT,
697c478bd9Sstevel@tonic-gate 			' ',	BUCKYBITS+METABIT,
707c478bd9Sstevel@tonic-gate 					HOLE,	HOLE,	HOLE,	ERROR,	IDLE,
717c478bd9Sstevel@tonic-gate /* END CSTYLED */
727c478bd9Sstevel@tonic-gate };
737c478bd9Sstevel@tonic-gate 
747c478bd9Sstevel@tonic-gate /* Shifted keyboard table for Type 3 keyboard */
757c478bd9Sstevel@tonic-gate 
767c478bd9Sstevel@tonic-gate static struct keymap keytab_s3_uc = {
777c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
787c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	BUCKYBITS+SYSTEMBIT,
797c478bd9Sstevel@tonic-gate 				HOLE,	LF(2),	HOLE,	TF(1),	TF(2),	HOLE,
807c478bd9Sstevel@tonic-gate /*  8 */	TF(3), 	HOLE,	TF(4),	HOLE,	TF(5),	HOLE,	TF(6),	HOLE,
817c478bd9Sstevel@tonic-gate /* 16 */	TF(7),	TF(8),	TF(9),	SHIFTKEYS+ALT,
827c478bd9Sstevel@tonic-gate 						HOLE,	RF(1),	RF(2),	RF(3),
837c478bd9Sstevel@tonic-gate /* 24 */	HOLE, 	LF(3), 	LF(4),	HOLE,	HOLE,	ESC,	'!',    '@',
847c478bd9Sstevel@tonic-gate /* 32 */	'#',	'$',	'%',	'^',	'&',	'*',	'(',	')',
857c478bd9Sstevel@tonic-gate /* 40 */	'_',	'+',	'~',	'\b',	HOLE,	RF(4),	RF(5),	RF(6),
867c478bd9Sstevel@tonic-gate /* 48 */	HOLE,	LF(5),	HOLE,	LF(6),	HOLE,	'\t',	'Q',	'W',
877c478bd9Sstevel@tonic-gate /* 56 */	'E',	'R',	'T',	'Y',	'U',	'I',	'O',	'P',
887c478bd9Sstevel@tonic-gate /* 64 */	'{',	'}',	DEL,	HOLE,	RF(7),	STRING+UPARROW,
897c478bd9Sstevel@tonic-gate 								RF(9),	HOLE,
907c478bd9Sstevel@tonic-gate /* 72 */	LF(7),	LF(8),	HOLE,	HOLE,	SHIFTKEYS+LEFTCTRL,
917c478bd9Sstevel@tonic-gate 							'A', 	'S',	'D',
927c478bd9Sstevel@tonic-gate /* 80 */	'F',	'G',	'H',	'J',	'K',	'L',	':',	'"',
937c478bd9Sstevel@tonic-gate /* 88 */	'|',	'\r',	HOLE,	STRING+LEFTARROW,
947c478bd9Sstevel@tonic-gate 						RF(11),	STRING+RIGHTARROW,
957c478bd9Sstevel@tonic-gate 								HOLE,	LF(9),
967c478bd9Sstevel@tonic-gate /* 96 */	HOLE,	LF(10),	HOLE,	SHIFTKEYS+LEFTSHIFT,
977c478bd9Sstevel@tonic-gate 						'Z',	'X',	'C',	'V',
987c478bd9Sstevel@tonic-gate /*104 */	'B',	'N',	'M',	'<',	'>',	'?',	SHIFTKEYS+RIGHTSHIFT,
997c478bd9Sstevel@tonic-gate 									'\n',
1007c478bd9Sstevel@tonic-gate /*112 */	RF(13),	STRING+DOWNARROW,
1017c478bd9Sstevel@tonic-gate 				RF(15),	HOLE,	HOLE,	HOLE,	HOLE,	SHIFTKEYS+CAPSLOCK,
1027c478bd9Sstevel@tonic-gate /*120 */	BUCKYBITS+METABIT,
1037c478bd9Sstevel@tonic-gate 			' ',	BUCKYBITS+METABIT,
1047c478bd9Sstevel@tonic-gate 					HOLE,	HOLE,	HOLE,	ERROR,	IDLE,
1057c478bd9Sstevel@tonic-gate /* END CSTYLED */
1067c478bd9Sstevel@tonic-gate };
1077c478bd9Sstevel@tonic-gate 
1087c478bd9Sstevel@tonic-gate /* Caps Locked keyboard table for Type 3 keyboard */
1097c478bd9Sstevel@tonic-gate 
1107c478bd9Sstevel@tonic-gate static struct keymap keytab_s3_cl = {
1117c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
1127c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	BUCKYBITS+SYSTEMBIT,
1137c478bd9Sstevel@tonic-gate 				HOLE,	LF(2),	HOLE,	TF(1),	TF(2),	HOLE,
1147c478bd9Sstevel@tonic-gate /*  8 */	TF(3), 	HOLE,	TF(4),	HOLE,	TF(5),	HOLE,	TF(6),	HOLE,
1157c478bd9Sstevel@tonic-gate /* 16 */	TF(7),	TF(8),	TF(9),	SHIFTKEYS+ALT,
1167c478bd9Sstevel@tonic-gate 						HOLE,	RF(1),	RF(2),	RF(3),
1177c478bd9Sstevel@tonic-gate /* 24 */	HOLE, 	LF(3), 	LF(4),	HOLE,	HOLE,	ESC,	'1',	'2',
1187c478bd9Sstevel@tonic-gate /* 32 */	'3',	'4',	'5',	'6',	'7',	'8',	'9',	'0',
1197c478bd9Sstevel@tonic-gate /* 40 */	'-',	'=',	'`',	'\b',	HOLE,	RF(4),	RF(5),	RF(6),
1207c478bd9Sstevel@tonic-gate /* 48 */	HOLE,	LF(5),	HOLE,	LF(6),	HOLE,	'\t',	'Q',	'W',
1217c478bd9Sstevel@tonic-gate /* 56 */	'E',	'R',	'T',	'Y',	'U',	'I',	'O',	'P',
1227c478bd9Sstevel@tonic-gate /* 64 */	'[',	']',	DEL,	HOLE,	RF(7),	STRING+UPARROW,
1237c478bd9Sstevel@tonic-gate 								RF(9),	HOLE,
1247c478bd9Sstevel@tonic-gate /* 72 */	LF(7),	LF(8),	HOLE,	HOLE,	SHIFTKEYS+LEFTCTRL,
1257c478bd9Sstevel@tonic-gate 							'A', 	'S',	'D',
1267c478bd9Sstevel@tonic-gate /* 80 */	'F',	'G',	'H',	'J',	'K',	'L',	';',	'\'',
1277c478bd9Sstevel@tonic-gate /* 88 */	'\\',	'\r',	HOLE,	STRING+LEFTARROW,
1287c478bd9Sstevel@tonic-gate 						RF(11),	STRING+RIGHTARROW,
1297c478bd9Sstevel@tonic-gate 								HOLE,	LF(9),
1307c478bd9Sstevel@tonic-gate /* 96 */	HOLE,	LF(10),	HOLE,	SHIFTKEYS+LEFTSHIFT,
1317c478bd9Sstevel@tonic-gate 						'Z',	'X',	'C',	'V',
1327c478bd9Sstevel@tonic-gate /*104 */	'B',	'N',	'M',	',',	'.',	'/',	SHIFTKEYS+RIGHTSHIFT,
1337c478bd9Sstevel@tonic-gate 									'\n',
1347c478bd9Sstevel@tonic-gate /*112 */	RF(13),	STRING+DOWNARROW,
1357c478bd9Sstevel@tonic-gate 				RF(15),	HOLE,	HOLE,	HOLE,	HOLE,	SHIFTKEYS+CAPSLOCK,
1367c478bd9Sstevel@tonic-gate /*120 */	BUCKYBITS+METABIT,
1377c478bd9Sstevel@tonic-gate 			' ',	BUCKYBITS+METABIT,
1387c478bd9Sstevel@tonic-gate 					HOLE,	HOLE,	HOLE,	ERROR,	IDLE,
1397c478bd9Sstevel@tonic-gate /* END CSTYLED */
1407c478bd9Sstevel@tonic-gate };
1417c478bd9Sstevel@tonic-gate 
1427c478bd9Sstevel@tonic-gate /* Controlled keyboard table for Type 3 keyboard */
1437c478bd9Sstevel@tonic-gate 
1447c478bd9Sstevel@tonic-gate static struct keymap keytab_s3_ct = {
1457c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
1467c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	BUCKYBITS+SYSTEMBIT,
1477c478bd9Sstevel@tonic-gate 				HOLE,	LF(2),	HOLE,	TF(1),	TF(2),	HOLE,
1487c478bd9Sstevel@tonic-gate /*  8 */	TF(3), 	HOLE,	TF(4),	HOLE,	TF(5),	HOLE,	TF(6),	HOLE,
1497c478bd9Sstevel@tonic-gate /* 16 */	TF(7),	TF(8),	TF(9),	SHIFTKEYS+ALT,
1507c478bd9Sstevel@tonic-gate 						HOLE,	RF(1),	RF(2),	RF(3),
1517c478bd9Sstevel@tonic-gate /* 24 */	HOLE, 	LF(3), 	LF(4),	HOLE,	HOLE,	ESC,	'1',	c('@'),
1527c478bd9Sstevel@tonic-gate /* 32 */	'3',	'4',	'5',	c('^'),	'7',	'8',	'9',	'0',
1537c478bd9Sstevel@tonic-gate /* 40 */	c('_'),	'=',	c('^'),	'\b',	HOLE,	RF(4),	RF(5),	RF(6),
1547c478bd9Sstevel@tonic-gate /* 48 */	HOLE,	LF(5),	HOLE,	LF(6),	HOLE,	'\t',   c('q'),	c('w'),
1557c478bd9Sstevel@tonic-gate /* 56 */	c('e'),	c('r'),	c('t'),	c('y'),	c('u'),	c('i'),	c('o'),	c('p'),
1567c478bd9Sstevel@tonic-gate /* 64 */	c('['),	c(']'),	DEL,	HOLE,	RF(7),	STRING+UPARROW,
1577c478bd9Sstevel@tonic-gate 								RF(9),	HOLE,
1587c478bd9Sstevel@tonic-gate /* 72 */	LF(7),	LF(8),	HOLE,	HOLE,	SHIFTKEYS+LEFTCTRL,
1597c478bd9Sstevel@tonic-gate 							c('a'),	c('s'),	c('d'),
1607c478bd9Sstevel@tonic-gate /* 80 */	c('f'),	c('g'),	c('h'),	c('j'),	c('k'),	c('l'),	';',	'\'',
1617c478bd9Sstevel@tonic-gate /* 88 */	c('\\'),
1627c478bd9Sstevel@tonic-gate 			'\r',	HOLE,	STRING+LEFTARROW,
1637c478bd9Sstevel@tonic-gate 						RF(11),	STRING+RIGHTARROW,
1647c478bd9Sstevel@tonic-gate 								HOLE,	LF(9),
1657c478bd9Sstevel@tonic-gate /* 96 */	HOLE,	LF(10),	HOLE,	SHIFTKEYS+LEFTSHIFT,
1667c478bd9Sstevel@tonic-gate 						c('z'),	c('x'),	c('c'),	c('v'),
1677c478bd9Sstevel@tonic-gate /*104 */	c('b'),	c('n'),	c('m'),	',',	'.',	c('_'),	SHIFTKEYS+RIGHTSHIFT,
1687c478bd9Sstevel@tonic-gate 									'\n',
1697c478bd9Sstevel@tonic-gate /*112 */	RF(13),	STRING+DOWNARROW,
1707c478bd9Sstevel@tonic-gate 				RF(15),	HOLE,	HOLE,	HOLE,	HOLE,	SHIFTKEYS+CAPSLOCK,
1717c478bd9Sstevel@tonic-gate /*120 */	BUCKYBITS+METABIT,
1727c478bd9Sstevel@tonic-gate 			c(' '),	BUCKYBITS+METABIT,
1737c478bd9Sstevel@tonic-gate 					HOLE,	HOLE,	HOLE,	ERROR,	IDLE,
1747c478bd9Sstevel@tonic-gate /* END CSTYLED */
1757c478bd9Sstevel@tonic-gate };
1767c478bd9Sstevel@tonic-gate 
1777c478bd9Sstevel@tonic-gate /* "Key Up" keyboard table for Type 3 keyboard */
1787c478bd9Sstevel@tonic-gate 
1797c478bd9Sstevel@tonic-gate static struct keymap keytab_s3_up = {
1807c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
1817c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	BUCKYBITS+SYSTEMBIT,
1827c478bd9Sstevel@tonic-gate 				HOLE,	NOP,	HOLE,	NOP,	NOP,	HOLE,
1837c478bd9Sstevel@tonic-gate /*  8 */	NOP, 	HOLE, 	NOP,	HOLE,	NOP,	HOLE,	NOP,	HOLE,
1847c478bd9Sstevel@tonic-gate /* 16 */	NOP, 	NOP, 	NOP,	SHIFTKEYS+ALT,
1857c478bd9Sstevel@tonic-gate 						HOLE,	NOP,	NOP,	NOP,
1867c478bd9Sstevel@tonic-gate /* 24 */	HOLE, 	NOP, 	NOP,	HOLE,	HOLE,	NOP,	NOP,	NOP,
1877c478bd9Sstevel@tonic-gate /* 32 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
1887c478bd9Sstevel@tonic-gate /* 40 */	NOP,	NOP,	NOP,	NOP,	HOLE,	NOP,	NOP,	NOP,
1897c478bd9Sstevel@tonic-gate /* 48 */	HOLE,	NOP,	HOLE,	NOP,	HOLE,	NOP,	NOP,	NOP,
1907c478bd9Sstevel@tonic-gate /* 56 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
1917c478bd9Sstevel@tonic-gate /* 64 */	NOP,	NOP,	NOP,	HOLE,	NOP,	NOP,	NOP,	HOLE,
1927c478bd9Sstevel@tonic-gate /* 72 */	NOP,	NOP,	HOLE,	HOLE,	SHIFTKEYS+LEFTCTRL,
1937c478bd9Sstevel@tonic-gate 							NOP, 	NOP,	NOP,
1947c478bd9Sstevel@tonic-gate /* 80 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
1957c478bd9Sstevel@tonic-gate /* 88 */	NOP,	NOP,	HOLE,	NOP,	NOP,	NOP,	HOLE,	NOP,
1967c478bd9Sstevel@tonic-gate /* 96 */	HOLE,	NOP,	HOLE,	SHIFTKEYS+LEFTSHIFT,
1977c478bd9Sstevel@tonic-gate 						NOP,	NOP,	NOP,	NOP,
1987c478bd9Sstevel@tonic-gate /*104 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	SHIFTKEYS+RIGHTSHIFT,
1997c478bd9Sstevel@tonic-gate 									NOP,
2007c478bd9Sstevel@tonic-gate /*112 */	NOP,	NOP,	NOP,	HOLE,	HOLE,	HOLE,	HOLE,	NOP,
2017c478bd9Sstevel@tonic-gate /*120 */	BUCKYBITS+METABIT,
2027c478bd9Sstevel@tonic-gate 			NOP,	BUCKYBITS+METABIT,
2037c478bd9Sstevel@tonic-gate 					HOLE,	HOLE,	HOLE,	HOLE,	RESET,
2047c478bd9Sstevel@tonic-gate /* END CSTYLED */
2057c478bd9Sstevel@tonic-gate };
2067c478bd9Sstevel@tonic-gate 
2077c478bd9Sstevel@tonic-gate /* Index to keymaps for Type 3 keyboard */
2087c478bd9Sstevel@tonic-gate static struct keyboard keyindex_s3 = {
2097c478bd9Sstevel@tonic-gate 	&keytab_s3_lc,
2107c478bd9Sstevel@tonic-gate 	&keytab_s3_uc,
2117c478bd9Sstevel@tonic-gate 	&keytab_s3_cl,
2127c478bd9Sstevel@tonic-gate 	0,		/* no Alt Graph key, no Alt Graph table */
2137c478bd9Sstevel@tonic-gate 	0,		/* no Num Lock key, no Num Lock table */
2147c478bd9Sstevel@tonic-gate 	&keytab_s3_ct,
2157c478bd9Sstevel@tonic-gate 	&keytab_s3_up,
2167c478bd9Sstevel@tonic-gate 	0x0000,		/* Shift bits which stay on with idle keyboard */
2177c478bd9Sstevel@tonic-gate 	0x0000,		/* Bucky bits which stay on with idle keyboard */
2187c478bd9Sstevel@tonic-gate 	1, 0,	77,	/* abort keys */
2197c478bd9Sstevel@tonic-gate 	CAPSMASK,	/* Shift bits which toggle on down event */
2207c478bd9Sstevel@tonic-gate 	NULL,
221*e4603304Sqz 	99, 110, 21,	/* New abort keys */
2227c478bd9Sstevel@tonic-gate };
2237c478bd9Sstevel@tonic-gate 
2247c478bd9Sstevel@tonic-gate 
2257c478bd9Sstevel@tonic-gate /* Unshifted keyboard table for Type 4 keyboard */
2267c478bd9Sstevel@tonic-gate 
2277c478bd9Sstevel@tonic-gate static struct keymap keytab_s4_lc = {
2287c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
2297c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	BUCKYBITS+SYSTEMBIT,
2307c478bd9Sstevel@tonic-gate 				HOLE,	LF(2),	HOLE,	TF(1),	TF(2),	TF(10),
2317c478bd9Sstevel@tonic-gate /*  8 */	TF(3), 	TF(11),	TF(4),	TF(12),	TF(5),	SHIFTKEYS+ALTGRAPH,
2327c478bd9Sstevel@tonic-gate 								TF(6),	HOLE,
2337c478bd9Sstevel@tonic-gate /* 16 */	TF(7),	TF(8),	TF(9),	SHIFTKEYS+ALT,
2347c478bd9Sstevel@tonic-gate 						HOLE,	RF(1),	RF(2),	RF(3),
2357c478bd9Sstevel@tonic-gate /* 24 */	HOLE, 	LF(3), 	LF(4),	HOLE,	HOLE,	ESC,	'1',	'2',
2367c478bd9Sstevel@tonic-gate /* 32 */	'3',	'4',	'5',	'6',	'7',	'8',	'9',	'0',
2377c478bd9Sstevel@tonic-gate /* 40 */	'-',	'=',	'`',	'\b',	HOLE,	RF(4),	RF(5),	RF(6),
2387c478bd9Sstevel@tonic-gate /* 48 */	BF(13),	LF(5),	BF(10),	LF(6),	HOLE,	'\t',	'q',	'w',
2397c478bd9Sstevel@tonic-gate /* 56 */	'e',	'r',	't',	'y',	'u',	'i',	'o',	'p',
2407c478bd9Sstevel@tonic-gate /* 64 */	'[',	']',	DEL,	COMPOSE,
2417c478bd9Sstevel@tonic-gate 						RF(7),	STRING+UPARROW,
2427c478bd9Sstevel@tonic-gate 								RF(9),	BF(15),
2437c478bd9Sstevel@tonic-gate /* 72 */	LF(7),	LF(8),	HOLE,	HOLE,	SHIFTKEYS+LEFTCTRL,
2447c478bd9Sstevel@tonic-gate 							'a', 	's',	'd',
2457c478bd9Sstevel@tonic-gate /* 80 */	'f',	'g',	'h',	'j',	'k',	'l',	';',	'\'',
2467c478bd9Sstevel@tonic-gate /* 88 */	'\\',	'\r',	BF(11),	STRING+LEFTARROW,
2477c478bd9Sstevel@tonic-gate 						RF(11),	STRING+RIGHTARROW,
2487c478bd9Sstevel@tonic-gate 								BF(8),	LF(9),
2497c478bd9Sstevel@tonic-gate /* 96 */	HOLE,	LF(10),	SHIFTKEYS+NUMLOCK,
2507c478bd9Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
2517c478bd9Sstevel@tonic-gate 						'z',	'x',	'c',	'v',
2527c478bd9Sstevel@tonic-gate /*104 */	'b',	'n',	'm',	',',	'.',	'/',	SHIFTKEYS+RIGHTSHIFT,
2537c478bd9Sstevel@tonic-gate 									'\n',
2547c478bd9Sstevel@tonic-gate /*112 */	RF(13),	STRING+DOWNARROW,
2557c478bd9Sstevel@tonic-gate 				RF(15),	HOLE,	HOLE,	HOLE,	LF(16),	SHIFTKEYS+CAPSLOCK,
2567c478bd9Sstevel@tonic-gate /*120 */	BUCKYBITS+METABIT,
2577c478bd9Sstevel@tonic-gate 			' ',	BUCKYBITS+METABIT,
2587c478bd9Sstevel@tonic-gate 					HOLE,	HOLE,	BF(14),	ERROR,	IDLE,
2597c478bd9Sstevel@tonic-gate /* END CSTYLED */
2607c478bd9Sstevel@tonic-gate };
2617c478bd9Sstevel@tonic-gate 
2627c478bd9Sstevel@tonic-gate /* Shifted keyboard table for Type 4 keyboard */
2637c478bd9Sstevel@tonic-gate 
2647c478bd9Sstevel@tonic-gate static struct keymap keytab_s4_uc = {
2657c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
2667c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	BUCKYBITS+SYSTEMBIT,
2677c478bd9Sstevel@tonic-gate 				HOLE,	LF(2),	HOLE,	TF(1),	TF(2),	TF(10),
2687c478bd9Sstevel@tonic-gate /*  8 */	TF(3), 	TF(11),	TF(4),	TF(12),	TF(5),	SHIFTKEYS+ALTGRAPH,
2697c478bd9Sstevel@tonic-gate 								TF(6),	HOLE,
2707c478bd9Sstevel@tonic-gate /* 16 */	TF(7),	TF(8),	TF(9),	SHIFTKEYS+ALT,
2717c478bd9Sstevel@tonic-gate 						HOLE,	RF(1),	RF(2),	RF(3),
2727c478bd9Sstevel@tonic-gate /* 24 */	HOLE, 	LF(3), 	LF(4),	HOLE,	HOLE,	ESC,	'!',    '@',
2737c478bd9Sstevel@tonic-gate /* 32 */	'#',	'$',	'%',	'^',	'&',	'*',	'(',	')',
2747c478bd9Sstevel@tonic-gate /* 40 */	'_',	'+',	'~',	'\b',	HOLE,	RF(4),	RF(5),	RF(6),
2757c478bd9Sstevel@tonic-gate /* 48 */	BF(13),	LF(5),	BF(10),	LF(6),	HOLE,	'\t',	'Q',	'W',
2767c478bd9Sstevel@tonic-gate /* 56 */	'E',	'R',	'T',	'Y',	'U',	'I',	'O',	'P',
2777c478bd9Sstevel@tonic-gate /* 64 */	'{',	'}',	DEL,	COMPOSE,
2787c478bd9Sstevel@tonic-gate 						RF(7),	STRING+UPARROW,
2797c478bd9Sstevel@tonic-gate 								RF(9),	BF(15),
2807c478bd9Sstevel@tonic-gate /* 72 */	LF(7),	LF(8),	HOLE,	HOLE,	SHIFTKEYS+LEFTCTRL,
2817c478bd9Sstevel@tonic-gate 							'A', 	'S',	'D',
2827c478bd9Sstevel@tonic-gate /* 80 */	'F',	'G',	'H',	'J',	'K',	'L',	':',	'"',
2837c478bd9Sstevel@tonic-gate /* 88 */	'|',	'\r',	BF(11),	STRING+LEFTARROW,
2847c478bd9Sstevel@tonic-gate 						RF(11),	STRING+RIGHTARROW,
2857c478bd9Sstevel@tonic-gate 								BF(8),	LF(9),
2867c478bd9Sstevel@tonic-gate /* 96 */	HOLE,	LF(10),	SHIFTKEYS+NUMLOCK,
2877c478bd9Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
2887c478bd9Sstevel@tonic-gate 						'Z',	'X',	'C',	'V',
2897c478bd9Sstevel@tonic-gate /*104 */	'B',	'N',	'M',	'<',	'>',	'?',	SHIFTKEYS+RIGHTSHIFT,
2907c478bd9Sstevel@tonic-gate 									'\n',
2917c478bd9Sstevel@tonic-gate /*112 */	RF(13),	STRING+DOWNARROW,
2927c478bd9Sstevel@tonic-gate 				RF(15),	HOLE,	HOLE,	HOLE,	LF(16),	SHIFTKEYS+CAPSLOCK,
2937c478bd9Sstevel@tonic-gate /*120 */	BUCKYBITS+METABIT,
2947c478bd9Sstevel@tonic-gate 			' ',	BUCKYBITS+METABIT,
2957c478bd9Sstevel@tonic-gate 					HOLE,	HOLE,	BF(14),	ERROR,	IDLE,
2967c478bd9Sstevel@tonic-gate /* END CSTYLED */
2977c478bd9Sstevel@tonic-gate };
2987c478bd9Sstevel@tonic-gate 
2997c478bd9Sstevel@tonic-gate /* Caps Locked keyboard table for Type 4 keyboard */
3007c478bd9Sstevel@tonic-gate 
3017c478bd9Sstevel@tonic-gate static struct keymap keytab_s4_cl = {
3027c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
3037c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	BUCKYBITS+SYSTEMBIT,
3047c478bd9Sstevel@tonic-gate 				HOLE,	LF(2),	HOLE,	TF(1),	TF(2),	TF(10),
3057c478bd9Sstevel@tonic-gate /*  8 */	TF(3), 	TF(11),	TF(4),	TF(12),	TF(5),	SHIFTKEYS+ALTGRAPH,
3067c478bd9Sstevel@tonic-gate 								TF(6),	HOLE,
3077c478bd9Sstevel@tonic-gate /* 16 */	TF(7),	TF(8),	TF(9),	SHIFTKEYS+ALT,
3087c478bd9Sstevel@tonic-gate 						HOLE,	RF(1),	RF(2),	RF(3),
3097c478bd9Sstevel@tonic-gate /* 24 */	HOLE, 	LF(3), 	LF(4),	HOLE,	HOLE,	ESC,	'1',	'2',
3107c478bd9Sstevel@tonic-gate /* 32 */	'3',	'4',	'5',	'6',	'7',	'8',	'9',	'0',
3117c478bd9Sstevel@tonic-gate /* 40 */	'-',	'=',	'`',	'\b',	HOLE,	RF(4),	RF(5),	RF(6),
3127c478bd9Sstevel@tonic-gate /* 48 */	BF(13),	LF(5),	BF(10),	LF(6),	HOLE,	'\t',	'Q',	'W',
3137c478bd9Sstevel@tonic-gate /* 56 */	'E',	'R',	'T',	'Y',	'U',	'I',	'O',	'P',
3147c478bd9Sstevel@tonic-gate /* 64 */	'[',	']',	DEL,	COMPOSE,
3157c478bd9Sstevel@tonic-gate 						RF(7),	STRING+UPARROW,
3167c478bd9Sstevel@tonic-gate 								RF(9),	BF(15),
3177c478bd9Sstevel@tonic-gate /* 72 */	LF(7),	LF(8),	HOLE,	HOLE,	SHIFTKEYS+LEFTCTRL,
3187c478bd9Sstevel@tonic-gate 							'A', 	'S',	'D',
3197c478bd9Sstevel@tonic-gate /* 80 */	'F',	'G',	'H',	'J',	'K',	'L',	';',	'\'',
3207c478bd9Sstevel@tonic-gate /* 88 */	'\\',	'\r',	BF(11),	STRING+LEFTARROW,
3217c478bd9Sstevel@tonic-gate 						RF(11),	STRING+RIGHTARROW,
3227c478bd9Sstevel@tonic-gate 								BF(8),	LF(9),
3237c478bd9Sstevel@tonic-gate /* 96 */	HOLE,	LF(10),	SHIFTKEYS+NUMLOCK,
3247c478bd9Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
3257c478bd9Sstevel@tonic-gate 						'Z',	'X',	'C',	'V',
3267c478bd9Sstevel@tonic-gate /*104 */	'B',	'N',	'M',	',',	'.',	'/',	SHIFTKEYS+RIGHTSHIFT,
3277c478bd9Sstevel@tonic-gate 									'\n',
3287c478bd9Sstevel@tonic-gate /*112 */	RF(13),	STRING+DOWNARROW,
3297c478bd9Sstevel@tonic-gate 				RF(15),	HOLE,	HOLE,	HOLE,	LF(16),	SHIFTKEYS+CAPSLOCK,
3307c478bd9Sstevel@tonic-gate /*120 */	BUCKYBITS+METABIT,
3317c478bd9Sstevel@tonic-gate 			' ',	BUCKYBITS+METABIT,
3327c478bd9Sstevel@tonic-gate 					HOLE,	HOLE,	BF(14),	ERROR,	IDLE,
3337c478bd9Sstevel@tonic-gate /* END CSTYLED */
3347c478bd9Sstevel@tonic-gate };
3357c478bd9Sstevel@tonic-gate 
3367c478bd9Sstevel@tonic-gate /* Alt Graph keyboard table for Type 4 keyboard */
3377c478bd9Sstevel@tonic-gate 
3387c478bd9Sstevel@tonic-gate static struct keymap keytab_s4_ag = {
3397c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
3407c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	BUCKYBITS+SYSTEMBIT,
3417c478bd9Sstevel@tonic-gate 				HOLE,	LF(2),	HOLE,	TF(1),	TF(2),	TF(10),
3427c478bd9Sstevel@tonic-gate /*  8 */	TF(3), 	TF(11),	TF(4),	TF(12),	TF(5),	SHIFTKEYS+ALTGRAPH,
3437c478bd9Sstevel@tonic-gate 								TF(6),	HOLE,
3447c478bd9Sstevel@tonic-gate /* 16 */	TF(7),	TF(8),	TF(9),	SHIFTKEYS+ALT,
3457c478bd9Sstevel@tonic-gate 						HOLE,	RF(1),	RF(2),	RF(3),
3467c478bd9Sstevel@tonic-gate /* 24 */	HOLE, 	LF(3), 	LF(4),	HOLE,	HOLE,	ESC,	NOP,	NOP,
3477c478bd9Sstevel@tonic-gate /* 32 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3487c478bd9Sstevel@tonic-gate /* 40 */	NOP,	NOP,	NOP,	'\b',	HOLE,	RF(4),	RF(5),	RF(6),
3497c478bd9Sstevel@tonic-gate /* 48 */	BF(13),	LF(5),	BF(10),	LF(6),	HOLE,	'\t',	NOP,	NOP,
3507c478bd9Sstevel@tonic-gate /* 56 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3517c478bd9Sstevel@tonic-gate /* 64 */	NOP,	NOP,	DEL,	COMPOSE,
3527c478bd9Sstevel@tonic-gate 						RF(7),	STRING+UPARROW,
3537c478bd9Sstevel@tonic-gate 								RF(9),	BF(15),
3547c478bd9Sstevel@tonic-gate /* 72 */	LF(7),	LF(8),	HOLE,	HOLE,	SHIFTKEYS+LEFTCTRL,
3557c478bd9Sstevel@tonic-gate 							NOP, 	NOP,	NOP,
3567c478bd9Sstevel@tonic-gate /* 80 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
3577c478bd9Sstevel@tonic-gate /* 88 */	NOP,	'\r',	BF(11),	STRING+LEFTARROW,
3587c478bd9Sstevel@tonic-gate 						RF(11),	STRING+RIGHTARROW,
3597c478bd9Sstevel@tonic-gate 								BF(8),	LF(9),
3607c478bd9Sstevel@tonic-gate /* 96 */	HOLE,	LF(10),	SHIFTKEYS+NUMLOCK,
3617c478bd9Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
3627c478bd9Sstevel@tonic-gate 						NOP,	NOP,	NOP,	NOP,
3637c478bd9Sstevel@tonic-gate /*104 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	SHIFTKEYS+RIGHTSHIFT,
3647c478bd9Sstevel@tonic-gate 									'\n',
3657c478bd9Sstevel@tonic-gate /*112 */	RF(13),	STRING+DOWNARROW,
3667c478bd9Sstevel@tonic-gate 				RF(15),	HOLE,	HOLE,	HOLE,	LF(16),	SHIFTKEYS+CAPSLOCK,
3677c478bd9Sstevel@tonic-gate /*120 */	BUCKYBITS+METABIT,
3687c478bd9Sstevel@tonic-gate 			' ',	BUCKYBITS+METABIT,
3697c478bd9Sstevel@tonic-gate 					HOLE,	HOLE,	BF(14),	ERROR,	IDLE,
3707c478bd9Sstevel@tonic-gate /* END CSTYLED */
3717c478bd9Sstevel@tonic-gate };
3727c478bd9Sstevel@tonic-gate 
3737c478bd9Sstevel@tonic-gate /* Num Locked keyboard table for Type 4 keyboard */
3747c478bd9Sstevel@tonic-gate 
3757c478bd9Sstevel@tonic-gate static struct keymap keytab_s4_nl = {
3767c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
3777c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	NONL,	HOLE,	NONL,	HOLE,	NONL,	NONL,	NONL,
3787c478bd9Sstevel@tonic-gate /*  8 */	NONL, 	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	HOLE,
3797c478bd9Sstevel@tonic-gate /* 16 */	NONL,	NONL,	NONL,	NONL,	HOLE,	NONL,	NONL,	NONL,
3807c478bd9Sstevel@tonic-gate /* 24 */	HOLE, 	NONL, 	NONL,	HOLE,	HOLE,	NONL,	NONL,	NONL,
3817c478bd9Sstevel@tonic-gate /* 32 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
3827c478bd9Sstevel@tonic-gate /* 40 */	NONL,	NONL,	NONL,	NONL,	HOLE,	PADEQUAL,
3837c478bd9Sstevel@tonic-gate 								PADSLASH,
3847c478bd9Sstevel@tonic-gate 									PADSTAR,
3857c478bd9Sstevel@tonic-gate /* 48 */	NONL,	NONL,	PADDOT,	NONL,	HOLE,	NONL,	NONL,	NONL,
3867c478bd9Sstevel@tonic-gate /* 56 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
3877c478bd9Sstevel@tonic-gate /* 64 */	NONL,	NONL,	NONL,	NONL,
3887c478bd9Sstevel@tonic-gate 						PAD7,	PAD8,	PAD9,	PADMINUS,
3897c478bd9Sstevel@tonic-gate /* 72 */	NONL,	NONL,	HOLE,	HOLE,	NONL,	NONL, 	NONL,	NONL,
3907c478bd9Sstevel@tonic-gate /* 80 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
3917c478bd9Sstevel@tonic-gate /* 88 */	NONL,	NONL,	PADENTER,
3927c478bd9Sstevel@tonic-gate 					PAD4,	PAD5,	PAD6,	PAD0,	NONL,
3937c478bd9Sstevel@tonic-gate /* 96 */	HOLE,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
3947c478bd9Sstevel@tonic-gate /*104 */	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,	NONL,
3957c478bd9Sstevel@tonic-gate 									NONL,
3967c478bd9Sstevel@tonic-gate /*112 */	PAD1,	PAD2,	PAD3,	HOLE,	HOLE,	HOLE,	NONL,	NONL,
3977c478bd9Sstevel@tonic-gate /*120 */	NONL,	NONL,	NONL,	HOLE,	HOLE,	PADPLUS,
3987c478bd9Sstevel@tonic-gate 								ERROR,	IDLE,
3997c478bd9Sstevel@tonic-gate /* END CSTYLED */
4007c478bd9Sstevel@tonic-gate };
4017c478bd9Sstevel@tonic-gate 
4027c478bd9Sstevel@tonic-gate /* Controlled keyboard table for Type 4 keyboard */
4037c478bd9Sstevel@tonic-gate 
4047c478bd9Sstevel@tonic-gate static struct keymap keytab_s4_ct = {
4057c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
4067c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	BUCKYBITS+SYSTEMBIT,
4077c478bd9Sstevel@tonic-gate 				HOLE,	LF(2),	HOLE,	TF(1),	TF(2),	TF(10),
4087c478bd9Sstevel@tonic-gate /*  8 */	TF(3), 	TF(11),	TF(4),	TF(12),	TF(5),	SHIFTKEYS+ALTGRAPH,
4097c478bd9Sstevel@tonic-gate 								TF(6),	HOLE,
4107c478bd9Sstevel@tonic-gate /* 16 */	TF(7),	TF(8),	TF(9),	SHIFTKEYS+ALT,
4117c478bd9Sstevel@tonic-gate 						HOLE,	RF(1),	RF(2),	RF(3),
4127c478bd9Sstevel@tonic-gate /* 24 */	HOLE, 	LF(3), 	LF(4),	HOLE,	HOLE,	ESC,	'1',	c('@'),
4137c478bd9Sstevel@tonic-gate /* 32 */	'3',	'4',	'5',	c('^'),	'7',	'8',	'9',	'0',
4147c478bd9Sstevel@tonic-gate /* 40 */	c('_'),	'=',	c('^'),	'\b',	HOLE,	RF(4),	RF(5),	RF(6),
4157c478bd9Sstevel@tonic-gate /* 48 */	BF(13),	LF(5),	BF(10),	LF(6),	HOLE,	'\t',   c('q'),	c('w'),
4167c478bd9Sstevel@tonic-gate /* 56 */	c('e'),	c('r'),	c('t'),	c('y'),	c('u'),	c('i'),	c('o'),	c('p'),
4177c478bd9Sstevel@tonic-gate /* 64 */	c('['),	c(']'),	DEL,	COMPOSE,
4187c478bd9Sstevel@tonic-gate 						RF(7),	STRING+UPARROW,
4197c478bd9Sstevel@tonic-gate 								RF(9),	BF(15),
4207c478bd9Sstevel@tonic-gate /* 72 */	LF(7),	LF(8),	HOLE,	HOLE,	SHIFTKEYS+LEFTCTRL,
4217c478bd9Sstevel@tonic-gate 							c('a'),	c('s'),	c('d'),
4227c478bd9Sstevel@tonic-gate /* 80 */	c('f'),	c('g'),	c('h'),	c('j'),	c('k'),	c('l'),	';',	'\'',
4237c478bd9Sstevel@tonic-gate /* 88 */	c('\\'),
4247c478bd9Sstevel@tonic-gate 			'\r',	BF(11),	STRING+LEFTARROW,
4257c478bd9Sstevel@tonic-gate 						RF(11),	STRING+RIGHTARROW,
4267c478bd9Sstevel@tonic-gate 								BF(8),	LF(9),
4277c478bd9Sstevel@tonic-gate /* 96 */	HOLE,	LF(10),	SHIFTKEYS+NUMLOCK,
4287c478bd9Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
4297c478bd9Sstevel@tonic-gate 						c('z'),	c('x'),	c('c'),	c('v'),
4307c478bd9Sstevel@tonic-gate /*104 */	c('b'),	c('n'),	c('m'),	',',	'.',	c('_'),	SHIFTKEYS+RIGHTSHIFT,
4317c478bd9Sstevel@tonic-gate 									'\n',
4327c478bd9Sstevel@tonic-gate /*112 */	RF(13),	STRING+DOWNARROW,
4337c478bd9Sstevel@tonic-gate 				RF(15),	HOLE,	HOLE,	HOLE,	LF(16),	SHIFTKEYS+CAPSLOCK,
4347c478bd9Sstevel@tonic-gate /*120 */	BUCKYBITS+METABIT,
4357c478bd9Sstevel@tonic-gate 			c(' '),	BUCKYBITS+METABIT,
4367c478bd9Sstevel@tonic-gate 					HOLE,	HOLE,	BF(14),	ERROR,	IDLE,
4377c478bd9Sstevel@tonic-gate /* END CSTYLED */
4387c478bd9Sstevel@tonic-gate };
4397c478bd9Sstevel@tonic-gate 
4407c478bd9Sstevel@tonic-gate /* "Key Up" keyboard table for Type 4 keyboard */
4417c478bd9Sstevel@tonic-gate 
4427c478bd9Sstevel@tonic-gate static struct keymap keytab_s4_up = {
4437c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
4447c478bd9Sstevel@tonic-gate /*  0 */	HOLE,	BUCKYBITS+SYSTEMBIT,
4457c478bd9Sstevel@tonic-gate 				HOLE,	NOP,	HOLE,	NOP,	NOP,	NOP,
4467c478bd9Sstevel@tonic-gate /*  8 */	NOP, 	NOP, 	NOP,	NOP,	NOP,	SHIFTKEYS+ALTGRAPH,
4477c478bd9Sstevel@tonic-gate 								NOP,	HOLE,
4487c478bd9Sstevel@tonic-gate /* 16 */	NOP, 	NOP, 	NOP,	SHIFTKEYS+ALT,
4497c478bd9Sstevel@tonic-gate 						HOLE,	NOP,	NOP,	NOP,
4507c478bd9Sstevel@tonic-gate /* 24 */	HOLE, 	NOP, 	NOP,	HOLE,	HOLE,	NOP,	NOP,	NOP,
4517c478bd9Sstevel@tonic-gate /* 32 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
4527c478bd9Sstevel@tonic-gate /* 40 */	NOP,	NOP,	NOP,	NOP,	HOLE,	NOP,	NOP,	NOP,
4537c478bd9Sstevel@tonic-gate /* 48 */	NOP,	NOP,	NOP,	NOP,	HOLE,	NOP,	NOP,	NOP,
4547c478bd9Sstevel@tonic-gate /* 56 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
4557c478bd9Sstevel@tonic-gate /* 64 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
4567c478bd9Sstevel@tonic-gate /* 72 */	NOP,	NOP,	HOLE,	HOLE,	SHIFTKEYS+LEFTCTRL,
4577c478bd9Sstevel@tonic-gate 							NOP, 	NOP,	NOP,
4587c478bd9Sstevel@tonic-gate /* 80 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
4597c478bd9Sstevel@tonic-gate /* 88 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,
4607c478bd9Sstevel@tonic-gate /* 96 */	HOLE,	NOP,	NOP,
4617c478bd9Sstevel@tonic-gate 					SHIFTKEYS+LEFTSHIFT,
4627c478bd9Sstevel@tonic-gate 						NOP,	NOP,	NOP,	NOP,
4637c478bd9Sstevel@tonic-gate /*104 */	NOP,	NOP,	NOP,	NOP,	NOP,	NOP,	SHIFTKEYS+RIGHTSHIFT,
4647c478bd9Sstevel@tonic-gate 									NOP,
4657c478bd9Sstevel@tonic-gate /*112 */	NOP,	NOP,	NOP,	HOLE,	HOLE,	HOLE,	NOP,	NOP,
4667c478bd9Sstevel@tonic-gate /*120 */	BUCKYBITS+METABIT,
4677c478bd9Sstevel@tonic-gate 			NOP,	BUCKYBITS+METABIT,
4687c478bd9Sstevel@tonic-gate 					HOLE,	HOLE,	NOP,	HOLE,	RESET,
4697c478bd9Sstevel@tonic-gate /* END CSTYLED */
4707c478bd9Sstevel@tonic-gate };
4717c478bd9Sstevel@tonic-gate 
4727c478bd9Sstevel@tonic-gate /* Index to keymaps for Type 4 keyboard */
4737c478bd9Sstevel@tonic-gate static struct keyboard keyindex_s4 = {
4747c478bd9Sstevel@tonic-gate 	&keytab_s4_lc,
4757c478bd9Sstevel@tonic-gate 	&keytab_s4_uc,
4767c478bd9Sstevel@tonic-gate 	&keytab_s4_cl,
4777c478bd9Sstevel@tonic-gate 	&keytab_s4_ag,
4787c478bd9Sstevel@tonic-gate 	&keytab_s4_nl,
4797c478bd9Sstevel@tonic-gate 	&keytab_s4_ct,
4807c478bd9Sstevel@tonic-gate 	&keytab_s4_up,
4817c478bd9Sstevel@tonic-gate 	0x0000,		/* Shift bits which stay on with idle keyboard */
4827c478bd9Sstevel@tonic-gate 	0x0000,		/* Bucky bits which stay on with idle keyboard */
4837c478bd9Sstevel@tonic-gate 	1, 0,	77,	/* abort keys */
4847c478bd9Sstevel@tonic-gate 	CAPSMASK|NUMLOCKMASK,	/* Shift bits which toggle on down event */
4857c478bd9Sstevel@tonic-gate 	NULL,
486*e4603304Sqz 	99, 110, 21,	/* New abort keys */
4877c478bd9Sstevel@tonic-gate };
4887c478bd9Sstevel@tonic-gate 
4897c478bd9Sstevel@tonic-gate 
4907c478bd9Sstevel@tonic-gate /*
4917c478bd9Sstevel@tonic-gate  * Index table for the whole shebang
4927c478bd9Sstevel@tonic-gate  * The first entry is used as the default if the id isn't recognized.
4937c478bd9Sstevel@tonic-gate  */
4947c478bd9Sstevel@tonic-gate struct keyboards keytables[] = {
4957c478bd9Sstevel@tonic-gate 	KB_SUN3,	&keyindex_s3,
4967c478bd9Sstevel@tonic-gate 	KB_SUN4,	&keyindex_s4,
4977c478bd9Sstevel@tonic-gate 	0,		NULL,
4987c478bd9Sstevel@tonic-gate };
4997c478bd9Sstevel@tonic-gate 
5007c478bd9Sstevel@tonic-gate /*
5017c478bd9Sstevel@tonic-gate  * Keyboard String Table
5027c478bd9Sstevel@tonic-gate  *
5037c478bd9Sstevel@tonic-gate  * This defines the strings sent by various keys (as selected in the
5047c478bd9Sstevel@tonic-gate  * tables above).
5057c478bd9Sstevel@tonic-gate  * The first byte of each string is its length, the rest is data.
5067c478bd9Sstevel@tonic-gate  */
5077c478bd9Sstevel@tonic-gate 
5087c478bd9Sstevel@tonic-gate #ifdef	__STDC__
5097c478bd9Sstevel@tonic-gate /*
5107c478bd9Sstevel@tonic-gate  * XXX	This is here to silence compiler warnings. The non-ansi-c form
5117c478bd9Sstevel@tonic-gate  *	is retained if somebody can figure out how to replicate it in
5127c478bd9Sstevel@tonic-gate  *	ansi-c.
5137c478bd9Sstevel@tonic-gate  */
5147c478bd9Sstevel@tonic-gate char keystringtab[16][KTAB_STRLEN] = {
5157c478bd9Sstevel@tonic-gate 	{ '\033', '[', 'H', '\0' },	/* home */
5167c478bd9Sstevel@tonic-gate 	{ '\033', '[', 'A', '\0' },	/* up */
5177c478bd9Sstevel@tonic-gate 	{ '\033', '[', 'B', '\0' },	/* down */
5187c478bd9Sstevel@tonic-gate 	{ '\033', '[', 'D', '\0' },	/* left */
5197c478bd9Sstevel@tonic-gate 	{ '\033', '[', 'C', '\0' },	/* right */
5207c478bd9Sstevel@tonic-gate };
5217c478bd9Sstevel@tonic-gate #else	/* __STDC__ */
5227c478bd9Sstevel@tonic-gate #define	kstescinit(c)	{'\033', '[', 'c', '\0'}
5237c478bd9Sstevel@tonic-gate char keystringtab[16][KTAB_STRLEN] = {
5247c478bd9Sstevel@tonic-gate 	kstescinit(H) /* home */,
5257c478bd9Sstevel@tonic-gate 	kstescinit(A) /* up */,
5267c478bd9Sstevel@tonic-gate 	kstescinit(B) /* down */,
5277c478bd9Sstevel@tonic-gate 	kstescinit(D) /* left */,
5287c478bd9Sstevel@tonic-gate 	kstescinit(C) /* right */,
5297c478bd9Sstevel@tonic-gate };
5307c478bd9Sstevel@tonic-gate #endif	/* __STDC__ */
5317c478bd9Sstevel@tonic-gate 
5327c478bd9Sstevel@tonic-gate 
5337c478bd9Sstevel@tonic-gate /*
5347c478bd9Sstevel@tonic-gate  * Compose Key Sequence Table
5357c478bd9Sstevel@tonic-gate  *
5367c478bd9Sstevel@tonic-gate  * Taken from Suncompose.h of openwindows.
5377c478bd9Sstevel@tonic-gate  *
5387c478bd9Sstevel@tonic-gate  * The idea here is to create a simple index into a table of
5397c478bd9Sstevel@tonic-gate  * compose key sequences.  The purpose is to provide a fast
5407c478bd9Sstevel@tonic-gate  * lookup mechanism using as little space as possible (while
5417c478bd9Sstevel@tonic-gate  * still using a table of triplets).
5427c478bd9Sstevel@tonic-gate  *
5437c478bd9Sstevel@tonic-gate  * For reference, here is the set of all composable characters:
5447c478bd9Sstevel@tonic-gate  * SP !\"\'*+,-./01234:<>?ACDEHILNOPRSTUXY\\^_`acdehilnoprstuxy|~
5457c478bd9Sstevel@tonic-gate  *
5467c478bd9Sstevel@tonic-gate  * if ascii_char[i] is not composable,
5477c478bd9Sstevel@tonic-gate  *	kb_compose_map[i] is -1
5487c478bd9Sstevel@tonic-gate  * else
5497c478bd9Sstevel@tonic-gate  * 	if ascii_char[i] appears as a first char in compose_table,
5507c478bd9Sstevel@tonic-gate  *		kb_compose_map[i] is the index of it's first appearance
5517c478bd9Sstevel@tonic-gate  *	else
5527c478bd9Sstevel@tonic-gate  *		kb_compose_map[i] is 112	(end of table)
5537c478bd9Sstevel@tonic-gate  */
5547c478bd9Sstevel@tonic-gate 
5557c478bd9Sstevel@tonic-gate signed char kb_compose_map[ASCII_SET_SIZE] = {
5567c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
5577c478bd9Sstevel@tonic-gate 	 -1,	/* 000 (^@) */
5587c478bd9Sstevel@tonic-gate 	 -1,	/* 001 (^A) */
5597c478bd9Sstevel@tonic-gate 	 -1,	/* 002 (^B) */
5607c478bd9Sstevel@tonic-gate 	 -1,	/* 003 (^C) */
5617c478bd9Sstevel@tonic-gate 	 -1,	/* 004 (^D) */
5627c478bd9Sstevel@tonic-gate 	 -1,	/* 005 (^E) */
5637c478bd9Sstevel@tonic-gate 	 -1,	/* 006 (^F) */
5647c478bd9Sstevel@tonic-gate 	 -1,	/* 007 (^G) */
5657c478bd9Sstevel@tonic-gate 	 -1,	/* 008 (^H) */
5667c478bd9Sstevel@tonic-gate 	 -1,	/* 009 (^I) */
5677c478bd9Sstevel@tonic-gate 	 -1,	/* 010 (^J) */
5687c478bd9Sstevel@tonic-gate 	 -1,	/* 011 (^K) */
5697c478bd9Sstevel@tonic-gate 	 -1,	/* 012 (^L) */
5707c478bd9Sstevel@tonic-gate 	 -1,	/* 013 (^M) */
5717c478bd9Sstevel@tonic-gate 	 -1,	/* 014 (^N) */
5727c478bd9Sstevel@tonic-gate 	 -1,	/* 015 (^O) */
5737c478bd9Sstevel@tonic-gate 	 -1,	/* 016 (^P) */
5747c478bd9Sstevel@tonic-gate 	 -1,	/* 017 (^Q) */
5757c478bd9Sstevel@tonic-gate 	 -1,	/* 018 (^R) */
5767c478bd9Sstevel@tonic-gate 	 -1,	/* 019 (^S) */
5777c478bd9Sstevel@tonic-gate 	 -1,	/* 020 (^T) */
5787c478bd9Sstevel@tonic-gate 	 -1,	/* 021 (^U) */
5797c478bd9Sstevel@tonic-gate 	 -1,	/* 022 (^V) */
5807c478bd9Sstevel@tonic-gate 	 -1,	/* 023 (^W) */
5817c478bd9Sstevel@tonic-gate 	 -1,	/* 024 (^X) */
5827c478bd9Sstevel@tonic-gate 	 -1,	/* 025 (^Y) */
5837c478bd9Sstevel@tonic-gate 	 -1,	/* 026 (^Z) */
5847c478bd9Sstevel@tonic-gate 	 -1,	/* 027 (^[) */
5857c478bd9Sstevel@tonic-gate 	 -1,	/* 028 (^\) */
5867c478bd9Sstevel@tonic-gate 	 -1,	/* 029 (^]) */
5877c478bd9Sstevel@tonic-gate 	 -1,	/* 030 (^^) */
5887c478bd9Sstevel@tonic-gate 	 -1,	/* 031 (^_) */
5897c478bd9Sstevel@tonic-gate 	  0,	/* 032 (SP) */
5907c478bd9Sstevel@tonic-gate 	  1,	/* 033 (!) */
5917c478bd9Sstevel@tonic-gate 	  4,	/* 034 (") */
5927c478bd9Sstevel@tonic-gate 	 -1,	/* 035 (#) */
5937c478bd9Sstevel@tonic-gate 	 -1,	/* 036 ($) */
5947c478bd9Sstevel@tonic-gate 	 -1,	/* 037 (%) */
5957c478bd9Sstevel@tonic-gate 	 -1,	/* 038 (&) */
5967c478bd9Sstevel@tonic-gate 	 16,	/* 039 (') */
5977c478bd9Sstevel@tonic-gate 	 -1,	/* 040 (() */
5987c478bd9Sstevel@tonic-gate 	 -1,	/* 041 ()) */
5997c478bd9Sstevel@tonic-gate 	 28,	/* 042 (*) */
6007c478bd9Sstevel@tonic-gate 	 31,	/* 043 (+) */
6017c478bd9Sstevel@tonic-gate 	 32,	/* 044 (,) */
6027c478bd9Sstevel@tonic-gate 	 36,	/* 045 (-) */
6037c478bd9Sstevel@tonic-gate 	 48,	/* 046 (.) */
6047c478bd9Sstevel@tonic-gate 	 49,	/* 047 (/) */
6057c478bd9Sstevel@tonic-gate 	 54,	/* 048 (0) */
6067c478bd9Sstevel@tonic-gate 	 57,	/* 049 (1) */
6077c478bd9Sstevel@tonic-gate 	 60,	/* 050 (2) */
6087c478bd9Sstevel@tonic-gate 	 61,	/* 051 (3) */
6097c478bd9Sstevel@tonic-gate 	112,	/* 052 (4) */
6107c478bd9Sstevel@tonic-gate 	 -1,	/* 053 (5) */
6117c478bd9Sstevel@tonic-gate 	 -1,	/* 054 (6) */
6127c478bd9Sstevel@tonic-gate 	 -1,	/* 055 (7) */
6137c478bd9Sstevel@tonic-gate 	 -1,	/* 056 (8) */
6147c478bd9Sstevel@tonic-gate 	 -1,	/* 057 (9) */
6157c478bd9Sstevel@tonic-gate 	112,	/* 058 (:) */
6167c478bd9Sstevel@tonic-gate 	 -1,	/* 059 (;) */
6177c478bd9Sstevel@tonic-gate 	 63,	/* 060 (<) */
6187c478bd9Sstevel@tonic-gate 	 -1,	/* 061 (=) */
6197c478bd9Sstevel@tonic-gate 	 64,	/* 062 (>) */
6207c478bd9Sstevel@tonic-gate 	 65,	/* 063 (?) */
6217c478bd9Sstevel@tonic-gate 	 -1,	/* 064 (@) */
6227c478bd9Sstevel@tonic-gate 	 66,	/* 065 (A) */
6237c478bd9Sstevel@tonic-gate 	 -1,	/* 066 (B) */
6247c478bd9Sstevel@tonic-gate 	 70,	/* 067 (C) */
6257c478bd9Sstevel@tonic-gate 	112,	/* 068 (D) */
6267c478bd9Sstevel@tonic-gate 	 71,	/* 069 (E) */
6277c478bd9Sstevel@tonic-gate 	 -1,	/* 070 (F) */
6287c478bd9Sstevel@tonic-gate 	 -1,	/* 071 (G) */
6297c478bd9Sstevel@tonic-gate 	 73,	/* 072 (H) */
6307c478bd9Sstevel@tonic-gate 	 74,	/* 073 (I) */
6317c478bd9Sstevel@tonic-gate 	 -1,	/* 074 (J) */
6327c478bd9Sstevel@tonic-gate 	 -1,	/* 075 (K) */
6337c478bd9Sstevel@tonic-gate 	112,	/* 076 (L) */
6347c478bd9Sstevel@tonic-gate 	 -1,	/* 077 (M) */
6357c478bd9Sstevel@tonic-gate 	 76,	/* 078 (N) */
6367c478bd9Sstevel@tonic-gate 	 77,	/* 079 (O) */
6377c478bd9Sstevel@tonic-gate 	 84,	/* 080 (P) */
6387c478bd9Sstevel@tonic-gate 	 -1,	/* 081 (Q) */
6397c478bd9Sstevel@tonic-gate 	112,	/* 082 (R) */
6407c478bd9Sstevel@tonic-gate 	112,	/* 083 (S) */
6417c478bd9Sstevel@tonic-gate 	112,	/* 084 (T) */
6427c478bd9Sstevel@tonic-gate 	 85,	/* 085 (U) */
6437c478bd9Sstevel@tonic-gate 	 -1,	/* 086 (V) */
6447c478bd9Sstevel@tonic-gate 	 -1,	/* 087 (W) */
6457c478bd9Sstevel@tonic-gate 	112,	/* 088 (X) */
6467c478bd9Sstevel@tonic-gate 	112,	/* 089 (Y) */
6477c478bd9Sstevel@tonic-gate 	 -1,	/* 090 (Z) */
6487c478bd9Sstevel@tonic-gate 	 -1,	/* 091 ([) */
6497c478bd9Sstevel@tonic-gate 	 87,	/* 092 (\) */
6507c478bd9Sstevel@tonic-gate 	 -1,	/* 093 (]) */
6517c478bd9Sstevel@tonic-gate 	 88,	/* 094 (^) */
6527c478bd9Sstevel@tonic-gate 	 93,	/* 095 (_) */
6537c478bd9Sstevel@tonic-gate 	 94,	/* 096 (`) */
6547c478bd9Sstevel@tonic-gate 	 99,	/* 097 (a) */
6557c478bd9Sstevel@tonic-gate 	 -1,	/* 098 (b) */
6567c478bd9Sstevel@tonic-gate 	101,	/* 099 (c) */
6577c478bd9Sstevel@tonic-gate 	112,	/* 100 (d) */
6587c478bd9Sstevel@tonic-gate 	112,	/* 101 (e) */
6597c478bd9Sstevel@tonic-gate 	 -1,	/* 102 (f) */
6607c478bd9Sstevel@tonic-gate 	 -1,	/* 103 (g) */
6617c478bd9Sstevel@tonic-gate 	102,	/* 104 (h) */
6627c478bd9Sstevel@tonic-gate 	112,	/* 105 (i) */
6637c478bd9Sstevel@tonic-gate 	 -1,	/* 106 (j) */
6647c478bd9Sstevel@tonic-gate 	 -1,	/* 107 (k) */
6657c478bd9Sstevel@tonic-gate 	112,	/* 108 (l) */
6667c478bd9Sstevel@tonic-gate 	 -1,	/* 109 (m) */
6677c478bd9Sstevel@tonic-gate 	103,	/* 110 (n) */
6687c478bd9Sstevel@tonic-gate 	104,	/* 111 (o) */
6697c478bd9Sstevel@tonic-gate 	108,	/* 112 (p) */
6707c478bd9Sstevel@tonic-gate 	 -1,	/* 113 (q) */
6717c478bd9Sstevel@tonic-gate 	112,	/* 114 (r) */
6727c478bd9Sstevel@tonic-gate 	109,	/* 115 (s) */
6737c478bd9Sstevel@tonic-gate 	112,	/* 116 (t) */
6747c478bd9Sstevel@tonic-gate 	112,	/* 117 (u) */
6757c478bd9Sstevel@tonic-gate 	 -1,	/* 118 (v) */
6767c478bd9Sstevel@tonic-gate 	 -1,	/* 119 (w) */
6777c478bd9Sstevel@tonic-gate 	110,	/* 120 (x) */
6787c478bd9Sstevel@tonic-gate 	112,	/* 121 (y) */
6797c478bd9Sstevel@tonic-gate 	 -1,	/* 122 (z) */
6807c478bd9Sstevel@tonic-gate 	 -1,	/* 123 ({) */
6817c478bd9Sstevel@tonic-gate 	111,	/* 124 (|) */
6827c478bd9Sstevel@tonic-gate 	 -1,	/* 125 (}) */
6837c478bd9Sstevel@tonic-gate 	112,	/* 126 (~) */
6847c478bd9Sstevel@tonic-gate 	 -1,	/* 127 (DEL) */
6857c478bd9Sstevel@tonic-gate /* END CSTYLED */
6867c478bd9Sstevel@tonic-gate };
6877c478bd9Sstevel@tonic-gate 
6887c478bd9Sstevel@tonic-gate /*
6897c478bd9Sstevel@tonic-gate  * IMPORTANT NOTE:  This table MUST be kept in proper sorted order:
6907c478bd9Sstevel@tonic-gate  * 	The first and second characters in each entry must be in ASCII
6917c478bd9Sstevel@tonic-gate  *	    collating sequence (left to right).
6927c478bd9Sstevel@tonic-gate  *	The table must be in ASCII collating sequence by first character
6937c478bd9Sstevel@tonic-gate  *	    (top to bottom).
6947c478bd9Sstevel@tonic-gate  */
6957c478bd9Sstevel@tonic-gate 
6967c478bd9Sstevel@tonic-gate /* COMPOSE + first character + second character => ISO character */
6977c478bd9Sstevel@tonic-gate 
6987c478bd9Sstevel@tonic-gate struct compose_sequence_t kb_compose_table[] = {
6997c478bd9Sstevel@tonic-gate 
7007c478bd9Sstevel@tonic-gate /* BEGIN CSTYLED */
7017c478bd9Sstevel@tonic-gate 	{' ', ' ', 0xA0},	/* 000 */	/* NBSP (non-breaking space) */
7027c478bd9Sstevel@tonic-gate 	{'!', '!', 0xA1},	/* 001 */	/* inverted ! */
7037c478bd9Sstevel@tonic-gate 	{'!', 'P', 0xB6},	/* 002 */	/* paragraph mark */
7047c478bd9Sstevel@tonic-gate 	{'!', 'p', 0xB6},	/* 003 */	/* paragraph mark */
7057c478bd9Sstevel@tonic-gate 	{'"', '"', 0xA8},	/* 004 */	/* diaresis */
7067c478bd9Sstevel@tonic-gate 	{'"', 'A', 0xC4},	/* 005 */	/* A with diaresis */
7077c478bd9Sstevel@tonic-gate 	{'"', 'E', 0xCB},	/* 006 */	/* E with diaresis */
7087c478bd9Sstevel@tonic-gate 	{'"', 'I', 0xCF},	/* 007 */	/* I with diaresis */
7097c478bd9Sstevel@tonic-gate 	{'"', 'O', 0xD6},	/* 008 */	/* O with diaresis */
7107c478bd9Sstevel@tonic-gate 	{'"', 'U', 0xDC},	/* 009 */	/* U with diaresis */
7117c478bd9Sstevel@tonic-gate 	{'"', 'a', 0xE4},	/* 010 */	/* a with diaresis */
7127c478bd9Sstevel@tonic-gate 	{'"', 'e', 0xEB},	/* 011 */	/* e with diaresis */
7137c478bd9Sstevel@tonic-gate 	{'"', 'i', 0xEF},	/* 012 */	/* i with diaresis */
7147c478bd9Sstevel@tonic-gate 	{'"', 'o', 0xF6},	/* 013 */	/* o with diaresis */
7157c478bd9Sstevel@tonic-gate 	{'"', 'u', 0xFC},	/* 014 */	/* u with diaresis */
7167c478bd9Sstevel@tonic-gate 	{'"', 'y', 0xFF},	/* 015 */	/* y with diaresis */
7177c478bd9Sstevel@tonic-gate 	{'\'','A', 0xC1},	/* 016 */	/* A with acute accent */
7187c478bd9Sstevel@tonic-gate 	{'\'','E', 0xC9},	/* 017 */	/* E with acute accent */
7197c478bd9Sstevel@tonic-gate 	{'\'','I', 0xCD},	/* 018 */	/* I with acute accent */
7207c478bd9Sstevel@tonic-gate 	{'\'','O', 0xD3},	/* 019 */	/* O with acute accent */
7217c478bd9Sstevel@tonic-gate 	{'\'','U', 0xDA},	/* 020 */	/* U with acute accent */
7227c478bd9Sstevel@tonic-gate 	{'\'','Y', 0xDD},	/* 021 */	/* Y with acute accent */
7237c478bd9Sstevel@tonic-gate 	{'\'','a', 0xE1},	/* 022 */	/* a with acute accent */
7247c478bd9Sstevel@tonic-gate 	{'\'','e', 0xE9},	/* 023 */	/* e with acute accent */
7257c478bd9Sstevel@tonic-gate 	{'\'','i', 0xED},	/* 024 */	/* i with acute accent */
7267c478bd9Sstevel@tonic-gate 	{'\'','o', 0xF3},	/* 025 */	/* o with acute accent */
7277c478bd9Sstevel@tonic-gate 	{'\'','u', 0xFA},	/* 026 */	/* u with acute accent */
7287c478bd9Sstevel@tonic-gate 	{'\'','y', 0xFD},	/* 027 */	/* y with acute accent */
7297c478bd9Sstevel@tonic-gate 	{'*', 'A', 0xC5},	/* 028 */	/* A with ring */
7307c478bd9Sstevel@tonic-gate 	{'*', '^', 0xB0},	/* 029 */	/* degree */
7317c478bd9Sstevel@tonic-gate 	{'*', 'a', 0xE5},	/* 030 */	/* a with ring */
7327c478bd9Sstevel@tonic-gate 	{'+', '-', 0xB1},	/* 031 */	/* plus/minus */
7337c478bd9Sstevel@tonic-gate 	{',', ',', 0xB8},	/* 032 */	/* cedilla */
7347c478bd9Sstevel@tonic-gate 	{',', '-', 0xAC},	/* 033 */	/* not sign */
7357c478bd9Sstevel@tonic-gate 	{',', 'C', 0xC7},	/* 034 */	/* C with cedilla */
7367c478bd9Sstevel@tonic-gate 	{',', 'c', 0xE7},	/* 035 */	/* c with cedilla */
7377c478bd9Sstevel@tonic-gate 	{'-', '-', 0xAD},	/* 036 */	/* soft hyphen */
7387c478bd9Sstevel@tonic-gate 	{'-', ':', 0xF7},	/* 037 */	/* division sign */
7397c478bd9Sstevel@tonic-gate 	{'-', 'A', 0xAA},	/* 038 */	/* feminine superior numeral */
7407c478bd9Sstevel@tonic-gate 	{'-', 'D', 0xD0},	/* 039 */	/* Upper-case eth */
7417c478bd9Sstevel@tonic-gate 	{'-', 'L', 0xA3},	/* 040 */	/* pounds sterling */
7427c478bd9Sstevel@tonic-gate 	{'-', 'Y', 0xA5},	/* 041 */	/* yen */
7437c478bd9Sstevel@tonic-gate 	{'-', '^', 0xAF},	/* 042 */	/* macron */
7447c478bd9Sstevel@tonic-gate 	{'-', 'a', 0xAA},	/* 043 */	/* feminine superior numeral */
7457c478bd9Sstevel@tonic-gate 	{'-', 'd', 0xF0},	/* 044 */	/* Lower-case eth */
7467c478bd9Sstevel@tonic-gate 	{'-', 'l', 0xA3},	/* 045 */	/* pounds sterling */
7477c478bd9Sstevel@tonic-gate 	{'-', 'y', 0xA5},	/* 046 */	/* yen */
7487c478bd9Sstevel@tonic-gate 	{'-', '|', 0xAC},	/* 047 */	/* not sign */
7497c478bd9Sstevel@tonic-gate 	{'.', '^', 0xB7},	/* 048 */	/* centered dot */
7507c478bd9Sstevel@tonic-gate 	{'/', 'C', 0xA2},	/* 049 */	/* cent sign */
7517c478bd9Sstevel@tonic-gate 	{'/', 'O', 0xD8},	/* 050 */	/* O with slash */
7527c478bd9Sstevel@tonic-gate 	{'/', 'c', 0xA2},	/* 051 */	/* cent sign */
7537c478bd9Sstevel@tonic-gate 	{'/', 'o', 0xF8},	/* 052 */	/* o with slash */
7547c478bd9Sstevel@tonic-gate 	{'/', 'u', 0xB5},	/* 053 */	/* mu */
7557c478bd9Sstevel@tonic-gate 	{'0', 'X', 0xA4},	/* 054 */	/* currency symbol */
7567c478bd9Sstevel@tonic-gate 	{'0', '^', 0xB0},	/* 055 */	/* degree */
7577c478bd9Sstevel@tonic-gate 	{'0', 'x', 0xA4},	/* 056 */	/* currency symbol */
7587c478bd9Sstevel@tonic-gate 	{'1', '2', 0xBD},	/* 057 */	/* 1/2 */
7597c478bd9Sstevel@tonic-gate 	{'1', '4', 0xBC},	/* 058 */	/* 1/4 */
7607c478bd9Sstevel@tonic-gate 	{'1', '^', 0xB9},	/* 059 */	/* superior '1' */
7617c478bd9Sstevel@tonic-gate 	{'2', '^', 0xB2},	/* 060 */	/* superior '2' */
7627c478bd9Sstevel@tonic-gate 	{'3', '4', 0xBE},	/* 061 */	/* 3/4 */
7637c478bd9Sstevel@tonic-gate 	{'3', '^', 0xB3},	/* 062 */	/* superior '3' */
7647c478bd9Sstevel@tonic-gate 	{'<', '<', 0xAB},	/* 063 */	/* left guillemot */
7657c478bd9Sstevel@tonic-gate 	{'>', '>', 0xBB},	/* 064 */	/* right guillemot */
7667c478bd9Sstevel@tonic-gate 	{'?', '?', 0xBF},	/* 065 */	/* inverted ? */
7677c478bd9Sstevel@tonic-gate 	{'A', 'E', 0xC6},	/* 066 */	/* AE dipthong */
7687c478bd9Sstevel@tonic-gate 	{'A', '^', 0xC2},	/* 067 */	/* A with circumflex accent */
7697c478bd9Sstevel@tonic-gate 	{'A', '`', 0xC0},	/* 068 */	/* A with grave accent */
7707c478bd9Sstevel@tonic-gate 	{'A', '~', 0xC3},	/* 069 */	/* A with tilde */
7717c478bd9Sstevel@tonic-gate 	{'C', 'O', 0xA9},	/* 060 */	/* copyright */
7727c478bd9Sstevel@tonic-gate 	{'E', '^', 0xCA},	/* 071 */	/* E with circumflex accent */
7737c478bd9Sstevel@tonic-gate 	{'E', '`', 0xC8},	/* 072 */	/* E with grave accent */
7747c478bd9Sstevel@tonic-gate 	{'H', 'T', 0xDE},	/* 073 */	/* Upper-case thorn */
7757c478bd9Sstevel@tonic-gate 	{'I', '^', 0xCE},	/* 074 */	/* I with circumflex accent */
7767c478bd9Sstevel@tonic-gate 	{'I', '`', 0xCC},	/* 075 */	/* I with grave accent */
7777c478bd9Sstevel@tonic-gate 	{'N', '~', 0xD1},	/* 076 */	/* N with tilde */
7787c478bd9Sstevel@tonic-gate 	{'O', 'R', 0xAE},	/* 077 */	/* registered */
7797c478bd9Sstevel@tonic-gate 	{'O', 'S', 0xA7},	/* 078 */	/* section mark */
7807c478bd9Sstevel@tonic-gate 	{'O', 'X', 0xA4},	/* 079 */	/* currency symbol */
7817c478bd9Sstevel@tonic-gate 	{'O', '^', 0xD4},	/* 080 */	/* O with circumflex accent */
7827c478bd9Sstevel@tonic-gate 	{'O', '_', 0xBA},	/* 081 */	/* masculine superior numeral */
7837c478bd9Sstevel@tonic-gate 	{'O', '`', 0xD2},	/* 082 */	/* O with grave accent */
7847c478bd9Sstevel@tonic-gate 	{'O', '~', 0xD5},	/* 083 */	/* O with tilde */
7857c478bd9Sstevel@tonic-gate 	{'P', '|', 0xDE},	/* 084 */	/* Upper-case thorn */
7867c478bd9Sstevel@tonic-gate 	{'U', '^', 0xDB},	/* 085 */	/* U with circumflex accent */
7877c478bd9Sstevel@tonic-gate 	{'U', '`', 0xD9},	/* 086 */	/* U with grave accent */
7887c478bd9Sstevel@tonic-gate 	{'\\','\\',0xB4},	/* 087 */	/* acute accent */
7897c478bd9Sstevel@tonic-gate 	{'^', 'a', 0xE2},	/* 088 */	/* a with circumflex accent */
7907c478bd9Sstevel@tonic-gate 	{'^', 'e', 0xEA},	/* 089 */	/* e with circumflex accent */
7917c478bd9Sstevel@tonic-gate 	{'^', 'i', 0xEE},	/* 090 */	/* i with circumflex accent */
7927c478bd9Sstevel@tonic-gate 	{'^', 'o', 0xF4},	/* 091 */	/* o with circumflex accent */
7937c478bd9Sstevel@tonic-gate 	{'^', 'u', 0xFB},	/* 092 */	/* u with circumflex accent */
7947c478bd9Sstevel@tonic-gate 	{'_', 'o', 0xBA},	/* 093 */	/* masculine superior numeral */
7957c478bd9Sstevel@tonic-gate 	{'`', 'a', 0xE0},	/* 094 */	/* a with grave accent */
7967c478bd9Sstevel@tonic-gate 	{'`', 'e', 0xE8},	/* 095 */	/* e with grave accent */
7977c478bd9Sstevel@tonic-gate 	{'`', 'i', 0xEC},	/* 096 */	/* i with grave accent */
7987c478bd9Sstevel@tonic-gate 	{'`', 'o', 0xF2},	/* 097 */	/* o with grave accent */
7997c478bd9Sstevel@tonic-gate 	{'`', 'u', 0xF9},	/* 098 */	/* u with grave accent */
8007c478bd9Sstevel@tonic-gate 	{'a', 'e', 0xE6},	/* 099 */	/* ae dipthong */
8017c478bd9Sstevel@tonic-gate 	{'a', '~', 0xE3},	/* 100 */	/* a with tilde */
8027c478bd9Sstevel@tonic-gate 	{'c', 'o', 0xA9},	/* 101 */	/* copyright */
8037c478bd9Sstevel@tonic-gate 	{'h', 't', 0xFE},	/* 102 */	/* Lower-case thorn */
8047c478bd9Sstevel@tonic-gate 	{'n', '~', 0xF1},	/* 103 */	/* n with tilde */
8057c478bd9Sstevel@tonic-gate 	{'o', 'r', 0xAE},	/* 104 */	/* registered */
8067c478bd9Sstevel@tonic-gate 	{'o', 's', 0xA7},	/* 105 */	/* section mark */
8077c478bd9Sstevel@tonic-gate 	{'o', 'x', 0xA4},	/* 106 */	/* currency symbol */
8087c478bd9Sstevel@tonic-gate 	{'o', '~', 0xF5},	/* 107 */	/* o with tilde */
8097c478bd9Sstevel@tonic-gate 	{'p', '|', 0xFE},	/* 108 */	/* Lower-case thorn */
8107c478bd9Sstevel@tonic-gate 	{'s', 's', 0xDF},	/* 109 */	/* German double-s */
8117c478bd9Sstevel@tonic-gate 	{'x', 'x', 0xD7},	/* 110 */	/* multiplication sign */
8127c478bd9Sstevel@tonic-gate 	{'|', '|', 0xA6},	/* 111 */	/* broken bar */
8137c478bd9Sstevel@tonic-gate 
8147c478bd9Sstevel@tonic-gate 	{0, 0, 0},			/* end of table */
8157c478bd9Sstevel@tonic-gate };
8167c478bd9Sstevel@tonic-gate /* END CSTYLED */
8177c478bd9Sstevel@tonic-gate 
8187c478bd9Sstevel@tonic-gate /*
8197c478bd9Sstevel@tonic-gate  * Floating Accent Sequence Table
8207c478bd9Sstevel@tonic-gate  */
8217c478bd9Sstevel@tonic-gate 
8227c478bd9Sstevel@tonic-gate /* FA + ASCII character => ISO character */
8237c478bd9Sstevel@tonic-gate struct fltaccent_sequence_t kb_fltaccent_table[] = {
8247c478bd9Sstevel@tonic-gate 
8257c478bd9Sstevel@tonic-gate 	{FA_UMLAUT, 'A', 0xC4},		/* A with umlaut */
8267c478bd9Sstevel@tonic-gate 	{FA_UMLAUT, 'E', 0xCB},		/* E with umlaut */
8277c478bd9Sstevel@tonic-gate 	{FA_UMLAUT, 'I', 0xCF},		/* I with umlaut */
8287c478bd9Sstevel@tonic-gate 	{FA_UMLAUT, 'O', 0xD6},		/* O with umlaut */
8297c478bd9Sstevel@tonic-gate 	{FA_UMLAUT, 'U', 0xDC},		/* U with umlaut */
8307c478bd9Sstevel@tonic-gate 	{FA_UMLAUT, 'a', 0xE4},		/* a with umlaut */
8317c478bd9Sstevel@tonic-gate 	{FA_UMLAUT, 'e', 0xEB},		/* e with umlaut */
8327c478bd9Sstevel@tonic-gate 	{FA_UMLAUT, 'i', 0xEF},		/* i with umlaut */
8337c478bd9Sstevel@tonic-gate 	{FA_UMLAUT, 'o', 0xF6},		/* o with umlaut */
8347c478bd9Sstevel@tonic-gate 	{FA_UMLAUT, 'u', 0xFC},		/* u with umlaut */
8357c478bd9Sstevel@tonic-gate 	{FA_UMLAUT, 'y', 0xFC},		/* y with umlaut */
8367c478bd9Sstevel@tonic-gate 
8377c478bd9Sstevel@tonic-gate 	{FA_CFLEX, 'A', 0xC2},		/* A with circumflex */
8387c478bd9Sstevel@tonic-gate 	{FA_CFLEX, 'E', 0xCA},		/* E with circumflex */
8397c478bd9Sstevel@tonic-gate 	{FA_CFLEX, 'I', 0xCE},		/* I with circumflex */
8407c478bd9Sstevel@tonic-gate 	{FA_CFLEX, 'O', 0xD4},		/* O with circumflex */
8417c478bd9Sstevel@tonic-gate 	{FA_CFLEX, 'U', 0xDB},		/* U with circumflex */
8427c478bd9Sstevel@tonic-gate 	{FA_CFLEX, 'a', 0xE2},		/* a with circumflex */
8437c478bd9Sstevel@tonic-gate 	{FA_CFLEX, 'e', 0xEA},		/* e with circumflex */
8447c478bd9Sstevel@tonic-gate 	{FA_CFLEX, 'i', 0xEE},		/* i with circumflex */
8457c478bd9Sstevel@tonic-gate 	{FA_CFLEX, 'o', 0xF4},		/* o with circumflex */
8467c478bd9Sstevel@tonic-gate 	{FA_CFLEX, 'u', 0xFB},		/* u with circumflex */
8477c478bd9Sstevel@tonic-gate 
8487c478bd9Sstevel@tonic-gate 	{FA_TILDE, 'A', 0xC3},		/* A with tilde */
8497c478bd9Sstevel@tonic-gate 	{FA_TILDE, 'N', 0xD1},		/* N with tilde */
8507c478bd9Sstevel@tonic-gate 	{FA_TILDE, 'O', 0xD5},		/* O with tilde */
8517c478bd9Sstevel@tonic-gate 	{FA_TILDE, 'a', 0xE3},		/* a with tilde */
8527c478bd9Sstevel@tonic-gate 	{FA_TILDE, 'n', 0xF1},		/* n with tilde */
8537c478bd9Sstevel@tonic-gate 	{FA_TILDE, 'o', 0xF5},		/* o with tilde */
8547c478bd9Sstevel@tonic-gate 
8557c478bd9Sstevel@tonic-gate 	{FA_CEDILLA, 'C', 0xC7},	/* C with cedilla */
8567c478bd9Sstevel@tonic-gate 	{FA_CEDILLA, 'c', 0xE7},	/* c with cedilla */
8577c478bd9Sstevel@tonic-gate 
8587c478bd9Sstevel@tonic-gate 	{FA_ACUTE, 'A', 0xC1},		/* A with acute accent */
8597c478bd9Sstevel@tonic-gate 	{FA_ACUTE, 'E', 0xC9},		/* E with acute accent */
8607c478bd9Sstevel@tonic-gate 	{FA_ACUTE, 'I', 0xCD},		/* I with acute accent */
8617c478bd9Sstevel@tonic-gate 	{FA_ACUTE, 'O', 0xD3},		/* O with acute accent */
8627c478bd9Sstevel@tonic-gate 	{FA_ACUTE, 'U', 0xDA},		/* U with acute accent */
8637c478bd9Sstevel@tonic-gate 	{FA_ACUTE, 'a', 0xE1},		/* a with acute accent */
8647c478bd9Sstevel@tonic-gate 	{FA_ACUTE, 'e', 0xE9},		/* e with acute accent */
8657c478bd9Sstevel@tonic-gate 	{FA_ACUTE, 'i', 0xED},		/* i with acute accent */
8667c478bd9Sstevel@tonic-gate 	{FA_ACUTE, 'o', 0xF3},		/* o with acute accent */
8677c478bd9Sstevel@tonic-gate 	{FA_ACUTE, 'u', 0xFA},		/* u with acute accent */
8687c478bd9Sstevel@tonic-gate 	{FA_ACUTE, 'y', 0xFD},		/* y with acute accent */
8697c478bd9Sstevel@tonic-gate 
8707c478bd9Sstevel@tonic-gate 	{FA_GRAVE, 'A', 0xC0},		/* A with grave accent */
8717c478bd9Sstevel@tonic-gate 	{FA_GRAVE, 'E', 0xC8},		/* E with grave accent */
8727c478bd9Sstevel@tonic-gate 	{FA_GRAVE, 'I', 0xCC},		/* I with grave accent */
8737c478bd9Sstevel@tonic-gate 	{FA_GRAVE, 'O', 0xD2},		/* O with grave accent */
8747c478bd9Sstevel@tonic-gate 	{FA_GRAVE, 'U', 0xD9},		/* U with grave accent */
8757c478bd9Sstevel@tonic-gate 	{FA_GRAVE, 'a', 0xE0},		/* a with grave accent */
8767c478bd9Sstevel@tonic-gate 	{FA_GRAVE, 'e', 0xE8},		/* e with grave accent */
8777c478bd9Sstevel@tonic-gate 	{FA_GRAVE, 'i', 0xEC},		/* i with grave accent */
8787c478bd9Sstevel@tonic-gate 	{FA_GRAVE, 'o', 0xF2},		/* o with grave accent */
8797c478bd9Sstevel@tonic-gate 	{FA_GRAVE, 'u', 0xF9},		/* u with grave accent */
8807c478bd9Sstevel@tonic-gate 
8817c478bd9Sstevel@tonic-gate 	{0, 0, 0},			/* end of table */
8827c478bd9Sstevel@tonic-gate };
8837c478bd9Sstevel@tonic-gate 
8847c478bd9Sstevel@tonic-gate /*
8857c478bd9Sstevel@tonic-gate  * Num Lock Table
8867c478bd9Sstevel@tonic-gate  */
8877c478bd9Sstevel@tonic-gate 
8887c478bd9Sstevel@tonic-gate /* Num Lock:  pad key entry & 0x1F => ASCII character */
8897c478bd9Sstevel@tonic-gate uchar_t kb_numlock_table[] = {
8907c478bd9Sstevel@tonic-gate 	'=',
8917c478bd9Sstevel@tonic-gate 	'/',
8927c478bd9Sstevel@tonic-gate 	'*',
8937c478bd9Sstevel@tonic-gate 	'-',
8947c478bd9Sstevel@tonic-gate 	',',
8957c478bd9Sstevel@tonic-gate 
8967c478bd9Sstevel@tonic-gate 	'7',
8977c478bd9Sstevel@tonic-gate 	'8',
8987c478bd9Sstevel@tonic-gate 	'9',
8997c478bd9Sstevel@tonic-gate 	'+',
9007c478bd9Sstevel@tonic-gate 
9017c478bd9Sstevel@tonic-gate 	'4',
9027c478bd9Sstevel@tonic-gate 	'5',
9037c478bd9Sstevel@tonic-gate 	'6',
9047c478bd9Sstevel@tonic-gate 
9057c478bd9Sstevel@tonic-gate 	'1',
9067c478bd9Sstevel@tonic-gate 	'2',
9077c478bd9Sstevel@tonic-gate 	'3',
9087c478bd9Sstevel@tonic-gate 
9097c478bd9Sstevel@tonic-gate 	'0',
9107c478bd9Sstevel@tonic-gate 	'.',
9117c478bd9Sstevel@tonic-gate 	'\n',	/* Enter */
9127c478bd9Sstevel@tonic-gate };
913