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