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