kbdmap.c revision 1.8
11.8Schopps/* $NetBSD: kbdmap.c,v 1.8 1995/02/16 21:57:46 chopps Exp $ */ 21.5Schopps 31.8Schopps/* 41.8Schopps * Copyright (c) 1993 Markus Wild 51.8Schopps * All rights reserved. 61.8Schopps * 71.8Schopps * Redistribution and use in source and binary forms, with or without 81.8Schopps * modification, are permitted provided that the following conditions 91.8Schopps * are met: 101.8Schopps * 1. Redistributions of source code must retain the above copyright 111.8Schopps * notice, this list of conditions and the following disclaimer. 121.8Schopps * 2. Redistributions in binary form must reproduce the above copyright 131.8Schopps * notice, this list of conditions and the following disclaimer in the 141.8Schopps * documentation and/or other materials provided with the distribution. 151.8Schopps * 3. All advertising materials mentioning features or use of this software 161.8Schopps * must display the following acknowledgement: 171.8Schopps * This product includes software developed by Markus Wild. 181.8Schopps * 4. The name of the author may not be used to endorse or promote products 191.8Schopps * derived from this software without specific prior written permission 201.8Schopps * 211.8Schopps * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 221.8Schopps * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 231.8Schopps * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 241.8Schopps * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 251.8Schopps * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 261.8Schopps * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 271.8Schopps * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 281.8Schopps * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 291.8Schopps * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 301.8Schopps * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 311.8Schopps */ 321.6Schopps#include <amiga/dev/kbdmap.h> 331.1Smw 341.1Smw/* define a default keymap. This can be changed by keyboard ioctl's 351.1Smw (later at least..) */ 361.1Smw 371.1Smw/* mode shortcuts: */ 381.1Smw#define S KBD_MODE_STRING 391.1Smw#define DG (KBD_MODE_DEAD | KBD_MODE_GRAVE) 401.1Smw#define DA (KBD_MODE_DEAD | KBD_MODE_ACUTE) 411.1Smw#define DC (KBD_MODE_DEAD | KBD_MODE_CIRC) 421.1Smw#define DT (KBD_MODE_DEAD | KBD_MODE_TILDE) 431.1Smw#define DD (KBD_MODE_DEAD | KBD_MODE_DIER) 441.1Smw#define C KBD_MODE_CAPS 451.1Smw#define K KBD_MODE_KPAD 461.1Smw 471.3Smwstruct kbdmap kbdmap; 481.3Smwstruct kbdmap ascii_kbdmap = { 491.1Smw /* normal map */ 501.1Smw { 511.1Smw 0, '`', /* 0x00 */ 521.1Smw 0, '1', 531.1Smw 0, '2', 541.1Smw 0, '3', 551.1Smw 0, '4', 561.1Smw 0, '5', 571.1Smw 0, '6', 581.1Smw 0, '7', 591.1Smw 0, '8', /* 0x08 */ 601.1Smw 0, '9', 611.1Smw 0, '0', 621.1Smw 0, '-', 631.1Smw 0, '=', 641.1Smw 0, '\\', 651.1Smw 0, 0, 661.1Smw K, '0', 671.1Smw C, 'q', /* 0x10 */ 681.1Smw C, 'w', 691.1Smw C, 'e', 701.1Smw C, 'r', 711.1Smw C, 't', 721.1Smw C, 'y', 731.1Smw C, 'u', 741.1Smw C, 'i', 751.1Smw C, 'o', /* 0x18 */ 761.1Smw C, 'p', 771.1Smw 0, '[', 781.1Smw 0, ']', 791.1Smw 0, 0, 801.1Smw K, '1', 811.1Smw K, '2', 821.1Smw K, '3', 831.1Smw C, 'a', /* 0x20 */ 841.1Smw C, 's', 851.1Smw C, 'd', 861.1Smw C, 'f', 871.1Smw C, 'g', 881.1Smw C, 'h', 891.1Smw C, 'j', 901.1Smw C, 'k', 911.1Smw C, 'l', /* 0x28 */ 921.1Smw 0, ';', 931.1Smw 0, '\'', 941.1Smw 0, 0, 951.1Smw 0, 0, 961.1Smw K, '4', 971.1Smw K, '5', 981.1Smw K, '6', 991.1Smw 0, 0, /* 0x30 */ 1001.1Smw C, 'z', 1011.1Smw C, 'x', 1021.1Smw C, 'c', 1031.1Smw C, 'v', 1041.1Smw C, 'b', 1051.1Smw C, 'n', 1061.1Smw C, 'm', 1071.1Smw 0, ',', /* 0x38 */ 1081.1Smw 0, '.', 1091.1Smw 0, '/', 1101.1Smw 0, 0, 1111.1Smw K, '.', 1121.1Smw K, '7', 1131.1Smw K, '8', 1141.1Smw K, '9', 1151.1Smw 0, ' ', /* 0x40 */ 1161.1Smw 0, DEL, /* really BS, DEL & BS swapped */ 1171.1Smw 0, '\t', 1181.1Smw K, '\r', /* enter */ 1191.1Smw 0, '\r', /* return */ 1201.1Smw 0, ESC, 1211.1Smw 0, '\b', /* really DEL, BS & DEL swapped */ 1221.1Smw 0, 0, 1231.1Smw 0, 0, /* 0x48 */ 1241.1Smw 0, 0, 1251.1Smw K, '-', 1261.1Smw 0, 0, 1271.1Smw S, 0x00, /* now it gets hairy.. CRSR UP */ 1281.1Smw S, 0x04, /* CRSR DOWN */ 1291.1Smw S, 0x08, /* CRSR RIGHT */ 1301.1Smw S, 0x0C, /* CRSR LEFT */ 1311.1Smw S, 0x10, /* 0x50 F1 */ 1321.1Smw S, 0x15, /* F2 */ 1331.1Smw S, 0x1A, /* F3 */ 1341.1Smw S, 0x1F, /* F4 */ 1351.1Smw S, 0x24, /* F5 */ 1361.1Smw S, 0x29, /* F6 */ 1371.1Smw S, 0x2E, /* F7 */ 1381.1Smw S, 0x33, /* 0x58 F8 */ 1391.1Smw S, 0x38, /* F9 */ 1401.1Smw S, 0x3D, /* F10 */ 1411.1Smw K, '(', 1421.1Smw K, ')', 1431.1Smw K, '/', 1441.1Smw K, '*', 1451.1Smw S, 0x42, /* HELP */ 1461.1Smw }, 1471.1Smw 1481.1Smw /* shifted map */ 1491.1Smw { 1501.1Smw 0, '~', /* 0x00 */ 1511.1Smw 0, '!', 1521.1Smw 0, '@', 1531.1Smw 0, '#', 1541.1Smw 0, '$', 1551.1Smw 0, '%', 1561.1Smw 0, '^', 1571.1Smw 0, '&', 1581.1Smw 0, '*', /* 0x08 */ 1591.1Smw 0, '(', 1601.1Smw 0, ')', 1611.1Smw 0, '_', 1621.1Smw 0, '+', 1631.1Smw 0, '|', 1641.1Smw 0, 0, 1651.1Smw K, '0', 1661.1Smw C, 'Q', /* 0x10 */ 1671.1Smw C, 'W', 1681.1Smw C, 'E', 1691.1Smw C, 'R', 1701.1Smw C, 'T', 1711.1Smw C, 'Y', 1721.1Smw C, 'U', 1731.1Smw C, 'I', 1741.1Smw C, 'O', /* 0x18 */ 1751.1Smw C, 'P', 1761.1Smw 0, '{', 1771.1Smw 0, '}', 1781.1Smw 0, 0, 1791.1Smw K, '1', 1801.1Smw K, '2', 1811.1Smw K, '3', 1821.1Smw C, 'A', /* 0x20 */ 1831.1Smw C, 'S', 1841.1Smw C, 'D', 1851.1Smw C, 'F', 1861.1Smw C, 'G', 1871.1Smw C, 'H', 1881.1Smw C, 'J', 1891.1Smw C, 'K', 1901.1Smw C, 'L', /* 0x28 */ 1911.1Smw 0, ':', 1921.1Smw 0, '\"', 1931.1Smw 0, 0, 1941.1Smw 0, 0, 1951.1Smw K, '4', 1961.1Smw K, '5', 1971.1Smw K, '6', 1981.1Smw 0, 0, /* 0x30 */ 1991.1Smw C, 'Z', 2001.1Smw C, 'X', 2011.1Smw C, 'C', 2021.1Smw C, 'V', 2031.1Smw C, 'B', 2041.1Smw C, 'N', 2051.1Smw C, 'M', 2061.1Smw 0, '<', /* 0x38 */ 2071.1Smw 0, '>', 2081.1Smw 0, '?', 2091.1Smw 0, 0, 2101.1Smw K, '.', 2111.1Smw K, '7', 2121.1Smw K, '8', 2131.1Smw K, '9', 2141.1Smw 0, ' ', /* 0x40 */ 2151.1Smw 0, DEL, /* really BS, DEL & BS swapped */ 2161.1Smw S, 0x99, /* shift TAB */ 2171.3Smw K, '\r', /* enter */ 2181.3Smw 0, '\r', /* return */ 2191.1Smw 0, ESC, 2201.1Smw 0, '\b', /* really DEL, BS & DEL swapped */ 2211.1Smw 0, 0, 2221.1Smw 0, 0, /* 0x48 */ 2231.1Smw 0, 0, 2241.1Smw K, '-', 2251.1Smw 0, 0, 2261.1Smw S, 0x47, /* shift CRSR UP */ 2271.1Smw S, 0x4C, /* shift CRSR DOWN */ 2281.1Smw S, 0x51, /* shift CRSR RIGHT */ 2291.1Smw S, 0x57, /* shift CRSR LEFT */ 2301.1Smw S, 0x5D, /* 0x50 shift F1 */ 2311.1Smw S, 0x63, /* shift F2 */ 2321.1Smw S, 0x69, /* shift F3 */ 2331.1Smw S, 0x6F, /* shift F4 */ 2341.1Smw S, 0x75, /* shift F5 */ 2351.1Smw S, 0x7B, /* shift F6 */ 2361.1Smw S, 0x81, /* shift F7 */ 2371.1Smw S, 0x87, /* 0x58 shift F8 */ 2381.1Smw S, 0x8D, /* shift F9 */ 2391.1Smw S, 0x93, /* shift F10 */ 2401.1Smw K, '(', 2411.1Smw K, ')', 2421.1Smw K, '/', 2431.1Smw K, '*', 2441.1Smw S, 0x42, /* HELP (no special shift code) */ 2451.1Smw }, 2461.1Smw 2471.1Smw 2481.1Smw /* alt map */ 2491.1Smw { 2501.1Smw 0, '`', /* 0x00 */ 2511.1Smw 0, '�', 2521.1Smw 0, '�', 2531.1Smw 0, '�', 2541.1Smw 0, '�', 2551.1Smw 0, '�', 2561.1Smw 0, '�', 2571.1Smw 0, '�', 2581.1Smw 0, '�', /* 0x08 */ 2591.1Smw 0, '�', 2601.1Smw 0, '�', 2611.1Smw 0, '-', 2621.1Smw 0, '=', 2631.1Smw 0, '\\', 2641.1Smw 0, 0, 2651.1Smw K, '0', 2661.1Smw C, '�', /* 0x10 */ 2671.1Smw 0, '�', 2681.1Smw 0, '�', 2691.1Smw 0, '�', 2701.1Smw C, '�', 2711.1Smw 0, '�', 2721.1Smw 0, '�', 2731.1Smw 0, '�', 2741.1Smw C, '�', /* 0x18 */ 2751.1Smw 0, '�', 2761.1Smw 0, '[', 2771.1Smw 0, ']', 2781.1Smw 0, 0, 2791.1Smw K, '1', 2801.1Smw K, '2', 2811.1Smw K, '3', 2821.1Smw C, '�', /* 0x20 */ 2831.1Smw 0, '�', 2841.1Smw C, '�', 2851.1Smw DA, '�', 2861.1Smw DG, '`', 2871.1Smw DC, '^', 2881.1Smw DT, '~', 2891.1Smw DD, '�', 2901.1Smw 0, '�', /* 0x28 */ 2911.1Smw 0, ';', 2921.1Smw 0, '\'', 2931.1Smw 0, 0, 2941.1Smw 0, 0, 2951.1Smw K, '4', 2961.1Smw K, '5', 2971.1Smw K, '6', 2981.1Smw 0, 0, /* 0x30 */ 2991.1Smw 0, '�', 3001.1Smw 0, '�', 3011.1Smw C, '�', 3021.1Smw 0, '�', 3031.1Smw 0, '�', 3041.1Smw 0, '�', 3051.1Smw 0, '�', 3061.1Smw 0, ',', /* 0x38 */ 3071.1Smw 0, '.', 3081.1Smw 0, '/', 3091.1Smw 0, 0, 3101.1Smw K, '.', 3111.1Smw K, '7', 3121.1Smw K, '8', 3131.1Smw K, '9', 3141.1Smw 0, ' ', /* 0x40 */ 3151.1Smw 0, DEL, /* really BS, DEL & BS swapped */ 3161.1Smw 0, '\t', 3171.3Smw K, '\r', /* enter */ 3181.3Smw 0, '\r', /* return */ 3191.1Smw S, 0x9d, /* CSI */ 3201.1Smw 0, '\b', /* really DEL, BS & DEL swapped */ 3211.1Smw 0, 0, 3221.1Smw 0, 0, /* 0x48 */ 3231.1Smw 0, 0, 3241.1Smw K, '-', 3251.1Smw 0, 0, 3261.1Smw S, 0x00, /* now it gets hairy.. CRSR UP */ 3271.1Smw S, 0x04, /* CRSR DOWN */ 3281.1Smw S, 0x08, /* CRSR RIGHT */ 3291.1Smw S, 0x0C, /* CRSR LEFT */ 3301.1Smw S, 0x10, /* 0x50 F1 */ 3311.1Smw S, 0x15, /* F2 */ 3321.1Smw S, 0x1A, /* F3 */ 3331.1Smw S, 0x1F, /* F4 */ 3341.1Smw S, 0x24, /* F5 */ 3351.1Smw S, 0x29, /* F6 */ 3361.1Smw S, 0x2E, /* F7 */ 3371.1Smw S, 0x33, /* 0x58 F8 */ 3381.1Smw S, 0x38, /* F9 */ 3391.1Smw S, 0x3D, /* F10 */ 3401.1Smw K, '(', 3411.1Smw K, ')', 3421.1Smw K, '/', 3431.1Smw K, '*', 3441.1Smw S, 0x42, /* HELP */ 3451.1Smw }, 3461.1Smw 3471.1Smw /* shift alt map */ 3481.1Smw { 3491.1Smw 0, '~', /* 0x00 */ 3501.1Smw 0, '!', 3511.1Smw 0, '@', 3521.1Smw 0, '#', 3531.1Smw 0, '$', 3541.1Smw 0, '%', 3551.1Smw 0, '^', 3561.1Smw 0, '&', 3571.1Smw 0, '*', /* 0x08 */ 3581.1Smw 0, '(', 3591.1Smw 0, ')', 3601.1Smw 0, '_', 3611.1Smw 0, '+', 3621.1Smw 0, '|', 3631.1Smw 0, 0, 3641.1Smw K, '0', 3651.1Smw C, '�', /* 0x10 */ 3661.1Smw 0, '�', 3671.1Smw 0, '�', 3681.1Smw 0, '�', 3691.1Smw C, '�', 3701.1Smw 0, '�', 3711.1Smw 0, '�', 3721.1Smw 0, '�', 3731.1Smw C, '�', /* 0x18 */ 3741.1Smw 0, '�', 3751.1Smw 0, '[', 3761.1Smw 0, ']', 3771.1Smw 0, 0, 3781.1Smw K, '1', 3791.1Smw K, '2', 3801.1Smw K, '3', 3811.1Smw C, '�', /* 0x20 */ 3821.1Smw 0, '�', 3831.1Smw C, '�', 3841.1Smw DA, '�', 3851.1Smw DG, '`', 3861.1Smw DC, '^', 3871.1Smw DT, '~', 3881.1Smw DD, '�', 3891.1Smw 0, '�', /* 0x28 */ 3901.1Smw 0, ';', 3911.1Smw 0, '\'', 3921.1Smw 0, 0, 3931.1Smw 0, 0, 3941.1Smw K, '4', 3951.1Smw K, '5', 3961.1Smw K, '6', 3971.1Smw 0, 0, /* 0x30 */ 3981.1Smw 0, '�', 3991.1Smw 0, '�', 4001.1Smw C, '�', 4011.1Smw 0, '�', 4021.1Smw 0, '�', 4031.1Smw 0, '�', 4041.1Smw 0, '�', 4051.1Smw 0, ',', /* 0x38 */ 4061.1Smw 0, '.', 4071.1Smw 0, '/', 4081.1Smw 0, 0, 4091.1Smw K, '.', 4101.1Smw K, '7', 4111.1Smw K, '8', 4121.1Smw K, '9', 4131.1Smw 0, ' ', /* 0x40 */ 4141.1Smw 0, DEL, /* really BS, DEL & BS swapped */ 4151.1Smw 0, '\t', 4161.3Smw K, '\r', /* enter */ 4171.3Smw 0, '\r', /* return */ 4181.1Smw S, 0x9d, /* CSI */ 4191.1Smw 0, '\b', /* really DEL, BS & DEL swapped */ 4201.1Smw 0, 0, 4211.1Smw 0, 0, /* 0x48 */ 4221.1Smw 0, 0, 4231.1Smw K, '-', 4241.1Smw 0, 0, 4251.1Smw S, 0x00, /* now it gets hairy.. CRSR UP */ 4261.1Smw S, 0x04, /* CRSR DOWN */ 4271.1Smw S, 0x08, /* CRSR RIGHT */ 4281.1Smw S, 0x0C, /* CRSR LEFT */ 4291.1Smw S, 0x10, /* 0x50 F1 */ 4301.1Smw S, 0x15, /* F2 */ 4311.1Smw S, 0x1A, /* F3 */ 4321.1Smw S, 0x1F, /* F4 */ 4331.1Smw S, 0x24, /* F5 */ 4341.1Smw S, 0x29, /* F6 */ 4351.1Smw S, 0x2E, /* F7 */ 4361.1Smw S, 0x33, /* 0x58 F8 */ 4371.1Smw S, 0x38, /* F9 */ 4381.1Smw S, 0x3D, /* F10 */ 4391.1Smw K, '(', 4401.1Smw K, ')', 4411.1Smw K, '/', 4421.1Smw K, '*', 4431.1Smw S, 0x42, /* HELP */ 4441.1Smw }, 4451.1Smw 4461.1Smw { 4471.1Smw /* string table. If there's a better way to get the offsets into the 4481.1Smw above table, please tell me.. 4491.1Smw 4501.1Smw NOTE: save yourself and others a lot of grief by *not* using 4511.1Smw CSI == 0x9b, using the two-character sequence gives 4521.1Smw much less trouble, especially in GNU-Emacs.. */ 4531.1Smw 4541.1Smw 3, ESC, '[', 'A', /* 0x00: CRSR UP */ 4551.1Smw 3, ESC, '[', 'B', /* 0x04: CRSR DOWN */ 4561.1Smw 3, ESC, '[', 'C', /* 0x08: CRSR RIGHT */ 4571.1Smw 3, ESC, '[', 'D', /* 0x0C: CRSR LEFT */ 4581.1Smw 4, ESC, '[', '0', '~', /* 0x10: F1 */ 4591.1Smw 4, ESC, '[', '1', '~', /* 0x15: F2 */ 4601.1Smw 4, ESC, '[', '2', '~', /* 0x1A: F3 */ 4611.1Smw 4, ESC, '[', '3', '~', /* 0x1F: F4 */ 4621.1Smw 4, ESC, '[', '4', '~', /* 0x24: F5 */ 4631.1Smw 4, ESC, '[', '5', '~', /* 0x29: F6 */ 4641.1Smw 4, ESC, '[', '6', '~', /* 0x2E: F7 */ 4651.1Smw 4, ESC, '[', '7', '~', /* 0x33: F8 */ 4661.1Smw 4, ESC, '[', '8', '~', /* 0x38: F9 */ 4671.1Smw 4, ESC, '[', '9', '~', /* 0x3D: F10 */ 4681.1Smw 4, ESC, '[', '?', '~', /* 0x42: HELP */ 4691.1Smw 4701.1Smw 4, ESC, '[', 'T', '~', /* 0x47: shift CRSR UP */ 4711.1Smw 4, ESC, '[', 'S', '~', /* 0x4C: shift CRSR DOWN */ 4721.1Smw 5, ESC, '[', ' ', '@', '~', /* 0x51: shift CRSR RIGHT */ 4731.1Smw 5, ESC, '[', ' ', 'A', '~', /* 0x57: shift CRSR LEFT */ 4741.1Smw 5, ESC, '[', '1', '0', '~', /* 0x5D: shift F1 */ 4751.1Smw 5, ESC, '[', '1', '1', '~', /* 0x63: shift F2 */ 4761.1Smw 5, ESC, '[', '1', '2', '~', /* 0x69: shift F3 */ 4771.1Smw 5, ESC, '[', '1', '3', '~', /* 0x6F: shift F4 */ 4781.1Smw 5, ESC, '[', '1', '4', '~', /* 0x75: shift F5 */ 4791.1Smw 5, ESC, '[', '1', '5', '~', /* 0x7B: shift F6 */ 4801.1Smw 5, ESC, '[', '1', '6', '~', /* 0x81: shift F7 */ 4811.1Smw 5, ESC, '[', '1', '7', '~', /* 0x87: shift F8 */ 4821.1Smw 5, ESC, '[', '1', '8', '~', /* 0x8D: shift F9 */ 4831.1Smw 5, ESC, '[', '1', '9', '~', /* 0x93: shift F10 */ 4841.1Smw 3, ESC, '[', 'Z', /* 0x99: shift TAB */ 4851.3Smw 2, ESC, '[', /* 0x9d: alt ESC == CSI */ 4861.1Smw }, 4871.1Smw}; 4881.1Smw 4891.1Smwunsigned char acctable[KBD_NUM_ACC][64] = { 4901.1Smw { "@�BCD�FGH�JKLMN�PQRST�VWXYZ[\\]^_" 4911.1Smw "`�bcd�fgh�jklmn�pqrst�vwxyz{|}~\177"}, /* KBD_ACC_GRAVE */ 4921.1Smw 4931.1Smw { "@�BCD�FGH�JKLMN�PQRST�VWXYZ[\\]^_" 4941.1Smw "`�bcd�fgh�jklmn�pqrst�vwxyz{|}~\177"}, /* KBD_ACC_ACUTE */ 4951.1Smw 4961.1Smw { "@�BCD�FGH�JKLMN�PQRST�VWXYZ[\\]^_" 4971.1Smw "`�bcd�fgh�jklmn�pqrst�vwxyz{|}~\177"}, /* KBD_ACC_CIRC */ 4981.1Smw 4991.1Smw { "@�BCDEFGHIJKLM��PQRSTUVWXYZ[\\]^_" 5001.1Smw "`�bcdefghijklm��pqrstuvwxyz{|}~\177"}, /* KBD_ACC_TILDE */ 5011.1Smw 5021.1Smw { "@�BCD�FGH�JKLMN�PQRST�VWXYZ[\\]^_" 5031.1Smw "`�bcd�fgh�jklmn�pqrst�vwxyz{|}~\177"}, /* KBD_ACC_DIER */ 5041.1Smw}; 5051.1Smw 5061.1Smw 507