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