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