The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/sun/kbd_tables.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: kbd_tables.c,v 1.7 2002/04/12 14:27:29 pk Exp $        */
    2 
    3 /*
    4  * Copyright (c) 1996 Gordon W. Ross
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  * 3. The name of the author may not be used to endorse or promote products
   16  *    derived from this software without specific prior written permission.
   17  * 4. All advertising materials mentioning features or use of this software
   18  *    must display the following acknowledgement:
   19  *      This product includes software developed by Gordon Ross
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   24  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   30  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   31  */
   32 
   33 /*
   34  * Keyboard translation tables.  (See kbd_tables.h)
   35  */
   36 
   37 #include <sys/cdefs.h>
   38 __KERNEL_RCSID(0, "$NetBSD: kbd_tables.c,v 1.7 2002/04/12 14:27:29 pk Exp $");
   39 
   40 #include <sys/types.h>
   41 
   42 #define _KERNEL 1       /* XXX */
   43 #include "kbd_tables.h"
   44 
   45 
   46 /* The "compose" operations are not implemented. */
   47 #define KEYSYM_COMPOSE KEYSYM_NOP
   48 
   49 
   50 /*
   51  * Key release codes are decoded in this map.
   52  */
   53 u_short keymap_release[KEYMAP_SIZE] = {
   54     /*   0:             */      KEYSYM_HOLE,
   55     /*   1: L1/Stop     */      KEYSYM_NOP,
   56     /*   2:             */      KEYSYM_HOLE,
   57     /*   3: L2/Again    */      KEYSYM_NOP,
   58     /*   4:             */      KEYSYM_HOLE,
   59     /*   5: F1          */      KEYSYM_NOP,
   60     /*   6: F2          */      KEYSYM_NOP,
   61     /*   7: F10         */      KEYSYM_NOP,
   62     /*   8: F3          */      KEYSYM_NOP,
   63     /*   9: F11         */      KEYSYM_NOP,
   64     /*  10: F4          */      KEYSYM_NOP,
   65     /*  11: F12         */      KEYSYM_NOP,
   66     /*  12: F5          */      KEYSYM_NOP,
   67     /*  13: AltGraph    */      KEYSYM_CLRMOD | KBMOD_ALTGRAPH,
   68     /*  14: F6          */      KEYSYM_NOP,
   69     /*  15:             */      KEYSYM_HOLE,
   70     /*  16: F7          */      KEYSYM_NOP,
   71     /*  17: F8          */      KEYSYM_NOP,
   72     /*  18: F9          */      KEYSYM_NOP,
   73     /*  19: Alt_L       */      KEYSYM_CLRMOD | KBMOD_ALT_L,
   74     /*  20: T5_Up       */      KEYSYM_NOP,
   75     /*  21: R1/Pause    */      KEYSYM_NOP,
   76     /*  22: R2/Print    */      KEYSYM_NOP,
   77     /*  23: R3/Break    */      KEYSYM_NOP,
   78     /*  24: T5_Left     */      KEYSYM_NOP,
   79     /*  25: L3/Props    */      KEYSYM_NOP,
   80     /*  26: L4/Undo     */      KEYSYM_NOP,
   81     /*  27: T5_Down     */      KEYSYM_NOP,
   82     /*  28: T5_Right    */      KEYSYM_NOP,
   83     /*  29: Esc         */      KEYSYM_NOP,
   84     /*  30: 1           */      KEYSYM_NOP,
   85     /*  31: 2           */      KEYSYM_NOP,
   86     /*  32: 3           */      KEYSYM_NOP,
   87     /*  33: 4           */      KEYSYM_NOP,
   88     /*  34: 5           */      KEYSYM_NOP,
   89     /*  35: 6           */      KEYSYM_NOP,
   90     /*  36: 7           */      KEYSYM_NOP,
   91     /*  37: 8           */      KEYSYM_NOP,
   92     /*  38: 9           */      KEYSYM_NOP,
   93     /*  39: 0           */      KEYSYM_NOP,
   94     /*  40: minus       */      KEYSYM_NOP,
   95     /*  41: equal       */      KEYSYM_NOP,
   96     /*  42: grave/tilde */      KEYSYM_NOP,
   97     /*  43: BackSpace   */      KEYSYM_NOP,
   98     /*  44: T5_Insert   */      KEYSYM_NOP,
   99     /*  45: R4/KP_Equal */      KEYSYM_NOP,
  100     /*  46: R5/KP_Div   */      KEYSYM_NOP,
  101     /*  47: R6/KP_Mult  */      KEYSYM_NOP,
  102     /*  48:             */      KEYSYM_NOP,
  103     /*  49: L5/Front    */      KEYSYM_NOP,
  104     /*  50: KP_Delete   */      KEYSYM_NOP,
  105     /*  51: L6/Copy     */      KEYSYM_NOP,
  106     /*  52: T5_Home     */      KEYSYM_NOP,
  107     /*  53: Tab         */      KEYSYM_NOP,
  108     /*  54: Q           */      KEYSYM_NOP,
  109     /*  55: W           */      KEYSYM_NOP,
  110     /*  56: E           */      KEYSYM_NOP,
  111     /*  57: R           */      KEYSYM_NOP,
  112     /*  58: T           */      KEYSYM_NOP,
  113     /*  59: Y           */      KEYSYM_NOP,
  114     /*  60: U           */      KEYSYM_NOP,
  115     /*  61: I           */      KEYSYM_NOP,
  116     /*  62: O           */      KEYSYM_NOP,
  117     /*  63: P           */      KEYSYM_NOP,
  118     /*  64: [           */      KEYSYM_NOP,
  119     /*  65: ]           */      KEYSYM_NOP,
  120     /*  66: Delete      */      KEYSYM_NOP,
  121     /*  67: Compose     */      KEYSYM_NOP,
  122     /*  68: R7/Home     */      KEYSYM_NOP,
  123     /*  69: R8/Up       */      KEYSYM_NOP,
  124     /*  70: R9/PgUp     */      KEYSYM_NOP,
  125     /*  71: KP_Minus    */      KEYSYM_NOP,
  126     /*  72: L7/Open     */      KEYSYM_NOP,
  127     /*  73: L8/Paste    */      KEYSYM_NOP,
  128     /*  74: T5_End      */      KEYSYM_NOP,
  129     /*  75:             */      KEYSYM_HOLE,
  130     /*  76: Ctrl_L      */      KEYSYM_CLRMOD | KBMOD_CTRL_L,
  131     /*  77: A           */      KEYSYM_NOP,
  132     /*  78: S           */      KEYSYM_NOP,
  133     /*  79: D           */      KEYSYM_NOP,
  134     /*  80: F           */      KEYSYM_NOP,
  135     /*  81: G           */      KEYSYM_NOP,
  136     /*  82: H           */      KEYSYM_NOP,
  137     /*  83: J           */      KEYSYM_NOP,
  138     /*  84: K           */      KEYSYM_NOP,
  139     /*  85: L           */      KEYSYM_NOP,
  140     /*  86: ;           */      KEYSYM_NOP,
  141     /*  87: apostr.     */      KEYSYM_NOP,
  142     /*  88: backslash   */      KEYSYM_NOP,
  143     /*  89: Return      */      KEYSYM_NOP,
  144     /*  90: KP_Enter    */      KEYSYM_NOP,
  145     /*  91: R10/Left    */      KEYSYM_NOP,
  146     /*  92: R11/KP_5    */      KEYSYM_NOP,
  147     /*  93: R12/Right   */      KEYSYM_NOP,
  148     /*  94: KP_Insert   */      KEYSYM_NOP,
  149     /*  95: L9/Find     */      KEYSYM_NOP,
  150     /*  96: T5_PgUp     */      KEYSYM_NOP,
  151     /*  97: L10/Cut     */      KEYSYM_NOP,
  152     /*  98: Num_Lock    */      KEYSYM_NOP,
  153     /*  99: Shift_L     */      KEYSYM_CLRMOD | KBMOD_SHIFT_L,
  154     /* 100: Z           */      KEYSYM_NOP,
  155     /* 101: X           */      KEYSYM_NOP,
  156     /* 102: C           */      KEYSYM_NOP,
  157     /* 103: V           */      KEYSYM_NOP,
  158     /* 104: B           */      KEYSYM_NOP,
  159     /* 105: N           */      KEYSYM_NOP,
  160     /* 106: M           */      KEYSYM_NOP,
  161     /* 107: ,           */      KEYSYM_NOP,
  162     /* 108: .           */      KEYSYM_NOP,
  163     /* 109: /           */      KEYSYM_NOP,
  164     /* 110: Shift_R     */      KEYSYM_CLRMOD | KBMOD_SHIFT_R,
  165     /* 111: Linefeed    */      KEYSYM_NOP,
  166     /* 112: R13/End     */      KEYSYM_NOP,
  167     /* 113: R14/Down    */      KEYSYM_NOP,
  168     /* 114: R15/PgDn    */      KEYSYM_NOP,
  169     /* 115:             */      KEYSYM_HOLE,
  170     /* 116:             */      KEYSYM_HOLE,
  171     /* 117:             */      KEYSYM_HOLE,
  172     /* 118: L16/Help    */      KEYSYM_NOP,
  173     /* 119: CapsLock    */      KEYSYM_NOP,
  174     /* 120: Meta_L      */      KEYSYM_CLRMOD | KBMOD_META_L,
  175     /* 121: SpaceBar    */      KEYSYM_NOP,
  176     /* 122: Meta_R      */      KEYSYM_CLRMOD | KBMOD_META_R,
  177     /* 123: T5_PgDn     */      KEYSYM_NOP,
  178     /* 124:             */      KEYSYM_HOLE,
  179     /* 125: KP_Add      */      KEYSYM_NOP,
  180     /* 126:             */      KEYSYM_LAYOUT,  /* layout next */
  181     /* 127:             */      KEYSYM_RESET,   /* kbd ID next */
  182 };
  183 
  184 
  185 /*
  186  * This map is used when a control key is down.
  187  */
  188 #define CTL(c)  ((c)&0x1F)
  189 u_short keymap_control[KEYMAP_SIZE] = {
  190     /*   0:             */      KEYSYM_HOLE,
  191     /*   1: L1/Stop     */      KEYSYM_NOP,
  192     /*   2:             */      KEYSYM_HOLE,
  193     /*   3: L2/Again    */      KEYSYM_NOP,
  194     /*   4:             */      KEYSYM_HOLE,
  195     /*   5: F1          */      KEYSYM_NOP,
  196     /*   6: F2          */      KEYSYM_NOP,
  197     /*   7: F10         */      KEYSYM_NOP,
  198     /*   8: F3          */      KEYSYM_NOP,
  199     /*   9: F11         */      KEYSYM_NOP,
  200     /*  10: F4          */      KEYSYM_NOP,
  201     /*  11: F12         */      KEYSYM_NOP,
  202     /*  12: F5          */      KEYSYM_NOP,
  203     /*  13: AltGraph    */      KEYSYM_SETMOD | KBMOD_ALTGRAPH,
  204     /*  14: F6          */      KEYSYM_NOP,
  205     /*  15:             */      KEYSYM_HOLE,
  206     /*  16: F7          */      KEYSYM_NOP,
  207     /*  17: F8          */      KEYSYM_NOP,
  208     /*  18: F9          */      KEYSYM_NOP,
  209     /*  19: Alt_L       */      KEYSYM_SETMOD | KBMOD_ALT_L,
  210     /*  20: T5_Up       */      KEYSYM_NOP,
  211     /*  21: R1/Pause    */      KEYSYM_NOP,
  212     /*  22: R2/Print    */      KEYSYM_NOP,
  213     /*  23: R3/Break    */      KEYSYM_NOP,
  214     /*  24: T5_Left     */      KEYSYM_NOP,
  215     /*  25: L3/Props    */      KEYSYM_NOP,
  216     /*  26: L4/Undo     */      KEYSYM_NOP,
  217     /*  27: T5_Down     */      KEYSYM_NOP,
  218     /*  28: T5_Right    */      KEYSYM_NOP,
  219     /*  29: Esc         */      0x1b,
  220     /*  30: 1           */      KEYSYM_NOP,
  221     /*  31: 2           */      CTL('@'),
  222     /*  32: 3           */      KEYSYM_NOP,
  223     /*  33: 4           */      KEYSYM_NOP,
  224     /*  34: 5           */      KEYSYM_NOP,
  225     /*  35: 6           */      CTL('^'),
  226     /*  36: 7           */      KEYSYM_NOP,
  227     /*  37: 8           */      KEYSYM_NOP,
  228     /*  38: 9           */      KEYSYM_NOP,
  229     /*  39: 0           */      KEYSYM_NOP,
  230     /*  40: minus _     */      CTL('_'),
  231     /*  41: equal       */      KEYSYM_NOP,
  232     /*  42: grave/tilde */      CTL('~'),
  233     /*  43: BackSpace   */      '\b',
  234     /*  44: T5_Insert   */      KEYSYM_NOP,
  235     /*  45: R4/KP_Equal */      KEYSYM_NOP,
  236     /*  46: R5/KP_Div   */      KEYSYM_NOP,
  237     /*  47: R6/KP_Mult  */      KEYSYM_NOP,
  238     /*  48:             */      KEYSYM_NOP,
  239     /*  49: L5/Front    */      KEYSYM_NOP,
  240     /*  50: KP_Delete   */      KEYSYM_NOP,
  241     /*  51: L6/Copy     */      KEYSYM_NOP,
  242     /*  52: T5_Home     */      KEYSYM_NOP,
  243     /*  53: Tab         */      '\t',
  244     /*  54: Q           */      CTL('Q'),
  245     /*  55: W           */      CTL('W'),
  246     /*  56: E           */      CTL('E'),
  247     /*  57: R           */      CTL('R'),
  248     /*  58: T           */      CTL('T'),
  249     /*  59: Y           */      CTL('Y'),
  250     /*  60: U           */      CTL('U'),
  251     /*  61: I           */      CTL('I'),
  252     /*  62: O           */      CTL('O'),
  253     /*  63: P           */      CTL('P'),
  254     /*  64: [           */      CTL('['),
  255     /*  65: ]           */      CTL(']'),
  256     /*  66: Delete      */      0x7f,
  257     /*  67: Compose     */      KEYSYM_COMPOSE,
  258     /*  68: R7/Home     */      CTL('A'),       /* emacs */
  259     /*  69: R8/Up       */      CTL('P'),       /* emacs */
  260     /*  70: R9/PgUp     */      0x80|'v',       /* emacs */
  261     /*  71: KP_Minus    */      KEYSYM_NOP,
  262     /*  72: L7/Open     */      KEYSYM_NOP,
  263     /*  73: L8/Paste    */      KEYSYM_NOP,
  264     /*  74: T5_End      */      KEYSYM_NOP,
  265     /*  75:             */      KEYSYM_HOLE,
  266     /*  76: Ctrl_L      */      KEYSYM_SETMOD | KBMOD_CTRL_L,
  267     /*  77: A           */      CTL('A'),
  268     /*  78: S           */      CTL('S'),
  269     /*  79: D           */      CTL('D'),
  270     /*  80: F           */      CTL('F'),
  271     /*  81: G           */      CTL('G'),
  272     /*  82: H           */      CTL('H'),
  273     /*  83: J           */      CTL('J'),
  274     /*  84: K           */      CTL('K'),
  275     /*  85: L           */      CTL('L'),
  276     /*  86: ;           */      KEYSYM_NOP,
  277     /*  87: apostr.     */      KEYSYM_NOP,
  278     /*  88: backslash   */      CTL('\\'),
  279     /*  89: Return      */      '\r',
  280     /*  90: KP_Enter    */      KEYSYM_NOP,
  281     /*  91: R10/Left    */      CTL('B'),       /* emacs */
  282     /*  92: R11/KP_5    */      KEYSYM_NOP,
  283     /*  93: R12/Right   */      CTL('F'),       /* emacs */
  284     /*  94: KP_Insert   */      KEYSYM_NOP,
  285     /*  95: L9/Find     */      KEYSYM_NOP,
  286     /*  96: T5_PgUp     */      KEYSYM_NOP,
  287     /*  97: L10/Cut     */      KEYSYM_NOP,
  288     /*  98: Num_Lock    */      KEYSYM_INVMOD | KBMOD_NUMLOCK,
  289     /*  99: Shift_L     */      KEYSYM_SETMOD | KBMOD_SHIFT_L,
  290     /* 100: Z           */      CTL('Z'),
  291     /* 101: X           */      CTL('X'),
  292     /* 102: C           */      CTL('C'),
  293     /* 103: V           */      CTL('V'),
  294     /* 104: B           */      CTL('B'),
  295     /* 105: N           */      CTL('N'),
  296     /* 106: M           */      CTL('M'),
  297     /* 107: ,           */      KEYSYM_NOP,
  298     /* 108: .           */      KEYSYM_NOP,
  299     /* 109: / ?         */      CTL('?'),
  300     /* 110: Shift_R     */      KEYSYM_SETMOD | KBMOD_SHIFT_R,
  301     /* 111: Linefeed    */      '\n',
  302     /* 112: R13/End     */      CTL('E'),       /* emacs */
  303     /* 113: R14/Down    */      CTL('N'),       /* emacs */
  304     /* 114: R15/PgDn    */      CTL('V'),       /* emacs */
  305     /* 115:             */      KEYSYM_HOLE,
  306     /* 116:             */      KEYSYM_HOLE,
  307     /* 117:             */      KEYSYM_HOLE,
  308     /* 118: L16/Help    */      KEYSYM_NOP,
  309     /* 119: CapsLock    */      KEYSYM_INVMOD | KBMOD_CAPSLOCK,
  310     /* 120: Meta_L      */      KEYSYM_SETMOD | KBMOD_META_L,
  311     /* 121: SpaceBar    */      CTL(' '),
  312     /* 122: Meta_R      */      KEYSYM_SETMOD | KBMOD_META_R,
  313     /* 123: T5_PgDn     */      KEYSYM_NOP,
  314     /* 124:             */      KEYSYM_HOLE,
  315     /* 125: KP_Add      */      KEYSYM_NOP,
  316     /* 126:             */      KEYSYM_HW_ERR,
  317     /* 127:             */      KEYSYM_ALL_UP,
  318 };
  319 #undef  CTL
  320 
  321 
  322 /*
  323  * Keymaps for the "type 3" keyboard.
  324  * (lower-case, upper-case)
  325  */
  326 
  327 u_short keymap_s3_lc[KEYMAP_SIZE] = {
  328     /*   0:             */      KEYSYM_HOLE,
  329     /*   1: L1/Stop     */      KEYSYM_FUNC_L(1),
  330     /*   2:             */      KEYSYM_HOLE,
  331     /*   3: L2/Again    */      KEYSYM_FUNC_L(2),
  332     /*   4:             */      KEYSYM_HOLE,
  333     /*   5: F1          */      KEYSYM_FUNC_F(1),
  334     /*   6: F2          */      KEYSYM_FUNC_F(2),
  335     /*   7: F10         */      KEYSYM_HOLE,
  336     /*   8: F3          */      KEYSYM_FUNC_F(3),
  337     /*   9: F11         */      KEYSYM_HOLE,
  338     /*  10: F4          */      KEYSYM_FUNC_F(4),
  339     /*  11: F12         */      KEYSYM_HOLE,
  340     /*  12: F5          */      KEYSYM_FUNC_F(5),
  341     /*  13: AltGraph    */      KEYSYM_HOLE,
  342     /*  14: F6          */      KEYSYM_FUNC_F(6),
  343     /*  15:             */      KEYSYM_HOLE,
  344     /*  16: F7          */      KEYSYM_FUNC_F(7),
  345     /*  17: F8          */      KEYSYM_FUNC_F(8),
  346     /*  18: F9          */      KEYSYM_FUNC_F(9),
  347     /*  19: Alt_L       */      KEYSYM_SETMOD | KBMOD_ALT_L,
  348     /*  20: T5_Up       */      KEYSYM_HOLE,
  349     /*  21: R1/Pause    */      KEYSYM_FUNC_R(1),
  350     /*  22: R2/Print    */      KEYSYM_FUNC_R(2),
  351     /*  23: R3/Break    */      KEYSYM_FUNC_R(3),
  352     /*  24: T5_Left     */      KEYSYM_HOLE,
  353     /*  25: L3/Props    */      KEYSYM_FUNC_L(3),
  354     /*  26: L4/Undo     */      KEYSYM_FUNC_L(4),
  355     /*  27: T5_Down     */      KEYSYM_HOLE,
  356     /*  28: T5_Right    */      KEYSYM_HOLE,
  357     /*  29: Esc         */      0x1b,
  358     /*  30: 1           */      '1',
  359     /*  31: 2           */      '2',
  360     /*  32: 3           */      '3',
  361     /*  33: 4           */      '4',
  362     /*  34: 5           */      '5',
  363     /*  35: 6           */      '6',
  364     /*  36: 7           */      '7',
  365     /*  37: 8           */      '8',
  366     /*  38: 9           */      '9',
  367     /*  39: 0           */      '',
  368     /*  40: minus       */      '-',
  369     /*  41: equal       */      '=',
  370     /*  42: grave/tilde */      '`',
  371     /*  43: BackSpace   */      '\b',
  372     /*  44:             */      KEYSYM_HOLE,
  373     /*  45: R4/KP_Equal */      KEYSYM_FUNC_R(4),
  374     /*  46: R5/KP_Div   */      KEYSYM_FUNC_R(5),
  375     /*  47: R6/KP_Mult  */      KEYSYM_FUNC_R(6),
  376     /*  48:             */      KEYSYM_HOLE,
  377     /*  49: L5/Front    */      KEYSYM_FUNC_L(5),
  378     /*  50: KP_Delete   */      KEYSYM_HOLE,
  379     /*  51: L6/Copy     */      KEYSYM_FUNC_L(6),
  380     /*  52:             */      KEYSYM_HOLE,
  381     /*  53: Tab         */      '\t',
  382     /*  54: Q           */      'q',
  383     /*  55: W           */      'w',
  384     /*  56: E           */      'e',
  385     /*  57: R           */      'r',
  386     /*  58: T           */      't',
  387     /*  59: Y           */      'y',
  388     /*  60: U           */      'u',
  389     /*  61: I           */      'i',
  390     /*  62: O           */      'o',
  391     /*  63: P           */      'p',
  392     /*  64: [           */      '[',
  393     /*  65: ]           */      ']',
  394     /*  66: Delete      */      0x7f,
  395     /*  67: Compose     */      KEYSYM_HOLE,
  396     /*  68: R7/Home     */      KEYSYM_FUNC_R(7),
  397     /*  69: R8/Up       */      KEYSYM_FUNC_R(8),
  398     /*  70: R9/PgUp     */      KEYSYM_FUNC_R(9),
  399     /*  71: KP_Minus    */      KEYSYM_HOLE,
  400     /*  72: L7/Open     */      KEYSYM_FUNC_L(7),
  401     /*  73: L8/Paste    */      KEYSYM_FUNC_L(8),
  402     /*  74:             */      KEYSYM_HOLE,
  403     /*  75:             */      KEYSYM_HOLE,
  404     /*  76: Ctrl_L      */      KEYSYM_SETMOD | KBMOD_CTRL_L,
  405     /*  77: A           */      'a',
  406     /*  78: S           */      's',
  407     /*  79: D           */      'd',
  408     /*  80: F           */      'f',
  409     /*  81: G           */      'g',
  410     /*  82: H           */      'h',
  411     /*  83: J           */      'j',
  412     /*  84: K           */      'k',
  413     /*  85: L           */      'l',
  414     /*  86: ;           */      ';',
  415     /*  87: apostr.     */      '\'',
  416     /*  88: backslash   */      '\\',
  417     /*  89: Return      */      '\r',
  418     /*  90: KP_Enter    */      KEYSYM_HOLE,
  419     /*  91: R10/Left    */      KEYSYM_FUNC_R(10),
  420     /*  92: R11/KP_5    */      KEYSYM_FUNC_R(11),
  421     /*  93: R12/Right   */      KEYSYM_FUNC_R(12),
  422     /*  94: KP_Insert   */      KEYSYM_HOLE,
  423     /*  95: L9/Find     */      KEYSYM_FUNC_L(9),
  424     /*  96:             */      KEYSYM_HOLE,
  425     /*  97: L10/Cut     */      KEYSYM_FUNC_L(10),
  426     /*  98: Num_Lock    */      KEYSYM_HOLE,
  427     /*  99: Shift_L     */      KEYSYM_SETMOD | KBMOD_SHIFT_L,
  428     /* 100: Z           */      'z',
  429     /* 101: X           */      'x',
  430     /* 102: C           */      'c',
  431     /* 103: V           */      'v',
  432     /* 104: B           */      'b',
  433     /* 105: N           */      'n',
  434     /* 106: M           */      'm',
  435     /* 107: ,           */      ',',
  436     /* 108: .           */      '.',
  437     /* 109: /           */      '/',
  438     /* 110: Shift_R     */      KEYSYM_SETMOD | KBMOD_SHIFT_R,
  439     /* 111: Linefeed    */      '\n',
  440     /* 112: R13/End     */      KEYSYM_FUNC_R(13),
  441     /* 113: R14/Down    */      KEYSYM_FUNC_R(14),
  442     /* 114: R15/PgDn    */      KEYSYM_FUNC_R(15),
  443     /* 115:             */      KEYSYM_HOLE,
  444     /* 116:             */      KEYSYM_HOLE,
  445     /* 117:             */      KEYSYM_HOLE,
  446     /* 118: L16/Help    */      KEYSYM_HOLE,
  447     /* 119: CapsLock    */      KEYSYM_INVMOD | KBMOD_CAPSLOCK,
  448     /* 120: Meta_L      */      KEYSYM_SETMOD | KBMOD_META_L,
  449     /* 121: SpaceBar    */      ' ',
  450     /* 122: Meta_R      */      KEYSYM_SETMOD | KBMOD_META_R,
  451     /* 123:             */      KEYSYM_HOLE,
  452     /* 124:             */      KEYSYM_HOLE,
  453     /* 125: KP_Add      */      KEYSYM_HOLE,
  454     /* 126:             */      KEYSYM_HW_ERR,
  455     /* 127:             */      KEYSYM_ALL_UP,
  456 };
  457 
  458 
  459 u_short keymap_s3_uc[KEYMAP_SIZE] = {
  460     /*   0:             */      KEYSYM_HOLE,
  461     /*   1: L1/Stop     */      KEYSYM_FUNC_L(1),
  462     /*   2:             */      KEYSYM_HOLE,
  463     /*   3: L2/Again    */      KEYSYM_FUNC_L(2),
  464     /*   4:             */      KEYSYM_HOLE,
  465     /*   5: F1          */      KEYSYM_FUNC_F(1),
  466     /*   6: F2          */      KEYSYM_FUNC_F(2),
  467     /*   7: F10         */      KEYSYM_HOLE,
  468     /*   8: F3          */      KEYSYM_FUNC_F(3),
  469     /*   9: F11         */      KEYSYM_HOLE,
  470     /*  10: F4          */      KEYSYM_FUNC_F(4),
  471     /*  11: F12         */      KEYSYM_HOLE,
  472     /*  12: F5          */      KEYSYM_FUNC_F(5),
  473     /*  13: AltGraph    */      KEYSYM_HOLE,
  474     /*  14: F6          */      KEYSYM_FUNC_F(6),
  475     /*  15:             */      KEYSYM_HOLE,
  476     /*  16: F7          */      KEYSYM_FUNC_F(7),
  477     /*  17: F8          */      KEYSYM_FUNC_F(8),
  478     /*  18: F9          */      KEYSYM_FUNC_F(9),
  479     /*  19: Alt_L       */      KEYSYM_SETMOD | KBMOD_ALT_L,
  480     /*  20: T5_Up       */      KEYSYM_HOLE,
  481     /*  21: R1/Pause    */      KEYSYM_FUNC_R(1),
  482     /*  22: R2/Print    */      KEYSYM_FUNC_R(2),
  483     /*  23: R3/Break    */      KEYSYM_FUNC_R(3),
  484     /*  24: T5_Left     */      KEYSYM_HOLE,
  485     /*  25: L3/Props    */      KEYSYM_FUNC_L(3),
  486     /*  26: L4/Undo     */      KEYSYM_FUNC_L(4),
  487     /*  27: T5_Down     */      KEYSYM_HOLE,
  488     /*  28: T5_Right    */      KEYSYM_HOLE,
  489     /*  29: Esc         */      0x1b,
  490     /*  30: 1           */      '!',
  491     /*  31: 2           */      '@',
  492     /*  32: 3           */      '#',
  493     /*  33: 4           */      '$',
  494     /*  34: 5           */      '%',
  495     /*  35: 6           */      '^',
  496     /*  36: 7           */      '&',
  497     /*  37: 8           */      '*',
  498     /*  38: 9           */      '(',
  499     /*  39: 0           */      ')',
  500     /*  40: minus       */      '_',
  501     /*  41: equal       */      '+',
  502     /*  42: grave/tilde */      '~',
  503     /*  43: BackSpace   */      '\b',
  504     /*  44:             */      KEYSYM_HOLE,
  505     /*  45: R4/KP_Equal */      KEYSYM_FUNC_R(4),
  506     /*  46: R5/KP_Div   */      KEYSYM_FUNC_R(5),
  507     /*  47: R6/KP_Mult  */      KEYSYM_FUNC_R(6),
  508     /*  48:             */      KEYSYM_HOLE,
  509     /*  49: L5/Front    */      KEYSYM_FUNC_L(5),
  510     /*  50: KP_Delete   */      KEYSYM_HOLE,
  511     /*  51: L6/Copy     */      KEYSYM_FUNC_L(6),
  512     /*  52:             */      KEYSYM_HOLE,
  513     /*  53: Tab         */      '\t',
  514     /*  54: Q           */      'Q',
  515     /*  55: W           */      'W',
  516     /*  56: E           */      'E',
  517     /*  57: R           */      'R',
  518     /*  58: T           */      'T',
  519     /*  59: Y           */      'Y',
  520     /*  60: U           */      'U',
  521     /*  61: I           */      'I',
  522     /*  62: O           */      'O',
  523     /*  63: P           */      'P',
  524     /*  64: [           */      '{',
  525     /*  65: ]           */      '}',
  526     /*  66: Delete      */      0x7f,
  527     /*  67: Compose     */      KEYSYM_HOLE,
  528     /*  68: R7/Home     */      KEYSYM_FUNC_R(7),
  529     /*  69: R8/Up       */      KEYSYM_FUNC_R(8),
  530     /*  70: R9/PgUp     */      KEYSYM_FUNC_R(9),
  531     /*  71: KP_Minus    */      KEYSYM_HOLE,
  532     /*  72: L7/Open     */      KEYSYM_FUNC_L(7),
  533     /*  73: L8/Paste    */      KEYSYM_FUNC_L(8),
  534     /*  74:             */      KEYSYM_HOLE,
  535     /*  75:             */      KEYSYM_HOLE,
  536     /*  76: Ctrl_L      */      KEYSYM_SETMOD | KBMOD_CTRL_L,
  537     /*  77: A           */      'A',
  538     /*  78: S           */      'S',
  539     /*  79: D           */      'D',
  540     /*  80: F           */      'F',
  541     /*  81: G           */      'G',
  542     /*  82: H           */      'H',
  543     /*  83: J           */      'J',
  544     /*  84: K           */      'K',
  545     /*  85: L           */      'L',
  546     /*  86: ;           */      ':',
  547     /*  87: apostr.     */      '"',
  548     /*  88: backslash   */      '|',
  549     /*  89: Return      */      '\r',
  550     /*  90: KP_Enter    */      KEYSYM_HOLE,
  551     /*  91: R10/Left    */      KEYSYM_FUNC_R(10),
  552     /*  92: R11/KP_5    */      KEYSYM_FUNC_R(11),
  553     /*  93: R12/Right   */      KEYSYM_FUNC_R(12),
  554     /*  94: KP_Insert   */      KEYSYM_HOLE,
  555     /*  95: L9/Find     */      KEYSYM_FUNC_L(9),
  556     /*  96:             */      KEYSYM_HOLE,
  557     /*  97: L10/Cut     */      KEYSYM_FUNC_L(10),
  558     /*  98: Num_Lock    */      KEYSYM_HOLE,
  559     /*  99: Shift_L     */      KEYSYM_SETMOD | KBMOD_SHIFT_L,
  560     /* 100: Z           */      'Z',
  561     /* 101: X           */      'X',
  562     /* 102: C           */      'C',
  563     /* 103: V           */      'V',
  564     /* 104: B           */      'B',
  565     /* 105: N           */      'N',
  566     /* 106: M           */      'M',
  567     /* 107: ,           */      '<',
  568     /* 108: .           */      '>',
  569     /* 109: /           */      '?',
  570     /* 110: Shift_R     */      KEYSYM_SETMOD | KBMOD_SHIFT_R,
  571     /* 111: Linefeed    */      '\n',
  572     /* 112: R13/End     */      KEYSYM_FUNC_R(13),
  573     /* 113: R14/Down    */      KEYSYM_FUNC_R(14),
  574     /* 114: R15/PgDn    */      KEYSYM_FUNC_R(15),
  575     /* 115:             */      KEYSYM_HOLE,
  576     /* 116:             */      KEYSYM_HOLE,
  577     /* 117:             */      KEYSYM_HOLE,
  578     /* 118: L16/Help    */      KEYSYM_HOLE,
  579     /* 119: CapsLock    */      KEYSYM_INVMOD | KBMOD_CAPSLOCK,
  580     /* 120: Meta_L      */      KEYSYM_SETMOD | KBMOD_META_L,
  581     /* 121: SpaceBar    */      ' ',
  582     /* 122: Meta_R      */      KEYSYM_SETMOD | KBMOD_META_R,
  583     /* 123:             */      KEYSYM_HOLE,
  584     /* 124:             */      KEYSYM_HOLE,
  585     /* 125: KP_Add      */      KEYSYM_HOLE,
  586     /* 126:             */      KEYSYM_HW_ERR,
  587     /* 127:             */      KEYSYM_ALL_UP,
  588 };
  589 
  590 
  591 /*
  592  * Keymaps for the "type 4" keyboard.
  593  * (lower-case, upper-case)
  594  */
  595 
  596 u_short keymap_s4_lc[KEYMAP_SIZE] = {
  597     /*   0:             */      KEYSYM_HOLE,
  598     /*   1: L1/Stop     */      KEYSYM_FUNC_L(1),
  599     /*   2:             */      KEYSYM_HOLE,
  600     /*   3: L2/Again    */      KEYSYM_FUNC_L(2),
  601     /*   4:             */      KEYSYM_HOLE,
  602     /*   5: F1          */      KEYSYM_FUNC_F(1),
  603     /*   6: F2          */      KEYSYM_FUNC_F(2),
  604     /*   7: F10         */      KEYSYM_FUNC_F(10),
  605     /*   8: F3          */      KEYSYM_FUNC_F(3),
  606     /*   9: F11         */      KEYSYM_FUNC_F(11),
  607     /*  10: F4          */      KEYSYM_FUNC_F(4),
  608     /*  11: F12         */      KEYSYM_FUNC_F(12),
  609     /*  12: F5          */      KEYSYM_FUNC_F(5),
  610     /*  13: AltGraph    */      KEYSYM_SETMOD | KBMOD_ALTGRAPH,
  611     /*  14: F6          */      KEYSYM_FUNC_F(6),
  612     /*  15:             */      KEYSYM_HOLE,
  613     /*  16: F7          */      KEYSYM_FUNC_F(7),
  614     /*  17: F8          */      KEYSYM_FUNC_F(8),
  615     /*  18: F9          */      KEYSYM_FUNC_F(9),
  616     /*  19: Alt_L       */      KEYSYM_SETMOD | KBMOD_ALT_L,
  617     /*  20: T5_Up       */      KEYSYM_STRING | 1,
  618     /*  21: R1/Pause    */      KEYSYM_FUNC_R(1),
  619     /*  22: R2/Print    */      KEYSYM_FUNC_R(2),
  620     /*  23: R3/Break    */      KEYSYM_FUNC_R(3),
  621     /*  24: T5_Left     */      KEYSYM_STRING | 3,
  622     /*  25: L3/Props    */      KEYSYM_FUNC_L(3),
  623     /*  26: L4/Undo     */      KEYSYM_FUNC_L(4),
  624     /*  27: T5_Down     */      KEYSYM_STRING | 2,
  625     /*  28: T5_Right    */      KEYSYM_STRING | 4,
  626     /*  29: Esc         */      0x1b,
  627     /*  30: 1           */      '1',
  628     /*  31: 2           */      '2',
  629     /*  32: 3           */      '3',
  630     /*  33: 4           */      '4',
  631     /*  34: 5           */      '5',
  632     /*  35: 6           */      '6',
  633     /*  36: 7           */      '7',
  634     /*  37: 8           */      '8',
  635     /*  38: 9           */      '9',
  636     /*  39: 0           */      '',
  637     /*  40: minus       */      '-',
  638     /*  41: equal       */      '=',
  639     /*  42: grave/tilde */      '`',
  640     /*  43: BackSpace   */      '\b',
  641     /*  44: T5_Insert   */      KEYSYM_FUNC_N(8),
  642     /*  45: R4/KP_Equal */      KEYSYM_FUNC_R(4),
  643     /*  46: R5/KP_Div   */      KEYSYM_FUNC_R(5),
  644     /*  47: R6/KP_Mult  */      KEYSYM_FUNC_R(6),
  645     /*  48:             */      KEYSYM_FUNC_N(13),
  646     /*  49: L5/Front    */      KEYSYM_FUNC_L(5),
  647     /*  50: KP_Delete   */      KEYSYM_FUNC_N(10),
  648     /*  51: L6/Copy     */      KEYSYM_FUNC_L(6),
  649     /*  52: T5_Home     */      KEYSYM_FUNC_R(7),
  650     /*  53: Tab         */      '\t',
  651     /*  54: Q           */      'q',
  652     /*  55: W           */      'w',
  653     /*  56: E           */      'e',
  654     /*  57: R           */      'r',
  655     /*  58: T           */      't',
  656     /*  59: Y           */      'y',
  657     /*  60: U           */      'u',
  658     /*  61: I           */      'i',
  659     /*  62: O           */      'o',
  660     /*  63: P           */      'p',
  661     /*  64: [           */      '[',
  662     /*  65: ]           */      ']',
  663     /*  66: Delete      */      0x7f,
  664     /*  67: Compose     */      KEYSYM_COMPOSE,
  665     /*  68: R7/Home     */      KEYSYM_FUNC_R(7),
  666     /*  69: R8/Up       */      KEYSYM_FUNC_R(8),
  667     /*  70: R9/PgUp     */      KEYSYM_FUNC_R(9),
  668     /*  71: KP_Minus    */      KEYSYM_FUNC_N(15),
  669     /*  72: L7/Open     */      KEYSYM_FUNC_L(7),
  670     /*  73: L8/Paste    */      KEYSYM_FUNC_L(8),
  671     /*  74: T5_End      */      KEYSYM_FUNC_R(13),
  672     /*  75:             */      KEYSYM_HOLE,
  673     /*  76: Ctrl_L      */      KEYSYM_SETMOD | KBMOD_CTRL_L,
  674     /*  77: A           */      'a',
  675     /*  78: S           */      's',
  676     /*  79: D           */      'd',
  677     /*  80: F           */      'f',
  678     /*  81: G           */      'g',
  679     /*  82: H           */      'h',
  680     /*  83: J           */      'j',
  681     /*  84: K           */      'k',
  682     /*  85: L           */      'l',
  683     /*  86: ;           */      ';',
  684     /*  87: apostr.     */      '\'',
  685     /*  88: backslash   */      '\\',
  686     /*  89: Return      */      '\r',
  687     /*  90: KP_Enter    */      KEYSYM_FUNC_N(11),
  688     /*  91: R10/Left    */      KEYSYM_FUNC_R(10),
  689     /*  92: R11/KP_5    */      KEYSYM_FUNC_R(11),
  690     /*  93: R12/Right   */      KEYSYM_FUNC_R(12),
  691     /*  94: KP_Insert   */      KEYSYM_FUNC_N(8),
  692     /*  95: L9/Find     */      KEYSYM_FUNC_L(9),
  693     /*  96: T5_PgUp     */      KEYSYM_FUNC_R(9),
  694     /*  97: L10/Cut     */      KEYSYM_FUNC_L(10),
  695     /*  98: Num_Lock    */      KEYSYM_INVMOD | KBMOD_NUMLOCK,
  696     /*  99: Shift_L     */      KEYSYM_SETMOD | KBMOD_SHIFT_L,
  697     /* 100: Z           */      'z',
  698     /* 101: X           */      'x',
  699     /* 102: C           */      'c',
  700     /* 103: V           */      'v',
  701     /* 104: B           */      'b',
  702     /* 105: N           */      'n',
  703     /* 106: M           */      'm',
  704     /* 107: ,           */      ',',
  705     /* 108: .           */      '.',
  706     /* 109: /           */      '/',
  707     /* 110: Shift_R     */      KEYSYM_SETMOD | KBMOD_SHIFT_R,
  708     /* 111: Linefeed    */      '\n',
  709     /* 112: R13/End     */      KEYSYM_FUNC_R(13),
  710     /* 113: R14/Down    */      KEYSYM_FUNC_R(14),
  711     /* 114: R15/PgDn    */      KEYSYM_FUNC_R(15),
  712     /* 115:             */      KEYSYM_HOLE,
  713     /* 116:             */      KEYSYM_HOLE,
  714     /* 117:             */      KEYSYM_HOLE,
  715     /* 118: L16/Help    */      KEYSYM_FUNC_L(16),
  716     /* 119: CapsLock    */      KEYSYM_INVMOD | KBMOD_CAPSLOCK,
  717     /* 120: Meta_L      */      KEYSYM_SETMOD | KBMOD_META_L,
  718     /* 121: SpaceBar    */      ' ',
  719     /* 122: Meta_R      */      KEYSYM_SETMOD | KBMOD_META_R,
  720     /* 123: T5_PgDn     */      KEYSYM_FUNC_R(15),
  721     /* 124:             */      KEYSYM_HOLE,
  722     /* 125: KP_Add      */      KEYSYM_FUNC_N(14),
  723     /* 126:             */      KEYSYM_HW_ERR,
  724     /* 127:             */      KEYSYM_ALL_UP,
  725 };
  726 
  727 
  728 u_short keymap_s4_uc[KEYMAP_SIZE] = {
  729     /*   0:             */      KEYSYM_HOLE,
  730     /*   1: L1/Stop     */      KEYSYM_FUNC_L(1),
  731     /*   2:             */      KEYSYM_HOLE,
  732     /*   3: L2/Again    */      KEYSYM_FUNC_L(2),
  733     /*   4:             */      KEYSYM_HOLE,
  734     /*   5: F1          */      KEYSYM_FUNC_F(1),
  735     /*   6: F2          */      KEYSYM_FUNC_F(2),
  736     /*   7: F10         */      KEYSYM_FUNC_F(10),
  737     /*   8: F3          */      KEYSYM_FUNC_F(3),
  738     /*   9: F11         */      KEYSYM_FUNC_F(11),
  739     /*  10: F4          */      KEYSYM_FUNC_F(4),
  740     /*  11: F12         */      KEYSYM_FUNC_F(12),
  741     /*  12: F5          */      KEYSYM_FUNC_F(5),
  742     /*  13: AltGraph    */      KEYSYM_SETMOD | KBMOD_ALTGRAPH,
  743     /*  14: F6          */      KEYSYM_FUNC_F(6),
  744     /*  15:             */      KEYSYM_HOLE,
  745     /*  16: F7          */      KEYSYM_FUNC_F(7),
  746     /*  17: F8          */      KEYSYM_FUNC_F(8),
  747     /*  18: F9          */      KEYSYM_FUNC_F(9),
  748     /*  19: Alt_L       */      KEYSYM_SETMOD | KBMOD_ALT_L,
  749     /*  20: T5_Up       */      KEYSYM_STRING | 1,
  750     /*  21: R1/Pause    */      KEYSYM_FUNC_R(1),
  751     /*  22: R2/Print    */      KEYSYM_FUNC_R(2),
  752     /*  23: R3/Break    */      KEYSYM_FUNC_R(3),
  753     /*  24: T5_Left     */      KEYSYM_STRING | 3,
  754     /*  25: L3/Props    */      KEYSYM_FUNC_L(3),
  755     /*  26: L4/Undo     */      KEYSYM_FUNC_L(4),
  756     /*  27: T5_Down     */      KEYSYM_STRING | 2,
  757     /*  28: T5_Right    */      KEYSYM_STRING | 4,
  758     /*  29: Esc         */      0x1b,
  759     /*  30: 1           */      '!',
  760     /*  31: 2           */      '@',
  761     /*  32: 3           */      '#',
  762     /*  33: 4           */      '$',
  763     /*  34: 5           */      '%',
  764     /*  35: 6           */      '^',
  765     /*  36: 7           */      '&',
  766     /*  37: 8           */      '*',
  767     /*  38: 9           */      '(',
  768     /*  39: 0           */      ')',
  769     /*  40: minus       */      '_',
  770     /*  41: equal       */      '+',
  771     /*  42: grave/tilde */      '~',
  772     /*  43: BackSpace   */      '\b',
  773     /*  44: T5_Insert   */      KEYSYM_FUNC_N(8),
  774     /*  45: R4/KP_Equal */      KEYSYM_FUNC_R(4),
  775     /*  46: R5/KP_Div   */      KEYSYM_FUNC_R(5),
  776     /*  47: R6/KP_Mult  */      KEYSYM_FUNC_R(6),
  777     /*  48:             */      KEYSYM_FUNC_N(13),
  778     /*  49: L5/Front    */      KEYSYM_FUNC_L(5),
  779     /*  50: KP_Delete   */      KEYSYM_FUNC_N(10),
  780     /*  51: L6/Copy     */      KEYSYM_FUNC_L(6),
  781     /*  52: T5_Home     */      KEYSYM_FUNC_R(7),
  782     /*  53: Tab         */      '\t',
  783     /*  54: Q           */      'Q',
  784     /*  55: W           */      'W',
  785     /*  56: E           */      'E',
  786     /*  57: R           */      'R',
  787     /*  58: T           */      'T',
  788     /*  59: Y           */      'Y',
  789     /*  60: U           */      'U',
  790     /*  61: I           */      'I',
  791     /*  62: O           */      'O',
  792     /*  63: P           */      'P',
  793     /*  64: [           */      '{',
  794     /*  65: ]           */      '}',
  795     /*  66: Delete      */      0x7f,
  796     /*  67: Compose     */      KEYSYM_COMPOSE,
  797     /*  68: R7/Home     */      KEYSYM_FUNC_R(7),
  798     /*  69: R8/Up       */      KEYSYM_FUNC_R(8),
  799     /*  70: R9/PgUp     */      KEYSYM_FUNC_R(9),
  800     /*  71: KP_Minus    */      KEYSYM_FUNC_N(15),
  801     /*  72: L7/Open     */      KEYSYM_FUNC_L(7),
  802     /*  73: L8/Paste    */      KEYSYM_FUNC_L(8),
  803     /*  74: T5_End      */      KEYSYM_FUNC_R(13),
  804     /*  75:             */      KEYSYM_HOLE,
  805     /*  76: Ctrl_L      */      KEYSYM_SETMOD | KBMOD_CTRL_L,
  806     /*  77: A           */      'A',
  807     /*  78: S           */      'S',
  808     /*  79: D           */      'D',
  809     /*  80: F           */      'F',
  810     /*  81: G           */      'G',
  811     /*  82: H           */      'H',
  812     /*  83: J           */      'J',
  813     /*  84: K           */      'K',
  814     /*  85: L           */      'L',
  815     /*  86: ;           */      ':',
  816     /*  87: apostr.     */      '"',
  817     /*  88: backslash   */      '|',
  818     /*  89: Return      */      '\r',
  819     /*  90: KP_Enter    */      KEYSYM_FUNC_N(11),
  820     /*  91: R10/Left    */      KEYSYM_FUNC_R(10),
  821     /*  92: R11/KP_5    */      KEYSYM_FUNC_R(11),
  822     /*  93: R12/Right   */      KEYSYM_FUNC_R(12),
  823     /*  94: KP_Insert   */      KEYSYM_FUNC_N(8),
  824     /*  95: L9/Find     */      KEYSYM_FUNC_L(9),
  825     /*  96: T5_PgUp     */      KEYSYM_FUNC_R(9),
  826     /*  97: L10/Cut     */      KEYSYM_FUNC_L(10),
  827     /*  98: Num_Lock    */      KEYSYM_INVMOD | KBMOD_NUMLOCK,
  828     /*  99: Shift_L     */      KEYSYM_SETMOD | KBMOD_SHIFT_L,
  829     /* 100: Z           */      'Z',
  830     /* 101: X           */      'X',
  831     /* 102: C           */      'C',
  832     /* 103: V           */      'V',
  833     /* 104: B           */      'B',
  834     /* 105: N           */      'N',
  835     /* 106: M           */      'M',
  836     /* 107: ,           */      '<',
  837     /* 108: .           */      '>',
  838     /* 109: /           */      '?',
  839     /* 110: Shift_R     */      KEYSYM_SETMOD | KBMOD_SHIFT_R,
  840     /* 111: Linefeed    */      '\n',
  841     /* 112: R13/End     */      KEYSYM_FUNC_R(13),
  842     /* 113: R14/Down    */      KEYSYM_FUNC_R(14),
  843     /* 114: R15/PgDn    */      KEYSYM_FUNC_R(15),
  844     /* 115:             */      KEYSYM_HOLE,
  845     /* 116:             */      KEYSYM_HOLE,
  846     /* 117:             */      KEYSYM_HOLE,
  847     /* 118: L16/Help    */      KEYSYM_FUNC_L(16),
  848     /* 119: CapsLock    */      KEYSYM_INVMOD | KBMOD_CAPSLOCK,
  849     /* 120: Meta_L      */      KEYSYM_SETMOD | KBMOD_META_L,
  850     /* 121: SpaceBar    */      ' ',
  851     /* 122: Meta_R      */      KEYSYM_SETMOD | KBMOD_META_R,
  852     /* 123: T5_PgDn     */      KEYSYM_FUNC_R(15),
  853     /* 124:             */      KEYSYM_HOLE,
  854     /* 125: KP_Add      */      KEYSYM_FUNC_N(14),
  855     /* 126:             */      KEYSYM_HW_ERR,
  856     /* 127:             */      KEYSYM_ALL_UP,
  857 };
  858 
  859 
  860 
  861 /*
  862  * Strings indexed by:  (KEYSYM_STRING | idx)
  863  */
  864 char kbd_stringtab[16][10] = {
  865         { 0x1b, '[', 'H', 0 },  /* 0: Home */
  866         { 0x1b, '[', 'A', 0 },  /* 1: Up   */
  867         { 0x1b, '[', 'B', 0 },  /* 2: Down */
  868         { 0x1b, '[', 'D', 0 },  /* 3: Left */
  869         { 0x1b, '[', 'C', 0 },  /* 4: Right */
  870 };
  871 
  872 /*
  873  * The "NumLock" map, which is used to remap
  874  * function keysyms when NumLock is on.
  875  */
  876 unsigned short kbd_numlock_map[64] = {
  877         /* KEYSYM_FUNC_L: Identity map */
  878         0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607,
  879         0x608, 0x609, 0x60a, 0x60b, 0x60c, 0x60d, 0x60e, 0x60f,
  880 
  881         /* KEYSYM_FUNC_R: remap to numbers... */
  882         0x610, 0x611, 0x612,
  883         '=', '/', '*',
  884         '7', '8', '9',
  885         '4', '5', '6',
  886         '1', '2', '3',
  887         0x61f,
  888 
  889         /* KEYSYM_FUNC_F: Identity map */
  890         0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627,
  891         0x628, 0x629, 0x62a, 0x62b, 0x62c, 0x62d, 0x62e, 0x62f,
  892 
  893         /* KEYSYM_FUNC_N: remap just a few... */
  894         0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636,   '',
  895         0x638,   '.',  '\r', 0x63b, 0x63c,   '+',   '-', 0x63f,
  896 };
  897 
  898 
  899 /*
  900  * Keyboard descriptions for each type.
  901  */
  902 
  903 /* Treat type 2 as type 3 (close enough) */
  904 #define kbd_type2 kbd_type3
  905 
  906 static struct keyboard kbd_type3 = {
  907         keymap_release,
  908         keymap_control,
  909         keymap_s3_lc,
  910         keymap_s3_uc,
  911 };
  912 
  913 static struct keyboard kbd_type4 = {
  914         keymap_release,
  915         keymap_control,
  916         keymap_s4_lc,
  917         keymap_s4_uc,
  918 };
  919 
  920 /* Treat type 5 as type 4 (close enough) */
  921 #define kbd_type5 kbd_type4
  922 
  923 struct keyboard * keyboards[] = {
  924         0, /* type 0 */
  925         0, /* type 1 */
  926         &kbd_type2,
  927         &kbd_type3,
  928         &kbd_type4,
  929         &kbd_type5,
  930 };              
  931 int kbd_max_type = 5;

Cache object: 445eca58873aa824263bacdc0e95f101


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.