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