1 /* $OpenBSD: akbdmap.h,v 1.7 2012/01/29 10:54:21 mpi Exp $ */ 2 /* $NetBSD: akbdmap.h,v 1.7 2005/05/05 22:29:41 abs 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 * 20 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 #ifdef WSDISPLAY_COMPAT_RAWKBD 34 #include <dev/wscons/wskbdraw.h> 35 36 unsigned char keyboard[128] = { 37 RAWKEY_a, 38 RAWKEY_s, 39 RAWKEY_d, 40 RAWKEY_f, 41 RAWKEY_h, 42 RAWKEY_g, 43 RAWKEY_z, 44 RAWKEY_x, 45 RAWKEY_c, 46 RAWKEY_v, 47 RAWKEY_less, 48 RAWKEY_b, 49 RAWKEY_q, 50 RAWKEY_w, 51 RAWKEY_e, 52 RAWKEY_r, 53 RAWKEY_y, 54 RAWKEY_t, 55 RAWKEY_1, 56 RAWKEY_2, 57 RAWKEY_3, 58 RAWKEY_4, 59 RAWKEY_6, 60 RAWKEY_5, 61 RAWKEY_equal, 62 RAWKEY_9, 63 RAWKEY_7, 64 RAWKEY_minus, 65 RAWKEY_8, 66 RAWKEY_0, 67 RAWKEY_bracketright, 68 RAWKEY_o, 69 RAWKEY_u, 70 RAWKEY_bracketleft, 71 RAWKEY_i, 72 RAWKEY_p, 73 RAWKEY_Return, 74 RAWKEY_l, 75 RAWKEY_j, 76 RAWKEY_apostrophe, 77 RAWKEY_k, 78 RAWKEY_semicolon, 79 RAWKEY_backslash, 80 RAWKEY_comma, 81 RAWKEY_slash, 82 RAWKEY_n, 83 RAWKEY_m, 84 RAWKEY_period, 85 RAWKEY_Tab, 86 RAWKEY_space, 87 RAWKEY_grave, 88 RAWKEY_Delete, 89 RAWKEY_KP_Enter, 90 RAWKEY_Escape, 91 RAWKEY_Control_L, 92 219, /* XXX */ 93 RAWKEY_Shift_L, 94 RAWKEY_Caps_Lock, 95 RAWKEY_Alt_L, 96 RAWKEY_Left, 97 RAWKEY_Right, 98 RAWKEY_Down, 99 RAWKEY_Up, 100 0, /* Fn */ 101 0, 102 RAWKEY_KP_Delete, 103 0, 104 RAWKEY_KP_Multiply, 105 0, 106 RAWKEY_KP_Add, 107 0, 108 RAWKEY_Num_Lock, 109 0, 110 0, 111 0, 112 RAWKEY_KP_Divide, 113 RAWKEY_KP_Enter, 114 0, 115 RAWKEY_KP_Subtract, 116 0, 117 0, 118 RAWKEY_KP_Equal, 119 RAWKEY_KP_Insert, 120 RAWKEY_KP_End, 121 RAWKEY_KP_Down, 122 RAWKEY_KP_Next, 123 RAWKEY_KP_Left, 124 RAWKEY_KP_Begin, 125 RAWKEY_KP_Right, 126 RAWKEY_KP_Home, 127 0, 128 RAWKEY_KP_Up, 129 RAWKEY_KP_Prior, 130 0, 131 0, 132 RAWKEY_KP_Delete, 133 RAWKEY_f5, 134 RAWKEY_f6, 135 RAWKEY_f7, 136 RAWKEY_f3, 137 RAWKEY_f8, 138 RAWKEY_f9, 139 0, 140 RAWKEY_f11, 141 0, 142 RAWKEY_Print_Screen, 143 RAWKEY_KP_Enter, 144 RAWKEY_Hold_Screen, 145 0, 146 RAWKEY_f10, 147 0, 148 RAWKEY_f12, 149 0, 150 RAWKEY_Pause, 151 RAWKEY_Insert, 152 RAWKEY_Home, 153 RAWKEY_Prior, 154 RAWKEY_Delete, 155 RAWKEY_f4, 156 RAWKEY_End, 157 RAWKEY_f2, 158 RAWKEY_Next, 159 RAWKEY_f1, 160 0, 161 0, 162 0, 163 0, 164 0 165 }; 166 #endif /* WSDISPLAY_COMPAT_RAWKBD */ 167 168 /* XXX This list is incomplete. */ 169 170 #define KC(n) KS_KEYCODE(n) 171 172 static const keysym_t akbd_keydesc_us[] = { 173 /* pos command normal shifted */ 174 KC(0), KS_a, 175 KC(1), KS_s, 176 KC(2), KS_d, 177 KC(3), KS_f, 178 KC(4), KS_h, 179 KC(5), KS_g, 180 KC(6), KS_z, 181 KC(7), KS_x, 182 KC(8), KS_c, 183 KC(9), KS_v, 184 185 KC(11), KS_b, 186 KC(12), KS_q, 187 KC(13), KS_w, 188 KC(14), KS_e, 189 KC(15), KS_r, 190 KC(16), KS_y, 191 KC(17), KS_t, 192 KC(18), KS_1, KS_exclam, 193 KC(19), KS_2, KS_at, 194 KC(20), KS_3, KS_numbersign, 195 KC(21), KS_4, KS_dollar, 196 KC(22), KS_6, KS_asciicircum, 197 KC(23), KS_5, KS_percent, 198 KC(24), KS_equal, KS_plus, 199 KC(25), KS_9, KS_parenleft, 200 KC(26), KS_7, KS_ampersand, 201 KC(27), KS_minus, KS_underscore, 202 KC(28), KS_8, KS_asterisk, 203 KC(29), KS_0, KS_parenright, 204 KC(30), KS_bracketright, KS_braceright, 205 KC(31), KS_o, 206 KC(32), KS_u, 207 KC(33), KS_bracketleft, KS_braceleft, 208 KC(34), KS_i, 209 KC(35), KS_p, 210 KC(36), KS_Return, 211 KC(37), KS_l, 212 KC(38), KS_j, 213 KC(39), KS_apostrophe, KS_quotedbl, 214 KC(40), KS_k, 215 KC(41), KS_semicolon, KS_colon, 216 KC(42), KS_backslash, KS_bar, 217 KC(43), KS_comma, KS_less, 218 KC(44), KS_slash, KS_question, 219 KC(45), KS_n, 220 KC(46), KS_m, 221 KC(47), KS_period, KS_greater, 222 KC(48), KS_Tab, 223 KC(49), KS_space, 224 KC(50), KS_grave, KS_asciitilde, 225 KC(51), KS_Delete, 226 KC(52), KS_KP_Enter, 227 KC(53), KS_Escape, 228 KC(54), KS_Control_L, 229 KC(55), KS_Cmd, /* Command */ 230 KC(56), KS_Shift_L, 231 KC(57), KS_Caps_Lock, 232 KC(58), KS_Cmd1, /* Option */ 233 KC(59), KS_Left, 234 KC(60), KS_Right, 235 KC(61), KS_Down, 236 KC(62), KS_Up, 237 238 KC(65), KS_KP_Decimal, 239 KC(67), KS_KP_Multiply, 240 KC(69), KS_KP_Add, 241 KC(71), KS_Num_Lock, KS_Clear, 242 KC(75), KS_KP_Divide, 243 KC(76), KS_KP_Enter, 244 KC(78), KS_KP_Subtract, 245 246 KC(81), KS_KP_Equal, 247 KC(82), KS_KP_0, KS_KP_Insert, 248 KC(83), KS_KP_1, KS_KP_End, 249 KC(84), KS_KP_2, KS_KP_Down, 250 KC(85), KS_KP_3, KS_KP_Next, 251 KC(86), KS_KP_4, KS_KP_Left, 252 KC(87), KS_KP_5, KS_KP_Begin, 253 KC(88), KS_KP_6, KS_KP_Right, 254 KC(89), KS_KP_7, KS_KP_Home, 255 256 KC(91), KS_KP_8, KS_KP_Up, 257 KC(92), KS_KP_9, KS_KP_Prior, 258 259 KC(95), KS_KP_Decimal, KS_KP_Delete, 260 KC(96), KS_f5, 261 KC(97), KS_f6, 262 KC(98), KS_f7, 263 KC(99), KS_f3, 264 KC(100), KS_f8, 265 266 KC(101), KS_f9, 267 268 KC(103), KS_f11, 269 270 KC(105), KS_f13, KS_Print_Screen, 271 KC(106), KS_KP_Enter, 272 KC(107), KS_f14, KS_Hold_Screen, 273 274 KC(109), KS_f10, 275 276 KC(111), KS_f12, 277 278 KC(113), KS_f15, KS_Pause, 279 KC(114), KS_Insert, 280 KC(115), KS_Home, 281 KC(116), KS_Prior, 282 KC(117), KS_Delete, 283 KC(118), KS_f4, 284 KC(119), KS_End, 285 KC(120), KS_f2, 286 KC(121), KS_Next, 287 KC(122), KS_f1, 288 289 KC(127), KS_Cmd_Debugger, 290 }; 291 292 static const keysym_t akbd_keydesc_fr[] = { 293 /* pos normal shifted altgr shift-altgr */ 294 KC(0), KS_q, 295 KC(1), KS_s, KS_S, KS_Ograve, 296 KC(4), KS_h, KS_H, KS_Igrave, KS_Icircumflex, 297 KC(6), KS_w, KS_W, KS_less, KS_greater, 298 KC(8), KS_c, KS_C, KS_copyright, KS_cent, 299 KC(10), KS_less, KS_greater, 300 KC(11), KS_b, KS_B, KS_ssharp, 301 KC(12), KS_a, KS_A, KS_ae, KS_AE, 302 KC(13), KS_z, KS_Z, KS_Acircumflex, KS_Aring, 303 KC(14), KS_e, KS_E, KS_ecircumflex, KS_Ecircumflex, 304 KC(15), KS_r, KS_R, KS_registered, KS_comma, 305 KC(16), KS_y, KS_Y, KS_Uacute, 306 KC(18), KS_ampersand, KS_1, KS_voidSymbol, KS_dead_acute, 307 KC(19), KS_eacute, KS_2, KS_ediaeresis, 308 KC(20), KS_quotedbl, KS_3, 309 KC(21), KS_apostrophe, KS_4, KS_braceleft, KS_bracketleft, 310 KC(22), KS_section, KS_6, KS_paragraph, KS_aring, 311 KC(23), KS_parenleft, KS_5, KS_braceleft, KS_bracketleft, 312 KC(24), KS_minus, KS_underscore, KS_braceright, 313 KC(25), KS_ccedilla, KS_9, KS_Ccedilla, KS_Aacute, 314 KC(26), KS_egrave, KS_7, KS_guillemotleft, 315 KS_guillemotright, 316 KC(27), KS_parenright, KS_degree, KS_braceright, KS_bracketright, 317 KC(28), KS_exclam, KS_8, KS_exclamdown, KS_Ucircumflex, 318 KC(29), KS_agrave, KS_0, KS_oslash, KS_Ooblique, 319 KC(30), KS_dollar, KS_asterisk, KS_cent, KS_yen, 320 KC(33), KS_dead_circumflex, KS_dead_diaeresis, 321 KS_ocircumflex, KS_Ocircumflex, 322 KC(34), KS_i, KS_I, KS_icircumflex, KS_idiaeresis, 323 KC(37), KS_l, KS_L, KS_notsign, KS_bar, 324 KC(38), KS_j, KS_J, KS_Idiaeresis, KS_Iacute, 325 KC(39), KS_ugrave, KS_percent, KS_Ugrave, 326 KC(40), KS_k, KS_K, KS_Egrave, KS_Ediaeresis, 327 KC(41), KS_m, KS_M, KS_mu, KS_Oacute, 328 KC(42), KS_dead_grave, KS_sterling, KS_at, KS_numbersign, 329 KC(43), KS_semicolon, KS_period, 330 KC(44), KS_equal, KS_plus, KS_voidSymbol, KS_plusminus, 331 KC(45), KS_n, KS_N, KS_dead_tilde, 332 KC(46), KS_comma, KS_question, KS_voidSymbol, KS_questiondown, 333 KC(47), KS_colon, KS_slash, KS_division, KS_backslash, 334 KC(50), KS_at, KS_numbersign, 335 KC(52), KS_Alt_R, 336 KC(55), KS_Meta_L, /* Command */ 337 KC(58), KS_Mode_switch, KS_Multi_key, /* Option */ 338 }; 339 340 static const keysym_t akbd_keydesc_fr_nodead[] = { 341 KC(18), KS_ampersand, KS_1, KS_voidSymbol, KS_acute, 342 KC(33), KS_asciicircum, KS_diaeresis, KS_ocircumflex, KS_Ocircumflex, 343 KC(42), KS_grave, KS_sterling, KS_at, KS_numbersign, 344 KC(45), KS_n, KS_N, KS_asciitilde, 345 }; 346 347 static const keysym_t akbd_keydesc_jp[] = { 348 /* pos command normal shifted */ 349 KC(19), KS_2, KS_quotedbl, 350 KC(22), KS_6, KS_ampersand, 351 KC(24), KS_asciicircum, KS_asciitilde, 352 KC(25), KS_9, KS_parenright, 353 KC(26), KS_7, KS_apostrophe, 354 KC(27), KS_minus, KS_equal, 355 KC(28), KS_8, KS_parenleft, 356 KC(29), KS_0, 357 KC(30), KS_bracketleft, KS_braceleft, 358 KC(33), KS_at, KS_grave, 359 KC(39), KS_colon, KS_asterisk, 360 361 KC(41), KS_semicolon, KS_plus, 362 KC(42), KS_bracketright,KS_braceright, 363 KC(93), KS_backslash, KS_bar, 364 KC(94), KS_underscore, 365 }; 366 367 static const keysym_t akbd_keydesc_uk[] = { 368 /* pos normal shifted altgr shift-altgr */ 369 KC(20), KS_3, KS_sterling, KS_numbersign, 370 KC(50), KS_section, KS_plusminus, 371 KC(52), KS_KP_Enter, 372 KC(58), KS_Mode_switch, KS_Multi_key, /* Option */ 373 }; 374 375 static const keysym_t akbd_keydesc_sv[] = { 376 /* pos normal shifted altgr shift-altgr */ 377 KC(10), KS_less, KS_greater, KS_bar, 378 KC(19), KS_2, KS_quotedbl, KS_at, 379 KC(21), KS_4, KS_dollar, 380 KC(22), KS_6, KS_ampersand, 381 KC(24), KS_dead_acute, KS_dead_grave, 382 KC(25), KS_9, KS_parenright, KS_bracketright, 383 KC(26), KS_7, KS_slash, KS_braceleft, 384 KC(27), KS_plus, KS_question, KS_backslash, 385 KC(28), KS_8, KS_parenleft, KS_bracketleft, 386 KC(29), KS_0, KS_equal, KS_braceright, 387 KC(30), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 388 KC(33), KS_aring, 389 KC(39), KS_adiaeresis, 390 KC(41), KS_odiaeresis, 391 KC(42), KS_apostrophe, KS_asterisk, 392 KC(43), KS_comma, KS_semicolon, 393 KC(44), KS_minus, KS_underscore, 394 KC(47), KS_period, KS_colon, 395 KC(50), KS_section, KS_degree, 396 KC(58), KS_Mode_switch,KS_Multi_key, 397 }; 398 399 static const keysym_t akbd_keydesc_sv_nodead[] = { 400 /* pos normal shifted altgr shift-altgr */ 401 KC(24), KS_apostrophe, KS_grave, 402 KC(30), KS_diaeresis, KS_asciicircum, KS_asciitilde, 403 }; 404 405 static const keysym_t akbd_keydesc_de[] = { 406 /* pos normal shifted altgr shift-altgr */ 407 KC(0), KS_a, KS_A, KS_aring, KS_Aring, 408 KC(1), KS_s, KS_S, KS_voidSymbol, KS_Iacute, 409 KC(3), KS_f, KS_F, KS_voidSymbol, KS_Idiaeresis, 410 KC(4), KS_h, KS_H, KS_ordfeminine, KS_Oacute, 411 KC(5), KS_g, KS_G, KS_copyright, KS_Igrave, 412 KC(6), KS_y, KS_Y, KS_yen, 413 KC(7), KS_x, KS_X, KS_voidSymbol, KS_Ugrave, 414 KC(8), KS_c, KS_C, KS_ccedilla, KS_Ccedilla, 415 KC(10), KS_less, KS_greater, 416 KC(12), KS_q, KS_Q, KS_guillemotleft,KS_guillemotright, 417 KC(15), KS_r, KS_R, KS_registered, KS_cedilla, 418 KC(16), KS_z, KS_Z, 419 KC(18), KS_1, KS_exclam, KS_exclamdown, KS_notsign, 420 KC(19), KS_2, KS_quotedbl, 421 KC(20), KS_3, KS_section, KS_paragraph, KS_numbersign, 422 KC(21), KS_4, KS_dollar, KS_cent, KS_sterling, 423 KC(22), KS_6, KS_ampersand, KS_bracketright,KS_dead_circumflex, 424 KC(23), KS_5, KS_percent, KS_bracketleft, 425 KC(24), KS_dead_acute, KS_dead_grave, KS_apostrophe, 426 KC(25), KS_9, KS_parenright, KS_braceright, KS_periodcentered, 427 KC(26), KS_7, KS_slash, KS_bar, KS_backslash, 428 KC(27), KS_ssharp, KS_question, KS_questiondown, 429 KC(28), KS_8, KS_parenleft, KS_braceleft, 430 KC(29), KS_0, KS_equal, KS_voidSymbol, KS_macron, 431 KC(30), KS_plus, KS_asterisk, KS_plusminus, 432 KC(31), KS_o, KS_O, KS_oslash, KS_Ooblique, 433 KC(32), KS_u, KS_U, KS_dead_diaeresis,KS_Aacute, 434 KC(33), KS_udiaeresis, KS_Udiaeresis, KS_voidSymbol, KS_degree, 435 KC(34), KS_i, KS_I, KS_voidSymbol, KS_Ucircumflex, 436 KC(37), KS_l, KS_L, KS_at, 437 KC(38), KS_j, KS_J, KS_masculine, 438 KC(39), KS_adiaeresis, KS_Adiaeresis, KS_ae, KS_AE, 439 KC(41), KS_odiaeresis, KS_Odiaeresis, 440 KC(42), KS_numbersign, KS_apostrophe, 441 KC(43), KS_comma, KS_semicolon, 442 KC(44), KS_minus, KS_underscore, 443 KC(45), KS_n, KS_N, KS_dead_tilde, 444 KC(46), KS_m, KS_M, KS_mu, 445 KC(47), KS_period, KS_colon, 446 KC(50), KS_dead_circumflex,KS_degree, 447 KC(52), KS_Multi_key, 448 KC(58), KS_Mode_switch, 449 }; 450 451 static const keysym_t akbd_keydesc_de_nodead[] = { 452 /* pos normal shifted altgr shift-altgr */ 453 KC(22), KS_6, KS_ampersand, KS_bracketright,KS_asciicircum, 454 KC(24), KS_acute, KS_grave, KS_apostrophe, 455 KC(32), KS_u, KS_U, KS_diaeresis, KS_Aacute, 456 KC(45), KS_n, KS_N, KS_asciitilde, 457 KC(50), KS_asciicircum, KS_degree, 458 }; 459 460 static const keysym_t akbd_keydesc_sf[] = { 461 /* pos normal shifted altgr shift-altgr */ 462 KC(6), KS_y, 463 KC(10), KS_less, KS_greater, 464 KC(16), KS_z, 465 KC(18), KS_plus, KS_1, 466 KC(19), KS_quotedbl, KS_2, 467 KC(20), KS_asterisk, KS_3, 468 KC(21), KS_ccedilla, KS_4, KS_Ccedilla, 469 KC(22), KS_ampersand, KS_6, 470 KC(23), KS_percent, KS_5, 471 KC(24), KS_dead_circumflex,KS_grave, 472 KC(25), KS_parenright, KS_9, 473 KC(26), KS_slash, KS_7, 474 KC(27), KS_apostrophe, KS_question, 475 KC(28), KS_parenleft, KS_8, 476 KC(29), KS_equal, KS_0, 477 KC(30), KS_dead_diaeresis,KS_exclam, 478 KC(33), KS_egrave, KS_udiaeresis, 479 KC(39), KS_agrave, KS_adiaeresis, 480 KC(41), KS_eacute, KS_odiaeresis, 481 KC(42), KS_dollar, KS_sterling, 482 KC(43), KS_period, KS_colon, 483 KC(46), KS_comma, KS_semicolon, 484 KC(47), KS_minus, KS_underscore, 485 KC(50), KS_paragraph, KS_degree, 486 }; 487 488 static const keysym_t akbd_keydesc_es[] = { 489 /* pos normal shifted altgr shift-altgr */ 490 KC(10), KS_less, KS_greater, 491 KC(18), KS_1, KS_exclam, KS_bar, 492 KC(19), KS_2, KS_quotedbl, KS_at, 493 KC(20), KS_3, KS_periodcentered, KS_numbersign, 494 KC(21), KS_4, KS_dollar, KS_asciitilde, 495 KC(22), KS_6, KS_ampersand, KS_notsign, 496 KC(23), KS_5, KS_percent, 497 KC(24), KS_exclamdown, KS_questiondown, 498 KC(25), KS_9, KS_parenright, 499 KC(26), KS_7, KS_slash, 500 KC(27), KS_apostrophe, KS_question, 501 KC(28), KS_8, KS_parenleft, 502 KC(29), KS_0, KS_equal, 503 KC(30), KS_plus, KS_asterisk, KS_bracketright, 504 KC(33), KS_dead_grave, KS_dead_circumflex, KS_bracketleft, 505 KC(39), KS_dead_acute, KS_dead_diaeresis, KS_braceleft, 506 KC(41), KS_ntilde, 507 KC(42), KS_ccedilla, KS_Ccedilla, KS_braceright, 508 KC(43), KS_comma, KS_semicolon, 509 KC(44), KS_minus, KS_underscore, 510 KC(47), KS_period, KS_colon, 511 KC(50), KS_degree, KS_ordfeminine, KS_backslash, 512 KC(55), KS_Alt_L, /* Command */ 513 KC(58), KS_Mode_switch, KS_Multi_key, /* Option */ 514 }; 515 516 static const keysym_t akbd_keydesc_pt[] = { 517 /* pos normal shifted altgr shift-altgr */ 518 KC(7), KS_x, KS_X, KS_guillemotleft, KS_guillemotright, 519 KC(10), KS_less, KS_greater, 520 KC(19), KS_2, KS_quotedbl, KS_at, 521 KC(20), KS_3, KS_numbersign, KS_sterling, 522 KC(22), KS_6, KS_ampersand, 523 KC(24), KS_plus, KS_asterisk, 524 KC(25), KS_9, KS_parenright, KS_bracketright, KS_braceright, 525 KC(26), KS_7, KS_slash, 526 KC(27), KS_apostrophe, KS_question, 527 KC(28), KS_8, KS_parenleft, KS_bracketleft, KS_braceleft, 528 KC(29), KS_0, KS_equal, 529 KC(30), KS_dead_acute, KS_dead_grave, 530 KC(33), KS_masculine, KS_ordfeminine, 531 KC(39), KS_dead_tilde, KS_dead_circumflex, 532 KC(41), KS_ccedilla, KS_Ccedilla, 533 KC(43), KS_comma, KS_semicolon, 534 KC(44), KS_minus, KS_underscore, 535 KC(47), KS_period, KS_colon, 536 KC(50), KS_section, KS_plusminus, 537 KC(58), KS_Mode_switch, KS_Multi_key, /* Option */ 538 }; 539 540 static const keysym_t akbd_keydesc_us_dvorak[] = { 541 /* pos command normal shifted */ 542 KC(1), KS_o, 543 KC(2), KS_e, 544 KC(3), KS_u, 545 KC(4), KS_d, 546 KC(5), KS_i, 547 KC(6), KS_semicolon, KS_colon, 548 KC(7), KS_q, 549 KC(8), KS_j, 550 KC(9), KS_k, 551 KC(11), KS_x, 552 KC(12), KS_apostrophe, KS_quotedbl, 553 KC(13), KS_comma, KS_less, 554 KC(14), KS_period, KS_greater, 555 KC(15), KS_p, 556 KC(16), KS_f, 557 KC(17), KS_y, 558 KC(24), KS_bracketright, KS_braceright, 559 KC(27), KS_bracketleft, KS_braceleft, 560 KC(30), KS_equal, KS_plus, 561 KC(31), KS_r, 562 KC(32), KS_g, 563 KC(33), KS_slash, KS_question, 564 KC(34), KS_c, 565 KC(35), KS_l, 566 KC(37), KS_n, 567 KC(38), KS_h, 568 KC(39), KS_minus, KS_underscore, 569 KC(40), KS_t, 570 KC(41), KS_s, 571 KC(43), KS_w, 572 KC(44), KS_z, 573 KC(45), KS_b, 574 KC(47), KS_v, 575 }; 576 577 static const keysym_t akbd_keydesc_sg[] = { 578 /* pos normal shifted altgr shift-altgr */ 579 KC(0), KS_a, KS_A, KS_aring, KS_Aring, 580 KC(1), KS_s, KS_S, KS_ssharp, KS_voidSymbol, 581 KC(3), KS_f, KS_F, KS_section, KS_voidSymbol, 582 KC(4), KS_h, KS_H, KS_ordfeminine, KS_periodcentered, 583 KC(5), KS_g, KS_G, KS_at, KS_comma, 584 KC(6), KS_y, KS_Y, KS_yen, KS_ydiaeresis, 585 KC(7), KS_x, KS_X, KS_voidSymbol, KS_ydiaeresis, 586 KC(8), KS_c, KS_C, KS_copyright, 587 KC(10), KS_less, KS_greater, 588 KC(12), KS_q, KS_Q, 589 KC(15), KS_r, KS_R, KS_registered, KS_Egrave, 590 KC(16), KS_z, KS_Z, KS_voidSymbol, KS_Aacute, 591 KC(18), KS_1, KS_plus, KS_plusminus, KS_onesuperior, 592 KC(19), KS_2, KS_quotedbl, KS_twosuperior, 593 KC(20), KS_3, KS_asterisk, KS_numbersign, KS_threesuperior, 594 KC(21), KS_4, KS_ccedilla, KS_Ccedilla, 595 KC(22), KS_6, KS_ampersand, KS_bracketright, 596 KC(23), KS_5, KS_percent, KS_bracketleft, 597 KC(24), KS_dead_circumflex,KS_dead_grave,KS_dead_acute, KS_asciitilde, 598 KC(25), KS_9, KS_parenright, KS_braceright, KS_Ocircumflex, 599 KC(26), KS_7, KS_slash, KS_bar, KS_backslash, 600 KC(27), KS_apostrophe, KS_question, KS_questiondown, 601 KC(28), KS_8, KS_parenleft, KS_braceleft, KS_Ograve, 602 KC(29), KS_0, KS_equal, KS_voidSymbol, KS_Uacute, 603 KC(30), KS_dead_diaeresis,KS_exclam, KS_bracketright, 604 KC(31), KS_o, KS_O, KS_oslash, 605 KC(32), KS_u, KS_U, KS_degree, KS_Ugrave, 606 KC(33), KS_udiaeresis, KS_egrave, KS_bracketleft, 607 KC(34), KS_i, KS_I, KS_exclamdown, 608 KC(37), KS_l, KS_L, KS_notsign, 609 KC(38), KS_j, KS_J, KS_masculine, 610 KC(39), KS_adiaeresis, KS_agrave, KS_ae, KS_AE, 611 KC(41), KS_odiaeresis, KS_eacute, KS_cent, 612 KC(42), KS_dollar, KS_sterling, KS_paragraph, 613 KC(43), KS_comma, KS_semicolon, KS_guillemotleft,KS_guillemotright, 614 KC(44), KS_minus, KS_underscore, 615 KC(45), KS_n, KS_N, KS_dead_tilde, 616 KC(46), KS_m, KS_M, KS_mu, 617 KC(47), KS_period, KS_colon, KS_voidSymbol, KS_division, 618 KC(50), KS_section, KS_degree, 619 KC(52), KS_Multi_key, 620 KC(58), KS_Mode_switch, 621 }; 622 623 static const keysym_t akbd_keydesc_sg_nodead[] = { 624 /* pos normal shifted altgr shift-altgr */ 625 KC(24), KS_asciicircum, KS_grave, KS_acute, KS_asciitilde, 626 KC(30), KS_diaeresis, KS_exclam, KS_bracketright,KS_braceright, 627 KC(45), KS_n, KS_N, KS_asciitilde, 628 }; 629 630 #define KBD_MAP(name, base, map) \ 631 { name, base, sizeof(map)/sizeof(keysym_t), map } 632 633 const struct wscons_keydesc akbd_keydesctab[] = { 634 KBD_MAP(KB_US, 0, akbd_keydesc_us), 635 KBD_MAP(KB_US | KB_DVORAK, KB_US, akbd_keydesc_us_dvorak), 636 KBD_MAP(KB_DE, KB_US, akbd_keydesc_de), 637 KBD_MAP(KB_DE | KB_NODEAD, KB_DE, akbd_keydesc_de_nodead), 638 KBD_MAP(KB_ES, KB_US, akbd_keydesc_es), 639 KBD_MAP(KB_FR, KB_US, akbd_keydesc_fr), 640 KBD_MAP(KB_FR | KB_NODEAD, KB_FR, akbd_keydesc_fr_nodead), 641 KBD_MAP(KB_JP, KB_US, akbd_keydesc_jp), 642 KBD_MAP(KB_PT, KB_US, akbd_keydesc_pt), 643 KBD_MAP(KB_SF, KB_US, akbd_keydesc_sf), 644 KBD_MAP(KB_SG, KB_US, akbd_keydesc_sg), 645 KBD_MAP(KB_SG | KB_NODEAD, KB_SG, akbd_keydesc_sg_nodead), 646 KBD_MAP(KB_SV, KB_US, akbd_keydesc_sv), 647 KBD_MAP(KB_SV | KB_NODEAD, KB_SV, akbd_keydesc_sv_nodead), 648 KBD_MAP(KB_UK, KB_US, akbd_keydesc_uk), 649 {0, 0, 0, 0} 650 }; 651 652 #undef KBD_MAP 653 #undef KC 654