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