bsd_KbdMap.c revision ee3138f1
1/* $XFree86$ */ 2 3/* 4 * Slightly modified xf86KbdBSD.c which is 5 * 6 * Derived from xf86Kbd.c by S_ren Schmidt (sos@login.dkuug.dk) 7 * which is Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany. 8 * and from xf86KbdCODrv.c by Holger Veit 9 */ 10 11#ifdef HAVE_CONFIG_H 12#include "config.h" 13#endif 14 15#include <X11/X.h> 16#include <X11/Xmd.h> 17#include "input.h" 18#include "scrnintstr.h" 19 20#include "compiler.h" 21 22#include "xf86.h" 23#include "xf86Priv.h" 24#include "xf86_OSlib.h" 25#include "xf86Xinput.h" 26#include "xf86OSKbd.h" 27#include "atKeynames.h" 28#include "xf86Keymap.h" 29#include "bsd_kbd.h" 30 31#if (defined(SYSCONS_SUPPORT) || defined(PCVT_SUPPORT)) && defined(GIO_KEYMAP) 32#define KD_GET_ENTRY(i,n) \ 33 eascii_to_x[((keymap.key[i].spcl << (n+1)) & 0x100) + keymap.key[i].map[n]] 34 35static unsigned char remap[NUM_KEYCODES] = { 36 0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00 - 0x07 */ 37 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08 - 0x0f */ 38 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10 - 0x17 */ 39 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18 - 0x1f */ 40 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20 - 0x27 */ 41 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28 - 0x2f */ 42 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0, /* 0x30 - 0x37 */ 43 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38 - 0x3f */ 44 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0, /* 0x40 - 0x47 */ 45 0, 0, 0, 0, 0, 0, 0, 0, /* 0x48 - 0x4f */ 46 0, 0, 0, 0, 0, 0, 0x56, 0x57, /* 0x50 - 0x57 */ 47 0x58, 0, 0, 0, 0, 0, 0, 0, /* 0x58 - 0x5f */ 48 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 - 0x67 */ 49 0, 0, 0, 0, 0, 0, 0, 0, /* 0x68 - 0x6f */ 50 0, 0, 0x69, 0x65, 0, 0, 0, 0, /* 0x70 - 0x77 */ 51 0, 0, 0, 0, 0, 0, 0, 0, /* 0x78 - 0x7f */ 52}; 53 54/* This table assumes the ibm code page 437 coding for characters 55 * > 0x80. They are returned in this form by PCVT */ 56static KeySym eascii_to_x[512] = { 57 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 58 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 59 XK_BackSpace, XK_Tab, XK_Linefeed, NoSymbol, 60 NoSymbol, XK_Return, NoSymbol, NoSymbol, 61 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 62 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 63 NoSymbol, NoSymbol, NoSymbol, XK_Escape, 64 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 65 XK_space, XK_exclam, XK_quotedbl, XK_numbersign, 66 XK_dollar, XK_percent, XK_ampersand, XK_apostrophe, 67 XK_parenleft, XK_parenright, XK_asterisk, XK_plus, 68 XK_comma, XK_minus, XK_period, XK_slash, 69 XK_0, XK_1, XK_2, XK_3, 70 XK_4, XK_5, XK_6, XK_7, 71 XK_8, XK_9, XK_colon, XK_semicolon, 72 XK_less, XK_equal, XK_greater, XK_question, 73 XK_at, XK_A, XK_B, XK_C, 74 XK_D, XK_E, XK_F, XK_G, 75 XK_H, XK_I, XK_J, XK_K, 76 XK_L, XK_M, XK_N, XK_O, 77 XK_P, XK_Q, XK_R, XK_S, 78 XK_T, XK_U, XK_V, XK_W, 79 XK_X, XK_Y, XK_Z, XK_bracketleft, 80 XK_backslash, XK_bracketright,XK_asciicircum, XK_underscore, 81 XK_grave, XK_a, XK_b, XK_c, 82 XK_d, XK_e, XK_f, XK_g, 83 XK_h, XK_i, XK_j, XK_k, 84 XK_l, XK_m, XK_n, XK_o, 85 XK_p, XK_q, XK_r, XK_s, 86 XK_t, XK_u, XK_v, XK_w, 87 XK_x, XK_y, XK_z, XK_braceleft, 88 XK_bar, XK_braceright, XK_asciitilde, XK_Delete, 89 XK_Ccedilla, XK_udiaeresis, XK_eacute, XK_acircumflex, 90 XK_adiaeresis, XK_agrave, XK_aring, XK_ccedilla, 91 XK_ecircumflex, XK_ediaeresis, XK_egrave, XK_idiaeresis, 92 XK_icircumflex, XK_igrave, XK_Adiaeresis, XK_Aring, 93 XK_Eacute, XK_ae, XK_AE, XK_ocircumflex, 94 XK_odiaeresis, XK_ograve, XK_ucircumflex, XK_ugrave, 95 XK_ydiaeresis, XK_Odiaeresis, XK_Udiaeresis, XK_cent, 96 XK_sterling, XK_yen, XK_paragraph, XK_section, 97 XK_aacute, XK_iacute, XK_oacute, XK_uacute, 98 XK_ntilde, XK_Ntilde, XK_ordfeminine, XK_masculine, 99 XK_questiondown,XK_hyphen, XK_notsign, XK_onehalf, 100 XK_onequarter, XK_exclamdown, XK_guillemotleft,XK_guillemotright, 101 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 102 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 103 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 104 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 105 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 106 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 107 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 108 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 109 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 110 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 111 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 112 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 113 XK_Greek_alpha, XK_ssharp, XK_Greek_GAMMA, XK_Greek_pi, 114 XK_Greek_SIGMA, XK_Greek_sigma, XK_mu, XK_Greek_tau, 115 XK_Greek_PHI, XK_Greek_THETA, XK_Greek_OMEGA, XK_Greek_delta, 116 XK_infinity, XK_Ooblique, XK_Greek_epsilon, XK_intersection, 117 XK_identical, XK_plusminus, XK_greaterthanequal, XK_lessthanequal, 118 XK_topintegral, XK_botintegral, XK_division, XK_similarequal, 119 XK_degree, NoSymbol, NoSymbol, XK_radical, 120 XK_Greek_eta, XK_twosuperior, XK_periodcentered, NoSymbol, 121 122 /* 123 * special marked entries (256 + x) 124 */ 125 126 /* This has been checked against what syscons actually does */ 127 NoSymbol, NoSymbol, XK_Shift_L, XK_Shift_R, 128 XK_Caps_Lock, XK_Num_Lock, XK_Scroll_Lock, XK_Alt_L, 129 XK_ISO_Left_Tab,XK_Control_L, NoSymbol, NoSymbol, 130 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 131 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 132 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 133 NoSymbol, NoSymbol, NoSymbol, XK_F1, 134 XK_F2, XK_F3, XK_F4, XK_F5, 135 XK_F6, XK_F7, XK_F8, XK_F9, 136 XK_F10, XK_F11, XK_F12, NoSymbol, 137 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 138 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 139 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 140 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 141 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 142 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 143 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 144 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 145 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 146 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 147 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 148 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 149 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 150 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 151 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 152 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 153 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 154 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 155 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 156 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 157 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 158 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 159 XK_Control_R, XK_Alt_R, NoSymbol, NoSymbol, 160 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 161 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 162 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 163 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 164 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 165 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 166 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 167 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 168 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 169 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 170 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 171 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 172 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 173 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 174 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 175 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 176 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 177 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 178 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 179 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 180 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 181 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 182 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 183 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 184 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 185 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 186 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 187 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 188 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 189 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 190 NoSymbol, NoSymbol, NoSymbol, NoSymbol 191}; 192 193#ifdef __OpenBSD__ 194/* don't mark AltR and CtrlR for remapping, since they 195 * cannot be remapped by pccons */ 196static unsigned char pccons_remap[128] = { 197 0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00 - 0x07 */ 198 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08 - 0x0f */ 199 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10 - 0x17 */ 200 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18 - 0x1f */ 201 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20 - 0x27 */ 202 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28 - 0x2f */ 203 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0, /* 0x30 - 0x37 */ 204 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38 - 0x3f */ 205 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0, /* 0x40 - 0x47 */ 206 0, 0, 0, 0, 0, 0, 0, 0, /* 0x48 - 0x4f */ 207 0, 0, 0, 0, 0, 0, 0x56, 0x57, /* 0x50 - 0x57 */ 208 0x58, 0, 0, 0, 0, 0, 0, 0, /* 0x58 - 0x5f */ 209 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 - 0x67 */ 210 0, 0, 0, 0, 0, 0, 0, 0, /* 0x68 - 0x6f */ 211 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 - 0x77 */ 212 0, 0, 0, 0, 0, 0, 0, 0, /* 0x78 - 0x7f */ 213}; 214 215/* This table assumes an iso8859_1 encoding for the characters 216 * > 80, as returned by pccons */ 217static KeySym latin1_to_x[256] = { 218 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 219 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 220 XK_BackSpace, XK_Tab, XK_Linefeed, NoSymbol, 221 NoSymbol, XK_Return, NoSymbol, NoSymbol, 222 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 223 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 224 NoSymbol, NoSymbol, NoSymbol, XK_Escape, 225 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 226 XK_space, XK_exclam, XK_quotedbl, XK_numbersign, 227 XK_dollar, XK_percent, XK_ampersand, XK_apostrophe, 228 XK_parenleft, XK_parenright, XK_asterisk, XK_plus, 229 XK_comma, XK_minus, XK_period, XK_slash, 230 XK_0, XK_1, XK_2, XK_3, 231 XK_4, XK_5, XK_6, XK_7, 232 XK_8, XK_9, XK_colon, XK_semicolon, 233 XK_less, XK_equal, XK_greater, XK_question, 234 XK_at, XK_A, XK_B, XK_C, 235 XK_D, XK_E, XK_F, XK_G, 236 XK_H, XK_I, XK_J, XK_K, 237 XK_L, XK_M, XK_N, XK_O, 238 XK_P, XK_Q, XK_R, XK_S, 239 XK_T, XK_U, XK_V, XK_W, 240 XK_X, XK_Y, XK_Z, XK_bracketleft, 241 XK_backslash, XK_bracketright,XK_asciicircum, XK_underscore, 242 XK_grave, XK_a, XK_b, XK_c, 243 XK_d, XK_e, XK_f, XK_g, 244 XK_h, XK_i, XK_j, XK_k, 245 XK_l, XK_m, XK_n, XK_o, 246 XK_p, XK_q, XK_r, XK_s, 247 XK_t, XK_u, XK_v, XK_w, 248 XK_x, XK_y, XK_z, XK_braceleft, 249 XK_bar, XK_braceright, XK_asciitilde, XK_Delete, 250 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 251 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 252 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 253 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 254 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 255 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 256 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 257 NoSymbol, NoSymbol, NoSymbol, NoSymbol, 258 XK_nobreakspace,XK_exclamdown, XK_cent, XK_sterling, 259 XK_currency, XK_yen, XK_brokenbar, XK_section, 260 XK_diaeresis, XK_copyright, XK_ordfeminine, XK_guillemotleft, 261 XK_notsign, XK_hyphen, XK_registered, XK_macron, 262 XK_degree, XK_plusminus, XK_twosuperior, XK_threesuperior, 263 XK_acute, XK_mu, XK_paragraph, XK_periodcentered, 264 XK_cedilla, XK_onesuperior, XK_masculine, XK_guillemotright, 265 XK_onequarter, XK_onehalf, XK_threequarters,XK_questiondown, 266 XK_Agrave, XK_Aacute, XK_Acircumflex, XK_Atilde, 267 XK_Adiaeresis, XK_Aring, XK_AE, XK_Ccedilla, 268 XK_Egrave, XK_Eacute, XK_Ecircumflex, XK_Ediaeresis, 269 XK_Igrave, XK_Iacute, XK_Icircumflex, XK_Idiaeresis, 270 XK_ETH, XK_Ntilde, XK_Ograve, XK_Oacute, 271 XK_Ocircumflex, XK_Otilde, XK_Odiaeresis, XK_multiply, 272 XK_Ooblique, XK_Ugrave, XK_Uacute, XK_Ucircumflex, 273 XK_Udiaeresis, XK_Yacute, XK_THORN, XK_ssharp, 274 XK_agrave, XK_aacute, XK_acircumflex, XK_atilde, 275 XK_adiaeresis, XK_aring, XK_ae, XK_ccedilla, 276 XK_egrave, XK_eacute, XK_ecircumflex, XK_ediaeresis, 277 XK_igrave, XK_iacute, XK_icircumflex, XK_idiaeresis, 278 XK_eth, XK_ntilde, XK_ograve, XK_oacute, 279 XK_ocircumflex, XK_otilde, XK_odiaeresis, XK_division, 280 XK_oslash, XK_ugrave, XK_uacute, XK_ucircumflex, 281 XK_udiaeresis, XK_yacute, XK_thorn, XK_ydiaeresis 282 }; 283#endif 284 285#ifdef SYSCONS_SUPPORT 286static 287unsigned char sysconsCODEMap[] = { 288 KEY_KP_Enter, KEY_RCtrl, KEY_KP_Divide, KEY_Print, 289 KEY_AltLang, KEY_KP_7, KEY_KP_8, KEY_KP_9, 290 KEY_KP_4, KEY_KP_6, KEY_KP_1, KEY_KP_2, 291 KEY_KP_3, KEY_KP_0, KEY_KP_Decimal, KEY_Pause, 292 KEY_LMeta, KEY_RMeta, KEY_Menu, KEY_Break 293}; 294static 295TransMapRec sysconsCODE = { 296 0x59, 297 0x6d, 298 sysconsCODEMap 299}; 300#endif 301#endif /* SYSCONS_SUPPORT || PCVT_SUPPORT */ 302 303#ifdef WSCONS_SUPPORT 304 305static CARD8 wsUsbMap[] = { 306 /* 0 */ KEY_NOTUSED, 307 /* 1 */ KEY_NOTUSED, 308 /* 2 */ KEY_NOTUSED, 309 /* 3 */ KEY_NOTUSED, 310 /* 4 */ KEY_A, 311 /* 5 */ KEY_B, 312 /* 6 */ KEY_C, 313 /* 7 */ KEY_D, 314 /* 8 */ KEY_E, 315 /* 9 */ KEY_F, 316 /* 10 */ KEY_G, 317 /* 11 */ KEY_H, 318 /* 12 */ KEY_I, 319 /* 13 */ KEY_J, 320 /* 14 */ KEY_K, 321 /* 15 */ KEY_L, 322 /* 16 */ KEY_M, 323 /* 17 */ KEY_N, 324 /* 18 */ KEY_O, 325 /* 19 */ KEY_P, 326 /* 20 */ KEY_Q, 327 /* 21 */ KEY_R, 328 /* 22 */ KEY_S, 329 /* 23 */ KEY_T, 330 /* 24 */ KEY_U, 331 /* 25 */ KEY_V, 332 /* 26 */ KEY_W, 333 /* 27 */ KEY_X, 334 /* 28 */ KEY_Y, 335 /* 29 */ KEY_Z, 336 /* 30 */ KEY_1, /* 1 !*/ 337 /* 31 */ KEY_2, /* 2 @ */ 338 /* 32 */ KEY_3, /* 3 # */ 339 /* 33 */ KEY_4, /* 4 $ */ 340 /* 34 */ KEY_5, /* 5 % */ 341 /* 35 */ KEY_6, /* 6 ^ */ 342 /* 36 */ KEY_7, /* 7 & */ 343 /* 37 */ KEY_8, /* 8 * */ 344 /* 38 */ KEY_9, /* 9 ( */ 345 /* 39 */ KEY_0, /* 0 ) */ 346 /* 40 */ KEY_Enter, /* Return */ 347 /* 41 */ KEY_Escape, /* Escape */ 348 /* 42 */ KEY_BackSpace, /* Backspace Delete */ 349 /* 43 */ KEY_Tab, /* Tab */ 350 /* 44 */ KEY_Space, /* Space */ 351 /* 45 */ KEY_Minus, /* - _ */ 352 /* 46 */ KEY_Equal, /* = + */ 353 /* 47 */ KEY_LBrace, /* [ { */ 354 /* 48 */ KEY_RBrace, /* ] } */ 355 /* 49 */ KEY_BSlash, /* \ | */ 356 /* 50 */ KEY_BSlash2, /* \ _ # ~ on some keyboards */ 357 /* 51 */ KEY_SemiColon, /* ; : */ 358 /* 52 */ KEY_Quote, /* ' " */ 359 /* 53 */ KEY_Tilde, /* ` ~ */ 360 /* 54 */ KEY_Comma, /* , < */ 361 /* 55 */ KEY_Period, /* . > */ 362 /* 56 */ KEY_Slash, /* / ? */ 363 /* 57 */ KEY_CapsLock, /* Caps Lock */ 364 /* 58 */ KEY_F1, /* F1 */ 365 /* 59 */ KEY_F2, /* F2 */ 366 /* 60 */ KEY_F3, /* F3 */ 367 /* 61 */ KEY_F4, /* F4 */ 368 /* 62 */ KEY_F5, /* F5 */ 369 /* 63 */ KEY_F6, /* F6 */ 370 /* 64 */ KEY_F7, /* F7 */ 371 /* 65 */ KEY_F8, /* F8 */ 372 /* 66 */ KEY_F9, /* F9 */ 373 /* 67 */ KEY_F10, /* F10 */ 374 /* 68 */ KEY_F11, /* F11 */ 375 /* 69 */ KEY_F12, /* F12 */ 376 /* 70 */ KEY_Print, /* PrintScrn SysReq */ 377 /* 71 */ KEY_ScrollLock, /* Scroll Lock */ 378 /* 72 */ KEY_Pause, /* Pause Break */ 379 /* 73 */ KEY_Insert, /* Insert XXX Help on some Mac Keyboards */ 380 /* 74 */ KEY_Home, /* Home */ 381 /* 75 */ KEY_PgUp, /* Page Up */ 382 /* 76 */ KEY_Delete, /* Delete */ 383 /* 77 */ KEY_End, /* End */ 384 /* 78 */ KEY_PgDown, /* Page Down */ 385 /* 79 */ KEY_Right, /* Right Arrow */ 386 /* 80 */ KEY_Left, /* Left Arrow */ 387 /* 81 */ KEY_Down, /* Down Arrow */ 388 /* 82 */ KEY_Up, /* Up Arrow */ 389 /* 83 */ KEY_NumLock, /* Num Lock */ 390 /* 84 */ KEY_KP_Divide, /* Keypad / */ 391 /* 85 */ KEY_KP_Multiply, /* Keypad * */ 392 /* 86 */ KEY_KP_Minus, /* Keypad - */ 393 /* 87 */ KEY_KP_Plus, /* Keypad + */ 394 /* 88 */ KEY_KP_Enter, /* Keypad Enter */ 395 /* 89 */ KEY_KP_1, /* Keypad 1 End */ 396 /* 90 */ KEY_KP_2, /* Keypad 2 Down */ 397 /* 91 */ KEY_KP_3, /* Keypad 3 Pg Down */ 398 /* 92 */ KEY_KP_4, /* Keypad 4 Left */ 399 /* 93 */ KEY_KP_5, /* Keypad 5 */ 400 /* 94 */ KEY_KP_6, /* Keypad 6 */ 401 /* 95 */ KEY_KP_7, /* Keypad 7 Home */ 402 /* 96 */ KEY_KP_8, /* Keypad 8 Up */ 403 /* 97 */ KEY_KP_9, /* KEypad 9 Pg Up */ 404 /* 98 */ KEY_KP_0, /* Keypad 0 Ins */ 405 /* 99 */ KEY_KP_Decimal, /* Keypad . Del */ 406 /* 100 */ KEY_Less, /* < > on some keyboards */ 407 /* 101 */ KEY_Menu, /* Menu */ 408 /* 102 */ KEY_NOTUSED, 409 /* 103 */ KEY_KP_Equal, /* Keypad = on Mac keyboards */ 410 /* 104 */ KEY_NOTUSED, 411 /* 105 */ KEY_NOTUSED, 412 /* 106 */ KEY_NOTUSED, 413 /* 107 */ KEY_NOTUSED, 414 /* 108 */ KEY_NOTUSED, 415 /* 109 */ KEY_NOTUSED, 416 /* 110 */ KEY_NOTUSED, 417 /* 111 */ KEY_NOTUSED, 418 /* 112 */ KEY_NOTUSED, 419 /* 113 */ KEY_NOTUSED, 420 /* 114 */ KEY_NOTUSED, 421 /* 115 */ KEY_NOTUSED, 422 /* 116 */ KEY_NOTUSED, 423 /* 117 */ KEY_NOTUSED, 424 /* 118 */ KEY_NOTUSED, 425 /* 119 */ KEY_NOTUSED, 426 /* 120 */ KEY_NOTUSED, 427 /* 121 */ KEY_NOTUSED, 428 /* 122 */ KEY_NOTUSED, 429 /* 123 */ KEY_NOTUSED, 430 /* 124 */ KEY_NOTUSED, 431 /* 125 */ KEY_NOTUSED, 432 /* 126 */ KEY_NOTUSED, 433 /* 127 */ KEY_NOTUSED, 434 /* 128 */ KEY_NOTUSED, 435 /* 129 */ KEY_NOTUSED, 436 /* 130 */ KEY_NOTUSED, 437 /* 131 */ KEY_NOTUSED, 438 /* 132 */ KEY_NOTUSED, 439 /* 133 */ KEY_NOTUSED, 440 /* 134 */ KEY_NOTUSED, 441 /* 135 */ KEY_NOTUSED, 442 /* 136 */ KEY_NOTUSED, 443 /* 137 */ KEY_NOTUSED, 444 /* 138 */ KEY_NOTUSED, 445 /* 139 */ KEY_NOTUSED, 446 /* 140 */ KEY_NOTUSED, 447 /* 141 */ KEY_NOTUSED, 448 /* 142 */ KEY_NOTUSED, 449 /* 143 */ KEY_NOTUSED, 450 /* 144 */ KEY_NOTUSED, 451 /* 145 */ KEY_NOTUSED, 452 /* 146 */ KEY_NOTUSED, 453 /* 147 */ KEY_NOTUSED, 454 /* 148 */ KEY_NOTUSED, 455 /* 149 */ KEY_NOTUSED, 456 /* 150 */ KEY_NOTUSED, 457 /* 151 */ KEY_NOTUSED, 458 /* 152 */ KEY_NOTUSED, 459 /* 153 */ KEY_NOTUSED, 460 /* 154 */ KEY_NOTUSED, 461 /* 155 */ KEY_NOTUSED, 462 /* 156 */ KEY_NOTUSED, 463 /* 157 */ KEY_NOTUSED, 464 /* 158 */ KEY_NOTUSED, 465 /* 159 */ KEY_NOTUSED, 466 /* 160 */ KEY_NOTUSED, 467 /* 161 */ KEY_NOTUSED, 468 /* 162 */ KEY_NOTUSED, 469 /* 163 */ KEY_NOTUSED, 470 /* 164 */ KEY_NOTUSED, 471 /* 165 */ KEY_NOTUSED, 472 /* 166 */ KEY_NOTUSED, 473 /* 167 */ KEY_NOTUSED, 474 /* 168 */ KEY_NOTUSED, 475 /* 169 */ KEY_NOTUSED, 476 /* 170 */ KEY_NOTUSED, 477 /* 171 */ KEY_NOTUSED, 478 /* 172 */ KEY_NOTUSED, 479 /* 173 */ KEY_NOTUSED, 480 /* 174 */ KEY_NOTUSED, 481 /* 175 */ KEY_NOTUSED, 482 /* 176 */ KEY_NOTUSED, 483 /* 177 */ KEY_NOTUSED, 484 /* 178 */ KEY_NOTUSED, 485 /* 179 */ KEY_NOTUSED, 486 /* 180 */ KEY_NOTUSED, 487 /* 181 */ KEY_NOTUSED, 488 /* 182 */ KEY_NOTUSED, 489 /* 183 */ KEY_NOTUSED, 490 /* 184 */ KEY_NOTUSED, 491 /* 185 */ KEY_NOTUSED, 492 /* 186 */ KEY_NOTUSED, 493 /* 187 */ KEY_NOTUSED, 494 /* 188 */ KEY_NOTUSED, 495 /* 189 */ KEY_NOTUSED, 496 /* 190 */ KEY_NOTUSED, 497 /* 191 */ KEY_NOTUSED, 498 /* 192 */ KEY_NOTUSED, 499 /* 193 */ KEY_NOTUSED, 500 /* 194 */ KEY_NOTUSED, 501 /* 195 */ KEY_NOTUSED, 502 /* 196 */ KEY_NOTUSED, 503 /* 197 */ KEY_NOTUSED, 504 /* 198 */ KEY_NOTUSED, 505 /* 199 */ KEY_NOTUSED, 506 /* 200 */ KEY_NOTUSED, 507 /* 201 */ KEY_NOTUSED, 508 /* 202 */ KEY_NOTUSED, 509 /* 203 */ KEY_NOTUSED, 510 /* 204 */ KEY_NOTUSED, 511 /* 205 */ KEY_NOTUSED, 512 /* 206 */ KEY_NOTUSED, 513 /* 207 */ KEY_NOTUSED, 514 /* 208 */ KEY_NOTUSED, 515 /* 209 */ KEY_NOTUSED, 516 /* 210 */ KEY_NOTUSED, 517 /* 211 */ KEY_NOTUSED, 518 /* 212 */ KEY_NOTUSED, 519 /* 213 */ KEY_NOTUSED, 520 /* 214 */ KEY_NOTUSED, 521 /* 215 */ KEY_NOTUSED, 522 /* 216 */ KEY_NOTUSED, 523 /* 217 */ KEY_NOTUSED, 524 /* 218 */ KEY_NOTUSED, 525 /* 219 */ KEY_NOTUSED, 526 /* 220 */ KEY_NOTUSED, 527 /* 221 */ KEY_NOTUSED, 528 /* 222 */ KEY_NOTUSED, 529 /* 223 */ KEY_NOTUSED, 530 /* 224 */ KEY_LCtrl, /* Left Control */ 531 /* 225 */ KEY_ShiftL, /* Left Shift */ 532 /* 226 */ KEY_Alt, /* Left Alt */ 533 /* 227 */ KEY_LMeta, /* Left Meta */ 534 /* 228 */ KEY_RCtrl, /* Right Control */ 535 /* 229 */ KEY_ShiftR, /* Right Shift */ 536 /* 230 */ KEY_AltLang, /* Right Alt, AKA AltGr */ 537 /* 231 */ KEY_LMeta, /* Right Meta XXX */ 538}; 539#define WS_USB_MAP_SIZE (sizeof(wsUsbMap)/sizeof(unsigned char)) 540 541static 542TransMapRec wsUsb = { 543 0, 544 WS_USB_MAP_SIZE, 545 wsUsbMap 546}; 547 548/* Map for adb keyboards */ 549static CARD8 wsAdbMap[] = { 550 /* 0 */ KEY_A, 551 /* 1 */ KEY_S, 552 /* 2 */ KEY_D, 553 /* 3 */ KEY_F, 554 /* 4 */ KEY_H, 555 /* 5 */ KEY_G, 556 /* 6 */ KEY_Z, 557 /* 7 */ KEY_X, 558 /* 8 */ KEY_C, 559 /* 9 */ KEY_V, 560 /* 10 */ KEY_UNKNOWN, /* @ # on french keyboards */ 561 /* 11 */ KEY_B, 562 /* 12 */ KEY_Q, 563 /* 13 */ KEY_W, 564 /* 14 */ KEY_E, 565 /* 15 */ KEY_R, 566 /* 16 */ KEY_Y, 567 /* 17 */ KEY_T, 568 /* 18 */ KEY_1, 569 /* 19 */ KEY_2, 570 /* 20 */ KEY_3, 571 /* 21 */ KEY_4, 572 /* 22 */ KEY_6, 573 /* 23 */ KEY_5, 574 /* 24 */ KEY_Equal, 575 /* 25 */ KEY_9, 576 /* 26 */ KEY_7, 577 /* 27 */ KEY_Minus, 578 /* 28 */ KEY_8, 579 /* 29 */ KEY_0, 580 /* 30 */ KEY_RBrace, 581 /* 31 */ KEY_O, 582 /* 32 */ KEY_U, 583 /* 33 */ KEY_LBrace, 584 /* 34 */ KEY_I, 585 /* 35 */ KEY_P, 586 /* 36 */ KEY_Enter, 587 /* 37 */ KEY_L, 588 /* 38 */ KEY_J, 589 /* 39 */ KEY_Quote, 590 /* 40 */ KEY_K, 591 /* 41 */ KEY_SemiColon, 592 /* 42 */ KEY_BSlash, 593 /* 43 */ KEY_Comma, 594 /* 44 */ KEY_Slash, 595 /* 45 */ KEY_N, 596 /* 46 */ KEY_M, 597 /* 47 */ KEY_Period, 598 /* 48 */ KEY_Tab, 599 /* 49 */ KEY_Space, 600 /* 50 */ KEY_Tilde, 601 /* 51 */ KEY_Delete, 602 /* 52 */ KEY_AltLang, 603 /* 53 */ KEY_Escape, 604 /* 54 */ KEY_LCtrl, 605 /* 55 */ KEY_Alt, 606 /* 56 */ KEY_ShiftL, 607 /* 57 */ KEY_CapsLock, 608 /* 58 */ KEY_LMeta, 609 /* 59 */ KEY_Left, 610 /* 60 */ KEY_Right, 611 /* 61 */ KEY_Down, 612 /* 62 */ KEY_Up, 613 /* 63 */ KEY_UNKNOWN, /* Fn */ 614 /* 64 */ KEY_NOTUSED, 615 /* 65 */ KEY_KP_Decimal, 616 /* 66 */ KEY_NOTUSED, 617 /* 67 */ KEY_KP_Multiply, 618 /* 68 */ KEY_NOTUSED, 619 /* 69 */ KEY_KP_Plus, 620 /* 70 */ KEY_NOTUSED, 621 /* 71 */ KEY_UNKNOWN, /* Clear */ 622 /* 72 */ KEY_NOTUSED, 623 /* 73 */ KEY_NOTUSED, 624 /* 74 */ KEY_NOTUSED, 625 /* 75 */ KEY_KP_Divide, 626 /* 76 */ KEY_KP_Enter, 627 /* 77 */ KEY_NOTUSED, 628 /* 78 */ KEY_KP_Minus, 629 /* 79 */ KEY_NOTUSED, 630 /* 80 */ KEY_NOTUSED, 631 /* 81 */ KEY_KP_Equal, /* Keypad = */ 632 /* 82 */ KEY_KP_0, 633 /* 83 */ KEY_KP_1, 634 /* 84 */ KEY_KP_2, 635 /* 85 */ KEY_KP_3, 636 /* 86 */ KEY_KP_4, 637 /* 87 */ KEY_KP_5, 638 /* 88 */ KEY_KP_6, 639 /* 89 */ KEY_KP_7, 640 /* 90 */ KEY_NOTUSED, 641 /* 91 */ KEY_KP_8, 642 /* 92 */ KEY_KP_9, 643 /* 93 */ KEY_NOTUSED, 644 /* 94 */ KEY_NOTUSED, 645 /* 95 */ KEY_UNKNOWN, /* Keypad , */ 646 /* 96 */ KEY_F5, 647 /* 97 */ KEY_F6, 648 /* 98 */ KEY_F7, 649 /* 99 */ KEY_F3, 650 /* 100 */ KEY_F8, 651 /* 101 */ KEY_F9, 652 /* 102 */ KEY_NOTUSED, 653 /* 103 */ KEY_F11, 654 /* 104 */ KEY_NOTUSED, 655 /* 105 */ KEY_NOTUSED, 656 /* 106 */ KEY_KP_Enter, 657 /* 107 */ KEY_NOTUSED, 658 /* 108 */ KEY_NOTUSED, 659 /* 109 */ KEY_F10, 660 /* 110 */ KEY_NOTUSED, 661 /* 111 */ KEY_F12, 662 /* 112 */ KEY_NOTUSED, 663 /* 113 */ KEY_NOTUSED, 664 /* 114 */ KEY_NOTUSED, 665 /* 115 */ KEY_Home, 666 /* 116 */ KEY_PgUp, 667 /* 117 */ KEY_NOTUSED, 668 /* 118 */ KEY_F4, 669 /* 119 */ KEY_End, 670 /* 120 */ KEY_F2, 671 /* 121 */ KEY_PgDown, 672 /* 122 */ KEY_F1 673}; 674#define WS_ADB_MAP_SIZE (sizeof(wsAdbMap)/sizeof(unsigned char)) 675 676static 677TransMapRec wsAdb = { 678 0, 679 WS_ADB_MAP_SIZE, 680 wsAdbMap 681}; 682 683static CARD8 wsSunMap[] = { 684 /* 0x00 */ KEY_Help, 685 /* 0x01 */ KEY_L1, /* stop */ 686 /* 0x02 */ KEY_AudioLower, /* BrightnessDown / S-VolumeDown */ 687 /* 0x03 */ KEY_L2, /* again */ 688 /* 0x04 */ KEY_AudioRaise, /* BridgtnessUp / S-VolumeUp */ 689 /* 0x05 */ KEY_F1, 690 /* 0x06 */ KEY_F2, 691 /* 0x07 */ KEY_F10, 692 /* 0x08 */ KEY_F3, 693 /* 0x09 */ KEY_F11, 694 /* 0x0a */ KEY_F4, 695 /* 0x0b */ KEY_F12, 696 /* 0x0c */ KEY_F5, 697 /* 0x0d */ KEY_AltLang, 698 /* 0x0e */ KEY_F6, 699 /* 0x0f */ KEY_NOTUSED, 700 /* 0x10 */ KEY_F7, 701 /* 0x11 */ KEY_F8, 702 /* 0x12 */ KEY_F9, 703 /* 0x13 */ KEY_Alt, 704 /* 0x14 */ KEY_Up, 705 /* 0x15 */ KEY_Pause, 706 /* 0x16 */ KEY_Print, 707 /* 0x17 */ KEY_ScrollLock, 708 /* 0x18 */ KEY_Left, 709 /* 0x19 */ KEY_L3, /* props */ 710 /* 0x1a */ KEY_L4, /* undo */ 711 /* 0x1b */ KEY_Down, 712 /* 0x1c */ KEY_Right, 713 /* 0x1d */ KEY_Escape, 714 /* 0x1e */ KEY_1, 715 /* 0x1f */ KEY_2, 716 /* 0x20 */ KEY_3, 717 /* 0x21 */ KEY_4, 718 /* 0x22 */ KEY_5, 719 /* 0x23 */ KEY_6, 720 /* 0x24 */ KEY_7, 721 /* 0x25 */ KEY_8, 722 /* 0x26 */ KEY_9, 723 /* 0x27 */ KEY_0, 724 /* 0x28 */ KEY_Minus, 725 /* 0x29 */ KEY_Equal, 726 /* 0x2a */ KEY_Tilde, 727 /* 0x2b */ KEY_BackSpace, 728 /* 0x2c */ KEY_Insert, 729 /* 0x2d */ KEY_Mute, /* Audio Mute */ 730 /* 0x2e */ KEY_KP_Divide, 731 /* 0x2f */ KEY_KP_Multiply, 732 /* 0x30 */ KEY_NOTUSED, 733 /* 0x31 */ KEY_L5, /* front */ 734 /* 0x32 */ KEY_KP_Decimal, 735 /* 0x33 */ KEY_L6, /* copy */ 736 /* 0x34 */ KEY_Home, 737 /* 0x35 */ KEY_Tab, 738 /* 0x36 */ KEY_Q, 739 /* 0x37 */ KEY_W, 740 /* 0x38 */ KEY_E, 741 /* 0x39 */ KEY_R, 742 /* 0x3a */ KEY_T, 743 /* 0x3b */ KEY_Y, 744 /* 0x3c */ KEY_U, 745 /* 0x3d */ KEY_I, 746 /* 0x3e */ KEY_O, 747 /* 0x3f */ KEY_P, 748 /* 0x40 */ KEY_LBrace, 749 /* 0x41 */ KEY_RBrace, 750 /* 0x42 */ KEY_Delete, 751 /* 0x43 */ KEY_Menu, /* compose */ 752 /* 0x44 */ KEY_KP_7, 753 /* 0x45 */ KEY_KP_8, 754 /* 0x46 */ KEY_KP_9, 755 /* 0x47 */ KEY_KP_Minus, 756 /* 0x48 */ KEY_L7, /* open */ 757 /* 0x49 */ KEY_L8, /* paste */ 758 /* 0x4a */ KEY_End, 759 /* 0x4b */ KEY_NOTUSED, 760 /* 0x4c */ KEY_LCtrl, 761 /* 0x4d */ KEY_A, 762 /* 0x4e */ KEY_S, 763 /* 0x4f */ KEY_D, 764 /* 0x50 */ KEY_F, 765 /* 0x51 */ KEY_G, 766 /* 0x52 */ KEY_H, 767 /* 0x53 */ KEY_J, 768 /* 0x54 */ KEY_K, 769 /* 0x55 */ KEY_L, 770 /* 0x56 */ KEY_SemiColon, 771 /* 0x57 */ KEY_Quote, 772 /* 0x58 */ KEY_BSlash, 773 /* 0x59 */ KEY_Enter, 774 /* 0x5a */ KEY_KP_Enter, 775 /* 0x5b */ KEY_KP_4, 776 /* 0x5c */ KEY_KP_5, 777 /* 0x5d */ KEY_KP_6, 778 /* 0x5e */ KEY_KP_0, 779 /* 0x5f */ KEY_L9, /* find */ 780 /* 0x60 */ KEY_PgUp, 781 /* 0x61 */ KEY_L10, /* cut */ 782 /* 0x62 */ KEY_NumLock, 783 /* 0x63 */ KEY_ShiftL, 784 /* 0x64 */ KEY_Z, 785 /* 0x65 */ KEY_X, 786 /* 0x66 */ KEY_C, 787 /* 0x67 */ KEY_V, 788 /* 0x68 */ KEY_B, 789 /* 0x69 */ KEY_N, 790 /* 0x6a */ KEY_M, 791 /* 0x6b */ KEY_Comma, 792 /* 0x6c */ KEY_Period, 793 /* 0x6d */ KEY_Slash, 794 /* 0x6e */ KEY_ShiftR, 795 /* 0x6f */ KEY_NOTUSED, /* linefeed */ 796 /* 0x70 */ KEY_KP_1, 797 /* 0x71 */ KEY_KP_2, 798 /* 0x72 */ KEY_KP_3, 799 /* 0x73 */ KEY_NOTUSED, 800 /* 0x74 */ KEY_NOTUSED, 801 /* 0x75 */ KEY_NOTUSED, 802 /* 0x76 */ KEY_NOTUSED, /* help */ 803 /* 0x77 */ KEY_CapsLock, 804 /* 0x78 */ KEY_LMeta, 805 /* 0x79 */ KEY_Space, 806 /* 0x7a */ KEY_RMeta, 807 /* 0x7b */ KEY_PgDown, 808 /* 0x7c */ KEY_Less, /* < > on some keyboards */ 809 /* 0x7d */ KEY_KP_Plus, 810 /* 0x7e */ KEY_NOTUSED, 811 /* 0x7f */ KEY_NOTUSED 812}; 813#define WS_SUN_MAP_SIZE (sizeof(wsSunMap)/sizeof(unsigned char)) 814 815static 816TransMapRec wsSun = { 817 0, 818 WS_SUN_MAP_SIZE, 819 wsSunMap 820}; 821 822#endif /* WSCONS_SUPPORT */ 823 824/*ARGSUSED*/ 825 826/* 827 * KbdGetMapping -- 828 * Get the national keyboard mapping. The keyboard type is set, a new map 829 * and the modifiermap is computed. 830 */ 831 832void 833KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap) 834{ 835 KbdDevPtr pKbd = (KbdDevPtr) pInfo->private; 836 KeySym *k; 837 int i; 838 839#ifndef __bsdi__ 840 switch (pKbd->consType) { 841 842#ifdef PCCONS_SUPPORT 843 case PCCONS: 844#if defined(__OpenBSD__) 845 /* 846 * on OpenBSD, the pccons keymap is programmable, too 847 */ 848 { 849 pccons_keymap_t keymap[KB_NUM_KEYS]; 850 if (ioctl(pInfo->fd, CONSOLE_GET_KEYMAP, &keymap) != -1) { 851 for (i = 0; i < KB_NUM_KEYS; i++) 852 if (pccons_remap[i]) { 853 k = map + (pccons_remap[i] << 2); 854 switch (keymap[i].type) { 855 case KB_ASCII: 856 /* For ASCII keys, there is only one char in the keymap */ 857 k[0] = latin1_to_x[(unsigned char)keymap[i].unshift[0]]; 858 k[1] = latin1_to_x[(unsigned char)keymap[i].shift[0]]; 859 k[2] = latin1_to_x[(unsigned char)keymap[i].altgr[0]]; 860 k[3] = latin1_to_x[(unsigned char)keymap[i].shift_altgr[0]]; 861 break; 862 case KB_SCROLL: 863 k[0] = XK_Scroll_Lock; 864 goto special; 865 case KB_NUM: 866 k[0] = XK_Num_Lock; 867 goto special; 868 case KB_CAPS: 869 k[0] = XK_Caps_Lock; 870 goto special; 871 case KB_SHIFT: 872 switch (keymap[i].unshift[0]) { 873 case 1: 874 /* left shift */ 875 k[0] = XK_Shift_L; 876 break; 877 case 2: 878 /* right shift */ 879 k[0] = XK_Shift_R; 880 break; 881 default: 882 k[0] = NoSymbol; 883 } 884 goto special; 885 case KB_CTL: 886 k[0] = XK_Control_L; 887 goto special; 888 case KB_ALT: 889 k[0] = XK_Alt_L; 890 goto special; 891 case KB_FUNC: 892 switch (keymap[i].unshift[2]) { 893 case 'M': 894 k[0] = XK_F1; 895 break; 896 case 'N': 897 k[0] = XK_F2; 898 break; 899 case 'O': 900 k[0] = XK_F3; 901 break; 902 case 'P': 903 k[0] = XK_F4; 904 break; 905 case 'Q': 906 k[0] = XK_F5; 907 break; 908 case 'R': 909 k[0] = XK_F6; 910 break; 911 case 'S': 912 k[0] = XK_F7; 913 break; 914 case 'T': 915 k[0] = XK_F8; 916 break; 917 case 'U': 918 k[0] = XK_F9; 919 break; 920 case 'V': 921 k[0] = XK_F10; 922 break; 923 case 'W': 924 k[0] = XK_F11; 925 break; 926 case 'X': 927 k[0] = XK_F12; 928 break; 929 default: 930 k[0] = NoSymbol; 931 break; 932 } 933 goto special; 934 default: 935 k[0] = NoSymbol; 936 special: 937 k[1] = k[2] = k[3] = NoSymbol; 938 } 939 } 940 } else { 941 ErrorF("Can't read pccons keymap\n"); 942 } 943 } 944#endif /* __OpenBSD__ */ 945 break; 946#endif 947 948/* 949 * XXX wscons has no GIO_KEYMAP 950 */ 951#if (defined (SYSCONS_SUPPORT) || defined (PCVT_SUPPORT)) && defined(GIO_KEYMAP) 952 case SYSCONS: 953 case PCVT: 954 { 955 keymap_t keymap; 956 957 if (ioctl(pInfo->fd, GIO_KEYMAP, &keymap) != -1) { 958 for (i = 0; i < keymap.n_keys && i < NUM_KEYCODES; i++) 959 if (remap[i]) { 960 k = map + (remap[i] << 2); 961 k[0] = KD_GET_ENTRY(i,0); /* non-shifed */ 962 k[1] = KD_GET_ENTRY(i,1); /* shifted */ 963 k[2] = KD_GET_ENTRY(i,4); /* alt */ 964 k[3] = KD_GET_ENTRY(i,5); /* alt - shifted */ 965 if (k[3] == k[2]) k[3] = NoSymbol; 966 if (k[2] == k[1]) k[2] = NoSymbol; 967 if (k[1] == k[0]) k[1] = NoSymbol; 968 if (k[0] == k[2] && k[1] == k[3]) 969 k[2] = k[3] = NoSymbol; 970 } 971 } 972 } 973 break; 974#endif /* SYSCONS || PCVT */ 975 976 } 977#endif /* !bsdi */ 978 979 /* 980 * compute the modifier map 981 */ 982 for (i = 0; i < MAP_LENGTH; i++) 983 pModMap[i] = NoSymbol; /* make sure it is restored */ 984 985 for (k = map, i = MIN_KEYCODE; 986 i < (NUM_KEYCODES + MIN_KEYCODE); 987 i++, k += 4) 988 989 switch(*k) { 990 991 case XK_Shift_L: 992 case XK_Shift_R: 993 pModMap[i] = ShiftMask; 994 break; 995 996 case XK_Control_L: 997 case XK_Control_R: 998 pModMap[i] = ControlMask; 999 break; 1000 1001 case XK_Caps_Lock: 1002 pModMap[i] = LockMask; 1003 break; 1004 1005 case XK_Alt_L: 1006 case XK_Alt_R: 1007 pModMap[i] = AltMask; 1008 break; 1009 1010 case XK_Num_Lock: 1011 pModMap[i] = NumLockMask; 1012 break; 1013 1014 case XK_Scroll_Lock: 1015 pModMap[i] = ScrollLockMask; 1016 break; 1017 1018 /* kana support */ 1019 case XK_Kana_Lock: 1020 case XK_Kana_Shift: 1021 pModMap[i] = KanaMask; 1022 break; 1023 1024 /* alternate toggle for multinational support */ 1025 case XK_Mode_switch: 1026 pModMap[i] = AltLangMask; 1027 break; 1028 1029 } 1030 1031 pKbd->kbdType = 0; 1032 1033 pKeySyms->map = map; 1034 pKeySyms->mapWidth = GLYPHS_PER_KEY; 1035 pKeySyms->minKeyCode = MIN_KEYCODE; 1036 pKeySyms->maxKeyCode = MAX_KEYCODE; 1037 1038 switch(pKbd->consType) { 1039#ifdef SYSCONS_SUPPORT 1040 case SYSCONS: 1041 if (pKbd->CustomKeycodes) 1042 pKbd->scancodeMap = &sysconsCODE; 1043 else 1044 pKbd->RemapScanCode = ATScancode; 1045 break; 1046#endif 1047#if defined(PCCONS_SUPPORT) || defined (PCVT_SUPPORT) 1048 case PCCONS: 1049 case PCVT: 1050 pKbd->RemapScanCode = ATScancode; 1051 break; 1052#endif 1053#ifdef WSCONS_SUPPORT 1054 case WSCONS: 1055 if (!pKbd->isConsole) { 1056 switch (pKbd->wsKbdType) { 1057 case WSKBD_TYPE_PC_XT: 1058 case WSKBD_TYPE_PC_AT: 1059 pKbd->RemapScanCode = ATScancode; 1060 break; 1061 case WSKBD_TYPE_USB: 1062 pKbd->scancodeMap = &wsUsb; 1063 break; 1064#ifdef WSKBD_TYPE_ADB 1065 case WSKBD_TYPE_ADB: 1066 pKbd->scancodeMap = &wsAdb; 1067 break; 1068#endif 1069#ifdef WSKBD_TYPE_SUN 1070#ifdef WSKBD_TYPE_SUN5 1071 case WSKBD_TYPE_SUN5: 1072#endif 1073 case WSKBD_TYPE_SUN: 1074 pKbd->scancodeMap = &wsSun; 1075 break; 1076#endif 1077 default: 1078 ErrorF("Unknown wskbd type %d\n", pKbd->wsKbdType); 1079 } 1080 } else { 1081 pKbd->RemapScanCode = ATScancode; 1082 } 1083 break; 1084#endif 1085 } 1086 return; 1087} 1088