wskbdmap_mfii.c revision 1.5
1/* $OpenBSD: wskbdmap_mfii.c,v 1.5 2001/03/09 15:25:01 aaron Exp $ */ 2/* $NetBSD: wskbdmap_mfii.c,v 1.15 2000/05/19 16:40:04 drochner Exp $ */ 3 4/*- 5 * Copyright (c) 1997 The NetBSD Foundation, Inc. 6 * All rights reserved. 7 * 8 * This code is derived from software contributed to The NetBSD Foundation 9 * by Juergen Hannken-Illjes. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. All advertising materials mentioning features or use of this software 20 * must display the following acknowledgement: 21 * This product includes software developed by the NetBSD 22 * Foundation, Inc. and its contributors. 23 * 4. Neither the name of The NetBSD Foundation nor the names of its 24 * contributors may be used to endorse or promote products derived 25 * from this software without specific prior written permission. 26 * 27 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 28 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 29 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 30 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 31 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 32 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 33 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 34 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 35 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 36 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 * POSSIBILITY OF SUCH DAMAGE. 38 */ 39 40#include <sys/types.h> 41#include <dev/wscons/wsksymdef.h> 42#include <dev/wscons/wsksymvar.h> 43#include <dev/pckbc/wskbdmap_mfii.h> 44 45#define KC(n) KS_KEYCODE(n) 46 47static const keysym_t pckbd_keydesc_us[] = { 48/* pos command normal shifted */ 49 KC(1), KS_Cmd_Debugger, KS_Escape, 50 KC(2), KS_1, KS_exclam, 51 KC(3), KS_2, KS_at, 52 KC(4), KS_3, KS_numbersign, 53 KC(5), KS_4, KS_dollar, 54 KC(6), KS_5, KS_percent, 55 KC(7), KS_6, KS_asciicircum, 56 KC(8), KS_7, KS_ampersand, 57 KC(9), KS_8, KS_asterisk, 58 KC(10), KS_9, KS_parenleft, 59 KC(11), KS_0, KS_parenright, 60 KC(12), KS_minus, KS_underscore, 61 KC(13), KS_equal, KS_plus, 62 KC(14), KS_Cmd_ResetEmul, KS_Delete, 63 KC(15), KS_Tab, 64 KC(16), KS_q, 65 KC(17), KS_w, 66 KC(18), KS_e, 67 KC(19), KS_r, 68 KC(20), KS_t, 69 KC(21), KS_y, 70 KC(22), KS_u, 71 KC(23), KS_i, 72 KC(24), KS_o, 73 KC(25), KS_p, 74 KC(26), KS_bracketleft, KS_braceleft, 75 KC(27), KS_bracketright, KS_braceright, 76 KC(28), KS_Return, 77 KC(29), KS_Cmd1, KS_Control_L, 78 KC(30), KS_a, 79 KC(31), KS_s, 80 KC(32), KS_d, 81 KC(33), KS_f, 82 KC(34), KS_g, 83 KC(35), KS_h, 84 KC(36), KS_j, 85 KC(37), KS_k, 86 KC(38), KS_l, 87 KC(39), KS_semicolon, KS_colon, 88 KC(40), KS_apostrophe, KS_quotedbl, 89 KC(41), KS_grave, KS_asciitilde, 90 KC(42), KS_Shift_L, 91 KC(43), KS_backslash, KS_bar, 92 KC(44), KS_z, 93 KC(45), KS_x, 94 KC(46), KS_c, 95 KC(47), KS_v, 96 KC(48), KS_b, 97 KC(49), KS_n, 98 KC(50), KS_m, 99 KC(51), KS_comma, KS_less, 100 KC(52), KS_period, KS_greater, 101 KC(53), KS_slash, KS_question, 102 KC(54), KS_Shift_R, 103 KC(55), KS_KP_Multiply, 104 KC(56), KS_Cmd2, KS_Alt_L, 105 KC(57), KS_space, 106 KC(58), KS_Caps_Lock, 107 KC(59), KS_Cmd_Screen0, KS_f1, 108 KC(60), KS_Cmd_Screen1, KS_f2, 109 KC(61), KS_Cmd_Screen2, KS_f3, 110 KC(62), KS_Cmd_Screen3, KS_f4, 111 KC(63), KS_Cmd_Screen4, KS_f5, 112 KC(64), KS_Cmd_Screen5, KS_f6, 113 KC(65), KS_Cmd_Screen6, KS_f7, 114 KC(66), KS_Cmd_Screen7, KS_f8, 115 KC(67), KS_Cmd_Screen8, KS_f9, 116 KC(68), KS_Cmd_Screen9, KS_f10, 117 KC(69), KS_Num_Lock, 118 KC(70), KS_Hold_Screen, 119 KC(71), KS_KP_Home, KS_KP_7, 120 KC(72), KS_KP_Up, KS_KP_8, 121 KC(73), KS_KP_Prior, KS_KP_9, 122 KC(74), KS_KP_Subtract, 123 KC(75), KS_KP_Left, KS_KP_4, 124 KC(76), KS_KP_Begin, KS_KP_5, 125 KC(77), KS_KP_Right, KS_KP_6, 126 KC(78), KS_KP_Add, 127 KC(79), KS_KP_End, KS_KP_1, 128 KC(80), KS_KP_Down, KS_KP_2, 129 KC(81), KS_KP_Next, KS_KP_3, 130 KC(82), KS_KP_Insert, KS_KP_0, 131 KC(83), KS_KP_Delete, KS_KP_Decimal, 132 KC(87), KS_Cmd_Screen10, KS_f11, 133 KC(88), KS_Cmd_Screen11, KS_f12, 134 KC(127), KS_Pause, /* Break */ 135 KC(156), KS_KP_Enter, 136 KC(157), KS_Control_R, 137 KC(170), KS_Print_Screen, 138 KC(181), KS_KP_Divide, 139 KC(183), KS_Print_Screen, 140 KC(184), KS_Alt_R, KS_Multi_key, 141#if 0 142 KC(198), KS_Cmd_ResetClose, /* CTL-Break */ 143#endif 144 KC(199), KS_Home, 145 KC(200), KS_Up, 146 KC(201), KS_Cmd_ScrollBack, KS_Prior, 147 KC(203), KS_Left, 148 KC(205), KS_Right, 149 KC(207), KS_End, 150 KC(208), KS_Down, 151 KC(209), KS_Cmd_ScrollFwd, KS_Next, 152 KC(210), KS_Insert, 153 KC(211), KS_Cmd_KbdReset, KS_KP_Delete, 154 KC(219), KS_Meta_L, 155 KC(220), KS_Meta_R, 156 KC(221), KS_Menu, 157}; 158 159static const keysym_t pckbd_keydesc_de[] = { 160/* pos normal shifted altgr shift-altgr */ 161 KC(3), KS_2, KS_quotedbl, KS_twosuperior, 162 KC(4), KS_3, KS_section, KS_threesuperior, 163 KC(7), KS_6, KS_ampersand, 164 KC(8), KS_7, KS_slash, KS_braceleft, 165 KC(9), KS_8, KS_parenleft, KS_bracketleft, 166 KC(10), KS_9, KS_parenright, KS_bracketright, 167 KC(11), KS_0, KS_equal, KS_braceright, 168 KC(12), KS_ssharp, KS_question, KS_backslash, 169 KC(13), KS_dead_acute, KS_dead_grave, 170 KC(16), KS_q, KS_Q, KS_at, 171 KC(21), KS_z, 172 KC(26), KS_udiaeresis, 173 KC(27), KS_plus, KS_asterisk, KS_dead_tilde, 174 KC(39), KS_odiaeresis, 175 KC(40), KS_adiaeresis, 176 KC(41), KS_dead_circumflex,KS_dead_abovering, 177 KC(43), KS_numbersign, KS_apostrophe, 178 KC(44), KS_y, 179 KC(50), KS_m, KS_M, KS_mu, 180 KC(51), KS_comma, KS_semicolon, 181 KC(52), KS_period, KS_colon, 182 KC(53), KS_minus, KS_underscore, 183 KC(86), KS_less, KS_greater, KS_bar, KS_brokenbar, 184 KC(184), KS_Mode_switch, KS_Multi_key, 185}; 186 187static const keysym_t pckbd_keydesc_de_nodead[] = { 188/* pos normal shifted altgr shift-altgr */ 189 KC(13), KS_apostrophe, KS_grave, 190 KC(27), KS_plus, KS_asterisk, KS_asciitilde, 191 KC(41), KS_asciicircum, KS_degree, 192}; 193 194static const keysym_t pckbd_keydesc_dk[] = { 195/* pos normal shifted altgr shift-altgr */ 196 KC(3), KS_2, KS_quotedbl, KS_at, 197 KC(4), KS_3, KS_numbersign, KS_sterling, 198 KC(5), KS_4, KS_currency, KS_dollar, 199 KC(7), KS_6, KS_ampersand, 200 KC(8), KS_7, KS_slash, KS_braceleft, 201 KC(9), KS_8, KS_parenleft, KS_bracketleft, 202 KC(10), KS_9, KS_parenright, KS_bracketright, 203 KC(11), KS_0, KS_equal, KS_braceright, 204 KC(12), KS_plus, KS_question, 205 KC(13), KS_dead_acute, KS_dead_grave, KS_bar, 206 KC(26), KS_aring, 207 KC(27), KS_dead_diaeresis, KS_dead_circumflex, KS_dead_tilde, 208 KC(39), KS_ae, 209 KC(40), KS_oslash, 210 KC(41), KS_onehalf, KS_paragraph, 211 KC(43), KS_apostrophe, KS_asterisk, 212 KC(51), KS_comma, KS_semicolon, 213 KC(52), KS_period, KS_colon, 214 KC(53), KS_minus, KS_underscore, 215 KC(86), KS_less, KS_greater, KS_backslash, 216 KC(184), KS_Mode_switch, KS_Multi_key, 217}; 218 219static const keysym_t pckbd_keydesc_dk_nodead[] = { 220/* pos normal shifted altgr shift-altgr */ 221 KC(13), KS_apostrophe, KS_grave, KS_bar, 222 KC(27), KS_diaeresis, KS_asciicircum, KS_asciitilde, 223}; 224 225static const keysym_t pckbd_keydesc_sv[] = { 226/* pos normal shifted altgr shift-altgr */ 227 KC(12), KS_plus, KS_question, KS_backslash, 228 KC(27), KS_dead_diaeresis, KS_dead_circumflex, KS_dead_tilde, 229 KC(39), KS_odiaeresis, 230 KC(40), KS_adiaeresis, 231 KC(41), KS_paragraph, KS_onehalf, 232 KC(86), KS_less, KS_greater, KS_bar, 233 KC(184), KS_Mode_switch, KS_Multi_key, 234}; 235 236static const keysym_t pckbd_keydesc_sv_nodead[] = { 237/* pos normal shifted altgr shift-altgr */ 238 KC(13), KS_apostrophe, KS_grave, KS_bar, 239 KC(27), KS_diaeresis, KS_asciicircum, KS_asciitilde, 240}; 241 242static const keysym_t pckbd_keydesc_no[] = { 243/* pos normal shifted altgr shift-altgr */ 244 KC(13), KS_backslash, KS_dead_grave, KS_dead_acute, 245 KC(27), KS_dead_diaeresis, KS_dead_circumflex, KS_dead_tilde, 246 KC(39), KS_oslash, 247 KC(40), KS_ae, 248 KC(41), KS_bar, KS_paragraph, 249 KC(86), KS_less, KS_greater, 250}; 251 252static const keysym_t pckbd_keydesc_no_nodead[] = { 253/* pos normal shifted altgr shift-altgr */ 254 KC(13), KS_backslash, KS_grave, KS_acute, 255 KC(27), KS_diaeresis, KS_asciicircum, KS_asciitilde, 256}; 257 258static const keysym_t pckbd_keydesc_fr[] = { 259/* pos normal shifted altgr shift-altgr */ 260 KC(2), KS_ampersand, KS_1, 261 KC(3), KS_eacute, KS_2, KS_asciitilde, 262 KC(4), KS_quotedbl, KS_3, KS_numbersign, 263 KC(5), KS_apostrophe, KS_4, KS_braceleft, 264 KC(6), KS_parenleft, KS_5, KS_bracketleft, 265 KC(7), KS_minus, KS_6, KS_bar, 266 KC(8), KS_egrave, KS_7, KS_grave, 267 KC(9), KS_underscore, KS_8, KS_backslash, 268 KC(10), KS_ccedilla, KS_9, KS_asciicircum, 269 KC(11), KS_agrave, KS_0, KS_at, 270 KC(12), KS_parenright, KS_degree, KS_bracketright, 271 KC(13), KS_equal, KS_plus, KS_braceright, 272 KC(16), KS_a, 273 KC(17), KS_z, 274 KC(26), KS_dead_circumflex, KS_dead_diaeresis, 275 KC(27), KS_dollar, KS_sterling, KS_currency, 276 KC(30), KS_q, 277 KC(39), KS_m, 278 KC(40), KS_ugrave, KS_percent, 279 KC(41), KS_twosuperior, 280 KC(43), KS_asterisk, KS_mu, 281 KC(44), KS_w, 282 KC(50), KS_comma, KS_question, 283 KC(51), KS_semicolon, KS_period, 284 KC(52), KS_colon, KS_slash, 285 KC(53), KS_exclam, KS_section, 286 KC(86), KS_less, KS_greater, 287 KC(184), KS_Mode_switch, KS_Multi_key, 288}; 289 290static const keysym_t pckbd_keydesc_it[] = { 291/* pos normal shifted altgr shift-altgr */ 292 KC(3), KS_2, KS_quotedbl, KS_twosuperior, 293 KC(4), KS_3, KS_sterling, KS_threesuperior, 294 KC(5), KS_4, KS_dollar, 295 KC(6), KS_5, KS_percent, 296 KC(7), KS_6, KS_ampersand, 297 KC(8), KS_7, KS_slash, 298 KC(9), KS_8, KS_parenleft, 299 KC(10), KS_9, KS_parenright, 300 KC(11), KS_0, KS_equal, 301 KC(12), KS_apostrophe, KS_question, 302 KC(13), KS_igrave, KS_asciicircum, 303 KC(26), KS_egrave, KS_eacute, KS_braceleft, KS_bracketleft, 304 KC(27), KS_plus, KS_asterisk, KS_braceright, KS_bracketright, 305 KC(39), KS_ograve, KS_Ccedilla, KS_at, 306 KC(40), KS_agrave, KS_degree, KS_numbersign, 307 KC(41), KS_backslash, KS_bar, 308 KC(43), KS_ugrave, KS_section, 309 KC(51), KS_comma, KS_semicolon, 310 KC(52), KS_period, KS_colon, 311 KC(53), KS_minus, KS_underscore, 312 KC(86), KS_less, KS_greater, 313 KC(184), KS_Mode_switch, KS_Multi_key, 314}; 315 316static const keysym_t pckbd_keydesc_uk[] = { 317/* pos normal shifted altgr shift-altgr */ 318 KC(2), KS_1, KS_exclam, KS_plusminus, KS_exclamdown, 319 KC(3), KS_2, KS_quotedbl, KS_twosuperior, KS_cent, 320 KC(4), KS_3, KS_sterling, KS_threesuperior, 321 KC(5), KS_4, KS_dollar, KS_acute, KS_currency, 322 KC(6), KS_5, KS_percent, KS_mu, KS_yen, 323 KC(7), KS_6, KS_asciicircum, KS_paragraph, 324 KC(8), KS_7, KS_ampersand, KS_periodcentered, KS_brokenbar, 325 KC(9), KS_8, KS_asterisk, KS_cedilla, KS_ordfeminine, 326 KC(10), KS_9, KS_parenleft, KS_onesuperior, KS_diaeresis, 327 KC(11), KS_0, KS_parenright, KS_masculine, KS_copyright, 328 KC(12), KS_minus, KS_underscore, KS_hyphen, KS_ssharp, 329 KC(13), KS_equal, KS_plus, KS_onehalf, KS_guillemotleft, 330 KC(40), KS_apostrophe, KS_at, KS_section, KS_Agrave, 331 KC(41), KS_grave, KS_grave, KS_agrave, KS_agrave, 332 KC(43), KS_numbersign, KS_asciitilde, KS_sterling, KS_thorn, 333 KC(86), KS_backslash, KS_bar, KS_Udiaeresis, 334}; 335 336static const keysym_t pckbd_keydesc_jp[] = { 337/* pos normal shifted altgr shift-altgr */ 338 KC(3), KS_2, KS_quotedbl, 339 KC(7), KS_6, KS_ampersand, 340 KC(8), KS_7, KS_apostrophe, 341 KC(9), KS_8, KS_parenleft, 342 KC(10), KS_9, KS_parenright, 343 KC(11), KS_0, 344 KC(12), KS_minus, KS_equal, 345 KC(13), KS_asciicircum, KS_asciitilde, 346 KC(26), KS_at, KS_grave, 347 KC(27), KS_bracketleft, KS_braceleft, 348 KC(39), KS_semicolon, KS_plus, 349 KC(40), KS_colon, KS_asterisk, 350 KC(41), KS_Zenkaku_Hankaku, /* replace grave/tilde */ 351 KC(43), KS_bracketright, KS_braceright, 352 KC(112), KS_Hiragana_Katakana, 353 KC(115), KS_backslash, KS_underscore, 354 KC(121), KS_Henkan, 355 KC(123), KS_Muhenkan, 356 KC(125), KS_backslash, KS_bar, 357}; 358 359static const keysym_t pckbd_keydesc_es[] = { 360/* pos normal shifted altgr shift-altgr */ 361 KC(2), KS_1, KS_exclam, KS_bar, 362 KC(3), KS_2, KS_quotedbl, KS_at, 363 KC(4), KS_3, KS_periodcentered, KS_numbersign, 364 KC(5), KS_4, KS_dollar, KS_asciitilde, 365 KC(7), KS_6, KS_ampersand, 366 KC(8), KS_7, KS_slash, 367 KC(9), KS_8, KS_parenleft, 368 KC(10), KS_9, KS_parenright, 369 KC(11), KS_0, KS_equal, 370 KC(12), KS_grave, KS_question, 371 KC(13), KS_exclamdown, KS_questiondown, 372 KC(26), KS_dead_grave, KS_dead_circumflex, KS_bracketleft, 373 KC(27), KS_plus, KS_asterisk, KS_bracketright, 374 KC(39), KS_ntilde, 375 KC(40), KS_dead_acute, KS_dead_diaeresis, KS_braceleft, 376 KC(41), KS_degree, KS_ordfeminine, KS_backslash, 377 KC(43), KS_ccedilla, KS_Ccedilla, KS_braceright, 378 KC(51), KS_comma, KS_semicolon, 379 KC(52), KS_period, KS_colon, 380 KC(53), KS_minus, KS_underscore, 381 KC(86), KS_less, KS_greater, 382 KC(184), KS_Mode_switch, KS_Multi_key, 383}; 384 385static const keysym_t pckbd_keydesc_be[] = { 386/* pos normal shifted altgr shift-altgr */ 387 KC(2), KS_ampersand, KS_1, KS_bar, 388 KC(3), KS_eacute, KS_2, KS_at, 389 KC(4), KS_quotedbl, KS_3, KS_numbersign, 390 KC(5), KS_apostrophe, KS_4, 391 KC(6), KS_parenleft, KS_5, 392 KC(7), KS_currency, KS_6, KS_asciicircum, 393 KC(8), KS_egrave, KS_7, 394 KC(9), KS_exclam, KS_8, 395 KC(10), KS_ccedilla, KS_9, KS_braceleft, 396 KC(11), KS_agrave, KS_0, KS_braceright, 397 KC(12), KS_parenright, KS_degree, 398 KC(13), KS_minus, KS_underscore, 399 KC(16), KS_a, 400 KC(17), KS_z, 401 KC(26), KS_dead_circumflex, KS_dead_diaeresis, KS_bracketleft, 402 KC(27), KS_dollar, KS_asterisk, KS_bracketright, 403 KC(30), KS_q, 404 KC(39), KS_m, 405 KC(40), KS_ugrave, KS_percent, KS_section, 406 KC(41), KS_twosuperior, 407 KC(43), KS_mu, KS_sterling, KS_grave, 408 KC(44), KS_w, 409 KC(50), KS_comma, KS_question, 410 KC(51), KS_semicolon, KS_period, 411 KC(52), KS_colon, KS_slash, 412 KC(53), KS_equal, KS_plus, KS_asciitilde, 413 KC(86), KS_less, KS_greater, KS_backslash, 414 KC(184), KS_Mode_switch, KS_Multi_key, 415}; 416 417static const keysym_t pckbd_keydesc_us_declk[] = { 418/* pos normal shifted altgr shift-altgr */ 419 KC(1), KS_grave, KS_asciitilde, /* replace escape */ 420 KC(41), KS_less, KS_greater, /* replace grave/tilde */ 421 KC(143), KS_Multi_key, /* left compose */ 422 KC(157), KS_Multi_key, /* right compose, replace right control */ 423 KC(87), KS_Cmd_Debugger, KS_Escape, /* replace F11 */ 424 KC(189), KS_f13, 425 KC(190), KS_f14, 426 KC(191), KS_Help, 427 KC(192), KS_Execute, 428 KC(193), KS_f17, 429 KC(183), KS_f18, 430 KC(70), KS_f19, /* replace scroll lock */ 431 KC(127), KS_f20, /* replace break */ 432 KC(69), KS_KP_F1, /* replace num lock */ 433 KC(181), KS_KP_F2, /* replace divide */ 434 KC(55), KS_KP_F3, /* replace multiply */ 435 KC(74), KS_KP_F4, /* replace subtract */ 436 437 /* keypad is numbers only - no num lock */ 438 KC(71), KS_KP_7, 439 KC(72), KS_KP_8, 440 KC(73), KS_KP_9, 441 KC(75), KS_KP_4, 442 KC(76), KS_KP_5, 443 KC(77), KS_KP_6, 444 KC(79), KS_KP_1, 445 KC(80), KS_KP_2, 446 KC(81), KS_KP_3, 447 KC(82), KS_KP_0, 448 KC(83), KS_KP_Decimal, 449 450 KC(206), KS_KP_Subtract, 451 KC(78), KS_KP_Separator, /* replace add */ 452 KC(199), KS_Find, /* replace home */ 453 KC(207), KS_Select, /* replace end */ 454}; 455 456static const keysym_t pckbd_keydesc_us_dvorak[] = { 457/* pos command normal shifted */ 458 KC(12), KS_bracketleft, KS_braceleft, 459 KC(13), KS_bracketright, KS_braceright, 460 KC(16), KS_apostrophe, KS_quotedbl, 461 KC(17), KS_comma, KS_less, 462 KC(18), KS_period, KS_greater, 463 KC(19), KS_p, 464 KC(20), KS_y, 465 KC(21), KS_f, 466 KC(22), KS_g, 467 KC(23), KS_c, 468 KC(24), KS_r, 469 KC(25), KS_l, 470 KC(26), KS_slash, KS_question, 471 KC(27), KS_equal, KS_plus, 472 KC(31), KS_o, 473 KC(32), KS_e, 474 KC(33), KS_u, 475 KC(34), KS_i, 476 KC(35), KS_d, 477 KC(36), KS_h, 478 KC(37), KS_t, 479 KC(38), KS_n, 480 KC(39), KS_s, 481 KC(40), KS_minus, KS_underscore, 482 KC(44), KS_semicolon, KS_colon, 483 KC(45), KS_q, 484 KC(46), KS_j, 485 KC(47), KS_k, 486 KC(48), KS_x, 487 KC(49), KS_b, 488 KC(51), KS_w, 489 KC(52), KS_v, 490 KC(53), KS_z, 491}; 492 493static const keysym_t pckbd_keydesc_swapctrlcaps[] = { 494/* pos command normal shifted */ 495 KC(29), KS_Caps_Lock, 496 KC(58), KS_Cmd1, KS_Control_L, 497}; 498 499static const keysym_t pckbd_keydesc_iopener[] = { 500/* pos command normal shifted */ 501 KC(59), KS_Cmd_Debugger, KS_Escape, 502 KC(60), KS_Cmd_Screen0, KS_f1, 503 KC(61), KS_Cmd_Screen1, KS_f2, 504 KC(62), KS_Cmd_Screen2, KS_f3, 505 KC(63), KS_Cmd_Screen3, KS_f4, 506 KC(64), KS_Cmd_Screen4, KS_f5, 507 KC(65), KS_Cmd_Screen5, KS_f6, 508 KC(66), KS_Cmd_Screen6, KS_f7, 509 KC(67), KS_Cmd_Screen7, KS_f8, 510 KC(68), KS_Cmd_Screen8, KS_f9, 511 KC(87), KS_Cmd_Screen9, KS_f10, 512 KC(88), KS_f11, 513}; 514 515#define KBD_MAP(name, base, map) \ 516 { name, base, sizeof(map)/sizeof(keysym_t), map } 517 518const struct wscons_keydesc pckbd_keydesctab[] = { 519 KBD_MAP(KB_US, 0, pckbd_keydesc_us), 520 KBD_MAP(KB_DE, KB_US, pckbd_keydesc_de), 521 KBD_MAP(KB_DE | KB_NODEAD, KB_DE, pckbd_keydesc_de_nodead), 522 KBD_MAP(KB_FR, KB_US, pckbd_keydesc_fr), 523 KBD_MAP(KB_DK, KB_US, pckbd_keydesc_dk), 524 KBD_MAP(KB_DK | KB_NODEAD, KB_DK, pckbd_keydesc_dk_nodead), 525 KBD_MAP(KB_IT, KB_US, pckbd_keydesc_it), 526 KBD_MAP(KB_UK, KB_US, pckbd_keydesc_uk), 527 KBD_MAP(KB_JP, KB_US, pckbd_keydesc_jp), 528 KBD_MAP(KB_SV, KB_DK, pckbd_keydesc_sv), 529 KBD_MAP(KB_SV | KB_NODEAD, KB_SV, pckbd_keydesc_sv_nodead), 530 KBD_MAP(KB_NO, KB_DK, pckbd_keydesc_no), 531 KBD_MAP(KB_NO | KB_NODEAD, KB_NO, pckbd_keydesc_no_nodead), 532 KBD_MAP(KB_US | KB_DECLK, KB_US, pckbd_keydesc_us_declk), 533 KBD_MAP(KB_US | KB_DVORAK, KB_US, pckbd_keydesc_us_dvorak), 534 KBD_MAP(KB_US | KB_SWAPCTRLCAPS, KB_US, pckbd_keydesc_swapctrlcaps), 535 KBD_MAP(KB_US | KB_IOPENER, KB_US, pckbd_keydesc_iopener), 536 KBD_MAP(KB_JP | KB_SWAPCTRLCAPS, KB_JP, pckbd_keydesc_swapctrlcaps), 537 KBD_MAP(KB_FR | KB_SWAPCTRLCAPS, KB_FR, pckbd_keydesc_swapctrlcaps), 538 KBD_MAP(KB_BE | KB_SWAPCTRLCAPS, KB_BE, pckbd_keydesc_swapctrlcaps), 539 KBD_MAP(KB_US | KB_DVORAK | KB_SWAPCTRLCAPS, KB_US | KB_DVORAK, 540 pckbd_keydesc_swapctrlcaps), 541 KBD_MAP(KB_US | KB_IOPENER | KB_SWAPCTRLCAPS, KB_US | KB_IOPENER, 542 pckbd_keydesc_swapctrlcaps), 543 KBD_MAP(KB_ES, KB_US, pckbd_keydesc_es), 544 KBD_MAP(KB_BE, KB_US, pckbd_keydesc_be), 545 {0, 0, 0, 0} 546}; 547 548#undef KBD_MAP 549#undef KC 550