1*7c772976Snicm /* $OpenBSD: sunkbdmap.c,v 1.7 2023/01/23 09:36:40 nicm Exp $ */ 2e45e36eeSmiod 3e45e36eeSmiod /* 4e45e36eeSmiod * Copyright (c) 2002, 2003 Miodrag Vallat. 5e45e36eeSmiod * Copyright (c) 2002 Jason L. Wright (jason@thought.net) 6e45e36eeSmiod * All rights reserved. 7e45e36eeSmiod * 8e45e36eeSmiod * Redistribution and use in source and binary forms, with or without 9e45e36eeSmiod * modification, are permitted provided that the following conditions 10e45e36eeSmiod * are met: 11e45e36eeSmiod * 1. Redistributions of source code must retain the above copyright 12e45e36eeSmiod * notice, this list of conditions and the following disclaimer. 13e45e36eeSmiod * 2. Redistributions in binary form must reproduce the above copyright 14e45e36eeSmiod * notice, this list of conditions and the following disclaimer in the 15e45e36eeSmiod * documentation and/or other materials provided with the distribution. 16e45e36eeSmiod * 17e45e36eeSmiod * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18e45e36eeSmiod * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19e45e36eeSmiod * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20e45e36eeSmiod * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 21e45e36eeSmiod * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22e45e36eeSmiod * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23e45e36eeSmiod * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24e45e36eeSmiod * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 25e45e36eeSmiod * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 26e45e36eeSmiod * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27e45e36eeSmiod * POSSIBILITY OF SUCH DAMAGE. 28e45e36eeSmiod * 29e45e36eeSmiod * Effort sponsored in part by the Defense Advanced Research Projects 30e45e36eeSmiod * Agency (DARPA) and Air Force Research Laboratory, Air Force 31e45e36eeSmiod * Materiel Command, USAF, under agreement number F30602-01-2-0537. 32e45e36eeSmiod * 33e45e36eeSmiod */ 34e45e36eeSmiod 35e45e36eeSmiod #include <sys/param.h> 36e45e36eeSmiod #include <sys/systm.h> 37e45e36eeSmiod #include <sys/device.h> 38e45e36eeSmiod #include <sys/kernel.h> 39e45e36eeSmiod #include <sys/timeout.h> 40e45e36eeSmiod 41e45e36eeSmiod #include <dev/wscons/wsconsio.h> 42e45e36eeSmiod #include <dev/wscons/wskbdvar.h> 43e45e36eeSmiod #include <dev/wscons/wsksymdef.h> 44e45e36eeSmiod #include <dev/wscons/wsksymvar.h> 45e45e36eeSmiod 46e45e36eeSmiod #include <dev/sun/sunkbdreg.h> 47e45e36eeSmiod #include <dev/sun/sunkbdvar.h> 48e45e36eeSmiod 498ff6df28Smiod #ifdef WSDISPLAY_COMPAT_RAWKBD 508ff6df28Smiod #include <dev/wscons/wskbdraw.h> 518ff6df28Smiod 528ff6df28Smiod /* 538ff6df28Smiod * Translate Sun keycodes to US keyboard XT scancodes, for proper 548ff6df28Smiod * X11-over-wsmux operation. 558ff6df28Smiod */ 568ff6df28Smiod const u_int8_t sunkbd_rawmap[0x80] = { 578ff6df28Smiod RAWKEY_Null, 588ff6df28Smiod RAWKEY_L1, 598ff6df28Smiod RAWKEY_AudioLower, 608ff6df28Smiod RAWKEY_L2, 618ff6df28Smiod RAWKEY_AudioRaise, 628ff6df28Smiod RAWKEY_f1, 638ff6df28Smiod RAWKEY_f2, 648ff6df28Smiod RAWKEY_f10, 658ff6df28Smiod RAWKEY_f3, 668ff6df28Smiod RAWKEY_f11, 678ff6df28Smiod RAWKEY_f4, 688ff6df28Smiod RAWKEY_f12, 698ff6df28Smiod RAWKEY_f5, 708ff6df28Smiod RAWKEY_Alt_R, 718ff6df28Smiod RAWKEY_f6, 728ff6df28Smiod RAWKEY_Null, 738ff6df28Smiod RAWKEY_f7, 748ff6df28Smiod RAWKEY_f8, 758ff6df28Smiod RAWKEY_f9, 768ff6df28Smiod RAWKEY_Alt_L, 778ff6df28Smiod RAWKEY_Up, 788ff6df28Smiod RAWKEY_Pause, 798ff6df28Smiod RAWKEY_Print_Screen, 808ff6df28Smiod RAWKEY_Hold_Screen, 818ff6df28Smiod RAWKEY_Left, 828ff6df28Smiod RAWKEY_L3, 838ff6df28Smiod RAWKEY_L4, 848ff6df28Smiod RAWKEY_Down, 858ff6df28Smiod RAWKEY_Right, 868ff6df28Smiod RAWKEY_Escape, 878ff6df28Smiod RAWKEY_1, 888ff6df28Smiod RAWKEY_2, 898ff6df28Smiod RAWKEY_3, 908ff6df28Smiod RAWKEY_4, 918ff6df28Smiod RAWKEY_5, 928ff6df28Smiod RAWKEY_6, 938ff6df28Smiod RAWKEY_7, 948ff6df28Smiod RAWKEY_8, 958ff6df28Smiod RAWKEY_9, 968ff6df28Smiod RAWKEY_0, 978ff6df28Smiod RAWKEY_minus, 988ff6df28Smiod RAWKEY_equal, 998ff6df28Smiod RAWKEY_grave, 1008ff6df28Smiod RAWKEY_BackSpace, 1018ff6df28Smiod RAWKEY_Insert, 102a4e5462dSmiod RAWKEY_KP_Equal, /* type 4 only */ 1038ff6df28Smiod RAWKEY_KP_Divide, 1048ff6df28Smiod RAWKEY_KP_Multiply, 1058ff6df28Smiod RAWKEY_Null, 1068ff6df28Smiod RAWKEY_L5, 1078ff6df28Smiod RAWKEY_KP_Delete, 1088ff6df28Smiod RAWKEY_L6, 1098ff6df28Smiod RAWKEY_Home, 1108ff6df28Smiod RAWKEY_Tab, 1118ff6df28Smiod RAWKEY_q, 1128ff6df28Smiod RAWKEY_w, 1138ff6df28Smiod RAWKEY_e, 1148ff6df28Smiod RAWKEY_r, 1158ff6df28Smiod RAWKEY_t, 1168ff6df28Smiod RAWKEY_y, 1178ff6df28Smiod RAWKEY_u, 1188ff6df28Smiod RAWKEY_i, 1198ff6df28Smiod RAWKEY_o, 1208ff6df28Smiod RAWKEY_p, 1218ff6df28Smiod RAWKEY_bracketleft, 1228ff6df28Smiod RAWKEY_bracketright, 1238ff6df28Smiod RAWKEY_Delete, 12487722ce9Smiod RAWKEY_Compose, 1258ff6df28Smiod RAWKEY_KP_Home, 1268ff6df28Smiod RAWKEY_KP_Up, 1278ff6df28Smiod RAWKEY_KP_Prior, 1288ff6df28Smiod RAWKEY_KP_Subtract, 1298ff6df28Smiod RAWKEY_L7, 1308ff6df28Smiod RAWKEY_L8, 1318ff6df28Smiod RAWKEY_End, 1328ff6df28Smiod RAWKEY_Null, 1338ff6df28Smiod RAWKEY_Control_L, 1348ff6df28Smiod RAWKEY_a, 1358ff6df28Smiod RAWKEY_s, 1368ff6df28Smiod RAWKEY_d, 1378ff6df28Smiod RAWKEY_f, 1388ff6df28Smiod RAWKEY_g, 1398ff6df28Smiod RAWKEY_h, 1408ff6df28Smiod RAWKEY_j, 1418ff6df28Smiod RAWKEY_k, 1428ff6df28Smiod RAWKEY_l, 1438ff6df28Smiod RAWKEY_semicolon, 1448ff6df28Smiod RAWKEY_apostrophe, 1458ff6df28Smiod RAWKEY_backslash, 1468ff6df28Smiod RAWKEY_Return, 1478ff6df28Smiod RAWKEY_KP_Enter, 1488ff6df28Smiod RAWKEY_KP_Left, 1498ff6df28Smiod RAWKEY_KP_Begin, 1508ff6df28Smiod RAWKEY_KP_Right, 1518ff6df28Smiod RAWKEY_KP_Insert, 1528ff6df28Smiod RAWKEY_L9, 1538ff6df28Smiod RAWKEY_Prior, 1548ff6df28Smiod RAWKEY_L10, 1558ff6df28Smiod RAWKEY_Num_Lock, 1568ff6df28Smiod RAWKEY_Shift_L, 1578ff6df28Smiod RAWKEY_z, 1588ff6df28Smiod RAWKEY_x, 1598ff6df28Smiod RAWKEY_c, 1608ff6df28Smiod RAWKEY_v, 1618ff6df28Smiod RAWKEY_b, 1628ff6df28Smiod RAWKEY_n, 1638ff6df28Smiod RAWKEY_m, 1648ff6df28Smiod RAWKEY_comma, 1658ff6df28Smiod RAWKEY_period, 1668ff6df28Smiod RAWKEY_slash, 1678ff6df28Smiod RAWKEY_Shift_R, 1688ff6df28Smiod RAWKEY_Null, /* KS_Linefeed on type 3/4 */ 1698ff6df28Smiod RAWKEY_KP_End, 1708ff6df28Smiod RAWKEY_KP_Down, 1718ff6df28Smiod RAWKEY_KP_Next, 1728ff6df28Smiod RAWKEY_Null, 1738ff6df28Smiod RAWKEY_Null, 1748ff6df28Smiod RAWKEY_Null, 1758ff6df28Smiod RAWKEY_Help, 1768ff6df28Smiod RAWKEY_Caps_Lock, 1778ff6df28Smiod RAWKEY_Meta_L, 1788ff6df28Smiod RAWKEY_space, 1798ff6df28Smiod RAWKEY_Meta_R, 1808ff6df28Smiod RAWKEY_Next, 1818ff6df28Smiod RAWKEY_Null, 1828ff6df28Smiod RAWKEY_KP_Add, 1838ff6df28Smiod RAWKEY_Null, 184a4e5462dSmiod RAWKEY_AudioMute /* type 5 remapped 0x2d */ 1858ff6df28Smiod }; 1868ff6df28Smiod #endif 1878ff6df28Smiod 188e45e36eeSmiod #define KC(n) KS_KEYCODE(n) 189e45e36eeSmiod 190e45e36eeSmiod /* 000/021/022 US English type 4/5 keyboard */ 191e45e36eeSmiod const keysym_t sunkbd_keydesc_us[] = { 192e45e36eeSmiod KC(0x01), KS_Cmd, 193e45e36eeSmiod KC(0x02), KS_Cmd_BrightnessDown, 194e45e36eeSmiod KC(0x03), KS_Again, 195e45e36eeSmiod KC(0x04), KS_Cmd_BrightnessUp, 196e45e36eeSmiod KC(0x05), KS_f1, 197e45e36eeSmiod KC(0x06), KS_f2, 198e45e36eeSmiod KC(0x07), KS_f10, 199e45e36eeSmiod KC(0x08), KS_f3, 200e45e36eeSmiod KC(0x09), KS_f11, 201e45e36eeSmiod KC(0x0a), KS_f4, 202e45e36eeSmiod KC(0x0b), KS_f12, 203e45e36eeSmiod KC(0x0c), KS_f5, 204e45e36eeSmiod KC(0x0d), KS_Alt_R, 205e45e36eeSmiod KC(0x0e), KS_f6, 206e45e36eeSmiod KC(0x10), KS_f7, 207e45e36eeSmiod KC(0x11), KS_f8, 208e45e36eeSmiod KC(0x12), KS_f9, 209e45e36eeSmiod KC(0x13), KS_Alt_L, 210e45e36eeSmiod KC(0x14), KS_Up, 211e45e36eeSmiod KC(0x15), KS_Pause, 212e45e36eeSmiod KC(0x16), KS_Print_Screen, 213e45e36eeSmiod KC(0x17), KS_Hold_Screen, 214e45e36eeSmiod KC(0x18), KS_Left, 215e45e36eeSmiod KC(0x19), KS_Props, 216e45e36eeSmiod KC(0x1a), KS_Undo, 217e45e36eeSmiod KC(0x1b), KS_Down, 218e45e36eeSmiod KC(0x1c), KS_Right, 219e45e36eeSmiod KC(0x1d), KS_Escape, 220e45e36eeSmiod KC(0x1e), KS_1, KS_exclam, 221e45e36eeSmiod KC(0x1f), KS_2, KS_at, 222e45e36eeSmiod KC(0x20), KS_3, KS_numbersign, 223e45e36eeSmiod KC(0x21), KS_4, KS_dollar, 224e45e36eeSmiod KC(0x22), KS_5, KS_percent, 225e45e36eeSmiod KC(0x23), KS_6, KS_asciicircum, 226e45e36eeSmiod KC(0x24), KS_7, KS_ampersand, 227e45e36eeSmiod KC(0x25), KS_8, KS_asterisk, 228e45e36eeSmiod KC(0x26), KS_9, KS_parenleft, 229e45e36eeSmiod KC(0x27), KS_0, KS_parenright, 230e45e36eeSmiod KC(0x28), KS_minus, KS_underscore, 231e45e36eeSmiod KC(0x29), KS_equal, KS_plus, 232e45e36eeSmiod KC(0x2a), KS_grave, KS_asciitilde, 233e45e36eeSmiod KC(0x2b), KS_Delete, 234e45e36eeSmiod KC(0x2c), KS_Insert, 235a4e5462dSmiod KC(0x2d), KS_KP_Equal, /* type 4 */ 236e45e36eeSmiod KC(0x2e), KS_KP_Divide, 237e45e36eeSmiod KC(0x2f), KS_KP_Multiply, 238e45e36eeSmiod KC(0x31), KS_Front, 239e45e36eeSmiod KC(0x32), KS_KP_Delete, KS_KP_Decimal, 240e45e36eeSmiod KC(0x33), KS_Copy, 241e45e36eeSmiod KC(0x34), KS_Home, 242*7c772976Snicm KC(0x35), KS_Tab, KS_Backtab, 243e45e36eeSmiod KC(0x36), KS_q, 244e45e36eeSmiod KC(0x37), KS_w, 245e45e36eeSmiod KC(0x38), KS_e, 246e45e36eeSmiod KC(0x39), KS_r, 247e45e36eeSmiod KC(0x3a), KS_t, 248e45e36eeSmiod KC(0x3b), KS_y, 249e45e36eeSmiod KC(0x3c), KS_u, 250e45e36eeSmiod KC(0x3d), KS_i, 251e45e36eeSmiod KC(0x3e), KS_o, 252e45e36eeSmiod KC(0x3f), KS_p, 253e45e36eeSmiod KC(0x40), KS_bracketleft, KS_braceleft, 254e45e36eeSmiod KC(0x41), KS_bracketright,KS_braceright, 255e45e36eeSmiod KC(0x42), KS_Delete, 256e45e36eeSmiod KC(0x43), KS_Multi_key, 257e45e36eeSmiod KC(0x44), KS_KP_Home, KS_KP_7, 258e45e36eeSmiod KC(0x45), KS_KP_Up, KS_KP_8, 259e45e36eeSmiod KC(0x46), KS_KP_Prior, KS_KP_9, 260e45e36eeSmiod KC(0x47), KS_KP_Subtract, 261e45e36eeSmiod KC(0x48), KS_Open, 262e45e36eeSmiod KC(0x49), KS_Paste, 263e45e36eeSmiod KC(0x4a), KS_End, 264e45e36eeSmiod KC(0x4c), KS_Control_L, 265e45e36eeSmiod KC(0x4d), KS_Cmd_Debugger, KS_a, 266e45e36eeSmiod KC(0x4e), KS_s, 267e45e36eeSmiod KC(0x4f), KS_d, 268e45e36eeSmiod KC(0x50), KS_f, 269e45e36eeSmiod KC(0x51), KS_g, 270e45e36eeSmiod KC(0x52), KS_h, 271e45e36eeSmiod KC(0x53), KS_j, 272e45e36eeSmiod KC(0x54), KS_k, 273e45e36eeSmiod KC(0x55), KS_l, 274e45e36eeSmiod KC(0x56), KS_semicolon, KS_colon, 275e45e36eeSmiod KC(0x57), KS_apostrophe, KS_quotedbl, 276e45e36eeSmiod KC(0x58), KS_backslash, KS_bar, 277e45e36eeSmiod KC(0x59), KS_Return, 278e45e36eeSmiod KC(0x5a), KS_KP_Enter, 279e45e36eeSmiod KC(0x5b), KS_KP_Left, KS_KP_4, 280e45e36eeSmiod KC(0x5c), KS_KP_Begin, KS_KP_5, 281e45e36eeSmiod KC(0x5d), KS_KP_Right, KS_KP_6, 282e45e36eeSmiod KC(0x5e), KS_KP_Insert, KS_KP_0, 283e45e36eeSmiod KC(0x5f), KS_Find, 284e45e36eeSmiod KC(0x60), KS_Prior, 285e45e36eeSmiod KC(0x61), KS_Cut, 286e45e36eeSmiod KC(0x62), KS_Num_Lock, 287e45e36eeSmiod KC(0x63), KS_Shift_L, 288e45e36eeSmiod KC(0x64), KS_z, 289e45e36eeSmiod KC(0x65), KS_x, 290e45e36eeSmiod KC(0x66), KS_c, 291e45e36eeSmiod KC(0x67), KS_v, 292e45e36eeSmiod KC(0x68), KS_b, 293e45e36eeSmiod KC(0x69), KS_n, 294e45e36eeSmiod KC(0x6a), KS_m, 295e45e36eeSmiod KC(0x6b), KS_comma, KS_less, 296e45e36eeSmiod KC(0x6c), KS_period, KS_greater, 297e45e36eeSmiod KC(0x6d), KS_slash, KS_question, 298e45e36eeSmiod KC(0x6e), KS_Shift_R, 299e45e36eeSmiod KC(0x6f), KS_Linefeed, 300e45e36eeSmiod KC(0x70), KS_KP_End, KS_KP_1, 301e45e36eeSmiod KC(0x71), KS_KP_Down, KS_KP_2, 302e45e36eeSmiod KC(0x72), KS_KP_Next, KS_KP_3, 303e45e36eeSmiod KC(0x76), KS_Help, 304e45e36eeSmiod KC(0x77), KS_Caps_Lock, 305e45e36eeSmiod KC(0x78), KS_Meta_L, 306e45e36eeSmiod KC(0x79), KS_space, 307e45e36eeSmiod KC(0x7a), KS_Meta_R, 308e45e36eeSmiod KC(0x7b), KS_Next, 309e45e36eeSmiod KC(0x7d), KS_KP_Add, 310a4e5462dSmiod KC(0x7f), KS_AudioMute, /* type 5 KC(0x2d) */ 311e45e36eeSmiod }; 312e45e36eeSmiod 313e45e36eeSmiod /* 002 French/Belgian type 4 keyboard */ 314e45e36eeSmiod const keysym_t sunkbd_keydesc_befr[] = { 315e45e36eeSmiod KC(0x0d), KS_Caps_Lock, 316e45e36eeSmiod KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 317e45e36eeSmiod KC(0x1e), KS_ampersand, KS_1, 318e45e36eeSmiod KC(0x1f), KS_eacute, KS_2, KS_twosuperior, 319e45e36eeSmiod KC(0x20), KS_quotedbl, KS_3, KS_threesuperior, 320e45e36eeSmiod KC(0x21), KS_apostrophe, KS_4, 321e45e36eeSmiod KC(0x22), KS_parenleft, KS_5, 322e45e36eeSmiod KC(0x23), KS_section, KS_6, 323e45e36eeSmiod KC(0x24), KS_egrave, KS_7, 324e45e36eeSmiod KC(0x25), KS_exclam, KS_8, KS_sterling, 325e45e36eeSmiod KC(0x26), KS_ccedilla, KS_9, KS_backslash, 326e45e36eeSmiod KC(0x27), KS_agrave, KS_0, 327e45e36eeSmiod KC(0x28), KS_parenright, KS_degree, KS_asciitilde, 328e45e36eeSmiod KC(0x29), KS_minus, KS_underscore, KS_numbersign, 329e45e36eeSmiod KC(0x2a), KS_asterisk, KS_bar, KS_currency, 330e45e36eeSmiod KC(0x36), KS_a, 331e45e36eeSmiod KC(0x37), KS_z, 332e45e36eeSmiod KC(0x40), KS_dead_circumflex,KS_dead_diaeresis, 333e45e36eeSmiod KC(0x41), KS_grave, KS_dollar, KS_at, 334e45e36eeSmiod KC(0x4d), KS_Cmd_Debugger, KS_q, 335e45e36eeSmiod KC(0x56), KS_m, KS_M, KS_mu, 336e45e36eeSmiod KC(0x57), KS_ugrave, KS_percent, 337e45e36eeSmiod KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 338e45e36eeSmiod KC(0x64), KS_w, 339e45e36eeSmiod KC(0x6a), KS_comma, KS_question, 340e45e36eeSmiod KC(0x6b), KS_semicolon, KS_period, 341e45e36eeSmiod KC(0x6c), KS_colon, KS_slash, 342e45e36eeSmiod KC(0x6d), KS_equal, KS_plus, 343e45e36eeSmiod KC(0x77), KS_Mode_switch, 344e45e36eeSmiod KC(0x7c), KS_less, KS_greater, 345e45e36eeSmiod }; 346e45e36eeSmiod 347e45e36eeSmiod /* 023 French type 5 keyboard */ 348e45e36eeSmiod const keysym_t sunkbd5_keydesc_fr[] = { 349e45e36eeSmiod KC(0x0d), KS_Mode_switch, 350e45e36eeSmiod KC(0x1e), KS_ampersand, KS_1, 351e45e36eeSmiod KC(0x1f), KS_eacute, KS_2, KS_asciitilde, 352e45e36eeSmiod KC(0x20), KS_quotedbl, KS_3, KS_numbersign, 353e45e36eeSmiod KC(0x21), KS_apostrophe, KS_4, KS_braceleft, 354e45e36eeSmiod KC(0x22), KS_parenleft, KS_5, KS_bracketleft, 355e45e36eeSmiod KC(0x23), KS_minus, KS_6, KS_bar, 356e45e36eeSmiod KC(0x24), KS_egrave, KS_7, KS_grave, 357e45e36eeSmiod KC(0x25), KS_underscore, KS_8, KS_backslash, 358e45e36eeSmiod KC(0x26), KS_ccedilla, KS_9, KS_asciicircum, 359e45e36eeSmiod KC(0x27), KS_agrave, KS_0, KS_at, 360e45e36eeSmiod KC(0x28), KS_parenright, KS_degree, KS_bracketright, 361e45e36eeSmiod KC(0x29), KS_equal, KS_plus, KS_braceright, 362e45e36eeSmiod KC(0x2a), KS_twosuperior, 363e45e36eeSmiod KC(0x36), KS_a, 364e45e36eeSmiod KC(0x37), KS_z, 365e45e36eeSmiod KC(0x40), KS_dead_circumflex,KS_dead_diaeresis, 366e45e36eeSmiod KC(0x41), KS_dollar, KS_sterling, KS_currency, 367e45e36eeSmiod KC(0x4d), KS_Cmd_Debugger, KS_q, 368e45e36eeSmiod KC(0x56), KS_m, 369e45e36eeSmiod KC(0x57), KS_ugrave, KS_percent, 370e45e36eeSmiod KC(0x58), KS_asterisk, KS_mu, 371e45e36eeSmiod KC(0x64), KS_w, 372e45e36eeSmiod KC(0x6a), KS_comma, KS_question, 373e45e36eeSmiod KC(0x6b), KS_semicolon, KS_period, 374e45e36eeSmiod KC(0x6c), KS_colon, KS_slash, 375e45e36eeSmiod KC(0x6d), KS_exclam, KS_section, 376e45e36eeSmiod KC(0x7c), KS_less, KS_greater, 377e45e36eeSmiod }; 378e45e36eeSmiod 379e45e36eeSmiod /* 004 Danish type 4 keyboard */ 380e45e36eeSmiod const keysym_t sunkbd_keydesc_dk[] = { 381e45e36eeSmiod KC(0x0d), KS_Multi_key, 382e45e36eeSmiod KC(0x0f), KS_asciitilde, KS_asciicircum, 383e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 384e45e36eeSmiod KC(0x20), KS_3, KS_numbersign, KS_sterling, 385e45e36eeSmiod KC(0x21), KS_4, KS_currency, KS_dollar, 386e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, 387e45e36eeSmiod KC(0x24), KS_7, KS_slash, KS_braceleft, 388e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 389e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_bracketright, 390e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_braceright, 391e45e36eeSmiod KC(0x28), KS_plus, KS_question, 392e45e36eeSmiod KC(0x29), KS_dead_acute, KS_dead_grave, KS_bar, 393e45e36eeSmiod KC(0x2a), KS_apostrophe, KS_asterisk, KS_grave, 394e45e36eeSmiod KC(0x40), KS_aring, 395e45e36eeSmiod KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 396e45e36eeSmiod KC(0x43), KS_Mode_switch, 397e45e36eeSmiod KC(0x4c), KS_Caps_Lock, 398e45e36eeSmiod KC(0x56), KS_ae, 399e45e36eeSmiod KC(0x57), KS_oslash, 400e45e36eeSmiod KC(0x58), KS_onehalf, KS_section, 401e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 402e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 403e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 404e45e36eeSmiod KC(0x77), KS_Control_L, 405e45e36eeSmiod KC(0x7c), KS_less, KS_greater, KS_backslash, 406e45e36eeSmiod }; 407e45e36eeSmiod 408e45e36eeSmiod /* 024 Danish type 5 keyboard */ 409e45e36eeSmiod const keysym_t sunkbd5_keydesc_dk[] = { 410e45e36eeSmiod KC(0x0d), KS_Mode_switch, 411e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 412e45e36eeSmiod KC(0x20), KS_3, KS_numbersign, KS_sterling, 413e45e36eeSmiod KC(0x21), KS_4, KS_currency, KS_dollar, 414e45e36eeSmiod KC(0x22), KS_5, KS_percent, KS_asciitilde, 415e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, KS_asciicircum, 416e45e36eeSmiod KC(0x24), KS_7, KS_slash, KS_braceleft, 417e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 418e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_bracketright, 419e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_braceright, 420e45e36eeSmiod KC(0x28), KS_plus, KS_question, 421e45e36eeSmiod KC(0x29), KS_dead_acute, KS_dead_grave, KS_bar, 422e45e36eeSmiod KC(0x2a), KS_onehalf, KS_asterisk, KS_grave, 423e45e36eeSmiod KC(0x40), KS_aring, 424e45e36eeSmiod KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 425e45e36eeSmiod KC(0x56), KS_ae, 426e45e36eeSmiod KC(0x57), KS_oslash, 427e45e36eeSmiod KC(0x58), KS_backslash, KS_asterisk, KS_grave, 428e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 429e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 430e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 431e45e36eeSmiod KC(0x7c), KS_less, KS_greater, KS_backslash, 432e45e36eeSmiod }; 433e45e36eeSmiod 434e45e36eeSmiod /* 005 German type 4 keyboard */ 435e45e36eeSmiod const keysym_t sunkbd_keydesc_de[] = { 436e45e36eeSmiod KC(0x0d), KS_Alt_L, 437e45e36eeSmiod KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 438e45e36eeSmiod KC(0x13), KS_Mode_switch, 439e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 440e45e36eeSmiod KC(0x20), KS_3, KS_section, KS_threesuperior, 441e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, 442e45e36eeSmiod KC(0x24), KS_7, KS_slash, KS_degree, 443e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_grave, 444e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_apostrophe, 445e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_bar, 446e45e36eeSmiod KC(0x28), KS_ssharp, KS_question, KS_backslash, 447e45e36eeSmiod KC(0x29), KS_dead_acute, KS_dead_grave, 448e45e36eeSmiod KC(0x2a), KS_numbersign, KS_asciicircum, KS_at, 449e45e36eeSmiod KC(0x3b), KS_z, 450e45e36eeSmiod KC(0x40), KS_udiaeresis, 45157e094dbSshadchin KC(0x41), KS_plus, KS_asterisk, KS_asciitilde, 452e45e36eeSmiod KC(0x4c), KS_Caps_Lock, 453e45e36eeSmiod KC(0x56), KS_odiaeresis, 454e45e36eeSmiod KC(0x57), KS_adiaeresis, 455e45e36eeSmiod KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 456e45e36eeSmiod KC(0x64), KS_y, 457e45e36eeSmiod KC(0x6a), KS_m, KS_M, KS_mu, 458e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 459e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 460e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 461e45e36eeSmiod KC(0x77), KS_Control_L, 462e45e36eeSmiod KC(0x7c), KS_less, KS_greater, 463e45e36eeSmiod }; 464e45e36eeSmiod 465e45e36eeSmiod /* 025 German type 5 keyboard */ 466e45e36eeSmiod const keysym_t sunkbd5_keydesc_de[] = { 467e45e36eeSmiod KC(0x0d), KS_Mode_switch, 468e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 469e45e36eeSmiod KC(0x20), KS_3, KS_section, KS_threesuperior, 470e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, 471e45e36eeSmiod KC(0x24), KS_7, KS_slash, KS_braceleft, 472e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 473e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_bracketright, 474e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_braceright, 475e45e36eeSmiod KC(0x28), KS_ssharp, KS_question, KS_backslash, 476e45e36eeSmiod KC(0x29), KS_dead_acute, KS_dead_grave, 477e45e36eeSmiod KC(0x2a), KS_asciicircum, KS_degree, 478e45e36eeSmiod KC(0x36), KS_q, KS_Q, KS_at, 479e45e36eeSmiod KC(0x3b), KS_z, 480e45e36eeSmiod KC(0x40), KS_udiaeresis, 48157e094dbSshadchin KC(0x41), KS_plus, KS_asterisk, KS_asciitilde, 482e45e36eeSmiod KC(0x56), KS_odiaeresis, 483e45e36eeSmiod KC(0x57), KS_adiaeresis, 484e45e36eeSmiod KC(0x58), KS_numbersign, KS_apostrophe, KS_grave, 485e45e36eeSmiod KC(0x64), KS_y, 486e45e36eeSmiod KC(0x6a), KS_m, KS_M, KS_mu, 487e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 488e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 489e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 490e45e36eeSmiod KC(0x7c), KS_less, KS_greater, KS_bar, 491e45e36eeSmiod }; 492e45e36eeSmiod 493e45e36eeSmiod /* 006 Italian type 4 keyboard */ 494e45e36eeSmiod const keysym_t sunkbd_keydesc_it[] = { 495e45e36eeSmiod KC(0x0d), KS_Mode_switch, 496e45e36eeSmiod KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 497e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 498e45e36eeSmiod KC(0x20), KS_3, KS_sterling, KS_threesuperior, 499e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, KS_notsign, 500e45e36eeSmiod KC(0x24), KS_7, KS_slash, 501e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, 502e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_backslash, 503e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_bar, 504e45e36eeSmiod KC(0x28), KS_apostrophe, KS_question, KS_grave, 505e45e36eeSmiod KC(0x29), KS_igrave, KS_asciicircum, 506e45e36eeSmiod KC(0x2a), KS_ugrave, KS_section, 507e45e36eeSmiod KC(0x40), KS_egrave, KS_eacute, 508e45e36eeSmiod KC(0x41), KS_plus, KS_asterisk, KS_asciitilde, 509e45e36eeSmiod KC(0x4c), KS_Caps_Lock, 510e45e36eeSmiod KC(0x56), KS_ograve, KS_ccedilla, KS_at, 511e45e36eeSmiod KC(0x57), KS_agrave, KS_degree, KS_numbersign, 512e45e36eeSmiod KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 513e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 514e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 515e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 516e45e36eeSmiod KC(0x77), KS_Control_L, 517e45e36eeSmiod KC(0x7c), KS_less, KS_greater, 518e45e36eeSmiod }; 519e45e36eeSmiod 520e45e36eeSmiod /* 026 Italian type 5 keyboard */ 521e45e36eeSmiod const keysym_t sunkbd5_keydesc_it[] = { 522e45e36eeSmiod KC(0x0d), KS_Mode_switch, 523e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, 524e45e36eeSmiod KC(0x20), KS_3, KS_sterling, 525e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, 526e45e36eeSmiod KC(0x24), KS_7, KS_slash, 527e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_braceleft, 528e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_braceright, 529e45e36eeSmiod KC(0x27), KS_0, KS_equal, 530e45e36eeSmiod KC(0x28), KS_apostrophe, KS_question, KS_grave, 531e45e36eeSmiod KC(0x29), KS_igrave, KS_asciicircum, 532e45e36eeSmiod KC(0x2a), KS_backslash, KS_bar, 533e45e36eeSmiod KC(0x40), KS_egrave, KS_eacute, KS_bracketleft, 534e45e36eeSmiod KC(0x41), KS_plus, KS_asterisk, KS_bracketright, 535e45e36eeSmiod KC(0x56), KS_ograve, KS_ccedilla, KS_at, 536e45e36eeSmiod KC(0x57), KS_agrave, KS_degree, KS_numbersign, 537e45e36eeSmiod KC(0x58), KS_ugrave, KS_section, KS_asciitilde, 538e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 539e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 540e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 541e45e36eeSmiod KC(0x7c), KS_less, KS_greater, 542e45e36eeSmiod }; 543e45e36eeSmiod 544e45e36eeSmiod /* 007 Dutch type 4 keyboard */ 545e45e36eeSmiod const keysym_t sunkbd_keydesc_nl[] = { 546e45e36eeSmiod KC(0x0d), KS_Caps_Lock, 547e45e36eeSmiod KC(0x0f), KS_backslash, KS_bar, 548e45e36eeSmiod KC(0x1e), KS_1, KS_exclam, KS_onesuperior, 549e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 550e45e36eeSmiod KC(0x20), KS_3, KS_numbersign, KS_threesuperior, 551e45e36eeSmiod KC(0x21), KS_4, KS_dollar, KS_onequarter, 552e45e36eeSmiod KC(0x22), KS_5, KS_percent, KS_onehalf, 553e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, KS_threequarters, 554e45e36eeSmiod KC(0x24), KS_7, KS_underscore, KS_sterling, 555e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_braceleft, 556e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_braceright, 557e45e36eeSmiod KC(0x27), KS_0, KS_apostrophe, KS_grave, 558e45e36eeSmiod KC(0x28), KS_slash, KS_question, 559e45e36eeSmiod KC(0x29), KS_degree, KS_dead_tilde, KS_dead_abovering, 560e45e36eeSmiod KC(0x2a), KS_less, KS_greater, 561e45e36eeSmiod KC(0x40), KS_dead_diaeresis,KS_dead_circumflex, 562e45e36eeSmiod KC(0x41), KS_asterisk, KS_brokenbar, KS_asciitilde, 563e45e36eeSmiod KC(0x4e), KS_s, KS_S, KS_ssharp, 564e45e36eeSmiod KC(0x56), KS_plus, KS_plusminus, 565e45e36eeSmiod KC(0x57), KS_dead_acute, KS_dead_grave, 566e45e36eeSmiod KC(0x58), KS_at, KS_section, KS_notsign, 567e45e36eeSmiod KC(0x64), KS_z, KS_Z, KS_guillemotleft, 568e45e36eeSmiod KC(0x65), KS_x, KS_X, KS_guillemotright, 569e45e36eeSmiod KC(0x66), KS_c, KS_C, KS_cent, 570e45e36eeSmiod KC(0x6a), KS_m, KS_M, KS_mu, 571e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 572e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 573e45e36eeSmiod KC(0x6d), KS_minus, KS_equal, 574e45e36eeSmiod KC(0x77), KS_Mode_switch, 575e45e36eeSmiod KC(0x7d), KS_bracketright,KS_bracketleft, 576e45e36eeSmiod }; 577e45e36eeSmiod 578e45e36eeSmiod /* 027 Dutch type 5 keyboard */ 579e45e36eeSmiod const keysym_t sunkbd5_keydesc_nl[] = { 580e45e36eeSmiod KC(0x0d), KS_Mode_switch, 581e45e36eeSmiod KC(0x1e), KS_1, KS_exclam, KS_onesuperior, 582e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 583e45e36eeSmiod KC(0x20), KS_3, KS_numbersign, KS_threesuperior, 584e45e36eeSmiod KC(0x21), KS_4, KS_dollar, KS_onequarter, 585e45e36eeSmiod KC(0x22), KS_5, KS_percent, KS_onehalf, 586e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, KS_threequarters, 587e45e36eeSmiod KC(0x24), KS_7, KS_underscore, KS_sterling, 588e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_braceleft, 589e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_braceright, 590e45e36eeSmiod KC(0x27), KS_0, KS_apostrophe, KS_grave, 591e45e36eeSmiod KC(0x28), KS_slash, KS_question, KS_backslash, 592e45e36eeSmiod KC(0x29), KS_degree, KS_dead_tilde, KS_dead_abovering, 593e45e36eeSmiod KC(0x2a), KS_at, KS_section, KS_notsign, 594e45e36eeSmiod KC(0x40), KS_dead_diaeresis,KS_dead_circumflex, 595e45e36eeSmiod KC(0x41), KS_asterisk, KS_bar, KS_asciitilde, 596e45e36eeSmiod KC(0x4e), KS_s, KS_S, KS_ssharp, 597e45e36eeSmiod KC(0x56), KS_plus, KS_plusminus, 598e45e36eeSmiod KC(0x57), KS_dead_acute, KS_dead_grave, 599e45e36eeSmiod KC(0x58), KS_less, KS_greater, KS_asciicircum, 600e45e36eeSmiod KC(0x64), KS_z, KS_Z, KS_guillemotleft, 601e45e36eeSmiod KC(0x65), KS_x, KS_X, KS_guillemotright, 602e45e36eeSmiod KC(0x66), KS_c, KS_C, KS_cent, 603e45e36eeSmiod KC(0x6a), KS_m, KS_M, KS_mu, 604e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 605e45e36eeSmiod KC(0x6c), KS_period, KS_colon, KS_hyphen, 606e45e36eeSmiod KC(0x6d), KS_minus, KS_equal, 607e45e36eeSmiod KC(0x7d), KS_bracketright,KS_bracketleft, KS_brokenbar, 608e45e36eeSmiod }; 609e45e36eeSmiod 610e45e36eeSmiod /* 008 Norwegian type 4 keyboard */ 611e45e36eeSmiod const keysym_t sunkbd_keydesc_no[] = { 612e45e36eeSmiod KC(0x0d), KS_Mode_switch, 613e45e36eeSmiod KC(0x0f), KS_asciitilde, KS_asciicircum, 614e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 615e45e36eeSmiod KC(0x20), KS_3, KS_numbersign, KS_sterling, 616e45e36eeSmiod KC(0x21), KS_4, KS_currency, KS_dollar, 617e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, 618e45e36eeSmiod KC(0x24), KS_7, KS_slash, KS_braceleft, 619e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 620e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_bracketright, 621e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_braceright, 622e45e36eeSmiod KC(0x28), KS_plus, KS_question, 623e45e36eeSmiod KC(0x29), KS_backslash, KS_dead_grave, KS_dead_acute, 624e45e36eeSmiod KC(0x2a), KS_apostrophe, KS_asterisk, KS_grave, 625e45e36eeSmiod KC(0x40), KS_aring, 626e45e36eeSmiod KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 627e45e36eeSmiod KC(0x4c), KS_Caps_Lock, 628e45e36eeSmiod KC(0x56), KS_oslash, 629e45e36eeSmiod KC(0x57), KS_ae, 630e45e36eeSmiod KC(0x58), KS_bar, KS_section, 631e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 632e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 633e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 634e45e36eeSmiod KC(0x77), KS_Control_L, 635e45e36eeSmiod KC(0x7d), KS_less, KS_greater, 636e45e36eeSmiod }; 637e45e36eeSmiod 638e45e36eeSmiod /* 028 Norwegian type 5 keyboard */ 639e45e36eeSmiod const keysym_t sunkbd5_keydesc_no[] = { 640e45e36eeSmiod KC(0x0d), KS_Mode_switch, 641e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 642e45e36eeSmiod KC(0x20), KS_3, KS_numbersign, KS_sterling, 643e45e36eeSmiod KC(0x21), KS_4, KS_currency, KS_dollar, 644e45e36eeSmiod KC(0x22), KS_5, KS_percent, KS_asciitilde, 645e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, KS_asciicircum, 646e45e36eeSmiod KC(0x24), KS_7, KS_slash, KS_braceleft, 647e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 648e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_bracketright, 649e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_braceright, 650e45e36eeSmiod KC(0x28), KS_plus, KS_question, 651e45e36eeSmiod KC(0x29), KS_backslash, KS_dead_grave, KS_dead_acute, 652e45e36eeSmiod KC(0x2a), KS_bar, KS_section, 653e45e36eeSmiod KC(0x40), KS_aring, 654e45e36eeSmiod KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 655e45e36eeSmiod KC(0x56), KS_oslash, 656e45e36eeSmiod KC(0x57), KS_ae, 657e45e36eeSmiod KC(0x58), KS_apostrophe, KS_asterisk, KS_grave, 658e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 659e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 660e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 661e45e36eeSmiod KC(0x7d), KS_less, KS_greater, 662e45e36eeSmiod }; 663e45e36eeSmiod 664e45e36eeSmiod /* 009 Portuguese type 4 keyboard */ 665e45e36eeSmiod const keysym_t sunkbd_keydesc_pt[] = { 666e45e36eeSmiod KC(0x0d), KS_Mode_switch, 667e45e36eeSmiod KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 668e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 669e45e36eeSmiod KC(0x20), KS_3, KS_numbersign, KS_sterling, 670e45e36eeSmiod KC(0x21), KS_4, KS_dollar, KS_section, 671e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, KS_notsign, 672e45e36eeSmiod KC(0x24), KS_7, KS_slash, 673e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, 674e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_backslash, 675e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_bar, 676e45e36eeSmiod KC(0x28), KS_apostrophe, KS_question, KS_grave, 677e45e36eeSmiod KC(0x29), KS_exclamdown, KS_questiondown, 678e45e36eeSmiod KC(0x2a), KS_dead_tilde, KS_dead_circumflex,KS_asciicircum, 679e45e36eeSmiod KC(0x40), KS_dead_diaeresis,KS_asterisk, KS_plus, 680e45e36eeSmiod KC(0x41), KS_dead_acute, KS_dead_grave, KS_asciitilde, 681e45e36eeSmiod KC(0x4c), KS_Caps_Lock, 682e45e36eeSmiod KC(0x56), KS_ccedilla, 683e45e36eeSmiod KC(0x57), KS_masculine, KS_ordfeminine, 684e45e36eeSmiod KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 685e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 686e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 687e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 688e45e36eeSmiod KC(0x77), KS_Control_L, 689e45e36eeSmiod KC(0x7d), KS_less, KS_greater, 690e45e36eeSmiod }; 691e45e36eeSmiod 692e45e36eeSmiod /* 029 Portuguese type 4 keyboard */ 693e45e36eeSmiod const keysym_t sunkbd5_keydesc_pt[] = { 694e45e36eeSmiod KC(0x0d), KS_Mode_switch, 695e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 696e45e36eeSmiod KC(0x20), KS_3, KS_numbersign, KS_sterling, 697e45e36eeSmiod KC(0x21), KS_4, KS_dollar, KS_section, 698e45e36eeSmiod KC(0x22), KS_5, KS_percent, KS_asciitilde, 699e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, KS_asciicircum, 700e45e36eeSmiod KC(0x24), KS_7, KS_slash, KS_braceleft, 701e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 702e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_bracketright, 703e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_braceright, 704e45e36eeSmiod KC(0x28), KS_apostrophe, KS_question, KS_grave, 705e45e36eeSmiod KC(0x29), KS_guillemotleft,KS_guillemotright, 706e45e36eeSmiod KC(0x2a), KS_backslash, KS_bar, 707e45e36eeSmiod KC(0x40), KS_plus, KS_asterisk, KS_dead_diaeresis, 708e45e36eeSmiod KC(0x41), KS_dead_acute, KS_dead_grave, 709e45e36eeSmiod KC(0x56), KS_ccedilla, 710e45e36eeSmiod KC(0x57), KS_masculine, KS_ordfeminine, 711e45e36eeSmiod KC(0x58), KS_dead_tilde, KS_dead_circumflex, 712e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 713e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 714e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 715e45e36eeSmiod KC(0x7d), KS_less, KS_greater, 716e45e36eeSmiod }; 717e45e36eeSmiod 718e45e36eeSmiod /* 00a Spanish type 4 keyboard */ 719e45e36eeSmiod const keysym_t sunkbd_keydesc_es[] = { 720e45e36eeSmiod KC(0x0d), KS_Mode_switch, 721e45e36eeSmiod KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 722e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 723e45e36eeSmiod KC(0x20), KS_3, KS_hyphen, KS_numbersign, 724e45e36eeSmiod KC(0x22), KS_5, KS_percent, KS_degree, 725e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, KS_notsign, 726e45e36eeSmiod KC(0x24), KS_7, KS_slash, 727e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, 728e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_backslash, 729e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_bar, 730e45e36eeSmiod KC(0x28), KS_apostrophe, KS_question, KS_grave, 731e45e36eeSmiod KC(0x29), KS_exclamdown, KS_questiondown, 732e45e36eeSmiod KC(0x2a), KS_ccedilla, 733e45e36eeSmiod KC(0x3e), KS_o, KS_O, KS_masculine, 734e45e36eeSmiod KC(0x40), KS_dead_grave, KS_dead_circumflex,KS_asciicircum, 735e45e36eeSmiod KC(0x41), KS_plus, KS_asterisk, KS_asciitilde, 736e45e36eeSmiod KC(0x4c), KS_Caps_Lock, 737e45e36eeSmiod KC(0x4d), KS_a, KS_A, KS_ordfeminine, 738e45e36eeSmiod KC(0x56), KS_ntilde, 739e45e36eeSmiod KC(0x57), KS_dead_acute, KS_dead_diaeresis, 740e45e36eeSmiod KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 741e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 742e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 743e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 744e45e36eeSmiod KC(0x77), KS_Control_L, 745e45e36eeSmiod KC(0x7d), KS_less, KS_greater, 746e45e36eeSmiod }; 747e45e36eeSmiod 748e45e36eeSmiod /* 02a Spanish type 5 keyboard */ 749e45e36eeSmiod const keysym_t sunkbd5_keydesc_es[] = { 750e45e36eeSmiod KC(0x0d), KS_Mode_switch, 751e45e36eeSmiod KC(0x1e), KS_1, KS_exclam, KS_bar, 752e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 753e45e36eeSmiod KC(0x20), KS_3, KS_hyphen, KS_numbersign, 754e45e36eeSmiod KC(0x21), KS_4, KS_dollar, KS_asciicircum, 755e45e36eeSmiod KC(0x22), KS_5, KS_percent, KS_asciitilde, 756e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, KS_notsign, 757e45e36eeSmiod KC(0x24), KS_7, KS_slash, 758e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, 759e45e36eeSmiod KC(0x26), KS_9, KS_parenright, 760e45e36eeSmiod KC(0x27), KS_0, KS_equal, 761e45e36eeSmiod KC(0x28), KS_apostrophe, KS_question, KS_grave, 762e45e36eeSmiod KC(0x29), KS_exclamdown, KS_questiondown, 763e45e36eeSmiod KC(0x2a), KS_masculine, KS_ordfeminine, KS_backslash, 764e45e36eeSmiod KC(0x40), KS_dead_grave, KS_dead_circumflex,KS_bracketleft, 765e45e36eeSmiod KC(0x41), KS_plus, KS_asterisk, KS_bracketright, 766e45e36eeSmiod KC(0x56), KS_ntilde, 767e45e36eeSmiod KC(0x57), KS_dead_acute, KS_dead_diaeresis,KS_braceleft, 768e45e36eeSmiod KC(0x58), KS_ccedilla, KS_Ccedilla, KS_braceright, 769e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 770e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 771e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 772e45e36eeSmiod KC(0x7d), KS_less, KS_greater, 773e45e36eeSmiod }; 774e45e36eeSmiod 775e45e36eeSmiod /* 00b Swedish/Finnish type 4 keyboard */ 776e45e36eeSmiod const keysym_t sunkbd_keydesc_sv[] = { 777e45e36eeSmiod KC(0x0d), KS_Multi_key, 778e45e36eeSmiod KC(0x0f), KS_asciitilde, KS_asciicircum, 779e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 780e45e36eeSmiod KC(0x20), KS_3, KS_numbersign, KS_sterling, 781e45e36eeSmiod KC(0x21), KS_4, KS_currency, KS_dollar, 782e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, 783e45e36eeSmiod KC(0x24), KS_7, KS_slash, KS_braceleft, 784e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 785e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_bracketright, 786e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_braceright, 787e45e36eeSmiod KC(0x28), KS_plus, KS_question, KS_backslash, 788e45e36eeSmiod KC(0x29), KS_dead_acute, KS_dead_grave, 789e45e36eeSmiod KC(0x2a), KS_apostrophe, KS_asterisk, KS_grave, 790e45e36eeSmiod KC(0x40), KS_aring, 791e45e36eeSmiod KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 792e45e36eeSmiod KC(0x43), KS_Mode_switch, 793e45e36eeSmiod KC(0x4c), KS_Caps_Lock, 794e45e36eeSmiod KC(0x56), KS_odiaeresis, 795e45e36eeSmiod KC(0x57), KS_adiaeresis, 796e45e36eeSmiod KC(0x58), KS_section, KS_onehalf, 797e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 798e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 799e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 800e45e36eeSmiod KC(0x77), KS_Control_L, 801e45e36eeSmiod KC(0x7c), KS_less, KS_greater, KS_bar, 802e45e36eeSmiod }; 803e45e36eeSmiod 804e45e36eeSmiod const keysym_t sunkbd_keydesc_sv_nodead[] = { 805e45e36eeSmiod KC(0x29), KS_apostrophe, KS_grave, 806e45e36eeSmiod KC(0x41), KS_diaeresis, KS_asciicircum, KS_asciitilde, 807e45e36eeSmiod }; 808e45e36eeSmiod 809e45e36eeSmiod /* 02b Swedish type 5 keyboard */ 810e45e36eeSmiod const keysym_t sunkbd5_keydesc_sv[] = { 811e45e36eeSmiod KC(0x0d), KS_Mode_switch, 812e45e36eeSmiod KC(0x0f), KS_asciitilde, KS_asciicircum, 813e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 814e45e36eeSmiod KC(0x20), KS_3, KS_numbersign, KS_sterling, 815e45e36eeSmiod KC(0x21), KS_4, KS_currency, KS_dollar, 816e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, 817e45e36eeSmiod KC(0x24), KS_7, KS_slash, KS_braceleft, 818e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 819e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_bracketright, 820e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_braceright, 821e45e36eeSmiod KC(0x28), KS_plus, KS_question, KS_backslash, 822e45e36eeSmiod KC(0x29), KS_dead_acute, KS_dead_grave, 823e45e36eeSmiod KC(0x2a), KS_section, KS_onehalf, 824e45e36eeSmiod KC(0x40), KS_aring, 825e45e36eeSmiod KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 826e45e36eeSmiod KC(0x43), KS_Multi_key, 827e45e36eeSmiod KC(0x4c), KS_Control_L, 828e45e36eeSmiod KC(0x56), KS_odiaeresis, 829e45e36eeSmiod KC(0x57), KS_adiaeresis, 830e45e36eeSmiod KC(0x58), KS_apostrophe, KS_asterisk, KS_grave, 831e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 832e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 833e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 834e45e36eeSmiod KC(0x77), KS_Caps_Lock, 835e45e36eeSmiod KC(0x7c), KS_less, KS_greater, KS_bar, 836e45e36eeSmiod }; 837e45e36eeSmiod 838e45e36eeSmiod /* 00c Swiss-French type 4 keyboard */ 839e45e36eeSmiod const keysym_t sunkbd_keydesc_sf[] = { 840e45e36eeSmiod KC(0x0d), KS_Multi_key, 841e45e36eeSmiod KC(0x0f), KS_greater, KS_braceright, 842e45e36eeSmiod KC(0x1e), KS_1, KS_plus, KS_exclam, 843e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 844e45e36eeSmiod KC(0x20), KS_3, KS_asterisk, KS_numbersign, 845e45e36eeSmiod KC(0x21), KS_4, KS_ccedilla, KS_cent, 846e45e36eeSmiod KC(0x22), KS_5, KS_percent, KS_asciitilde, 847e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, KS_section, 848e45e36eeSmiod KC(0x24), KS_7, KS_slash, KS_bar, 849e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_degree, 850e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_backslash, 851e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_asciicircum, 852e45e36eeSmiod KC(0x28), KS_apostrophe, KS_question, KS_grave, 853e45e36eeSmiod KC(0x29), KS_dead_circumflex,KS_dead_grave, 854e45e36eeSmiod KC(0x2a), KS_dollar, KS_dead_tilde, KS_sterling, 855e45e36eeSmiod KC(0x3b), KS_z, 856e45e36eeSmiod KC(0x40), KS_egrave, KS_udiaeresis, 857e45e36eeSmiod KC(0x41), KS_dead_diaeresis,KS_dead_acute, 858e45e36eeSmiod KC(0x43), KS_Mode_switch, 859e45e36eeSmiod KC(0x4c), KS_Caps_Lock, 860e45e36eeSmiod KC(0x56), KS_eacute, KS_odiaeresis, 861e45e36eeSmiod KC(0x57), KS_agrave, KS_adiaeresis, 862e45e36eeSmiod KC(0x58), KS_less, KS_braceleft, 863e45e36eeSmiod KC(0x64), KS_y, 864e45e36eeSmiod KC(0x6a), KS_m, KS_M, KS_mu, 865e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 866e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 867e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 868e45e36eeSmiod KC(0x77), KS_Control_L, 869e45e36eeSmiod KC(0x7c), KS_bracketright,KS_bracketleft, KS_backslash, 870e45e36eeSmiod }; 871e45e36eeSmiod 872e45e36eeSmiod /* 02c Swiss-French type 5 keyboard */ 873e45e36eeSmiod const keysym_t sunkbd5_keydesc_sf[] = { 874e45e36eeSmiod KC(0x0d), KS_Mode_switch, 875e45e36eeSmiod KC(0x1e), KS_1, KS_plus, KS_bar, 876e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 877e45e36eeSmiod KC(0x20), KS_3, KS_asterisk, KS_numbersign, 878e45e36eeSmiod KC(0x21), KS_4, KS_ccedilla, KS_asciicircum, 879e45e36eeSmiod KC(0x22), KS_5, KS_percent, KS_asciitilde, 880e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, 881e45e36eeSmiod KC(0x24), KS_7, KS_slash, 882e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, 883e45e36eeSmiod KC(0x26), KS_9, KS_parenright, 884e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_grave, 885e45e36eeSmiod KC(0x28), KS_apostrophe, KS_question, KS_dead_acute, 886e45e36eeSmiod KC(0x29), KS_dead_circumflex,KS_dead_grave,KS_dead_tilde, 887e45e36eeSmiod KC(0x2a), KS_dollar, KS_degree, 888e45e36eeSmiod KC(0x3b), KS_z, 889e45e36eeSmiod KC(0x40), KS_egrave, KS_udiaeresis, KS_bracketleft, 890e45e36eeSmiod KC(0x41), KS_dead_diaeresis,KS_exclam, KS_bracketright, 891e45e36eeSmiod KC(0x56), KS_eacute, KS_odiaeresis, 892e45e36eeSmiod KC(0x57), KS_agrave, KS_adiaeresis, KS_braceleft, 893e45e36eeSmiod KC(0x58), KS_dollar, KS_sterling, KS_braceright, 894e45e36eeSmiod KC(0x64), KS_y, 895e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 896e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 897e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 898e45e36eeSmiod KC(0x7c), KS_less, KS_greater, KS_backslash, 899e45e36eeSmiod }; 900e45e36eeSmiod 901e45e36eeSmiod /* 00d Swiss-German type 4 keyboard */ 902e45e36eeSmiod const keysym_t sunkbd_keydesc_sg[] = { 903e45e36eeSmiod KC(0x0d), KS_Multi_key, 904e45e36eeSmiod KC(0x0f), KS_greater, KS_braceright, 905e45e36eeSmiod KC(0x1e), KS_1, KS_plus, KS_exclam, 906e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 907e45e36eeSmiod KC(0x20), KS_3, KS_asterisk, KS_numbersign, 908e45e36eeSmiod KC(0x21), KS_4, KS_ccedilla, KS_cent, 909e45e36eeSmiod KC(0x22), KS_5, KS_percent, KS_asciitilde, 910e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, KS_section, 911e45e36eeSmiod KC(0x24), KS_7, KS_slash, KS_bar, 912e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, KS_degree, 913e45e36eeSmiod KC(0x26), KS_9, KS_parenright, KS_backslash, 914e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_asciicircum, 915e45e36eeSmiod KC(0x28), KS_apostrophe, KS_question, KS_grave, 916e45e36eeSmiod KC(0x29), KS_dead_circumflex,KS_dead_grave, 917e45e36eeSmiod KC(0x2a), KS_dollar, KS_dead_tilde, KS_sterling, 918e45e36eeSmiod KC(0x3b), KS_z, 919e45e36eeSmiod KC(0x40), KS_udiaeresis, KS_egrave, 920e45e36eeSmiod KC(0x41), KS_dead_diaeresis,KS_dead_acute, 921e45e36eeSmiod KC(0x43), KS_Mode_switch, 922e45e36eeSmiod KC(0x4c), KS_Caps_Lock, 923e45e36eeSmiod KC(0x56), KS_odiaeresis, KS_eacute, 924e45e36eeSmiod KC(0x57), KS_adiaeresis, KS_agrave, 925e45e36eeSmiod KC(0x58), KS_less, KS_braceleft, 926e45e36eeSmiod KC(0x64), KS_y, 927e45e36eeSmiod KC(0x6a), KS_m, KS_M, KS_mu, 928e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 929e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 930e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 931e45e36eeSmiod KC(0x77), KS_Control_L, 932e45e36eeSmiod KC(0x7c), KS_bracketright,KS_bracketleft, KS_backslash, 933e45e36eeSmiod }; 934e45e36eeSmiod 935e45e36eeSmiod /* 02d Swiss-German type 5 keyboard */ 936e45e36eeSmiod const keysym_t sunkbd5_keydesc_sg[] = { 937e45e36eeSmiod KC(0x0d), KS_Mode_switch, 938e45e36eeSmiod KC(0x1e), KS_1, KS_plus, KS_bar, 939e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, KS_at, 940e45e36eeSmiod KC(0x20), KS_3, KS_asterisk, KS_numbersign, 941e45e36eeSmiod KC(0x21), KS_4, KS_ccedilla, KS_asciicircum, 942e45e36eeSmiod KC(0x22), KS_5, KS_percent, KS_asciitilde, 943e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, 944e45e36eeSmiod KC(0x24), KS_7, KS_slash, 945e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, 946e45e36eeSmiod KC(0x26), KS_9, KS_parenright, 947e45e36eeSmiod KC(0x27), KS_0, KS_equal, KS_grave, 948e45e36eeSmiod KC(0x28), KS_apostrophe, KS_question, KS_dead_acute, 949e45e36eeSmiod KC(0x29), KS_dead_circumflex,KS_dead_grave,KS_dead_tilde, 950e45e36eeSmiod KC(0x2a), KS_dollar, KS_degree, 951e45e36eeSmiod KC(0x3b), KS_z, 952e45e36eeSmiod KC(0x40), KS_udiaeresis, KS_egrave, KS_bracketleft, 953e45e36eeSmiod KC(0x41), KS_dead_diaeresis,KS_exclam, KS_bracketright, 954e45e36eeSmiod KC(0x56), KS_odiaeresis, KS_eacute, 955e45e36eeSmiod KC(0x57), KS_adiaeresis, KS_agrave, KS_braceleft, 956e45e36eeSmiod KC(0x58), KS_dollar, KS_sterling, KS_braceright, 957e45e36eeSmiod KC(0x64), KS_y, 958e45e36eeSmiod KC(0x6b), KS_comma, KS_semicolon, 959e45e36eeSmiod KC(0x6c), KS_period, KS_colon, 960e45e36eeSmiod KC(0x6d), KS_minus, KS_underscore, 961e45e36eeSmiod KC(0x7c), KS_less, KS_greater, KS_backslash, 962e45e36eeSmiod }; 963e45e36eeSmiod 964e45e36eeSmiod /* 00e UK English type 4 keyboard */ 965e45e36eeSmiod const keysym_t sunkbd_keydesc_uk[] = { 966e45e36eeSmiod KC(0x1e), KS_1, KS_exclam, KS_bar, 967e45e36eeSmiod KC(0x21), KS_3, KS_sterling, KS_numbersign, 968e45e36eeSmiod KC(0x28), KS_minus, KS_underscore, KS_notsign, 969e45e36eeSmiod KC(0x43), KS_Mode_switch, 970e45e36eeSmiod }; 971e45e36eeSmiod 972e45e36eeSmiod /* 02e UK English type 5 keyboard */ 973e45e36eeSmiod const keysym_t sunkbd5_keydesc_uk[] = { 974e45e36eeSmiod KC(0x0d), KS_Mode_switch, 975e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, 976e45e36eeSmiod KC(0x20), KS_3, KS_sterling, 977e45e36eeSmiod KC(0x2a), KS_grave, KS_notsign, KS_brokenbar, 978e45e36eeSmiod KC(0x57), KS_apostrophe, KS_at, 979e45e36eeSmiod KC(0x58), KS_numbersign, KS_asciitilde, 980e45e36eeSmiod KC(0x7c), KS_backslash, KS_bar, 981e45e36eeSmiod }; 982e45e36eeSmiod 983e45e36eeSmiod /* 031 Japan type 5 keyboard */ 984e45e36eeSmiod const keysym_t sunkbd5_keydesc_jp[] = { 985e45e36eeSmiod KC(0x1f), KS_2, KS_quotedbl, 986e45e36eeSmiod KC(0x23), KS_6, KS_ampersand, 987e45e36eeSmiod KC(0x24), KS_7, KS_apostrophe, 988e45e36eeSmiod KC(0x25), KS_8, KS_parenleft, 989e45e36eeSmiod KC(0x26), KS_9, KS_parenright, 990e45e36eeSmiod KC(0x27), KS_0, 991e45e36eeSmiod KC(0x28), KS_minus, KS_equal, 992e45e36eeSmiod KC(0x29), KS_asciicircum, KS_asciitilde, 993e45e36eeSmiod KC(0x2a), KS_yen, KS_bar, 994e45e36eeSmiod KC(0x40), KS_at, KS_grave, 995e45e36eeSmiod KC(0x41), KS_bracketleft, KS_braceleft, 996e45e36eeSmiod KC(0x56), KS_semicolon, KS_plus, 997e45e36eeSmiod KC(0x57), KS_colon, KS_asterisk, 998e45e36eeSmiod KC(0x58), KS_bracketright,KS_braceright, 999e45e36eeSmiod KC(0x7c), KS_backslash, KS_underscore, 1000e45e36eeSmiod }; 1001e45e36eeSmiod 1002e45e36eeSmiod #define KBD_MAP(name, base, map) \ 1003e45e36eeSmiod { name, base, sizeof(map)/sizeof(keysym_t), map } 1004e45e36eeSmiod 1005e45e36eeSmiod /* Supported type 4 keyboard layouts */ 1006e45e36eeSmiod const struct wscons_keydesc sunkbd_keydesctab[] = { 1007e45e36eeSmiod KBD_MAP(KB_US, 0, sunkbd_keydesc_us), 1008e45e36eeSmiod KBD_MAP(KB_BE, KB_US, sunkbd_keydesc_befr), 1009e45e36eeSmiod KBD_MAP(KB_DE, KB_US, sunkbd_keydesc_de), 1010e45e36eeSmiod KBD_MAP(KB_DK, KB_US, sunkbd_keydesc_dk), 1011e45e36eeSmiod KBD_MAP(KB_ES, KB_US, sunkbd_keydesc_es), 1012e45e36eeSmiod KBD_MAP(KB_FR, KB_US, sunkbd_keydesc_befr), 1013e45e36eeSmiod KBD_MAP(KB_IT, KB_US, sunkbd_keydesc_it), 1014e45e36eeSmiod KBD_MAP(KB_NL, KB_US, sunkbd_keydesc_nl), 1015e45e36eeSmiod KBD_MAP(KB_NO, KB_US, sunkbd_keydesc_no), 1016e45e36eeSmiod KBD_MAP(KB_PT, KB_US, sunkbd_keydesc_pt), 1017e45e36eeSmiod KBD_MAP(KB_SF, KB_US, sunkbd_keydesc_sf), 1018e45e36eeSmiod KBD_MAP(KB_SG, KB_US, sunkbd_keydesc_sg), 1019e45e36eeSmiod KBD_MAP(KB_SV, KB_US, sunkbd_keydesc_sv), 1020e45e36eeSmiod KBD_MAP(KB_SV | KB_NODEAD, KB_SV, sunkbd_keydesc_sv_nodead), 1021e45e36eeSmiod KBD_MAP(KB_UK, KB_US, sunkbd_keydesc_uk), 1022e45e36eeSmiod {0, 0, 0, 0}, 1023e45e36eeSmiod }; 1024e45e36eeSmiod 1025e45e36eeSmiod /* Supported type 5 keyboard layouts */ 1026e45e36eeSmiod const struct wscons_keydesc sunkbd5_keydesctab[] = { 1027e45e36eeSmiod KBD_MAP(KB_US, 0, sunkbd_keydesc_us), 1028e45e36eeSmiod KBD_MAP(KB_DE, KB_US, sunkbd5_keydesc_de), 1029e45e36eeSmiod KBD_MAP(KB_DK, KB_US, sunkbd5_keydesc_dk), 1030e45e36eeSmiod KBD_MAP(KB_ES, KB_US, sunkbd5_keydesc_es), 1031e45e36eeSmiod KBD_MAP(KB_FR, KB_US, sunkbd5_keydesc_fr), 1032e45e36eeSmiod KBD_MAP(KB_IT, KB_US, sunkbd5_keydesc_it), 1033e45e36eeSmiod KBD_MAP(KB_JP, KB_US, sunkbd5_keydesc_jp), 1034e45e36eeSmiod KBD_MAP(KB_NL, KB_US, sunkbd5_keydesc_nl), 1035e45e36eeSmiod KBD_MAP(KB_NO, KB_US, sunkbd5_keydesc_no), 1036e45e36eeSmiod KBD_MAP(KB_PT, KB_US, sunkbd5_keydesc_pt), 1037e45e36eeSmiod KBD_MAP(KB_SF, KB_US, sunkbd5_keydesc_sf), 1038e45e36eeSmiod KBD_MAP(KB_SG, KB_US, sunkbd5_keydesc_sg), 1039e45e36eeSmiod KBD_MAP(KB_SV, KB_US, sunkbd5_keydesc_sv), 1040e45e36eeSmiod KBD_MAP(KB_SV | KB_NODEAD, KB_SV, sunkbd_keydesc_sv_nodead), 1041e45e36eeSmiod KBD_MAP(KB_UK, KB_US, sunkbd5_keydesc_uk), 1042e45e36eeSmiod {0, 0, 0, 0}, 1043e45e36eeSmiod }; 1044e45e36eeSmiod 1045e45e36eeSmiod /* 1046e45e36eeSmiod * Keyboard layout to ID table 1047e45e36eeSmiod * References: 1048e45e36eeSmiod * Sun Type 5 Keyboard Supplement Installation Guide, May 1992 1049e45e36eeSmiod * http://docs.sun.com/db/doc/806-6642/6jfipqu57?a=view 1050e45e36eeSmiod * http://jp.sunsolve.sun.com/handbook_pub/Systems/SSVygr/INPUT_Compact1_Keyboard.html 1051e45e36eeSmiod */ 1052e45e36eeSmiod const int sunkbd_layouts[MAXSUNLAYOUT] = { 1053e45e36eeSmiod /* Type 4 layouts */ 1054e45e36eeSmiod KB_US, /* 000 USA */ 1055e45e36eeSmiod KB_US, /* 001 same as 000 */ 1056e45e36eeSmiod KB_BE, /* 002 Belgium/French */ 1057e45e36eeSmiod -1, /* 003 Canada */ 1058e45e36eeSmiod KB_DK, /* 004 Denmark */ 1059e45e36eeSmiod KB_DE, /* 005 Germany */ 1060e45e36eeSmiod KB_IT, /* 006 Italy */ 1061e45e36eeSmiod KB_NL, /* 007 The Netherlands */ 1062e45e36eeSmiod KB_NO, /* 008 Norway */ 1063e45e36eeSmiod KB_PT, /* 009 Portugal */ 1064e45e36eeSmiod KB_ES, /* 00a Latin America/Spanish */ 1065e45e36eeSmiod KB_SV, /* 00b Sweden */ 1066e45e36eeSmiod KB_SF, /* 00c Switzerland/French */ 1067e45e36eeSmiod KB_SG, /* 00d Switzerland/German */ 1068e45e36eeSmiod KB_UK, /* 00e Great Britain */ 1069e45e36eeSmiod -1, /* 00f unaffected */ 1070e45e36eeSmiod -1, /* 010 Korea */ 1071e45e36eeSmiod -1, /* 011 Taiwan */ 1072e45e36eeSmiod -1, /* 012 unaffected */ 1073e45e36eeSmiod -1, /* 013 unaffected */ 1074e45e36eeSmiod -1, /* 014 VT220 */ 1075e45e36eeSmiod -1, /* 015 VT220 Switzerland/French */ 1076e45e36eeSmiod -1, /* 016 VT220 Switzerland/German */ 1077e45e36eeSmiod -1, /* 017 VT220 Switzerland/Italian */ 1078e45e36eeSmiod -1, /* 018 unaffected */ 1079e45e36eeSmiod -1, /* 019 Belgium */ 1080e45e36eeSmiod -1, /* 01a unaffected */ 1081e45e36eeSmiod -1, /* 01b unaffected */ 1082e45e36eeSmiod -1, /* 01c unaffected */ 1083e45e36eeSmiod -1, /* 01d unaffected */ 1084e45e36eeSmiod -1, /* 01e unaffected */ 1085e45e36eeSmiod -1, /* 01f unaffected */ 1086e45e36eeSmiod -1, /* 020 Japan */ 1087e45e36eeSmiod 1088e45e36eeSmiod /* Type 5 layouts */ 1089e45e36eeSmiod KB_US, /* 021 USA */ 1090e45e36eeSmiod KB_US, /* 022 UNIX */ 1091e45e36eeSmiod KB_FR, /* 023 France */ 1092e45e36eeSmiod KB_DK, /* 024 Denmark */ 1093e45e36eeSmiod KB_DE, /* 025 Germany */ 1094e45e36eeSmiod KB_IT, /* 026 Italy */ 1095e45e36eeSmiod KB_NL, /* 027 The Netherlands */ 1096e45e36eeSmiod KB_NO, /* 028 Norway */ 1097e45e36eeSmiod KB_PT, /* 029 Portugal */ 1098e45e36eeSmiod KB_ES, /* 02a Spain */ 1099e45e36eeSmiod KB_SV, /* 02b Sweden */ 1100e45e36eeSmiod KB_SF, /* 02c Switzerland/French */ 1101e45e36eeSmiod KB_SG, /* 02d Switzerland/German */ 1102e45e36eeSmiod KB_UK, /* 02e Great Britain */ 1103e45e36eeSmiod -1, /* 02f Korea */ 1104e45e36eeSmiod -1, /* 030 Taiwan */ 1105e45e36eeSmiod KB_JP, /* 031 Japan */ 1106e45e36eeSmiod -1, /* 032 Canada/French */ 1107e45e36eeSmiod -1, /* 033 Hungary */ 1108e45e36eeSmiod -1, /* 034 Poland */ 1109e45e36eeSmiod -1, /* 035 Czech */ 1110e45e36eeSmiod -1, /* 036 Russia */ 1111e45e36eeSmiod -1, /* 037 Latvia */ 1112e45e36eeSmiod -1, /* 038 Turkey-Q5 */ 1113e45e36eeSmiod -1, /* 039 Greece */ 1114e45e36eeSmiod -1, /* 03a Arabic */ 1115e45e36eeSmiod -1, /* 03b Lithuania */ 1116e45e36eeSmiod -1, /* 03c Belgium */ 1117e45e36eeSmiod -1, /* 03d unaffected */ 1118e45e36eeSmiod -1, /* 03e Turkey-F5 */ 1119e45e36eeSmiod -1, /* 03f Canada/French */ 1120e45e36eeSmiod 1121e45e36eeSmiod /* Not affected range */ 1122e45e36eeSmiod -1, /* 040 */ 1123e45e36eeSmiod -1, /* 041 */ 1124e45e36eeSmiod -1, /* 042 */ 1125e45e36eeSmiod -1, /* 043 */ 1126e45e36eeSmiod -1, /* 044 */ 1127e45e36eeSmiod -1, /* 045 */ 1128e45e36eeSmiod -1, /* 046 */ 1129e45e36eeSmiod -1, /* 047 */ 1130e45e36eeSmiod -1, /* 048 */ 1131e45e36eeSmiod -1, /* 049 */ 1132e45e36eeSmiod -1, /* 04a */ 1133e45e36eeSmiod -1, /* 04b */ 1134e45e36eeSmiod -1, /* 04c */ 1135e45e36eeSmiod -1, /* 04d */ 1136e45e36eeSmiod -1, /* 04e */ 1137e45e36eeSmiod -1, /* 04f */ 1138e45e36eeSmiod 1139e45e36eeSmiod /* ``Compact-1'' layouts */ 1140e45e36eeSmiod KB_US, /* 050 USA */ 1141e45e36eeSmiod KB_US, /* 051 UNIX */ 1142e45e36eeSmiod KB_FR, /* 052 France */ 1143e45e36eeSmiod KB_DK, /* 053 Denmark */ 1144e45e36eeSmiod KB_DE, /* 054 Germany */ 1145e45e36eeSmiod KB_IT, /* 055 Italy */ 1146e45e36eeSmiod KB_NL, /* 056 The Netherlands */ 1147e45e36eeSmiod KB_NO, /* 057 Norway */ 1148e45e36eeSmiod KB_PT, /* 058 Portugal */ 1149e45e36eeSmiod KB_ES, /* 059 Spain */ 1150e45e36eeSmiod KB_SV, /* 05a Sweden */ 1151e45e36eeSmiod KB_SF, /* 05b Switzerland/French */ 1152e45e36eeSmiod KB_SG, /* 05c Switzerland/German */ 1153e45e36eeSmiod KB_UK, /* 05d Great Britain */ 1154e45e36eeSmiod -1, /* 05e Korea */ 1155e45e36eeSmiod -1, /* 05f Taiwan */ 1156e45e36eeSmiod KB_JP, /* 060 Japan */ 1157e45e36eeSmiod -1, /* 061 Canada/French */ 1158e45e36eeSmiod }; 1159e45e36eeSmiod 1160e45e36eeSmiod struct wskbd_mapdata sunkbd_keymapdata = { 1161e45e36eeSmiod sunkbd_keydesctab, 1162e45e36eeSmiod #ifdef SUNKBD_LAYOUT 1163e45e36eeSmiod SUNKBD_LAYOUT, 1164e45e36eeSmiod #else 1165c8b0a2fbSmiod KB_US | KB_DEFAULT, 1166e45e36eeSmiod #endif 1167e45e36eeSmiod }; 1168e45e36eeSmiod 1169e45e36eeSmiod struct wskbd_mapdata sunkbd5_keymapdata = { 1170e45e36eeSmiod sunkbd5_keydesctab, 1171e45e36eeSmiod #ifdef SUNKBD5_LAYOUT 1172e45e36eeSmiod SUNKBD5_LAYOUT, 1173e45e36eeSmiod #else 1174c8b0a2fbSmiod KB_US | KB_DEFAULT, 1175e45e36eeSmiod #endif 1176e45e36eeSmiod }; 1177