1 #include "kbdmap.h" 2 3 /* define a default keymap. This can be changed by keyboard ioctl's 4 (later at least..) */ 5 6 /* mode shortcuts: */ 7 #define S KBD_MODE_STRING 8 #define DG (KBD_MODE_DEAD | KBD_MODE_GRAVE) 9 #define DA (KBD_MODE_DEAD | KBD_MODE_ACUTE) 10 #define DC (KBD_MODE_DEAD | KBD_MODE_CIRC) 11 #define DT (KBD_MODE_DEAD | KBD_MODE_TILDE) 12 #define DD (KBD_MODE_DEAD | KBD_MODE_DIER) 13 #define C KBD_MODE_CAPS 14 #define K KBD_MODE_KPAD 15 16 struct kbdmap kbdmap; 17 struct kbdmap ascii_kbdmap = { 18 /* normal map */ 19 { 20 0, '`', /* 0x00 */ 21 0, '1', 22 0, '2', 23 0, '3', 24 0, '4', 25 0, '5', 26 0, '6', 27 0, '7', 28 0, '8', /* 0x08 */ 29 0, '9', 30 0, '0', 31 0, '-', 32 0, '=', 33 0, '\\', 34 0, 0, 35 K, '0', 36 C, 'q', /* 0x10 */ 37 C, 'w', 38 C, 'e', 39 C, 'r', 40 C, 't', 41 C, 'y', 42 C, 'u', 43 C, 'i', 44 C, 'o', /* 0x18 */ 45 C, 'p', 46 0, '[', 47 0, ']', 48 0, 0, 49 K, '1', 50 K, '2', 51 K, '3', 52 C, 'a', /* 0x20 */ 53 C, 's', 54 C, 'd', 55 C, 'f', 56 C, 'g', 57 C, 'h', 58 C, 'j', 59 C, 'k', 60 C, 'l', /* 0x28 */ 61 0, ';', 62 0, '\'', 63 0, 0, 64 0, 0, 65 K, '4', 66 K, '5', 67 K, '6', 68 0, 0, /* 0x30 */ 69 C, 'z', 70 C, 'x', 71 C, 'c', 72 C, 'v', 73 C, 'b', 74 C, 'n', 75 C, 'm', 76 0, ',', /* 0x38 */ 77 0, '.', 78 0, '/', 79 0, 0, 80 K, '.', 81 K, '7', 82 K, '8', 83 K, '9', 84 0, ' ', /* 0x40 */ 85 0, DEL, /* really BS, DEL & BS swapped */ 86 0, '\t', 87 K, '\r', /* enter */ 88 0, '\r', /* return */ 89 0, ESC, 90 0, '\b', /* really DEL, BS & DEL swapped */ 91 0, 0, 92 0, 0, /* 0x48 */ 93 0, 0, 94 K, '-', 95 0, 0, 96 S, 0x00, /* now it gets hairy.. CRSR UP */ 97 S, 0x04, /* CRSR DOWN */ 98 S, 0x08, /* CRSR RIGHT */ 99 S, 0x0C, /* CRSR LEFT */ 100 S, 0x10, /* 0x50 F1 */ 101 S, 0x15, /* F2 */ 102 S, 0x1A, /* F3 */ 103 S, 0x1F, /* F4 */ 104 S, 0x24, /* F5 */ 105 S, 0x29, /* F6 */ 106 S, 0x2E, /* F7 */ 107 S, 0x33, /* 0x58 F8 */ 108 S, 0x38, /* F9 */ 109 S, 0x3D, /* F10 */ 110 K, '(', 111 K, ')', 112 K, '/', 113 K, '*', 114 S, 0x42, /* HELP */ 115 }, 116 117 /* shifted map */ 118 { 119 0, '~', /* 0x00 */ 120 0, '!', 121 0, '@', 122 0, '#', 123 0, '$', 124 0, '%', 125 0, '^', 126 0, '&', 127 0, '*', /* 0x08 */ 128 0, '(', 129 0, ')', 130 0, '_', 131 0, '+', 132 0, '|', 133 0, 0, 134 K, '0', 135 C, 'Q', /* 0x10 */ 136 C, 'W', 137 C, 'E', 138 C, 'R', 139 C, 'T', 140 C, 'Y', 141 C, 'U', 142 C, 'I', 143 C, 'O', /* 0x18 */ 144 C, 'P', 145 0, '{', 146 0, '}', 147 0, 0, 148 K, '1', 149 K, '2', 150 K, '3', 151 C, 'A', /* 0x20 */ 152 C, 'S', 153 C, 'D', 154 C, 'F', 155 C, 'G', 156 C, 'H', 157 C, 'J', 158 C, 'K', 159 C, 'L', /* 0x28 */ 160 0, ':', 161 0, '\"', 162 0, 0, 163 0, 0, 164 K, '4', 165 K, '5', 166 K, '6', 167 0, 0, /* 0x30 */ 168 C, 'Z', 169 C, 'X', 170 C, 'C', 171 C, 'V', 172 C, 'B', 173 C, 'N', 174 C, 'M', 175 0, '<', /* 0x38 */ 176 0, '>', 177 0, '?', 178 0, 0, 179 K, '.', 180 K, '7', 181 K, '8', 182 K, '9', 183 0, ' ', /* 0x40 */ 184 0, DEL, /* really BS, DEL & BS swapped */ 185 S, 0x99, /* shift TAB */ 186 K, '\r', /* enter */ 187 0, '\r', /* return */ 188 0, ESC, 189 0, '\b', /* really DEL, BS & DEL swapped */ 190 0, 0, 191 0, 0, /* 0x48 */ 192 0, 0, 193 K, '-', 194 0, 0, 195 S, 0x47, /* shift CRSR UP */ 196 S, 0x4C, /* shift CRSR DOWN */ 197 S, 0x51, /* shift CRSR RIGHT */ 198 S, 0x57, /* shift CRSR LEFT */ 199 S, 0x5D, /* 0x50 shift F1 */ 200 S, 0x63, /* shift F2 */ 201 S, 0x69, /* shift F3 */ 202 S, 0x6F, /* shift F4 */ 203 S, 0x75, /* shift F5 */ 204 S, 0x7B, /* shift F6 */ 205 S, 0x81, /* shift F7 */ 206 S, 0x87, /* 0x58 shift F8 */ 207 S, 0x8D, /* shift F9 */ 208 S, 0x93, /* shift F10 */ 209 K, '(', 210 K, ')', 211 K, '/', 212 K, '*', 213 S, 0x42, /* HELP (no special shift code) */ 214 }, 215 216 217 /* alt map */ 218 { 219 0, '`', /* 0x00 */ 220 0, '�', 221 0, '�', 222 0, '�', 223 0, '�', 224 0, '�', 225 0, '�', 226 0, '�', 227 0, '�', /* 0x08 */ 228 0, '�', 229 0, '�', 230 0, '-', 231 0, '=', 232 0, '\\', 233 0, 0, 234 K, '0', 235 C, '�', /* 0x10 */ 236 0, '�', 237 0, '�', 238 0, '�', 239 C, '�', 240 0, '�', 241 0, '�', 242 0, '�', 243 C, '�', /* 0x18 */ 244 0, '�', 245 0, '[', 246 0, ']', 247 0, 0, 248 K, '1', 249 K, '2', 250 K, '3', 251 C, '�', /* 0x20 */ 252 0, '�', 253 C, '�', 254 DA, '�', 255 DG, '`', 256 DC, '^', 257 DT, '~', 258 DD, '�', 259 0, '�', /* 0x28 */ 260 0, ';', 261 0, '\'', 262 0, 0, 263 0, 0, 264 K, '4', 265 K, '5', 266 K, '6', 267 0, 0, /* 0x30 */ 268 0, '�', 269 0, '�', 270 C, '�', 271 0, '�', 272 0, '�', 273 0, '�', 274 0, '�', 275 0, ',', /* 0x38 */ 276 0, '.', 277 0, '/', 278 0, 0, 279 K, '.', 280 K, '7', 281 K, '8', 282 K, '9', 283 0, ' ', /* 0x40 */ 284 0, DEL, /* really BS, DEL & BS swapped */ 285 0, '\t', 286 K, '\r', /* enter */ 287 0, '\r', /* return */ 288 S, 0x9d, /* CSI */ 289 0, '\b', /* really DEL, BS & DEL swapped */ 290 0, 0, 291 0, 0, /* 0x48 */ 292 0, 0, 293 K, '-', 294 0, 0, 295 S, 0x00, /* now it gets hairy.. CRSR UP */ 296 S, 0x04, /* CRSR DOWN */ 297 S, 0x08, /* CRSR RIGHT */ 298 S, 0x0C, /* CRSR LEFT */ 299 S, 0x10, /* 0x50 F1 */ 300 S, 0x15, /* F2 */ 301 S, 0x1A, /* F3 */ 302 S, 0x1F, /* F4 */ 303 S, 0x24, /* F5 */ 304 S, 0x29, /* F6 */ 305 S, 0x2E, /* F7 */ 306 S, 0x33, /* 0x58 F8 */ 307 S, 0x38, /* F9 */ 308 S, 0x3D, /* F10 */ 309 K, '(', 310 K, ')', 311 K, '/', 312 K, '*', 313 S, 0x42, /* HELP */ 314 }, 315 316 /* shift alt map */ 317 { 318 0, '~', /* 0x00 */ 319 0, '!', 320 0, '@', 321 0, '#', 322 0, '$', 323 0, '%', 324 0, '^', 325 0, '&', 326 0, '*', /* 0x08 */ 327 0, '(', 328 0, ')', 329 0, '_', 330 0, '+', 331 0, '|', 332 0, 0, 333 K, '0', 334 C, '�', /* 0x10 */ 335 0, '�', 336 0, '�', 337 0, '�', 338 C, '�', 339 0, '�', 340 0, '�', 341 0, '�', 342 C, '�', /* 0x18 */ 343 0, '�', 344 0, '[', 345 0, ']', 346 0, 0, 347 K, '1', 348 K, '2', 349 K, '3', 350 C, '�', /* 0x20 */ 351 0, '�', 352 C, '�', 353 DA, '�', 354 DG, '`', 355 DC, '^', 356 DT, '~', 357 DD, '�', 358 0, '�', /* 0x28 */ 359 0, ';', 360 0, '\'', 361 0, 0, 362 0, 0, 363 K, '4', 364 K, '5', 365 K, '6', 366 0, 0, /* 0x30 */ 367 0, '�', 368 0, '�', 369 C, '�', 370 0, '�', 371 0, '�', 372 0, '�', 373 0, '�', 374 0, ',', /* 0x38 */ 375 0, '.', 376 0, '/', 377 0, 0, 378 K, '.', 379 K, '7', 380 K, '8', 381 K, '9', 382 0, ' ', /* 0x40 */ 383 0, DEL, /* really BS, DEL & BS swapped */ 384 0, '\t', 385 K, '\r', /* enter */ 386 0, '\r', /* return */ 387 S, 0x9d, /* CSI */ 388 0, '\b', /* really DEL, BS & DEL swapped */ 389 0, 0, 390 0, 0, /* 0x48 */ 391 0, 0, 392 K, '-', 393 0, 0, 394 S, 0x00, /* now it gets hairy.. CRSR UP */ 395 S, 0x04, /* CRSR DOWN */ 396 S, 0x08, /* CRSR RIGHT */ 397 S, 0x0C, /* CRSR LEFT */ 398 S, 0x10, /* 0x50 F1 */ 399 S, 0x15, /* F2 */ 400 S, 0x1A, /* F3 */ 401 S, 0x1F, /* F4 */ 402 S, 0x24, /* F5 */ 403 S, 0x29, /* F6 */ 404 S, 0x2E, /* F7 */ 405 S, 0x33, /* 0x58 F8 */ 406 S, 0x38, /* F9 */ 407 S, 0x3D, /* F10 */ 408 K, '(', 409 K, ')', 410 K, '/', 411 K, '*', 412 S, 0x42, /* HELP */ 413 }, 414 415 { 416 /* string table. If there's a better way to get the offsets into the 417 above table, please tell me.. 418 419 NOTE: save yourself and others a lot of grief by *not* using 420 CSI == 0x9b, using the two-character sequence gives 421 much less trouble, especially in GNU-Emacs.. */ 422 423 3, ESC, '[', 'A', /* 0x00: CRSR UP */ 424 3, ESC, '[', 'B', /* 0x04: CRSR DOWN */ 425 3, ESC, '[', 'C', /* 0x08: CRSR RIGHT */ 426 3, ESC, '[', 'D', /* 0x0C: CRSR LEFT */ 427 4, ESC, '[', '0', '~', /* 0x10: F1 */ 428 4, ESC, '[', '1', '~', /* 0x15: F2 */ 429 4, ESC, '[', '2', '~', /* 0x1A: F3 */ 430 4, ESC, '[', '3', '~', /* 0x1F: F4 */ 431 4, ESC, '[', '4', '~', /* 0x24: F5 */ 432 4, ESC, '[', '5', '~', /* 0x29: F6 */ 433 4, ESC, '[', '6', '~', /* 0x2E: F7 */ 434 4, ESC, '[', '7', '~', /* 0x33: F8 */ 435 4, ESC, '[', '8', '~', /* 0x38: F9 */ 436 4, ESC, '[', '9', '~', /* 0x3D: F10 */ 437 4, ESC, '[', '?', '~', /* 0x42: HELP */ 438 439 4, ESC, '[', 'T', '~', /* 0x47: shift CRSR UP */ 440 4, ESC, '[', 'S', '~', /* 0x4C: shift CRSR DOWN */ 441 5, ESC, '[', ' ', '@', '~', /* 0x51: shift CRSR RIGHT */ 442 5, ESC, '[', ' ', 'A', '~', /* 0x57: shift CRSR LEFT */ 443 5, ESC, '[', '1', '0', '~', /* 0x5D: shift F1 */ 444 5, ESC, '[', '1', '1', '~', /* 0x63: shift F2 */ 445 5, ESC, '[', '1', '2', '~', /* 0x69: shift F3 */ 446 5, ESC, '[', '1', '3', '~', /* 0x6F: shift F4 */ 447 5, ESC, '[', '1', '4', '~', /* 0x75: shift F5 */ 448 5, ESC, '[', '1', '5', '~', /* 0x7B: shift F6 */ 449 5, ESC, '[', '1', '6', '~', /* 0x81: shift F7 */ 450 5, ESC, '[', '1', '7', '~', /* 0x87: shift F8 */ 451 5, ESC, '[', '1', '8', '~', /* 0x8D: shift F9 */ 452 5, ESC, '[', '1', '9', '~', /* 0x93: shift F10 */ 453 3, ESC, '[', 'Z', /* 0x99: shift TAB */ 454 2, ESC, '[', /* 0x9d: alt ESC == CSI */ 455 }, 456 }; 457 458 unsigned char acctable[KBD_NUM_ACC][64] = { 459 { "@�BCD�FGH�JKLMN�PQRST�VWXYZ[\\]^_" 460 "`�bcd�fgh�jklmn�pqrst�vwxyz{|}~\177"}, /* KBD_ACC_GRAVE */ 461 462 { "@�BCD�FGH�JKLMN�PQRST�VWXYZ[\\]^_" 463 "`�bcd�fgh�jklmn�pqrst�vwxyz{|}~\177"}, /* KBD_ACC_ACUTE */ 464 465 { "@�BCD�FGH�JKLMN�PQRST�VWXYZ[\\]^_" 466 "`�bcd�fgh�jklmn�pqrst�vwxyz{|}~\177"}, /* KBD_ACC_CIRC */ 467 468 { "@�BCDEFGHIJKLM��PQRSTUVWXYZ[\\]^_" 469 "`�bcdefghijklm��pqrstuvwxyz{|}~\177"}, /* KBD_ACC_TILDE */ 470 471 { "@�BCD�FGH�JKLMN�PQRST�VWXYZ[\\]^_" 472 "`�bcd�fgh�jklmn�pqrst�vwxyz{|}~\177"}, /* KBD_ACC_DIER */ 473 }; 474 475 476