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