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