1 1.6 aymeric /* $NetBSD: din-kbdmap.c,v 1.6 2000/09/27 08:28:35 aymeric Exp $ */ 2 1.6 aymeric 3 1.6 aymeric #include <unistd.h> 4 1.2 chopps 5 1.5 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 DA, '\'', 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, 'z', 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 C, '', 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 C, '', 65 1.1 mw C, '', 66 1.1 mw 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, '<', /* 0x30 */ 72 1.1 mw C, 'y', 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.4 chopps S, 0x33, /* F8 */ 111 1.4 chopps S, 0x38, /* 0x58 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.4 chopps K, '+', 118 1.1 mw S, 0x42, /* HELP */ 119 1.1 mw }, 120 1.1 mw 121 1.1 mw /* shifted map */ 122 1.1 mw { 123 1.1 mw 0, '~', /* 0x00 */ 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, '/', 131 1.1 mw 0, '(', /* 0x08 */ 132 1.1 mw 0, ')', 133 1.1 mw 0, '=', 134 1.1 mw 0, '?', 135 1.1 mw DG, '`', 136 1.1 mw 0, '|', 137 1.1 mw 0, 0, 138 1.1 mw K, '0', 139 1.1 mw C, 'Q', /* 0x10 */ 140 1.1 mw C, 'W', 141 1.1 mw C, 'E', 142 1.1 mw C, 'R', 143 1.1 mw C, 'T', 144 1.1 mw C, 'Z', 145 1.1 mw C, 'U', 146 1.1 mw C, 'I', 147 1.1 mw C, 'O', /* 0x18 */ 148 1.1 mw C, 'P', 149 1.1 mw C, '', 150 1.1 mw 0, '*', 151 1.1 mw 0, 0, 152 1.1 mw K, '1', 153 1.1 mw K, '2', 154 1.1 mw K, '3', 155 1.1 mw C, 'A', /* 0x20 */ 156 1.1 mw C, 'S', 157 1.1 mw C, 'D', 158 1.1 mw C, 'F', 159 1.1 mw C, 'G', 160 1.1 mw C, 'H', 161 1.1 mw C, 'J', 162 1.1 mw C, 'K', 163 1.1 mw C, 'L', /* 0x28 */ 164 1.1 mw C, '', 165 1.1 mw C, '', 166 1.1 mw 0, '^', 167 1.1 mw 0, 0, 168 1.1 mw K, '4', 169 1.1 mw K, '5', 170 1.1 mw K, '6', 171 1.1 mw 0, '>', /* 0x30 */ 172 1.1 mw C, 'Y', 173 1.1 mw C, 'X', 174 1.1 mw C, 'C', 175 1.1 mw C, 'V', 176 1.1 mw C, 'B', 177 1.1 mw C, 'N', 178 1.1 mw C, 'M', 179 1.1 mw 0, ';', /* 0x38 */ 180 1.1 mw 0, ':', 181 1.1 mw 0, '_', 182 1.1 mw 0, 0, 183 1.1 mw K, '.', 184 1.1 mw K, '7', 185 1.1 mw K, '8', 186 1.1 mw K, '9', 187 1.1 mw 0, ' ', /* 0x40 */ 188 1.1 mw 0, DEL, /* really BS, DEL & BS swapped */ 189 1.1 mw S, 0x99, /* shift TAB */ 190 1.1 mw K, '\r', /* enter */ 191 1.1 mw 0, '\r', /* return */ 192 1.1 mw 0, ESC, 193 1.1 mw 0, '\b', /* really DEL, BS & DEL swapped */ 194 1.1 mw 0, 0, 195 1.1 mw 0, 0, /* 0x48 */ 196 1.1 mw 0, 0, 197 1.1 mw K, '-', 198 1.1 mw 0, 0, 199 1.1 mw S, 0x47, /* shift CRSR UP */ 200 1.1 mw S, 0x4C, /* shift CRSR DOWN */ 201 1.1 mw S, 0x51, /* shift CRSR RIGHT */ 202 1.1 mw S, 0x57, /* shift CRSR LEFT */ 203 1.1 mw S, 0x5D, /* 0x50 shift F1 */ 204 1.1 mw S, 0x63, /* shift F2 */ 205 1.1 mw S, 0x69, /* shift F3 */ 206 1.1 mw S, 0x6F, /* shift F4 */ 207 1.1 mw S, 0x75, /* shift F5 */ 208 1.1 mw S, 0x7B, /* shift F6 */ 209 1.1 mw S, 0x81, /* shift F7 */ 210 1.4 chopps S, 0x87, /* shift F8 */ 211 1.4 chopps S, 0x8D, /* 0x58 shift F9 */ 212 1.1 mw S, 0x93, /* shift F10 */ 213 1.1 mw K, '{', 214 1.1 mw K, '}', 215 1.1 mw K, '/', 216 1.1 mw K, '*', 217 1.4 chopps K, '+', 218 1.1 mw S, 0x42, /* HELP (no special shift code) */ 219 1.1 mw }, 220 1.1 mw 221 1.1 mw 222 1.1 mw /* alt map */ 223 1.1 mw { 224 1.1 mw 0, '`', /* 0x00 */ 225 1.1 mw 0, '', 226 1.4 chopps 0, '@', 227 1.1 mw 0, '', 228 1.4 chopps 0, '', 229 1.1 mw 0, '', 230 1.1 mw 0, '', 231 1.1 mw 0, '', 232 1.1 mw 0, '', /* 0x08 */ 233 1.1 mw 0, '', 234 1.1 mw 0, '', 235 1.1 mw 0, '-', 236 1.1 mw 0, '=', 237 1.1 mw 0, '\\', 238 1.1 mw 0, 0, 239 1.1 mw K, '0', 240 1.1 mw C, '', /* 0x10 */ 241 1.1 mw 0, '', 242 1.1 mw 0, '', 243 1.1 mw 0, '', 244 1.1 mw C, '', 245 1.1 mw 0, '', 246 1.1 mw 0, '', 247 1.1 mw 0, '', 248 1.1 mw C, '', /* 0x18 */ 249 1.1 mw 0, '', 250 1.1 mw 0, '[', 251 1.1 mw 0, ']', 252 1.1 mw 0, 0, 253 1.1 mw K, '1', 254 1.1 mw K, '2', 255 1.1 mw K, '3', 256 1.1 mw C, '', /* 0x20 */ 257 1.1 mw 0, '', 258 1.1 mw C, '', 259 1.4 chopps DA, '\'', 260 1.1 mw DG, '`', 261 1.1 mw DC, '^', 262 1.1 mw DT, '~', 263 1.1 mw DD, '', 264 1.1 mw 0, '', /* 0x28 */ 265 1.1 mw 0, ';', 266 1.1 mw 0, '\'', 267 1.1 mw 0, 0, 268 1.1 mw 0, 0, 269 1.1 mw K, '4', 270 1.1 mw K, '5', 271 1.1 mw K, '6', 272 1.4 chopps 0, '<', /* 0x30 */ 273 1.1 mw 0, '', 274 1.1 mw 0, '', 275 1.1 mw C, '', 276 1.1 mw 0, '', 277 1.1 mw 0, '', 278 1.1 mw 0, '', 279 1.1 mw 0, '', 280 1.1 mw 0, ',', /* 0x38 */ 281 1.1 mw 0, '.', 282 1.1 mw 0, '/', 283 1.1 mw 0, 0, 284 1.1 mw K, '.', 285 1.1 mw K, '7', 286 1.1 mw K, '8', 287 1.1 mw K, '9', 288 1.1 mw 0, ' ', /* 0x40 */ 289 1.1 mw 0, DEL, /* really BS, DEL & BS swapped */ 290 1.1 mw 0, '\t', 291 1.1 mw K, '\r', /* enter */ 292 1.1 mw 0, '\r', /* return */ 293 1.1 mw S, 0x9d, /* CSI */ 294 1.1 mw 0, '\b', /* really DEL, BS & DEL swapped */ 295 1.1 mw 0, 0, 296 1.1 mw 0, 0, /* 0x48 */ 297 1.1 mw 0, 0, 298 1.1 mw K, '-', 299 1.1 mw 0, 0, 300 1.1 mw S, 0x00, /* now it gets hairy.. CRSR UP */ 301 1.1 mw S, 0x04, /* CRSR DOWN */ 302 1.1 mw S, 0x08, /* CRSR RIGHT */ 303 1.1 mw S, 0x0C, /* CRSR LEFT */ 304 1.1 mw S, 0x10, /* 0x50 F1 */ 305 1.1 mw S, 0x15, /* F2 */ 306 1.1 mw S, 0x1A, /* F3 */ 307 1.1 mw S, 0x1F, /* F4 */ 308 1.1 mw S, 0x24, /* F5 */ 309 1.1 mw S, 0x29, /* F6 */ 310 1.1 mw S, 0x2E, /* F7 */ 311 1.4 chopps S, 0x33, /* F8 */ 312 1.4 chopps S, 0x38, /* 0x58 F9 */ 313 1.1 mw S, 0x3D, /* F10 */ 314 1.4 chopps K, '[', 315 1.4 chopps K, ']', 316 1.1 mw K, '/', 317 1.1 mw K, '*', 318 1.4 chopps K, '+', 319 1.1 mw S, 0x42, /* HELP */ 320 1.1 mw }, 321 1.1 mw 322 1.1 mw /* shift alt map */ 323 1.1 mw { 324 1.1 mw 0, '~', /* 0x00 */ 325 1.1 mw 0, '!', 326 1.4 chopps 0, '', 327 1.1 mw 0, '#', 328 1.4 chopps 0, '', 329 1.1 mw 0, '%', 330 1.1 mw 0, '^', 331 1.1 mw 0, '&', 332 1.1 mw 0, '*', /* 0x08 */ 333 1.1 mw 0, '(', 334 1.1 mw 0, ')', 335 1.1 mw 0, '_', 336 1.1 mw 0, '+', 337 1.1 mw 0, '|', 338 1.1 mw 0, 0, 339 1.1 mw K, '0', 340 1.1 mw C, '', /* 0x10 */ 341 1.1 mw 0, '', 342 1.1 mw 0, '', 343 1.1 mw 0, '', 344 1.1 mw C, '', 345 1.1 mw 0, '', 346 1.1 mw 0, '', 347 1.1 mw 0, '', 348 1.1 mw C, '', /* 0x18 */ 349 1.1 mw 0, '', 350 1.4 chopps 0, '{', 351 1.4 chopps 0, '}', 352 1.1 mw 0, 0, 353 1.1 mw K, '1', 354 1.1 mw K, '2', 355 1.1 mw K, '3', 356 1.1 mw C, '', /* 0x20 */ 357 1.1 mw 0, '', 358 1.1 mw C, '', 359 1.4 chopps DA, '\'', 360 1.1 mw DG, '`', 361 1.1 mw DC, '^', 362 1.1 mw DT, '~', 363 1.1 mw DD, '', 364 1.1 mw 0, '', /* 0x28 */ 365 1.4 chopps 0, ':', 366 1.4 chopps 0, '"', 367 1.4 chopps 0, '^', 368 1.1 mw 0, 0, 369 1.1 mw K, '4', 370 1.1 mw K, '5', 371 1.1 mw K, '6', 372 1.4 chopps 0, '>', /* 0x30 */ 373 1.4 chopps 0, '', 374 1.4 chopps 0, '', 375 1.4 chopps C, '', 376 1.1 mw 0, '', 377 1.1 mw 0, '', 378 1.4 chopps 0, '', 379 1.4 chopps 0, '', 380 1.4 chopps 0, '<', /* 0x38 */ 381 1.4 chopps 0, '>', 382 1.4 chopps 0, '?', 383 1.1 mw 0, 0, 384 1.1 mw K, '.', 385 1.1 mw K, '7', 386 1.1 mw K, '8', 387 1.1 mw K, '9', 388 1.1 mw 0, ' ', /* 0x40 */ 389 1.1 mw 0, DEL, /* really BS, DEL & BS swapped */ 390 1.1 mw 0, '\t', 391 1.1 mw K, '\r', /* enter */ 392 1.1 mw 0, '\r', /* return */ 393 1.1 mw S, 0x9d, /* CSI */ 394 1.1 mw 0, '\b', /* really DEL, BS & DEL swapped */ 395 1.1 mw 0, 0, 396 1.1 mw 0, 0, /* 0x48 */ 397 1.1 mw 0, 0, 398 1.1 mw K, '-', 399 1.1 mw 0, 0, 400 1.1 mw S, 0x00, /* now it gets hairy.. CRSR UP */ 401 1.1 mw S, 0x04, /* CRSR DOWN */ 402 1.1 mw S, 0x08, /* CRSR RIGHT */ 403 1.1 mw S, 0x0C, /* CRSR LEFT */ 404 1.1 mw S, 0x10, /* 0x50 F1 */ 405 1.1 mw S, 0x15, /* F2 */ 406 1.1 mw S, 0x1A, /* F3 */ 407 1.1 mw S, 0x1F, /* F4 */ 408 1.1 mw S, 0x24, /* F5 */ 409 1.1 mw S, 0x29, /* F6 */ 410 1.1 mw S, 0x2E, /* F7 */ 411 1.1 mw S, 0x33, /* 0x58 F8 */ 412 1.1 mw S, 0x38, /* F9 */ 413 1.1 mw S, 0x3D, /* F10 */ 414 1.4 chopps K, '{', 415 1.4 chopps K, '}', 416 1.1 mw K, '/', 417 1.1 mw K, '*', 418 1.4 chopps K, '+', 419 1.1 mw S, 0x42, /* HELP */ 420 1.1 mw }, 421 1.1 mw 422 1.1 mw { 423 1.1 mw /* string table. If there's a better way to get the offsets into the 424 1.1 mw above table, please tell me.. 425 1.1 mw 426 1.1 mw NOTE: save yourself and others a lot of grief by *not* using 427 1.1 mw CSI == 0x9b, using the two-character sequence gives 428 1.1 mw much less trouble, especially in GNU-Emacs.. */ 429 1.1 mw 430 1.1 mw 3, ESC, '[', 'A', /* 0x00: CRSR UP */ 431 1.1 mw 3, ESC, '[', 'B', /* 0x04: CRSR DOWN */ 432 1.1 mw 3, ESC, '[', 'C', /* 0x08: CRSR RIGHT */ 433 1.1 mw 3, ESC, '[', 'D', /* 0x0C: CRSR LEFT */ 434 1.1 mw 4, ESC, '[', '0', '~', /* 0x10: F1 */ 435 1.1 mw 4, ESC, '[', '1', '~', /* 0x15: F2 */ 436 1.1 mw 4, ESC, '[', '2', '~', /* 0x1A: F3 */ 437 1.1 mw 4, ESC, '[', '3', '~', /* 0x1F: F4 */ 438 1.1 mw 4, ESC, '[', '4', '~', /* 0x24: F5 */ 439 1.1 mw 4, ESC, '[', '5', '~', /* 0x29: F6 */ 440 1.1 mw 4, ESC, '[', '6', '~', /* 0x2E: F7 */ 441 1.1 mw 4, ESC, '[', '7', '~', /* 0x33: F8 */ 442 1.1 mw 4, ESC, '[', '8', '~', /* 0x38: F9 */ 443 1.1 mw 4, ESC, '[', '9', '~', /* 0x3D: F10 */ 444 1.1 mw 4, ESC, '[', '?', '~', /* 0x42: HELP */ 445 1.1 mw 446 1.1 mw 4, ESC, '[', 'T', '~', /* 0x47: shift CRSR UP */ 447 1.1 mw 4, ESC, '[', 'S', '~', /* 0x4C: shift CRSR DOWN */ 448 1.1 mw 5, ESC, '[', ' ', '@', '~', /* 0x51: shift CRSR RIGHT */ 449 1.1 mw 5, ESC, '[', ' ', 'A', '~', /* 0x57: shift CRSR LEFT */ 450 1.1 mw 5, ESC, '[', '1', '0', '~', /* 0x5D: shift F1 */ 451 1.1 mw 5, ESC, '[', '1', '1', '~', /* 0x63: shift F2 */ 452 1.1 mw 5, ESC, '[', '1', '2', '~', /* 0x69: shift F3 */ 453 1.1 mw 5, ESC, '[', '1', '3', '~', /* 0x6F: shift F4 */ 454 1.1 mw 5, ESC, '[', '1', '4', '~', /* 0x75: shift F5 */ 455 1.1 mw 5, ESC, '[', '1', '5', '~', /* 0x7B: shift F6 */ 456 1.1 mw 5, ESC, '[', '1', '6', '~', /* 0x81: shift F7 */ 457 1.1 mw 5, ESC, '[', '1', '7', '~', /* 0x87: shift F8 */ 458 1.1 mw 5, ESC, '[', '1', '8', '~', /* 0x8D: shift F9 */ 459 1.1 mw 5, ESC, '[', '1', '9', '~', /* 0x93: shift F10 */ 460 1.1 mw 3, ESC, '[', 'Z', /* 0x99: shift TAB */ 461 1.1 mw 2, ESC, '[', /* 0x9D: alt ESC == CSI */ 462 1.1 mw }, 463 1.1 mw }; 464 1.1 mw 465 1.1 mw unsigned char acctable[KBD_NUM_ACC][64] = { 466 1.1 mw { "@BCDFGHJKLMNPQRSTVWXYZ[\\]^_" 467 1.1 mw "`bcdfghjklmnpqrstvwxyz{|}~\177"}, /* KBD_ACC_GRAVE */ 468 1.1 mw 469 1.1 mw { "@BCDFGHJKLMNPQRSTVWXYZ[\\]^_" 470 1.1 mw "`bcdfghjklmnpqrstvwxyz{|}~\177"}, /* KBD_ACC_ACUTE */ 471 1.1 mw 472 1.1 mw { "@BCDFGHJKLMNPQRSTVWXYZ[\\]^_" 473 1.1 mw "`bcdfghjklmnpqrstvwxyz{|}~\177"}, /* KBD_ACC_CIRC */ 474 1.1 mw 475 1.1 mw { "@BCDEFGHIJKLMPQRSTUVWXYZ[\\]^_" 476 1.1 mw "`bcdefghijklmpqrstuvwxyz{|}~\177"}, /* KBD_ACC_TILDE */ 477 1.1 mw 478 1.1 mw { "@BCDFGHJKLMNPQRSTVWXYZ[\\]^_" 479 1.1 mw "`bcdfghjklmnpqrstvwxyz{|}~\177"}, /* KBD_ACC_DIER */ 480 1.1 mw }; 481 1.1 mw 482 1.1 mw 483 1.6 aymeric int 484 1.6 aymeric main(void) { 485 1.6 aymeric write(1, &kbdmap, sizeof (kbdmap)); 486 1.6 aymeric 487 1.6 aymeric return 0; 488 1.1 mw } 489