xref: /netbsd-src/sys/dev/hil/hilkbdmap.c (revision d7faaca5b4c6484e9742f4f320e56f3a42a4172a)
1*d7faaca5Sgutteridge /*	$NetBSD: hilkbdmap.c,v 1.4 2022/08/11 23:38:45 gutteridge Exp $	*/
2b04b7da8Stsutsui /*	$OpenBSD: hilkbdmap.c,v 1.7 2005/05/07 22:42:30 miod Exp $	*/
3b04b7da8Stsutsui /*
4b04b7da8Stsutsui  * Copyright (c) 2003, Miodrag Vallat.
5b04b7da8Stsutsui  * All rights reserved.
6b04b7da8Stsutsui  *
7b04b7da8Stsutsui  * Redistribution and use in source and binary forms, with or without
8b04b7da8Stsutsui  * modification, are permitted provided that the following conditions
9b04b7da8Stsutsui  * are met:
10b04b7da8Stsutsui  * 1. Redistributions of source code must retain the above copyright
11b04b7da8Stsutsui  *    notice, this list of conditions and the following disclaimer.
12b04b7da8Stsutsui  * 2. Redistributions in binary form must reproduce the above copyright
13b04b7da8Stsutsui  *    notice, this list of conditions and the following disclaimer in the
14b04b7da8Stsutsui  *    documentation and/or other materials provided with the distribution.
15b04b7da8Stsutsui  *
16b04b7da8Stsutsui  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17b04b7da8Stsutsui  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18b04b7da8Stsutsui  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19b04b7da8Stsutsui  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
20b04b7da8Stsutsui  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21b04b7da8Stsutsui  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22b04b7da8Stsutsui  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23b04b7da8Stsutsui  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24b04b7da8Stsutsui  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
25b04b7da8Stsutsui  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26b04b7da8Stsutsui  * POSSIBILITY OF SUCH DAMAGE.
27b04b7da8Stsutsui  *
28b04b7da8Stsutsui  */
29b04b7da8Stsutsui 
30b04b7da8Stsutsui #include "opt_wsdisplay_compat.h"
31b04b7da8Stsutsui 
32b04b7da8Stsutsui #include <sys/types.h>
33b04b7da8Stsutsui #include <dev/wscons/wsksymdef.h>
34b04b7da8Stsutsui #include <dev/wscons/wsksymvar.h>
35b04b7da8Stsutsui #include <dev/hil/hilkbdmap.h>
36b04b7da8Stsutsui 
37b04b7da8Stsutsui #ifdef WSDISPLAY_COMPAT_RAWKBD
38b04b7da8Stsutsui 
39b04b7da8Stsutsui /*
40b04b7da8Stsutsui  * Translate HIL keycodes to US keyboard XT scancodes, for proper
41b04b7da8Stsutsui  * X11-over-wsmux operation.
42b04b7da8Stsutsui  *
43b04b7da8Stsutsui  * XXX: Needs re-think how we should treat RAWKBD code on NetBSD.
44b04b7da8Stsutsui  */
45b10df2f5Stsutsui const uint8_t hilkbd_raw[0x80] = {
46b04b7da8Stsutsui 	0x9d, 0x00, 0xb8, 0x38, 0x36, 0x2a, 0x1d, 0x6a,
47b04b7da8Stsutsui 	0x4b, 0x48, 0x4c, 0x49, 0x4d, 0x47, 0x53, 0x9c,
48b04b7da8Stsutsui 	0x4f, 0xb5, 0x50, 0x4e, 0x51, 0x37, 0x52, 0x4a,
49b04b7da8Stsutsui 	0x30, 0x2f, 0x2e, 0x2d, 0x2c, 0x00, 0x00, 0x01,
50b04b7da8Stsutsui 	0x00, 0x44, 0x00, 0x57, 0x53, 0x43, 0x0f, 0x58,
51b04b7da8Stsutsui 	0x23, 0x22, 0x21, 0x20, 0x1f, 0x1e, 0x00, 0x3a,
52b04b7da8Stsutsui 	0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f,
53b04b7da8Stsutsui 	0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x29,
54b04b7da8Stsutsui 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55b04b7da8Stsutsui 	0x67, 0x3e, 0x3d, 0x3c, 0x3b, 0x00, 0x46, 0x1c,
56b04b7da8Stsutsui 	0x45, 0x3f, 0x40, 0x41, 0x42, 0x00, 0x00, 0x00,
57b04b7da8Stsutsui 	0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x00, 0x00,
58b04b7da8Stsutsui 	0x17, 0x18, 0x19, 0x1a, 0x1b, 0x2b, 0xd2, 0xd3,
59b04b7da8Stsutsui 	0x24, 0x25, 0x26, 0x27, 0x28, 0x1c, 0xc7, 0xc9,
60b04b7da8Stsutsui 	0x32, 0x33, 0x34, 0x35, 0x00, 0xcf, 0x00, 0xd1,
61b04b7da8Stsutsui 	0x31, 0x39, 0x00, 0x00, 0xcb, 0xd0, 0xc8, 0xcd
62b04b7da8Stsutsui };
63b04b7da8Stsutsui #endif
64b04b7da8Stsutsui 
65b04b7da8Stsutsui #define KC(n) KS_KEYCODE(n)
66b04b7da8Stsutsui 
67b04b7da8Stsutsui /*
68b04b7da8Stsutsui  * 1f. US ASCII
69b04b7da8Stsutsui  *
70b04b7da8Stsutsui  * We use the same table for PS/2 and old HIL keyboards, as the only
71b04b7da8Stsutsui  * differences are a few keys which are only present in one of both layouts,
72b04b7da8Stsutsui  * and the one-function-only keypad in the old HIL flavour (hilkbd.c knows
73b04b7da8Stsutsui  * about this and does The Right Thing).
74b04b7da8Stsutsui  */
75b04b7da8Stsutsui 
76b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_us[] = {
77b04b7da8Stsutsui /*  pos      command		normal		shifted */
78b04b7da8Stsutsui     KC(0),   KS_Cmd1,		KS_Control_R,
79b04b7da8Stsutsui     KC(2),   KS_Cmd2,		KS_Mode_switch,	KS_Multi_key,
80b04b7da8Stsutsui     KC(3),   KS_Cmd2,		KS_Alt_L,
81b04b7da8Stsutsui     KC(4),   KS_Cmd,		KS_Shift_R,
82b04b7da8Stsutsui     KC(5),   KS_Cmd,		KS_Shift_L,
83b04b7da8Stsutsui     KC(6),   KS_Cmd1,		KS_Control_L,
84b04b7da8Stsutsui     KC(7),   KS_Cmd_Debugger,			/* Break/Reset */
85b04b7da8Stsutsui     KC(8),			KS_KP_Left,	KS_KP_4,
86b04b7da8Stsutsui     KC(9),			KS_KP_Up,	KS_KP_8,
87b04b7da8Stsutsui     KC(10),			KS_KP_Begin,	KS_KP_5,
88b04b7da8Stsutsui     KC(11),			KS_KP_Prior,	KS_KP_9,
89b04b7da8Stsutsui     KC(12),			KS_KP_Right,	KS_KP_6,
90b04b7da8Stsutsui     KC(13),			KS_KP_Home,	KS_KP_7,
91b04b7da8Stsutsui     KC(14),			KS_KP_Separator,
92b04b7da8Stsutsui     KC(15),			KS_KP_Enter,
93b04b7da8Stsutsui     KC(16),			KS_KP_End,	KS_KP_1,
94b04b7da8Stsutsui     KC(17),			KS_KP_Divide,
95b04b7da8Stsutsui     KC(18),			KS_KP_Down,	KS_KP_2,
96b04b7da8Stsutsui     KC(19),			KS_KP_Add,
97b04b7da8Stsutsui     KC(20),			KS_KP_Next,	KS_KP_3,
98b04b7da8Stsutsui     KC(21),			KS_KP_Multiply,
99b04b7da8Stsutsui     KC(22),			KS_KP_Insert,	KS_KP_0,
100b04b7da8Stsutsui     KC(23),			KS_KP_Subtract,
101b04b7da8Stsutsui     KC(24),			KS_b,
102b04b7da8Stsutsui     KC(25),			KS_v,		KS_V,		KS_section,
103b04b7da8Stsutsui     KC(26),			KS_c,		KS_C,		KS_ccedilla,
104b04b7da8Stsutsui     KC(27),			KS_x,		KS_X,
105b04b7da8Stsutsui     KC(28),			KS_z,		KS_Z,		KS_paragraph,
106b04b7da8Stsutsui     /* 29 Kanji Left */
107b04b7da8Stsutsui 
108b04b7da8Stsutsui     KC(31), KS_Cmd_Debugger,	KS_Escape,	KS_Delete,
109b04b7da8Stsutsui     KC(33), KS_Cmd_Screen9,	KS_f10,		/* also KS_KP_F2 */
110b04b7da8Stsutsui     KC(35),			KS_f11,		/* also KS_KP_F3 */
111b04b7da8Stsutsui     KC(36),			KS_KP_Delete,	KS_KP_Decimal,
112b04b7da8Stsutsui     KC(37), KS_Cmd_Screen8,	KS_f9,		/* also KS_KP_F1 */
113b04b7da8Stsutsui     KC(38),			KS_Tab,		/* numeric pad */
114b04b7da8Stsutsui     KC(39),			KS_f12,		/* also KS_KP_F4 */
115b04b7da8Stsutsui     KC(40),			KS_h,		KS_H,		KS_yen,
116b04b7da8Stsutsui     KC(41),			KS_g,		KS_G,		KS_currency,
117b04b7da8Stsutsui     KC(42),			KS_f,
118b04b7da8Stsutsui     KC(43),			KS_d,		KS_D,		KS_eth,
119b04b7da8Stsutsui     KC(44),			KS_s,		KS_S,		KS_ssharp,
120b04b7da8Stsutsui     KC(45),			KS_a,		KS_A,		KS_aring,
121b04b7da8Stsutsui     /* 46 Mode_Switch ??? */
122b04b7da8Stsutsui     KC(47),			KS_Caps_Lock,
123b04b7da8Stsutsui     KC(48),			KS_u,		KS_U,		KS_dead_diaeresis,
124b04b7da8Stsutsui     KC(49),			KS_y,		KS_Y,		KS_dead_circumflex,
125b04b7da8Stsutsui     KC(50),			KS_t,		KS_T,		KS_dead_grave,
126b04b7da8Stsutsui     KC(51),			KS_r,		KS_R,		KS_dead_acute,
127b04b7da8Stsutsui     KC(52),			KS_e,		KS_E,		KS_ae,
128b04b7da8Stsutsui     KC(53),			KS_w,		KS_W,		KS_asciitilde,
129b04b7da8Stsutsui     KC(54),			KS_q,		KS_Q,		KS_periodcentered,
130b04b7da8Stsutsui     KC(55),			KS_Tab,
131b04b7da8Stsutsui     KC(56),			KS_7,		KS_ampersand,	KS_backslash,
132b04b7da8Stsutsui     KC(57),			KS_6,		KS_asciicircum,	KS_asciicircum,
133b04b7da8Stsutsui     KC(58),			KS_5,		KS_percent,	KS_onehalf,
134b04b7da8Stsutsui     KC(59),			KS_4,		KS_dollar,
135b04b7da8Stsutsui 				KS_onequarter,	KS_threequarters,
136b04b7da8Stsutsui     KC(60),			KS_3,		KS_numbersign,	KS_numbersign,
137b04b7da8Stsutsui     KC(61),			KS_2,		KS_at,		KS_at,
138b04b7da8Stsutsui     KC(62),			KS_1,		KS_exclam,	KS_exclamdown,
139b04b7da8Stsutsui     KC(63),			KS_grave,	KS_asciitilde,
140b04b7da8Stsutsui 				KS_guillemotleft,KS_guillemotright,
141b04b7da8Stsutsui 
142b04b7da8Stsutsui     KC(72),			KS_Print_Screen, /* Menu */
143b04b7da8Stsutsui     KC(73),  KS_Cmd_Screen3,	KS_f4,
144b04b7da8Stsutsui     KC(74),  KS_Cmd_Screen2,	KS_f3,
145b04b7da8Stsutsui     KC(75),  KS_Cmd_Screen1,	KS_f2,
146b04b7da8Stsutsui     KC(76),  KS_Cmd_Screen0,	KS_f1,
147b04b7da8Stsutsui 
148b04b7da8Stsutsui     KC(78),			KS_Hold_Screen,
149b04b7da8Stsutsui     KC(79),			KS_Return,	KS_Print_Screen,
150b04b7da8Stsutsui     KC(80),			KS_Num_Lock,	/* System/User */
151b04b7da8Stsutsui     KC(81),  KS_Cmd_Screen4,	KS_f5,
152b04b7da8Stsutsui     KC(82),  KS_Cmd_Screen5,	KS_f6,
153b04b7da8Stsutsui     KC(83),  KS_Cmd_Screen6,	KS_f7,
154b04b7da8Stsutsui     KC(84),  KS_Cmd_Screen7,	KS_f8,
155b04b7da8Stsutsui 
156b04b7da8Stsutsui     /* 86 Clear line */
157b04b7da8Stsutsui     KC(87),			KS_Clear,
158b04b7da8Stsutsui     KC(88),			KS_8,		KS_asterisk,
159b04b7da8Stsutsui 				KS_bracketleft,	KS_braceleft,
160b04b7da8Stsutsui     KC(89),			KS_9,		KS_parenleft,
161b04b7da8Stsutsui 				KS_bracketright,KS_braceright,
162b04b7da8Stsutsui     KC(90),			KS_0,		KS_parenright,	KS_questiondown,
163b04b7da8Stsutsui     KC(91),			KS_minus,	KS_underscore,	KS_macron,
164b04b7da8Stsutsui     KC(92),			KS_equal,	KS_plus,	KS_plusminus,
165b04b7da8Stsutsui     KC(93),  KS_Cmd_ResetEmul,	KS_Delete,	/* Backspace */
166b04b7da8Stsutsui     /* 94 Insert line */
167b04b7da8Stsutsui     /* 95 Delete line */
168b04b7da8Stsutsui     KC(96),			KS_i,		KS_I,		KS_dead_tilde,
169b04b7da8Stsutsui     KC(97),			KS_o,		KS_O,		KS_oslash,
170b04b7da8Stsutsui     KC(98),			KS_p,		KS_P,		KS_thorn,
171b04b7da8Stsutsui     KC(99),			KS_bracketleft,	KS_braceleft,	KS_degree,
172b04b7da8Stsutsui     KC(100),			KS_bracketright,KS_braceright,
173b04b7da8Stsutsui 				KS_bar,		KS_brokenbar,
174b04b7da8Stsutsui     KC(101),			KS_backslash,	KS_bar,		KS_mu,
175b04b7da8Stsutsui     KC(102),			KS_Insert,
176b04b7da8Stsutsui     KC(103),			KS_Delete,
177b04b7da8Stsutsui     KC(104),			KS_j,		KS_J,		KS_dollar,
178b04b7da8Stsutsui     KC(105),			KS_k,		KS_K,		KS_cent,
179b04b7da8Stsutsui     KC(106),			KS_l,		KS_L,		KS_sterling,
180b04b7da8Stsutsui     KC(107),			KS_semicolon,	KS_colon,
181b04b7da8Stsutsui     KC(108),			KS_apostrophe,	KS_quotedbl,
182b04b7da8Stsutsui 				KS_grave,	KS_apostrophe,
183b04b7da8Stsutsui     KC(109),			KS_Return,
184b04b7da8Stsutsui     KC(110),			KS_Home,
185b04b7da8Stsutsui     KC(111),			KS_Prior,
186b04b7da8Stsutsui     KC(112),			KS_m,		KS_M,		KS_masculine,
187b04b7da8Stsutsui     KC(113),			KS_comma,	KS_less,	KS_less,
188b04b7da8Stsutsui     KC(114),			KS_period,	KS_greater,	KS_greater,
189b04b7da8Stsutsui     KC(115),			KS_slash,	KS_question,	KS_underscore,
190b04b7da8Stsutsui 
191b04b7da8Stsutsui     KC(117),			KS_End,		/* Select */
192b04b7da8Stsutsui 
193b04b7da8Stsutsui     KC(119),			KS_Next,
194b04b7da8Stsutsui     KC(120),			KS_n,		KS_N,		KS_ordfeminine,
195b04b7da8Stsutsui     KC(121),			KS_space,
196b04b7da8Stsutsui 
197b04b7da8Stsutsui     /* 123 Kanji Right */
198b04b7da8Stsutsui     KC(124),			KS_Left,
199b04b7da8Stsutsui     KC(125),			KS_Down,
200b04b7da8Stsutsui     KC(126),			KS_Up,
201b04b7da8Stsutsui     KC(127),			KS_Right,
202b04b7da8Stsutsui };
203b04b7da8Stsutsui 
204b04b7da8Stsutsui /*
205b04b7da8Stsutsui  * 0e. Swedish
206b04b7da8Stsutsui  */
207b04b7da8Stsutsui 
208b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_sv[] = {
209b04b7da8Stsutsui     KC(56),	KS_7,		KS_slash,	KS_backslash,
210b04b7da8Stsutsui     KC(57),	KS_6,		KS_ampersand,	KS_asciicircum,
211b04b7da8Stsutsui     KC(61),	KS_2,		KS_quotedbl,	KS_at,
212b04b7da8Stsutsui     KC(63),	KS_less,	KS_greater,
213b04b7da8Stsutsui 		KS_guillemotleft,KS_guillemotright,
214b04b7da8Stsutsui     KC(88),	KS_8,		KS_parenleft,	KS_bracketleft,	KS_braceleft,
215b04b7da8Stsutsui     KC(89),	KS_9,		KS_parenright,	KS_bracketright,KS_braceright,
216b04b7da8Stsutsui     KC(90),	KS_0,		KS_equal,	KS_exclamdown,
217b04b7da8Stsutsui     KC(91),	KS_plus,	KS_question,	KS_macron,
218b04b7da8Stsutsui     KC(92),	KS_eacute,	KS_Eacute,	KS_plusminus,
2192b5103cdStsutsui     KC(99),	KS_aring,	KS_Aring,	KS_degree,
2202b5103cdStsutsui     KC(100),	KS_udiaeresis,	KS_Udiaeresis,	KS_bar,		KS_brokenbar,
2212b5103cdStsutsui     KC(101),	KS_apostrophe,	KS_asterisk,	KS_mu,
222b04b7da8Stsutsui     KC(107),	KS_odiaeresis,
223b04b7da8Stsutsui     KC(108),	KS_adiaeresis,	KS_Adiaeresis,	KS_grave,	KS_apostrophe,
224b04b7da8Stsutsui     KC(113),	KS_comma,	KS_semicolon,	KS_less,
225b04b7da8Stsutsui     KC(114),	KS_period,	KS_colon,	KS_greater,
226b04b7da8Stsutsui     KC(115),	KS_minus,	KS_underscore,	KS_underscore
227b04b7da8Stsutsui };
228b04b7da8Stsutsui 
229b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_sv_nodead[] = {
230b04b7da8Stsutsui     KC(48),	KS_u,		KS_U,		KS_diaeresis,
231b04b7da8Stsutsui     KC(49),	KS_y,		KS_Y,		KS_asciicircum,
232b04b7da8Stsutsui     KC(50),	KS_t,		KS_T,		KS_grave,
233b04b7da8Stsutsui     KC(51),	KS_r,		KS_R,		KS_apostrophe,
234b04b7da8Stsutsui     KC(96),	KS_i,		KS_I,		KS_asciitilde,
235b04b7da8Stsutsui };
236b04b7da8Stsutsui 
237b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_sv_ps2[] = {
238b04b7da8Stsutsui     KC(24),	KS_b,
239b04b7da8Stsutsui     KC(25),	KS_v,
240b04b7da8Stsutsui     KC(26),	KS_c,
241b04b7da8Stsutsui     KC(27),	KS_x,
242b04b7da8Stsutsui     KC(28),	KS_z,
243b04b7da8Stsutsui     KC(36),	KS_KP_Separator,KS_KP_Delete,
244b04b7da8Stsutsui     KC(40),	KS_h,
245b04b7da8Stsutsui     KC(41),	KS_g,
246b04b7da8Stsutsui     KC(42),	KS_f,
247b04b7da8Stsutsui     KC(43),	KS_d,
248b04b7da8Stsutsui     KC(44),	KS_s,
249b04b7da8Stsutsui     KC(45),	KS_a,
250b04b7da8Stsutsui     KC(48),	KS_u,
251b04b7da8Stsutsui     KC(49),	KS_y,
252b04b7da8Stsutsui     KC(50),	KS_t,
253b04b7da8Stsutsui     KC(51),	KS_r,
254b04b7da8Stsutsui     KC(52),	KS_e,
255b04b7da8Stsutsui     KC(53),	KS_w,
256b04b7da8Stsutsui     KC(54),	KS_q,
257b04b7da8Stsutsui     KC(56),	KS_7,		KS_slash,	KS_braceleft,
258b04b7da8Stsutsui     KC(57),	KS_6,		KS_ampersand,
259b04b7da8Stsutsui     KC(58),	KS_5,		KS_percent,
260b04b7da8Stsutsui     KC(59),	KS_4,		KS_currency,	KS_dollar,
261b04b7da8Stsutsui     KC(60),	KS_3,		KS_numbersign,	KS_sterling,
262b04b7da8Stsutsui     KC(61),	KS_2,		KS_quotedbl,	KS_at,
263b04b7da8Stsutsui     KC(62),	KS_1,		KS_exclam,
264b04b7da8Stsutsui     KC(63),	KS_section,	KS_onehalf,
265b04b7da8Stsutsui     KC(88),	KS_8,		KS_parenleft,	KS_bracketleft,
266b04b7da8Stsutsui     KC(89),	KS_9,		KS_parenright,	KS_bracketright,
267b04b7da8Stsutsui     KC(90),	KS_0,		KS_equal,	KS_braceright,
268b04b7da8Stsutsui     KC(91),	KS_minus,	KS_question,	KS_backslash,
269b04b7da8Stsutsui     KC(92),	KS_dead_acute,	KS_dead_grave,
270b04b7da8Stsutsui     KC(96),	KS_i,
271b04b7da8Stsutsui     KC(97),	KS_o,
272b04b7da8Stsutsui     KC(98),	KS_p,
273b04b7da8Stsutsui     KC(99),	KS_aring,
274b04b7da8Stsutsui     KC(100),	KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde,
275b04b7da8Stsutsui     KC(104),	KS_j,
276b04b7da8Stsutsui     KC(105),	KS_k,
277b04b7da8Stsutsui     KC(106),	KS_l,
278b04b7da8Stsutsui     KC(107),	KS_odiaeresis,
279b04b7da8Stsutsui     KC(108),	KS_adiaeresis,
280b04b7da8Stsutsui     KC(112),	KS_m,
281b04b7da8Stsutsui     KC(113),	KS_comma,	KS_semicolon,
282b04b7da8Stsutsui     KC(114),	KS_period,	KS_colon,
283b04b7da8Stsutsui     KC(115),	KS_minus,	KS_underscore,
284b04b7da8Stsutsui     KC(116),	KS_apostrophe,	KS_asterisk,
285b04b7da8Stsutsui     KC(118),	KS_less,	KS_greater,	KS_bar,
286b04b7da8Stsutsui     KC(120),	KS_n
287b04b7da8Stsutsui };
288b04b7da8Stsutsui 
289b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_sv_ps2_nodead[] = {
290b04b7da8Stsutsui     KC(92),	KS_apostrophe,	KS_grave,
291b04b7da8Stsutsui     KC(100),	KS_diaeresis,	KS_asciicircum,	KS_asciitilde,
292b04b7da8Stsutsui };
293b04b7da8Stsutsui 
294b04b7da8Stsutsui /*
295b04b7da8Stsutsui  * 0f. German
296b04b7da8Stsutsui  */
297b04b7da8Stsutsui 
298b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_de[] = {
299b04b7da8Stsutsui     KC(28),	KS_y,		KS_Y,		KS_paragraph,
300b04b7da8Stsutsui     KC(49),	KS_z,		KS_Z,		KS_dead_circumflex,
301b04b7da8Stsutsui     KC(56),	KS_7,		KS_slash,	KS_backslash,
302b04b7da8Stsutsui     KC(57),	KS_6,		KS_ampersand,	KS_asciicircum,
303b04b7da8Stsutsui     KC(60),	KS_3,		KS_section,	KS_numbersign,
304b04b7da8Stsutsui     KC(61),	KS_2,		KS_quotedbl,	KS_at,
305b04b7da8Stsutsui     KC(63),	KS_less,	KS_greater,
306b04b7da8Stsutsui 		KS_guillemotleft,KS_guillemotright,
307b04b7da8Stsutsui     KC(88),	KS_8,		KS_parenleft,
308b04b7da8Stsutsui 		KS_bracketleft,	KS_braceleft,
309b04b7da8Stsutsui     KC(89),	KS_9,		KS_parenright,
310b04b7da8Stsutsui 		KS_bracketright,KS_braceright,
311b04b7da8Stsutsui     KC(90),	KS_0,		KS_equal,	KS_exclamdown,
312b04b7da8Stsutsui     KC(91),	KS_ssharp,	KS_question,	KS_macron,
313b04b7da8Stsutsui     KC(92),	KS_dead_acute,	KS_dead_grave,	KS_plusminus,
314b04b7da8Stsutsui     KC(99),	KS_udiaeresis,	KS_Udiaeresis,	KS_dead_abovering,
315b04b7da8Stsutsui     KC(100),	KS_plus,	KS_asterisk,	KS_bar,		KS_brokenbar,
316b04b7da8Stsutsui     KC(101),	KS_sterling,	KS_dead_circumflex,KS_mu,
317b04b7da8Stsutsui     KC(107),	KS_odiaeresis,
318b04b7da8Stsutsui     KC(108),	KS_adiaeresis,	KS_Adiaeresis,	KS_grave,	KS_apostrophe,
319b04b7da8Stsutsui     KC(113),	KS_comma,	KS_semicolon,	KS_less,
320b04b7da8Stsutsui     KC(114),	KS_period,	KS_colon,	KS_greater,
321b04b7da8Stsutsui     KC(115),	KS_minus,	KS_underscore,	KS_underscore
322b04b7da8Stsutsui };
323b04b7da8Stsutsui 
324b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_de_nodead[] = {
325b04b7da8Stsutsui     KC(48),	KS_u,		KS_U,		KS_diaeresis,
326b04b7da8Stsutsui     KC(49),	KS_z,		KS_Z,		KS_asciicircum,
327b04b7da8Stsutsui     KC(50),	KS_t,		KS_T,		KS_grave,
328b04b7da8Stsutsui     KC(51),	KS_r,		KS_R,		KS_apostrophe,
329b04b7da8Stsutsui     KC(92),	KS_apostrophe,	KS_grave,	KS_plusminus,
330b04b7da8Stsutsui     KC(99),	KS_udiaeresis,	KS_Udiaeresis,	KS_degree,
331b04b7da8Stsutsui     KC(101),	KS_sterling,	KS_asciicircum,	KS_mu,
332b04b7da8Stsutsui     KC(96),	KS_i,		KS_I,		KS_asciitilde
333b04b7da8Stsutsui };
334b04b7da8Stsutsui 
335b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_de_ps2[] = {
336b04b7da8Stsutsui     KC(24),	KS_b,
337b04b7da8Stsutsui     KC(25),	KS_v,
338b04b7da8Stsutsui     KC(26),	KS_c,
339b04b7da8Stsutsui     KC(27),	KS_x,
340b04b7da8Stsutsui     KC(28),	KS_y,
341b04b7da8Stsutsui     KC(36),	KS_KP_Separator,KS_KP_Delete,
342b04b7da8Stsutsui     KC(40),	KS_h,
343b04b7da8Stsutsui     KC(41),	KS_g,
344b04b7da8Stsutsui     KC(42),	KS_f,
345b04b7da8Stsutsui     KC(43),	KS_d,
346b04b7da8Stsutsui     KC(44),	KS_s,
347b04b7da8Stsutsui     KC(45),	KS_a,
348b04b7da8Stsutsui     KC(48),	KS_u,
349b04b7da8Stsutsui     KC(49),	KS_z,		KS_Z,		KS_dead_circumflex,
350b04b7da8Stsutsui     KC(50),	KS_t,
351b04b7da8Stsutsui     KC(51),	KS_r,
352b04b7da8Stsutsui     KC(52),	KS_e,
353b04b7da8Stsutsui     KC(53),	KS_w,
354b04b7da8Stsutsui     KC(54),	KS_q,		KS_Q,		KS_at,
355b04b7da8Stsutsui     KC(56),	KS_7,		KS_slash,	KS_braceleft,
356b04b7da8Stsutsui     KC(57),	KS_6,		KS_ampersand,
357b04b7da8Stsutsui     KC(58),	KS_5,		KS_percent,
358b04b7da8Stsutsui     KC(59),	KS_4,		KS_dollar,
359b04b7da8Stsutsui     KC(60),	KS_3,		KS_section,	KS_threesuperior,
360b04b7da8Stsutsui     KC(61),	KS_2,		KS_quotedbl,	KS_twosuperior,
361b04b7da8Stsutsui     KC(62),	KS_1,		KS_exclam,
362b04b7da8Stsutsui     KC(63),	KS_dead_circumflex,	KS_dead_abovering,
363b04b7da8Stsutsui     KC(88),	KS_8,		KS_parenleft,	KS_bracketleft,
364b04b7da8Stsutsui     KC(89),	KS_9,		KS_parenright,	KS_bracketright,
365b04b7da8Stsutsui     KC(90),	KS_0,		KS_equal,	KS_braceright,
366b04b7da8Stsutsui     KC(91),	KS_ssharp,	KS_question,	KS_backslash,
367b04b7da8Stsutsui     KC(92),	KS_dead_acute,	KS_dead_grave,
368b04b7da8Stsutsui     KC(96),	KS_i,
369b04b7da8Stsutsui     KC(97),	KS_o,
370b04b7da8Stsutsui     KC(98),	KS_p,
371b04b7da8Stsutsui     KC(99),	KS_udiaeresis,
372b04b7da8Stsutsui     KC(100),	KS_plus,	KS_asterisk,	KS_dead_tilde,
373b04b7da8Stsutsui     KC(104),	KS_j,
374b04b7da8Stsutsui     KC(105),	KS_k,
375b04b7da8Stsutsui     KC(106),	KS_l,
376b04b7da8Stsutsui     KC(107),	KS_odiaeresis,
377b04b7da8Stsutsui     KC(108),	KS_adiaeresis,
378b04b7da8Stsutsui     KC(112),	KS_m,		KS_M,		KS_mu,
379b04b7da8Stsutsui     KC(113),	KS_comma,	KS_semicolon,
380b04b7da8Stsutsui     KC(114),	KS_period,	KS_colon,
381b04b7da8Stsutsui     KC(115),	KS_minus,	KS_underscore,
382b04b7da8Stsutsui     KC(116),	KS_numbersign,	KS_apostrophe,
383b04b7da8Stsutsui     KC(118),	KS_less,	KS_greater, 	KS_bar,
384b04b7da8Stsutsui     KC(120),	KS_n
385b04b7da8Stsutsui };
386b04b7da8Stsutsui 
387b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_de_ps2_nodead[] = {
388b04b7da8Stsutsui     KC(49),	KS_z,		KS_Z,		KS_asciicircum,
389b04b7da8Stsutsui     KC(63),	KS_asciicircum,	KS_degree,
390b04b7da8Stsutsui     KC(92),	KS_apostrophe,	KS_grave,
391b04b7da8Stsutsui     KC(100),	KS_plus,	KS_asterisk,	KS_asciitilde
392b04b7da8Stsutsui };
393b04b7da8Stsutsui 
394b04b7da8Stsutsui /*
395b04b7da8Stsutsui  * 17. English
396b04b7da8Stsutsui  */
397b04b7da8Stsutsui 
398b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_uk[] = {
399b04b7da8Stsutsui     KC(56),	KS_7,		KS_asciicircum,	KS_backslash,
400b04b7da8Stsutsui     KC(57),	KS_6,		KS_ampersand,	KS_asciicircum,
401b04b7da8Stsutsui     KC(60),	KS_3,		KS_sterling,	KS_numbersign,
402b04b7da8Stsutsui     KC(61),	KS_2,		KS_quotedbl,	KS_at,
403b04b7da8Stsutsui     KC(88),	KS_8,		KS_parenleft,	KS_bracketleft,	KS_braceleft,
404b04b7da8Stsutsui     KC(89),	KS_9,		KS_parenright,	KS_bracketright,KS_braceright,
405b04b7da8Stsutsui     KC(90),	KS_0,		KS_equal,	KS_questiondown,
406b04b7da8Stsutsui     KC(91),	KS_plus,	KS_question,	KS_macron,
407b04b7da8Stsutsui     KC(92),	KS_apostrophe,	KS_slash,	KS_plusminus,
408b04b7da8Stsutsui     KC(101),	KS_less,	KS_greater,	KS_mu,
409b04b7da8Stsutsui     KC(107),	KS_asterisk,	KS_at,
410b04b7da8Stsutsui     KC(108),	KS_backslash,	KS_bar,		KS_grave,	KS_apostrophe,
411b04b7da8Stsutsui     KC(113),	KS_comma,	KS_semicolon,	KS_less,
412b04b7da8Stsutsui     KC(114),	KS_period,	KS_colon,	KS_greater,
413b04b7da8Stsutsui     KC(115),	KS_minus,	KS_underscore,	KS_underscore
414b04b7da8Stsutsui };
415b04b7da8Stsutsui 
416b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_uk_ps2[] = {
417b04b7da8Stsutsui     KC(24),	KS_b,
418b04b7da8Stsutsui     KC(25),	KS_v,
419b04b7da8Stsutsui     KC(26),	KS_c,
420b04b7da8Stsutsui     KC(27),	KS_x,
421b04b7da8Stsutsui     KC(28),	KS_z,
422b04b7da8Stsutsui     KC(40),	KS_h,
423b04b7da8Stsutsui     KC(41),	KS_g,
424b04b7da8Stsutsui     KC(42),	KS_f,
425b04b7da8Stsutsui     KC(43),	KS_d,
426b04b7da8Stsutsui     KC(44),	KS_s,
427b04b7da8Stsutsui     KC(45),	KS_a,
428b04b7da8Stsutsui     KC(48),	KS_u,
429b04b7da8Stsutsui     KC(49),	KS_y,
430b04b7da8Stsutsui     KC(50),	KS_t,
431b04b7da8Stsutsui     KC(51),	KS_r,
432b04b7da8Stsutsui     KC(52),	KS_e,
433b04b7da8Stsutsui     KC(53),	KS_w,
434b04b7da8Stsutsui     KC(54),	KS_q,
435b04b7da8Stsutsui     KC(56),	KS_7,		KS_ampersand,
436b04b7da8Stsutsui     KC(57),	KS_6,		KS_asciicircum,
437b04b7da8Stsutsui     KC(58),	KS_5,		KS_percent,
438b04b7da8Stsutsui     KC(59),	KS_4,		KS_dollar,
439b04b7da8Stsutsui     KC(60),	KS_3,		KS_sterling,
440b04b7da8Stsutsui     KC(61),	KS_2,		KS_quotedbl,
441b04b7da8Stsutsui     KC(62),	KS_1,		KS_exclam,
442b04b7da8Stsutsui     KC(63),	KS_grave,	KS_notsign,	KS_bar,
443b04b7da8Stsutsui     KC(88),	KS_8,		KS_asterisk,
444b04b7da8Stsutsui     KC(89),	KS_9,		KS_parenleft,
445b04b7da8Stsutsui     KC(90),	KS_0,		KS_parenright,
446b04b7da8Stsutsui     KC(91),	KS_minus,	KS_underscore,
447b04b7da8Stsutsui     KC(92),	KS_equal,	KS_plus,
448b04b7da8Stsutsui     KC(96),	KS_i,
449b04b7da8Stsutsui     KC(97),	KS_o,
450b04b7da8Stsutsui     KC(98),	KS_p,
451b04b7da8Stsutsui     KC(99),	KS_bracketleft,	KS_braceleft,
452b04b7da8Stsutsui     KC(100),	KS_bracketright,KS_braceright,
453b04b7da8Stsutsui     KC(104),	KS_j,
454b04b7da8Stsutsui     KC(105),	KS_k,
455b04b7da8Stsutsui     KC(106),	KS_l,
456b04b7da8Stsutsui     KC(107),	KS_semicolon,	KS_colon,
457b04b7da8Stsutsui     KC(108),	KS_apostrophe,	KS_at,
458b04b7da8Stsutsui     KC(112),	KS_m,
459b04b7da8Stsutsui     KC(113),	KS_comma,	KS_less,
460b04b7da8Stsutsui     KC(114),	KS_period,	KS_greater,
461b04b7da8Stsutsui     KC(115),	KS_slash,	KS_question,
462b04b7da8Stsutsui     KC(116),	KS_numbersign,	KS_asciitilde,
463b04b7da8Stsutsui     KC(118),	KS_backslash,	KS_brokenbar,
464b04b7da8Stsutsui     KC(120),	KS_n
465b04b7da8Stsutsui };
466b04b7da8Stsutsui 
467b04b7da8Stsutsui /*
468b04b7da8Stsutsui  * 1b. French
469b04b7da8Stsutsui  */
470b04b7da8Stsutsui 
471b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_fr[] = {
472b04b7da8Stsutsui     KC(28),	KS_w,		KS_W,		KS_paragraph,
473b04b7da8Stsutsui     KC(45),	KS_q,		KS_Q,		KS_aring,
474b04b7da8Stsutsui     KC(53),	KS_z,		KS_Z,		KS_asciitilde,
475b04b7da8Stsutsui     KC(54),	KS_a,		KS_A,		KS_periodcentered,
476b04b7da8Stsutsui     KC(56),	KS_egrave,	KS_7,		KS_backslash,
477b04b7da8Stsutsui     KC(57),	KS_section,	KS_6,		KS_asciicircum,
478b04b7da8Stsutsui     KC(58),	KS_parenleft,	KS_5,		KS_onehalf,
479b04b7da8Stsutsui     KC(59),	KS_apostrophe,	KS_4,		KS_onequarter,	KS_threequarters,
480b04b7da8Stsutsui     KC(60),	KS_quotedbl,	KS_3,		KS_numbersign,
481b04b7da8Stsutsui     KC(61),	KS_eacute,	KS_2,		KS_at,
482b04b7da8Stsutsui     KC(62),	KS_ampersand,	KS_1,		KS_exclamdown,
483b04b7da8Stsutsui     KC(63),	KS_dollar,	KS_sterling,
484b04b7da8Stsutsui 		KS_guillemotleft,KS_guillemotright,
485b04b7da8Stsutsui     KC(88),	KS_exclam,	KS_8,		KS_bracketleft,	KS_braceleft,
486b04b7da8Stsutsui     KC(89),	KS_ccedilla,	KS_9,		KS_bracketright,KS_braceright,
487b04b7da8Stsutsui     KC(90),	KS_agrave,	KS_0,		KS_questiondown,
488b04b7da8Stsutsui     KC(91),	KS_parenright,	KS_degree,	KS_macron,
489b04b7da8Stsutsui     KC(92),	KS_minus,	KS_underscore,	KS_plusminus,
490b04b7da8Stsutsui     KC(99),	KS_dead_circumflex, KS_dead_diaeresis,	KS_dead_abovering,
491b04b7da8Stsutsui     KC(100),	KS_grave,	KS_asterisk,	KS_bar,		KS_brokenbar,
492b04b7da8Stsutsui     KC(101),	KS_less,	KS_greater,	KS_mu,
493b04b7da8Stsutsui     KC(107),	KS_m,
494b04b7da8Stsutsui     KC(108),	KS_ugrave,	KS_percent,	KS_grave,	KS_apostrophe,
495b04b7da8Stsutsui     KC(112),	KS_comma,	KS_question,	KS_masculine,
496b04b7da8Stsutsui     KC(113),	KS_semicolon,	KS_period,	KS_less,
497b04b7da8Stsutsui     KC(114),	KS_colon,	KS_slash,	KS_greater,
498b04b7da8Stsutsui     KC(115),	KS_equal,	KS_plus,	KS_underscore
499b04b7da8Stsutsui };
500b04b7da8Stsutsui 
501b04b7da8Stsutsui static const keysym_t hilkbd_keydesc_fr_ps2[] = {
502b04b7da8Stsutsui     KC(24),	KS_b,
503b04b7da8Stsutsui     KC(25),	KS_v,
504b04b7da8Stsutsui     KC(26),	KS_c,
505b04b7da8Stsutsui     KC(27),	KS_x,
506b04b7da8Stsutsui     KC(28),	KS_w,
507b04b7da8Stsutsui     KC(40),	KS_h,
508b04b7da8Stsutsui     KC(41),	KS_g,
509b04b7da8Stsutsui     KC(42),	KS_f,
510b04b7da8Stsutsui     KC(43),	KS_d,
511b04b7da8Stsutsui     KC(44),	KS_s,
512b04b7da8Stsutsui     KC(45),	KS_q,
513b04b7da8Stsutsui     KC(48),	KS_u,
514b04b7da8Stsutsui     KC(49),	KS_y,
515b04b7da8Stsutsui     KC(50),	KS_t,
516b04b7da8Stsutsui     KC(51),	KS_r,
517b04b7da8Stsutsui     KC(52),	KS_e,
518b04b7da8Stsutsui     KC(53),	KS_z,
519b04b7da8Stsutsui     KC(54),	KS_a,
520b04b7da8Stsutsui     KC(56),	KS_egrave,	KS_7,		KS_grave,
521b04b7da8Stsutsui     KC(57),	KS_minus,	KS_6,		KS_bar,
522b04b7da8Stsutsui     KC(58),	KS_parenleft,	KS_5,		KS_bracketleft,
523b04b7da8Stsutsui     KC(59),	KS_apostrophe,	KS_4,		KS_braceleft,
524b04b7da8Stsutsui     KC(60),	KS_quotedbl,	KS_3,		KS_numbersign,
525b04b7da8Stsutsui     KC(61),	KS_eacute,	KS_2,		KS_asciitilde,
526b04b7da8Stsutsui     KC(62),	KS_ampersand,	KS_1,
527b04b7da8Stsutsui     KC(63),	KS_twosuperior,
528b04b7da8Stsutsui     KC(88),	KS_underscore,	KS_8,		KS_backslash,
529b04b7da8Stsutsui     KC(89),	KS_ccedilla,	KS_9,		KS_asciicircum,
530b04b7da8Stsutsui     KC(90),	KS_agrave,	KS_0,		KS_at,
531b04b7da8Stsutsui     KC(91),	KS_parenright,	KS_degree,	KS_bracketright,
532b04b7da8Stsutsui     KC(92),	KS_equal,	KS_plus,	KS_braceright,
533b04b7da8Stsutsui     KC(96),	KS_i,
534b04b7da8Stsutsui     KC(97),	KS_o,
535b04b7da8Stsutsui     KC(98),	KS_p,
536b04b7da8Stsutsui     KC(99),	KS_dead_circumflex,KS_dead_diaeresis,
537b04b7da8Stsutsui     KC(100),	KS_dollar,	KS_sterling,	KS_currency,
538b04b7da8Stsutsui     KC(104),	KS_j,
539b04b7da8Stsutsui     KC(105),	KS_k,
540b04b7da8Stsutsui     KC(106),	KS_l,
541b04b7da8Stsutsui     KC(107),	KS_m,
542b04b7da8Stsutsui     KC(108),	KS_ugrave,	KS_percent,
543b04b7da8Stsutsui     KC(112),	KS_comma,	KS_question,
544b04b7da8Stsutsui     KC(113),	KS_semicolon,	KS_period,
545b04b7da8Stsutsui     KC(114),	KS_colon,	KS_slash,
546b04b7da8Stsutsui     KC(115),	KS_exclam,	KS_section,
547b04b7da8Stsutsui     KC(116),	KS_asterisk,	KS_mu,
548b04b7da8Stsutsui     KC(118),	KS_less,	KS_greater,
549b04b7da8Stsutsui 		KS_guillemotleft,KS_guillemotright,
550b04b7da8Stsutsui     KC(120),	KS_n
551b04b7da8Stsutsui };
552b04b7da8Stsutsui 
553b04b7da8Stsutsui #define KBD_MAP(name, base, map) \
554b04b7da8Stsutsui 			{ name, base, sizeof(map)/sizeof(keysym_t), map }
555b04b7da8Stsutsui 
556b04b7da8Stsutsui const struct wscons_keydesc hilkbd_keydesctab[] = {
557b04b7da8Stsutsui 	KBD_MAP(KB_US,			0,	hilkbd_keydesc_us),
558b04b7da8Stsutsui 	KBD_MAP(KB_DE,			KB_US,	hilkbd_keydesc_de),
559b04b7da8Stsutsui 	KBD_MAP(KB_DE | KB_NODEAD,	KB_DE,	hilkbd_keydesc_de_nodead),
560b04b7da8Stsutsui 	KBD_MAP(KB_FR,			KB_US,	hilkbd_keydesc_fr),
561b04b7da8Stsutsui 	KBD_MAP(KB_UK,			KB_US,	hilkbd_keydesc_uk),
562b04b7da8Stsutsui 	KBD_MAP(KB_SV,			KB_US,	hilkbd_keydesc_sv),
563b04b7da8Stsutsui 	KBD_MAP(KB_SV | KB_NODEAD,	KB_SV,	hilkbd_keydesc_sv_nodead),
564b04b7da8Stsutsui 	{0, 0, 0, 0},
565b04b7da8Stsutsui };
566b04b7da8Stsutsui 
567b04b7da8Stsutsui const struct wscons_keydesc hilkbd_keydesctab_ps2[] = {
568b04b7da8Stsutsui 	KBD_MAP(KB_US,			0,	hilkbd_keydesc_us),
569b04b7da8Stsutsui 	KBD_MAP(KB_DE,			KB_US,	hilkbd_keydesc_de_ps2),
570b04b7da8Stsutsui 	KBD_MAP(KB_DE | KB_NODEAD,	KB_DE,	hilkbd_keydesc_de_ps2_nodead),
571b04b7da8Stsutsui 	KBD_MAP(KB_FR,			KB_US,	hilkbd_keydesc_fr_ps2),
572b04b7da8Stsutsui 	KBD_MAP(KB_UK,			KB_US,	hilkbd_keydesc_uk_ps2),
573b04b7da8Stsutsui 	KBD_MAP(KB_SV,			KB_US,	hilkbd_keydesc_sv_ps2),
574b04b7da8Stsutsui 	KBD_MAP(KB_SV | KB_NODEAD,	KB_SV,	hilkbd_keydesc_sv_ps2_nodead),
575b04b7da8Stsutsui 	{0, 0, 0, 0},
576b04b7da8Stsutsui };
577b04b7da8Stsutsui 
578b04b7da8Stsutsui /*
579b04b7da8Stsutsui  * Keyboard ID to layout table
580b04b7da8Stsutsui  */
581b04b7da8Stsutsui const kbd_t hilkbd_layouts[MAXHILKBDLAYOUT] = {
582b04b7da8Stsutsui 	-1,	/* 00 Undefined or custom layout */
583b04b7da8Stsutsui 	-1,	/* 01 Undefined */
584b04b7da8Stsutsui 	-1,	/* 02 Japanese */
585*d7faaca5Sgutteridge 	-1,	/* 03 Swiss French */
586b04b7da8Stsutsui 	-1,	/* 04 Portuguese */
587b04b7da8Stsutsui 	-1,	/* 05 Arabic */
588b04b7da8Stsutsui 	-1,	/* 06 Hebrew */
589b04b7da8Stsutsui 	-1,	/* 07 Canadian English */
590b04b7da8Stsutsui 	-1,	/* 08 Turkish */
591b04b7da8Stsutsui 	-1,	/* 09 Greek */
592b04b7da8Stsutsui 	-1,	/* 0a Thai */
593b04b7da8Stsutsui 	-1,	/* 0b Italian */
594b04b7da8Stsutsui 	-1,	/* 0c Korean */
595b04b7da8Stsutsui 	-1,	/* 0d Dutch */
596b04b7da8Stsutsui 	KB_SV,	/* 0e Swedish */
597b04b7da8Stsutsui 	KB_DE,	/* 0f German */
598b04b7da8Stsutsui 	-1,	/* 10 Simplified Chinese */
599b04b7da8Stsutsui 	-1,	/* 11 Traditional Chinese */
600b04b7da8Stsutsui 	-1,	/* 12 Swiss French 2 */
601b04b7da8Stsutsui 	-1,	/* 13 Euro Spanish */
602b04b7da8Stsutsui 	-1,	/* 14 Swiss German 2 */
603b04b7da8Stsutsui 	-1,	/* 15 Belgian */
604b04b7da8Stsutsui 	-1,	/* 16 Finnish */
605b04b7da8Stsutsui 	KB_UK,	/* 17 UK English */
606b04b7da8Stsutsui 	-1,	/* 18 Canadian French */
607b04b7da8Stsutsui 	-1,	/* 19 Swiss German */
608b04b7da8Stsutsui 	-1,	/* 1a Norwegian */
609b04b7da8Stsutsui 	KB_FR,	/* 1b French */
610b04b7da8Stsutsui 	-1,	/* 1c Danish */
611b04b7da8Stsutsui 	-1,	/* 1d Katakana */
612b04b7da8Stsutsui 	-1,	/* 1e Latin Spanish */
613b04b7da8Stsutsui 	KB_US,	/* 1f US ASCII */
614b04b7da8Stsutsui };
615