Home | History | Annotate | Line # | Download | only in sun
      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