1 /* $NetBSD: kbd_tables.c,v 1.3 1996/12/17 20:46:13 gwr Exp $ */ 2 3 /* 4 * Copyright (c) 1996 Gordon W. Ross 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. The name of the author may not be used to endorse or promote products 16 * derived from this software without specific prior written permission. 17 * 4. All advertising materials mentioning features or use of this software 18 * must display the following acknowledgement: 19 * This product includes software developed by Gordon Ross 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 /* 34 * Keyboard translation tables. (See kbd_tables.h) 35 */ 36 37 #include <sys/types.h> 38 39 #define _KERNEL 1 /* XXX */ 40 #include "kbd_tables.h" 41 42 43 /* 44 * Toggle keys are not yet supported, but could be with 45 * fairly simple changes. Both CapsLock and NumLock 46 * could be easily done with "post-translation" on the 47 * keysymbols from these tables (WITHOUT new tables). 48 * 49 * The "compose" operations are not implemented. 50 */ 51 52 #define KEYSYM_COMPOSE KEYSYM_NOP 53 54 55 /* 56 * Key release codes are decoded in this map. 57 */ 58 u_short keymap_release[KEYMAP_SIZE] = { 59 /* 0: */ KEYSYM_HOLE, 60 /* 1: L1/Stop */ KEYSYM_NOP, 61 /* 2: */ KEYSYM_HOLE, 62 /* 3: L2/Again */ KEYSYM_NOP, 63 /* 4: */ KEYSYM_HOLE, 64 /* 5: F1 */ KEYSYM_NOP, 65 /* 6: F2 */ KEYSYM_NOP, 66 /* 7: F10 */ KEYSYM_NOP, 67 /* 8: F3 */ KEYSYM_NOP, 68 /* 9: F11 */ KEYSYM_NOP, 69 /* 10: F4 */ KEYSYM_NOP, 70 /* 11: F12 */ KEYSYM_NOP, 71 /* 12: F5 */ KEYSYM_NOP, 72 /* 13: AltGraph */ KEYSYM_CLRMOD | KBMOD_ALTGRAPH, 73 /* 14: F6 */ KEYSYM_NOP, 74 /* 15: */ KEYSYM_HOLE, 75 /* 16: F7 */ KEYSYM_NOP, 76 /* 17: F8 */ KEYSYM_NOP, 77 /* 18: F9 */ KEYSYM_NOP, 78 /* 19: Alt_L */ KEYSYM_CLRMOD | KBMOD_ALT_L, 79 /* 20: T5_Up */ KEYSYM_HOLE, 80 /* 21: R1/Pause */ KEYSYM_NOP, 81 /* 22: R2/Print */ KEYSYM_NOP, 82 /* 23: R3/Break */ KEYSYM_NOP, 83 /* 24: T5_Left */ KEYSYM_HOLE, 84 /* 25: L3/Props */ KEYSYM_NOP, 85 /* 26: L4/Undo */ KEYSYM_NOP, 86 /* 27: T5_Down */ KEYSYM_HOLE, 87 /* 28: T5_Right */ KEYSYM_HOLE, 88 /* 29: Esc */ KEYSYM_NOP, 89 /* 30: 1 */ KEYSYM_NOP, 90 /* 31: 2 */ KEYSYM_NOP, 91 /* 32: 3 */ KEYSYM_NOP, 92 /* 33: 4 */ KEYSYM_NOP, 93 /* 34: 5 */ KEYSYM_NOP, 94 /* 35: 6 */ KEYSYM_NOP, 95 /* 36: 7 */ KEYSYM_NOP, 96 /* 37: 8 */ KEYSYM_NOP, 97 /* 38: 9 */ KEYSYM_NOP, 98 /* 39: 0 */ KEYSYM_NOP, 99 /* 40: minus */ KEYSYM_NOP, 100 /* 41: equal */ KEYSYM_NOP, 101 /* 42: grave/tilde */ KEYSYM_NOP, 102 /* 43: BackSpace */ KEYSYM_NOP, 103 /* 44: */ KEYSYM_HOLE, 104 /* 45: R4/KP_Equal */ KEYSYM_NOP, 105 /* 46: R5/KP_Div */ KEYSYM_NOP, 106 /* 47: R6/KP_Mult */ KEYSYM_NOP, 107 /* 48: */ KEYSYM_NOP, 108 /* 49: L5/Front */ KEYSYM_NOP, 109 /* 50: KP_Delete */ KEYSYM_NOP, 110 /* 51: L6/Copy */ KEYSYM_NOP, 111 /* 52: */ KEYSYM_HOLE, 112 /* 53: Tab */ KEYSYM_NOP, 113 /* 54: Q */ KEYSYM_NOP, 114 /* 55: W */ KEYSYM_NOP, 115 /* 56: E */ KEYSYM_NOP, 116 /* 57: R */ KEYSYM_NOP, 117 /* 58: T */ KEYSYM_NOP, 118 /* 59: Y */ KEYSYM_NOP, 119 /* 60: U */ KEYSYM_NOP, 120 /* 61: I */ KEYSYM_NOP, 121 /* 62: O */ KEYSYM_NOP, 122 /* 63: P */ KEYSYM_NOP, 123 /* 64: [ */ KEYSYM_NOP, 124 /* 65: ] */ KEYSYM_NOP, 125 /* 66: Delete */ KEYSYM_NOP, 126 /* 67: Compose */ KEYSYM_NOP, 127 /* 68: R7/Home */ KEYSYM_NOP, 128 /* 69: R8/Up */ KEYSYM_NOP, 129 /* 70: R9/PgUp */ KEYSYM_NOP, 130 /* 71: KP_Minus */ KEYSYM_NOP, 131 /* 72: L7/Open */ KEYSYM_NOP, 132 /* 73: L8/Paste */ KEYSYM_NOP, 133 /* 74: */ KEYSYM_HOLE, 134 /* 75: */ KEYSYM_HOLE, 135 /* 76: Ctrl_L */ KEYSYM_CLRMOD | KBMOD_CTRL_L, 136 /* 77: A */ KEYSYM_NOP, 137 /* 78: S */ KEYSYM_NOP, 138 /* 79: D */ KEYSYM_NOP, 139 /* 80: F */ KEYSYM_NOP, 140 /* 81: G */ KEYSYM_NOP, 141 /* 82: H */ KEYSYM_NOP, 142 /* 83: J */ KEYSYM_NOP, 143 /* 84: K */ KEYSYM_NOP, 144 /* 85: L */ KEYSYM_NOP, 145 /* 86: ; */ KEYSYM_NOP, 146 /* 87: apostr. */ KEYSYM_NOP, 147 /* 88: backslash */ KEYSYM_NOP, 148 /* 89: Return */ KEYSYM_NOP, 149 /* 90: KP_Enter */ KEYSYM_NOP, 150 /* 91: R10/Left */ KEYSYM_NOP, 151 /* 92: R11/KP_5 */ KEYSYM_NOP, 152 /* 93: R12/Right */ KEYSYM_NOP, 153 /* 94: KP_Insert */ KEYSYM_NOP, 154 /* 95: L9/Find */ KEYSYM_NOP, 155 /* 96: */ KEYSYM_HOLE, 156 /* 97: L10/Cut */ KEYSYM_NOP, 157 /* 98: Num_Lock */ KEYSYM_NOP, 158 /* 99: Shift_L */ KEYSYM_CLRMOD | KBMOD_SHIFT_L, 159 /* 100: Z */ KEYSYM_NOP, 160 /* 101: X */ KEYSYM_NOP, 161 /* 102: C */ KEYSYM_NOP, 162 /* 103: V */ KEYSYM_NOP, 163 /* 104: B */ KEYSYM_NOP, 164 /* 105: N */ KEYSYM_NOP, 165 /* 106: M */ KEYSYM_NOP, 166 /* 107: , */ KEYSYM_NOP, 167 /* 108: . */ KEYSYM_NOP, 168 /* 109: / */ KEYSYM_NOP, 169 /* 110: Shift_R */ KEYSYM_CLRMOD | KBMOD_SHIFT_R, 170 /* 111: Linefeed */ KEYSYM_NOP, 171 /* 112: R13/End */ KEYSYM_NOP, 172 /* 113: R14/Down */ KEYSYM_NOP, 173 /* 114: R15/PgDn */ KEYSYM_NOP, 174 /* 115: */ KEYSYM_HOLE, 175 /* 116: */ KEYSYM_HOLE, 176 /* 117: */ KEYSYM_HOLE, 177 /* 118: L16/Help */ KEYSYM_NOP, 178 /* 119: CapsLock */ KEYSYM_NOP, 179 /* 120: Meta_L */ KEYSYM_CLRMOD | KBMOD_META_L, 180 /* 121: SpaceBar */ KEYSYM_NOP, 181 /* 122: Meta_R */ KEYSYM_CLRMOD | KBMOD_META_R, 182 /* 123: */ KEYSYM_HOLE, 183 /* 124: */ KEYSYM_HOLE, 184 /* 125: KP_Add */ KEYSYM_NOP, 185 /* 126: */ KEYSYM_LAYOUT, /* layout next */ 186 /* 127: */ KEYSYM_RESET, /* kbd ID next */ 187 }; 188 189 190 /* 191 * This map is used when a control key is down. 192 */ 193 #define CTL(c) ((c)&0x1F) 194 u_short keymap_control[KEYMAP_SIZE] = { 195 /* 0: */ KEYSYM_HOLE, 196 /* 1: L1/Stop */ KEYSYM_NOP, 197 /* 2: */ KEYSYM_HOLE, 198 /* 3: L2/Again */ KEYSYM_NOP, 199 /* 4: */ KEYSYM_HOLE, 200 /* 5: F1 */ KEYSYM_NOP, 201 /* 6: F2 */ KEYSYM_NOP, 202 /* 7: F10 */ KEYSYM_NOP, 203 /* 8: F3 */ KEYSYM_NOP, 204 /* 9: F11 */ KEYSYM_NOP, 205 /* 10: F4 */ KEYSYM_NOP, 206 /* 11: F12 */ KEYSYM_NOP, 207 /* 12: F5 */ KEYSYM_NOP, 208 /* 13: AltGraph */ KEYSYM_SETMOD | KBMOD_ALTGRAPH, 209 /* 14: F6 */ KEYSYM_NOP, 210 /* 15: */ KEYSYM_HOLE, 211 /* 16: F7 */ KEYSYM_NOP, 212 /* 17: F8 */ KEYSYM_NOP, 213 /* 18: F9 */ KEYSYM_NOP, 214 /* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L, 215 /* 20: T5_Up */ KEYSYM_HOLE, 216 /* 21: R1/Pause */ KEYSYM_NOP, 217 /* 22: R2/Print */ KEYSYM_NOP, 218 /* 23: R3/Break */ KEYSYM_NOP, 219 /* 24: T5_Left */ KEYSYM_HOLE, 220 /* 25: L3/Props */ KEYSYM_NOP, 221 /* 26: L4/Undo */ KEYSYM_NOP, 222 /* 27: T5_Down */ KEYSYM_HOLE, 223 /* 28: T5_Right */ KEYSYM_HOLE, 224 /* 29: Esc */ 0x1b, 225 /* 30: 1 */ KEYSYM_NOP, 226 /* 31: 2 */ CTL('@'), 227 /* 32: 3 */ KEYSYM_NOP, 228 /* 33: 4 */ KEYSYM_NOP, 229 /* 34: 5 */ KEYSYM_NOP, 230 /* 35: 6 */ CTL('^'), 231 /* 36: 7 */ KEYSYM_NOP, 232 /* 37: 8 */ KEYSYM_NOP, 233 /* 38: 9 */ KEYSYM_NOP, 234 /* 39: 0 */ KEYSYM_NOP, 235 /* 40: minus _ */ CTL('_'), 236 /* 41: equal */ KEYSYM_NOP, 237 /* 42: grave/tilde */ CTL('~'), 238 /* 43: BackSpace */ '\b', 239 /* 44: */ KEYSYM_HOLE, 240 /* 45: R4/KP_Equal */ KEYSYM_NOP, 241 /* 46: R5/KP_Div */ KEYSYM_NOP, 242 /* 47: R6/KP_Mult */ KEYSYM_NOP, 243 /* 48: */ KEYSYM_NOP, 244 /* 49: L5/Front */ KEYSYM_NOP, 245 /* 50: KP_Delete */ KEYSYM_NOP, 246 /* 51: L6/Copy */ KEYSYM_NOP, 247 /* 52: */ KEYSYM_HOLE, 248 /* 53: Tab */ '\t', 249 /* 54: Q */ CTL('Q'), 250 /* 55: W */ CTL('W'), 251 /* 56: E */ CTL('E'), 252 /* 57: R */ CTL('R'), 253 /* 58: T */ CTL('T'), 254 /* 59: Y */ CTL('Y'), 255 /* 60: U */ CTL('U'), 256 /* 61: I */ CTL('I'), 257 /* 62: O */ CTL('O'), 258 /* 63: P */ CTL('P'), 259 /* 64: [ */ CTL('['), 260 /* 65: ] */ CTL(']'), 261 /* 66: Delete */ 0x7f, 262 /* 67: Compose */ KEYSYM_COMPOSE, 263 /* 68: R7/Home */ CTL('A'), /* emacs */ 264 /* 69: R8/Up */ CTL('P'), /* emacs */ 265 /* 70: R9/PgUp */ 0x80|'v', /* emacs */ 266 /* 71: KP_Minus */ KEYSYM_NOP, 267 /* 72: L7/Open */ KEYSYM_NOP, 268 /* 73: L8/Paste */ KEYSYM_NOP, 269 /* 74: */ KEYSYM_HOLE, 270 /* 75: */ KEYSYM_HOLE, 271 /* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L, 272 /* 77: A */ CTL('A'), 273 /* 78: S */ CTL('S'), 274 /* 79: D */ CTL('D'), 275 /* 80: F */ CTL('F'), 276 /* 81: G */ CTL('G'), 277 /* 82: H */ CTL('H'), 278 /* 83: J */ CTL('J'), 279 /* 84: K */ CTL('K'), 280 /* 85: L */ CTL('L'), 281 /* 86: ; */ KEYSYM_NOP, 282 /* 87: apostr. */ KEYSYM_NOP, 283 /* 88: backslash */ CTL('\\'), 284 /* 89: Return */ '\r', 285 /* 90: KP_Enter */ KEYSYM_NOP, 286 /* 91: R10/Left */ CTL('B'), /* emacs */ 287 /* 92: R11/KP_5 */ KEYSYM_NOP, 288 /* 93: R12/Right */ CTL('F'), /* emacs */ 289 /* 94: KP_Insert */ KEYSYM_NOP, 290 /* 95: L9/Find */ KEYSYM_NOP, 291 /* 96: */ KEYSYM_HOLE, 292 /* 97: L10/Cut */ KEYSYM_NOP, 293 /* 98: Num_Lock */ KEYSYM_INVMOD | KBMOD_NUMLOCK, 294 /* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L, 295 /* 100: Z */ CTL('Z'), 296 /* 101: X */ CTL('X'), 297 /* 102: C */ CTL('C'), 298 /* 103: V */ CTL('V'), 299 /* 104: B */ CTL('B'), 300 /* 105: N */ CTL('N'), 301 /* 106: M */ CTL('M'), 302 /* 107: , */ KEYSYM_NOP, 303 /* 108: . */ KEYSYM_NOP, 304 /* 109: / ? */ CTL('?'), 305 /* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R, 306 /* 111: Linefeed */ '\n', 307 /* 112: R13/End */ CTL('E'), /* emacs */ 308 /* 113: R14/Down */ CTL('N'), /* emacs */ 309 /* 114: R15/PgDn */ CTL('V'), /* emacs */ 310 /* 115: */ KEYSYM_HOLE, 311 /* 116: */ KEYSYM_HOLE, 312 /* 117: */ KEYSYM_HOLE, 313 /* 118: L16/Help */ KEYSYM_NOP, 314 /* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK, 315 /* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L, 316 /* 121: SpaceBar */ CTL(' '), 317 /* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R, 318 /* 123: */ KEYSYM_HOLE, 319 /* 124: */ KEYSYM_HOLE, 320 /* 125: KP_Add */ KEYSYM_NOP, 321 /* 126: */ KEYSYM_HW_ERR, 322 /* 127: */ KEYSYM_ALL_UP, 323 }; 324 #undef CTL 325 326 327 /* 328 * Keymaps for the "type 3" keyboard. 329 * (lower-case, upper-case) 330 */ 331 332 u_short keymap_s3_lc[KEYMAP_SIZE] = { 333 /* 0: */ KEYSYM_HOLE, 334 /* 1: L1/Stop */ KEYSYM_FUNC_L(1), 335 /* 2: */ KEYSYM_HOLE, 336 /* 3: L2/Again */ KEYSYM_FUNC_L(2), 337 /* 4: */ KEYSYM_HOLE, 338 /* 5: F1 */ KEYSYM_FUNC_F(1), 339 /* 6: F2 */ KEYSYM_FUNC_F(2), 340 /* 7: F10 */ KEYSYM_HOLE, 341 /* 8: F3 */ KEYSYM_FUNC_F(3), 342 /* 9: F11 */ KEYSYM_HOLE, 343 /* 10: F4 */ KEYSYM_FUNC_F(4), 344 /* 11: F12 */ KEYSYM_HOLE, 345 /* 12: F5 */ KEYSYM_FUNC_F(5), 346 /* 13: AltGraph */ KEYSYM_HOLE, 347 /* 14: F6 */ KEYSYM_FUNC_F(6), 348 /* 15: */ KEYSYM_HOLE, 349 /* 16: F7 */ KEYSYM_FUNC_F(7), 350 /* 17: F8 */ KEYSYM_FUNC_F(8), 351 /* 18: F9 */ KEYSYM_FUNC_F(9), 352 /* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L, 353 /* 20: T5_Up */ KEYSYM_HOLE, 354 /* 21: R1/Pause */ KEYSYM_FUNC_R(1), 355 /* 22: R2/Print */ KEYSYM_FUNC_R(2), 356 /* 23: R3/Break */ KEYSYM_FUNC_R(3), 357 /* 24: T5_Left */ KEYSYM_HOLE, 358 /* 25: L3/Props */ KEYSYM_FUNC_L(3), 359 /* 26: L4/Undo */ KEYSYM_FUNC_L(4), 360 /* 27: T5_Down */ KEYSYM_HOLE, 361 /* 28: T5_Right */ KEYSYM_HOLE, 362 /* 29: Esc */ 0x1b, 363 /* 30: 1 */ '1', 364 /* 31: 2 */ '2', 365 /* 32: 3 */ '3', 366 /* 33: 4 */ '4', 367 /* 34: 5 */ '5', 368 /* 35: 6 */ '6', 369 /* 36: 7 */ '7', 370 /* 37: 8 */ '8', 371 /* 38: 9 */ '9', 372 /* 39: 0 */ '0', 373 /* 40: minus */ '-', 374 /* 41: equal */ '=', 375 /* 42: grave/tilde */ '`', 376 /* 43: BackSpace */ '\b', 377 /* 44: */ KEYSYM_HOLE, 378 /* 45: R4/KP_Equal */ KEYSYM_FUNC_R(4), 379 /* 46: R5/KP_Div */ KEYSYM_FUNC_R(5), 380 /* 47: R6/KP_Mult */ KEYSYM_FUNC_R(6), 381 /* 48: */ KEYSYM_HOLE, 382 /* 49: L5/Front */ KEYSYM_FUNC_L(5), 383 /* 50: KP_Delete */ KEYSYM_HOLE, 384 /* 51: L6/Copy */ KEYSYM_FUNC_L(6), 385 /* 52: */ KEYSYM_HOLE, 386 /* 53: Tab */ '\t', 387 /* 54: Q */ 'q', 388 /* 55: W */ 'w', 389 /* 56: E */ 'e', 390 /* 57: R */ 'r', 391 /* 58: T */ 't', 392 /* 59: Y */ 'y', 393 /* 60: U */ 'u', 394 /* 61: I */ 'i', 395 /* 62: O */ 'o', 396 /* 63: P */ 'p', 397 /* 64: [ */ '[', 398 /* 65: ] */ ']', 399 /* 66: Delete */ 0x7f, 400 /* 67: Compose */ KEYSYM_HOLE, 401 /* 68: R7/Home */ KEYSYM_FUNC_R(7), 402 /* 69: R8/Up */ KEYSYM_STRING | 1, 403 /* 70: R9/PgUp */ KEYSYM_FUNC_R(9), 404 /* 71: KP_Minus */ KEYSYM_HOLE, 405 /* 72: L7/Open */ KEYSYM_FUNC_L(7), 406 /* 73: L8/Paste */ KEYSYM_FUNC_L(8), 407 /* 74: */ KEYSYM_HOLE, 408 /* 75: */ KEYSYM_HOLE, 409 /* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L, 410 /* 77: A */ 'a', 411 /* 78: S */ 's', 412 /* 79: D */ 'd', 413 /* 80: F */ 'f', 414 /* 81: G */ 'g', 415 /* 82: H */ 'h', 416 /* 83: J */ 'j', 417 /* 84: K */ 'k', 418 /* 85: L */ 'l', 419 /* 86: ; */ ';', 420 /* 87: apostr. */ '\'', 421 /* 88: backslash */ '\\', 422 /* 89: Return */ '\r', 423 /* 90: KP_Enter */ KEYSYM_HOLE, 424 /* 91: R10/Left */ KEYSYM_STRING | 3, 425 /* 92: R11/KP_5 */ KEYSYM_FUNC_R(11), 426 /* 93: R12/Right */ KEYSYM_STRING | 4, 427 /* 94: KP_Insert */ KEYSYM_HOLE, 428 /* 95: L9/Find */ KEYSYM_FUNC_L(9), 429 /* 96: */ KEYSYM_HOLE, 430 /* 97: L10/Cut */ KEYSYM_FUNC_L(10), 431 /* 98: Num_Lock */ KEYSYM_HOLE, 432 /* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L, 433 /* 100: Z */ 'z', 434 /* 101: X */ 'x', 435 /* 102: C */ 'c', 436 /* 103: V */ 'v', 437 /* 104: B */ 'b', 438 /* 105: N */ 'n', 439 /* 106: M */ 'm', 440 /* 107: , */ ',', 441 /* 108: . */ '.', 442 /* 109: / */ '/', 443 /* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R, 444 /* 111: Linefeed */ '\n', 445 /* 112: R13/End */ KEYSYM_FUNC_R(13), 446 /* 113: R14/Down */ KEYSYM_STRING | 2, 447 /* 114: R15/PgDn */ KEYSYM_FUNC_R(15), 448 /* 115: */ KEYSYM_HOLE, 449 /* 116: */ KEYSYM_HOLE, 450 /* 117: */ KEYSYM_HOLE, 451 /* 118: L16/Help */ KEYSYM_HOLE, 452 /* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK, 453 /* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L, 454 /* 121: SpaceBar */ ' ', 455 /* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R, 456 /* 123: */ KEYSYM_HOLE, 457 /* 124: */ KEYSYM_HOLE, 458 /* 125: KP_Add */ KEYSYM_HOLE, 459 /* 126: */ KEYSYM_HW_ERR, 460 /* 127: */ KEYSYM_ALL_UP, 461 }; 462 463 464 u_short keymap_s3_uc[KEYMAP_SIZE] = { 465 /* 0: */ KEYSYM_HOLE, 466 /* 1: L1/Stop */ KEYSYM_FUNC_L(1), 467 /* 2: */ KEYSYM_HOLE, 468 /* 3: L2/Again */ KEYSYM_FUNC_L(2), 469 /* 4: */ KEYSYM_HOLE, 470 /* 5: F1 */ KEYSYM_FUNC_F(1), 471 /* 6: F2 */ KEYSYM_FUNC_F(2), 472 /* 7: F10 */ KEYSYM_HOLE, 473 /* 8: F3 */ KEYSYM_FUNC_F(3), 474 /* 9: F11 */ KEYSYM_HOLE, 475 /* 10: F4 */ KEYSYM_FUNC_F(4), 476 /* 11: F12 */ KEYSYM_HOLE, 477 /* 12: F5 */ KEYSYM_FUNC_F(5), 478 /* 13: AltGraph */ KEYSYM_HOLE, 479 /* 14: F6 */ KEYSYM_FUNC_F(6), 480 /* 15: */ KEYSYM_HOLE, 481 /* 16: F7 */ KEYSYM_FUNC_F(7), 482 /* 17: F8 */ KEYSYM_FUNC_F(8), 483 /* 18: F9 */ KEYSYM_FUNC_F(9), 484 /* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L, 485 /* 20: T5_Up */ KEYSYM_HOLE, 486 /* 21: R1/Pause */ KEYSYM_FUNC_R(1), 487 /* 22: R2/Print */ KEYSYM_FUNC_R(2), 488 /* 23: R3/Break */ KEYSYM_FUNC_R(3), 489 /* 24: T5_Left */ KEYSYM_HOLE, 490 /* 25: L3/Props */ KEYSYM_FUNC_L(3), 491 /* 26: L4/Undo */ KEYSYM_FUNC_L(4), 492 /* 27: T5_Down */ KEYSYM_HOLE, 493 /* 28: T5_Right */ KEYSYM_HOLE, 494 /* 29: Esc */ 0x1b, 495 /* 30: 1 */ '!', 496 /* 31: 2 */ '@', 497 /* 32: 3 */ '#', 498 /* 33: 4 */ '$', 499 /* 34: 5 */ '%', 500 /* 35: 6 */ '^', 501 /* 36: 7 */ '&', 502 /* 37: 8 */ '*', 503 /* 38: 9 */ '(', 504 /* 39: 0 */ ')', 505 /* 40: minus */ '_', 506 /* 41: equal */ '+', 507 /* 42: grave/tilde */ '~', 508 /* 43: BackSpace */ '\b', 509 /* 44: */ KEYSYM_HOLE, 510 /* 45: R4/KP_Equal */ KEYSYM_FUNC_R(4), 511 /* 46: R5/KP_Div */ KEYSYM_FUNC_R(5), 512 /* 47: R6/KP_Mult */ KEYSYM_FUNC_R(6), 513 /* 48: */ KEYSYM_HOLE, 514 /* 49: L5/Front */ KEYSYM_FUNC_L(5), 515 /* 50: KP_Delete */ KEYSYM_HOLE, 516 /* 51: L6/Copy */ KEYSYM_FUNC_L(6), 517 /* 52: */ KEYSYM_HOLE, 518 /* 53: Tab */ '\t', 519 /* 54: Q */ 'Q', 520 /* 55: W */ 'W', 521 /* 56: E */ 'E', 522 /* 57: R */ 'R', 523 /* 58: T */ 'T', 524 /* 59: Y */ 'Y', 525 /* 60: U */ 'U', 526 /* 61: I */ 'I', 527 /* 62: O */ 'O', 528 /* 63: P */ 'P', 529 /* 64: [ */ '{', 530 /* 65: ] */ '}', 531 /* 66: Delete */ 0x7f, 532 /* 67: Compose */ KEYSYM_HOLE, 533 /* 68: R7/Home */ KEYSYM_FUNC_R(7), 534 /* 69: R8/Up */ KEYSYM_STRING | 1, 535 /* 70: R9/PgUp */ KEYSYM_FUNC_R(9), 536 /* 71: KP_Minus */ KEYSYM_HOLE, 537 /* 72: L7/Open */ KEYSYM_FUNC_L(7), 538 /* 73: L8/Paste */ KEYSYM_FUNC_L(8), 539 /* 74: */ KEYSYM_HOLE, 540 /* 75: */ KEYSYM_HOLE, 541 /* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L, 542 /* 77: A */ 'A', 543 /* 78: S */ 'S', 544 /* 79: D */ 'D', 545 /* 80: F */ 'F', 546 /* 81: G */ 'G', 547 /* 82: H */ 'H', 548 /* 83: J */ 'J', 549 /* 84: K */ 'K', 550 /* 85: L */ 'L', 551 /* 86: ; */ ':', 552 /* 87: apostr. */ '"', 553 /* 88: backslash */ '|', 554 /* 89: Return */ '\r', 555 /* 90: KP_Enter */ KEYSYM_HOLE, 556 /* 91: R10/Left */ KEYSYM_STRING | 3, 557 /* 92: R11/KP_5 */ KEYSYM_FUNC_R(11), 558 /* 93: R12/Right */ KEYSYM_STRING | 4, 559 /* 94: KP_Insert */ KEYSYM_HOLE, 560 /* 95: L9/Find */ KEYSYM_FUNC_L(9), 561 /* 96: */ KEYSYM_HOLE, 562 /* 97: L10/Cut */ KEYSYM_FUNC_L(10), 563 /* 98: Num_Lock */ KEYSYM_HOLE, 564 /* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L, 565 /* 100: Z */ 'Z', 566 /* 101: X */ 'X', 567 /* 102: C */ 'C', 568 /* 103: V */ 'V', 569 /* 104: B */ 'B', 570 /* 105: N */ 'N', 571 /* 106: M */ 'M', 572 /* 107: , */ '<', 573 /* 108: . */ '>', 574 /* 109: / */ '?', 575 /* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R, 576 /* 111: Linefeed */ '\n', 577 /* 112: R13/End */ KEYSYM_FUNC_R(13), 578 /* 113: R14/Down */ KEYSYM_STRING | 2, 579 /* 114: R15/PgDn */ KEYSYM_FUNC_R(15), 580 /* 115: */ KEYSYM_HOLE, 581 /* 116: */ KEYSYM_HOLE, 582 /* 117: */ KEYSYM_HOLE, 583 /* 118: L16/Help */ KEYSYM_HOLE, 584 /* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK, 585 /* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L, 586 /* 121: SpaceBar */ ' ', 587 /* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R, 588 /* 123: */ KEYSYM_HOLE, 589 /* 124: */ KEYSYM_HOLE, 590 /* 125: KP_Add */ KEYSYM_HOLE, 591 /* 126: */ KEYSYM_HW_ERR, 592 /* 127: */ KEYSYM_ALL_UP, 593 }; 594 595 596 /* 597 * Keymaps for the "type 4" keyboard. 598 * (lower-case, upper-case) 599 */ 600 601 u_short keymap_s4_lc[KEYMAP_SIZE] = { 602 /* 0: */ KEYSYM_HOLE, 603 /* 1: L1/Stop */ KEYSYM_FUNC_L(1), 604 /* 2: */ KEYSYM_HOLE, 605 /* 3: L2/Again */ KEYSYM_FUNC_L(2), 606 /* 4: */ KEYSYM_HOLE, 607 /* 5: F1 */ KEYSYM_FUNC_F(1), 608 /* 6: F2 */ KEYSYM_FUNC_F(2), 609 /* 7: F10 */ KEYSYM_FUNC_F(10), 610 /* 8: F3 */ KEYSYM_FUNC_F(3), 611 /* 9: F11 */ KEYSYM_FUNC_F(11), 612 /* 10: F4 */ KEYSYM_FUNC_F(4), 613 /* 11: F12 */ KEYSYM_FUNC_F(12), 614 /* 12: F5 */ KEYSYM_FUNC_F(5), 615 /* 13: AltGraph */ KEYSYM_SETMOD | KBMOD_ALTGRAPH, 616 /* 14: F6 */ KEYSYM_FUNC_F(6), 617 /* 15: */ KEYSYM_HOLE, 618 /* 16: F7 */ KEYSYM_FUNC_F(7), 619 /* 17: F8 */ KEYSYM_FUNC_F(8), 620 /* 18: F9 */ KEYSYM_FUNC_F(9), 621 /* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L, 622 /* 20: T5_Up */ KEYSYM_HOLE, 623 /* 21: R1/Pause */ KEYSYM_FUNC_R(1), 624 /* 22: R2/Print */ KEYSYM_FUNC_R(2), 625 /* 23: R3/Break */ KEYSYM_FUNC_R(3), 626 /* 24: T5_Left */ KEYSYM_HOLE, 627 /* 25: L3/Props */ KEYSYM_FUNC_L(3), 628 /* 26: L4/Undo */ KEYSYM_FUNC_L(4), 629 /* 27: T5_Down */ KEYSYM_HOLE, 630 /* 28: T5_Right */ KEYSYM_HOLE, 631 /* 29: Esc */ 0x1b, 632 /* 30: 1 */ '1', 633 /* 31: 2 */ '2', 634 /* 32: 3 */ '3', 635 /* 33: 4 */ '4', 636 /* 34: 5 */ '5', 637 /* 35: 6 */ '6', 638 /* 36: 7 */ '7', 639 /* 37: 8 */ '8', 640 /* 38: 9 */ '9', 641 /* 39: 0 */ '0', 642 /* 40: minus */ '-', 643 /* 41: equal */ '=', 644 /* 42: grave/tilde */ '`', 645 /* 43: BackSpace */ '\b', 646 /* 44: */ KEYSYM_HOLE, 647 /* 45: R4/KP_Equal */ KEYSYM_FUNC_R(4), 648 /* 46: R5/KP_Div */ KEYSYM_FUNC_R(5), 649 /* 47: R6/KP_Mult */ KEYSYM_FUNC_R(6), 650 /* 48: */ KEYSYM_FUNC_N(13), 651 /* 49: L5/Front */ KEYSYM_FUNC_L(5), 652 /* 50: KP_Delete */ KEYSYM_FUNC_N(10), 653 /* 51: L6/Copy */ KEYSYM_FUNC_L(6), 654 /* 52: */ KEYSYM_HOLE, 655 /* 53: Tab */ '\t', 656 /* 54: Q */ 'q', 657 /* 55: W */ 'w', 658 /* 56: E */ 'e', 659 /* 57: R */ 'r', 660 /* 58: T */ 't', 661 /* 59: Y */ 'y', 662 /* 60: U */ 'u', 663 /* 61: I */ 'i', 664 /* 62: O */ 'o', 665 /* 63: P */ 'p', 666 /* 64: [ */ '[', 667 /* 65: ] */ ']', 668 /* 66: Delete */ 0x7f, 669 /* 67: Compose */ KEYSYM_COMPOSE, 670 /* 68: R7/Home */ KEYSYM_FUNC_R(7), 671 /* 69: R8/Up */ KEYSYM_STRING | 1, 672 /* 70: R9/PgUp */ KEYSYM_FUNC_R(9), 673 /* 71: KP_Minus */ KEYSYM_FUNC_N(15), 674 /* 72: L7/Open */ KEYSYM_FUNC_L(7), 675 /* 73: L8/Paste */ KEYSYM_FUNC_L(8), 676 /* 74: */ KEYSYM_HOLE, 677 /* 75: */ KEYSYM_HOLE, 678 /* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L, 679 /* 77: A */ 'a', 680 /* 78: S */ 's', 681 /* 79: D */ 'd', 682 /* 80: F */ 'f', 683 /* 81: G */ 'g', 684 /* 82: H */ 'h', 685 /* 83: J */ 'j', 686 /* 84: K */ 'k', 687 /* 85: L */ 'l', 688 /* 86: ; */ ';', 689 /* 87: apostr. */ '\'', 690 /* 88: backslash */ '\\', 691 /* 89: Return */ '\r', 692 /* 90: KP_Enter */ KEYSYM_FUNC_N(11), 693 /* 91: R10/Left */ KEYSYM_STRING | 3, 694 /* 92: R11/KP_5 */ KEYSYM_FUNC_R(11), 695 /* 93: R12/Right */ KEYSYM_STRING | 4, 696 /* 94: KP_Insert */ KEYSYM_FUNC_N(8), 697 /* 95: L9/Find */ KEYSYM_FUNC_L(9), 698 /* 96: */ KEYSYM_HOLE, 699 /* 97: L10/Cut */ KEYSYM_FUNC_L(10), 700 /* 98: Num_Lock */ KEYSYM_INVMOD | KBMOD_NUMLOCK, 701 /* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L, 702 /* 100: Z */ 'z', 703 /* 101: X */ 'x', 704 /* 102: C */ 'c', 705 /* 103: V */ 'v', 706 /* 104: B */ 'b', 707 /* 105: N */ 'n', 708 /* 106: M */ 'm', 709 /* 107: , */ ',', 710 /* 108: . */ '.', 711 /* 109: / */ '/', 712 /* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R, 713 /* 111: Linefeed */ '\n', 714 /* 112: R13/End */ KEYSYM_FUNC_R(13), 715 /* 113: R14/Down */ KEYSYM_STRING | 2, 716 /* 114: R15/PgDn */ KEYSYM_FUNC_R(15), 717 /* 115: */ KEYSYM_HOLE, 718 /* 116: */ KEYSYM_HOLE, 719 /* 117: */ KEYSYM_HOLE, 720 /* 118: L16/Help */ KEYSYM_FUNC_L(16), 721 /* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK, 722 /* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L, 723 /* 121: SpaceBar */ ' ', 724 /* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R, 725 /* 123: */ KEYSYM_HOLE, 726 /* 124: */ KEYSYM_HOLE, 727 /* 125: KP_Add */ KEYSYM_FUNC_N(14), 728 /* 126: */ KEYSYM_HW_ERR, 729 /* 127: */ KEYSYM_ALL_UP, 730 }; 731 732 733 u_short keymap_s4_uc[KEYMAP_SIZE] = { 734 /* 0: */ KEYSYM_HOLE, 735 /* 1: L1/Stop */ KEYSYM_FUNC_L(1), 736 /* 2: */ KEYSYM_HOLE, 737 /* 3: L2/Again */ KEYSYM_FUNC_L(2), 738 /* 4: */ KEYSYM_HOLE, 739 /* 5: F1 */ KEYSYM_FUNC_F(1), 740 /* 6: F2 */ KEYSYM_FUNC_F(2), 741 /* 7: F10 */ KEYSYM_FUNC_F(10), 742 /* 8: F3 */ KEYSYM_FUNC_F(3), 743 /* 9: F11 */ KEYSYM_FUNC_F(11), 744 /* 10: F4 */ KEYSYM_FUNC_F(4), 745 /* 11: F12 */ KEYSYM_FUNC_F(12), 746 /* 12: F5 */ KEYSYM_FUNC_F(5), 747 /* 13: AltGraph */ KEYSYM_SETMOD | KBMOD_ALTGRAPH, 748 /* 14: F6 */ KEYSYM_FUNC_F(6), 749 /* 15: */ KEYSYM_HOLE, 750 /* 16: F7 */ KEYSYM_FUNC_F(7), 751 /* 17: F8 */ KEYSYM_FUNC_F(8), 752 /* 18: F9 */ KEYSYM_FUNC_F(9), 753 /* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L, 754 /* 20: T5_Up */ KEYSYM_HOLE, 755 /* 21: R1/Pause */ KEYSYM_FUNC_R(1), 756 /* 22: R2/Print */ KEYSYM_FUNC_R(2), 757 /* 23: R3/Break */ KEYSYM_FUNC_R(3), 758 /* 24: T5_Left */ KEYSYM_HOLE, 759 /* 25: L3/Props */ KEYSYM_FUNC_L(3), 760 /* 26: L4/Undo */ KEYSYM_FUNC_L(4), 761 /* 27: T5_Down */ KEYSYM_HOLE, 762 /* 28: T5_Right */ KEYSYM_HOLE, 763 /* 29: Esc */ 0x1b, 764 /* 30: 1 */ '!', 765 /* 31: 2 */ '@', 766 /* 32: 3 */ '#', 767 /* 33: 4 */ '$', 768 /* 34: 5 */ '%', 769 /* 35: 6 */ '^', 770 /* 36: 7 */ '&', 771 /* 37: 8 */ '*', 772 /* 38: 9 */ '(', 773 /* 39: 0 */ ')', 774 /* 40: minus */ '_', 775 /* 41: equal */ '+', 776 /* 42: grave/tilde */ '~', 777 /* 43: BackSpace */ '\b', 778 /* 44: */ KEYSYM_HOLE, 779 /* 45: R4/KP_Equal */ KEYSYM_FUNC_R(4), 780 /* 46: R5/KP_Div */ KEYSYM_FUNC_R(5), 781 /* 47: R6/KP_Mult */ KEYSYM_FUNC_R(6), 782 /* 48: */ KEYSYM_FUNC_N(13), 783 /* 49: L5/Front */ KEYSYM_FUNC_L(5), 784 /* 50: KP_Delete */ KEYSYM_FUNC_N(10), 785 /* 51: L6/Copy */ KEYSYM_FUNC_L(6), 786 /* 52: */ KEYSYM_HOLE, 787 /* 53: Tab */ '\t', 788 /* 54: Q */ 'Q', 789 /* 55: W */ 'W', 790 /* 56: E */ 'E', 791 /* 57: R */ 'R', 792 /* 58: T */ 'T', 793 /* 59: Y */ 'Y', 794 /* 60: U */ 'U', 795 /* 61: I */ 'I', 796 /* 62: O */ 'O', 797 /* 63: P */ 'P', 798 /* 64: [ */ '{', 799 /* 65: ] */ '}', 800 /* 66: Delete */ 0x7f, 801 /* 67: Compose */ KEYSYM_COMPOSE, 802 /* 68: R7/Home */ KEYSYM_FUNC_R(7), 803 /* 69: R8/Up */ KEYSYM_STRING | 1, 804 /* 70: R9/PgUp */ KEYSYM_FUNC_R(9), 805 /* 71: KP_Minus */ KEYSYM_FUNC_N(15), 806 /* 72: L7/Open */ KEYSYM_FUNC_L(7), 807 /* 73: L8/Paste */ KEYSYM_FUNC_L(8), 808 /* 74: */ KEYSYM_HOLE, 809 /* 75: */ KEYSYM_HOLE, 810 /* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L, 811 /* 77: A */ 'A', 812 /* 78: S */ 'S', 813 /* 79: D */ 'D', 814 /* 80: F */ 'F', 815 /* 81: G */ 'G', 816 /* 82: H */ 'H', 817 /* 83: J */ 'J', 818 /* 84: K */ 'K', 819 /* 85: L */ 'L', 820 /* 86: ; */ ':', 821 /* 87: apostr. */ '"', 822 /* 88: backslash */ '|', 823 /* 89: Return */ '\r', 824 /* 90: KP_Enter */ KEYSYM_FUNC_N(11), 825 /* 91: R10/Left */ KEYSYM_STRING | 3, 826 /* 92: R11/KP_5 */ KEYSYM_FUNC_R(11), 827 /* 93: R12/Right */ KEYSYM_STRING | 4, 828 /* 94: KP_Insert */ KEYSYM_FUNC_N(8), 829 /* 95: L9/Find */ KEYSYM_FUNC_L(9), 830 /* 96: */ KEYSYM_HOLE, 831 /* 97: L10/Cut */ KEYSYM_FUNC_L(10), 832 /* 98: Num_Lock */ KEYSYM_INVMOD | KBMOD_NUMLOCK, 833 /* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L, 834 /* 100: Z */ 'Z', 835 /* 101: X */ 'X', 836 /* 102: C */ 'C', 837 /* 103: V */ 'V', 838 /* 104: B */ 'B', 839 /* 105: N */ 'N', 840 /* 106: M */ 'M', 841 /* 107: , */ '<', 842 /* 108: . */ '>', 843 /* 109: / */ '?', 844 /* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R, 845 /* 111: Linefeed */ '\n', 846 /* 112: R13/End */ KEYSYM_FUNC_R(13), 847 /* 113: R14/Down */ KEYSYM_STRING | 2, 848 /* 114: R15/PgDn */ KEYSYM_FUNC_R(15), 849 /* 115: */ KEYSYM_HOLE, 850 /* 116: */ KEYSYM_HOLE, 851 /* 117: */ KEYSYM_HOLE, 852 /* 118: L16/Help */ KEYSYM_FUNC_L(16), 853 /* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK, 854 /* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L, 855 /* 121: SpaceBar */ ' ', 856 /* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R, 857 /* 123: */ KEYSYM_HOLE, 858 /* 124: */ KEYSYM_HOLE, 859 /* 125: KP_Add */ KEYSYM_FUNC_N(14), 860 /* 126: */ KEYSYM_HW_ERR, 861 /* 127: */ KEYSYM_ALL_UP, 862 }; 863 864 865 866 /* 867 * Strings indexed by: (KEYSYM_STRING | idx) 868 */ 869 char kbd_stringtab[16][10] = { 870 { 0x1b, '[', 'H', 0 }, /* Home */ 871 { 0x1b, '[', 'A', 0 }, /* Up */ 872 { 0x1b, '[', 'B', 0 }, /* Down */ 873 { 0x1b, '[', 'D', 0 }, /* Left */ 874 { 0x1b, '[', 'C', 0 }, /* Right */ 875 }; 876 877 /* 878 * The "NumLock" map, which is used to remap 879 * function keysyms when NumLock is on. 880 */ 881 unsigned short kbd_numlock_map[64] = { 882 /* KEYSYM_FUNC_L: Identity map */ 883 0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607, 884 0x608, 0x609, 0x60a, 0x60b, 0x60c, 0x60d, 0x60e, 0x60f, 885 886 /* KEYSYM_FUNC_R: remap to numbers... */ 887 0x610, 0x611, 0x612, 888 '=', '/', '*', 889 '7', '8', '9', 890 '4', '5', '6', 891 '1', '2', '3', 892 0x61f, 893 894 /* KEYSYM_FUNC_F: Identity map */ 895 0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627, 896 0x628, 0x629, 0x62a, 0x62b, 0x62c, 0x62d, 0x62e, 0x62f, 897 898 /* KEYSYM_FUNC_N: remap just a few... */ 899 0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, '0', 900 0x638, '.', '\r', 0x63b, 0x63c, '+', '-', 0x63f, 901 }; 902 903 904 /* 905 * Keyboard descriptions for each type. 906 */ 907 908 /* Treat type 2 as type 3 (close enough) */ 909 #define kbd_type2 kbd_type3 910 911 static struct keyboard kbd_type3 = { 912 keymap_release, 913 keymap_control, 914 keymap_s3_lc, 915 keymap_s3_uc, 916 }; 917 918 static struct keyboard kbd_type4 = { 919 keymap_release, 920 keymap_control, 921 keymap_s4_lc, 922 keymap_s4_uc, 923 }; 924 925 /* Treat type 5 as type 4 (close enough) */ 926 #define kbd_type5 kbd_type4 927 928 struct keyboard * keyboards[] = { 929 0, /* type 0 */ 930 0, /* type 1 */ 931 &kbd_type2, 932 &kbd_type3, 933 &kbd_type4, 934 &kbd_type5, 935 }; 936 int kbd_max_type = 5; 937