NetBSD/sys/dev/sun/kbd_tables.c

927 lines
34 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* $NetBSD: kbd_tables.c,v 1.10 2009/10/21 23:12:10 snj Exp $ */
/*
* Copyright (c) 1996 Gordon W. Ross
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Keyboard translation tables. (See kbd_tables.h)
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: kbd_tables.c,v 1.10 2009/10/21 23:12:10 snj Exp $");
#include <sys/types.h>
#define _KERNEL 1 /* XXX */
#include "kbd_tables.h"
/* The "compose" operations are not implemented. */
#define KEYSYM_COMPOSE KEYSYM_NOP
/*
* Key release codes are decoded in this map.
*/
u_short keymap_release[KEYMAP_SIZE] = {
/* 0: */ KEYSYM_HOLE,
/* 1: L1/Stop */ KEYSYM_NOP,
/* 2: */ KEYSYM_HOLE,
/* 3: L2/Again */ KEYSYM_NOP,
/* 4: */ KEYSYM_HOLE,
/* 5: F1 */ KEYSYM_NOP,
/* 6: F2 */ KEYSYM_NOP,
/* 7: F10 */ KEYSYM_NOP,
/* 8: F3 */ KEYSYM_NOP,
/* 9: F11 */ KEYSYM_NOP,
/* 10: F4 */ KEYSYM_NOP,
/* 11: F12 */ KEYSYM_NOP,
/* 12: F5 */ KEYSYM_NOP,
/* 13: AltGraph */ KEYSYM_CLRMOD | KBMOD_ALTGRAPH,
/* 14: F6 */ KEYSYM_NOP,
/* 15: */ KEYSYM_HOLE,
/* 16: F7 */ KEYSYM_NOP,
/* 17: F8 */ KEYSYM_NOP,
/* 18: F9 */ KEYSYM_NOP,
/* 19: Alt_L */ KEYSYM_CLRMOD | KBMOD_ALT_L,
/* 20: T5_Up */ KEYSYM_NOP,
/* 21: R1/Pause */ KEYSYM_NOP,
/* 22: R2/Print */ KEYSYM_NOP,
/* 23: R3/Break */ KEYSYM_NOP,
/* 24: T5_Left */ KEYSYM_NOP,
/* 25: L3/Props */ KEYSYM_NOP,
/* 26: L4/Undo */ KEYSYM_NOP,
/* 27: T5_Down */ KEYSYM_NOP,
/* 28: T5_Right */ KEYSYM_NOP,
/* 29: Esc */ KEYSYM_NOP,
/* 30: 1 */ KEYSYM_NOP,
/* 31: 2 */ KEYSYM_NOP,
/* 32: 3 */ KEYSYM_NOP,
/* 33: 4 */ KEYSYM_NOP,
/* 34: 5 */ KEYSYM_NOP,
/* 35: 6 */ KEYSYM_NOP,
/* 36: 7 */ KEYSYM_NOP,
/* 37: 8 */ KEYSYM_NOP,
/* 38: 9 */ KEYSYM_NOP,
/* 39: 0 */ KEYSYM_NOP,
/* 40: minus */ KEYSYM_NOP,
/* 41: equal */ KEYSYM_NOP,
/* 42: grave/tilde */ KEYSYM_NOP,
/* 43: BackSpace */ KEYSYM_NOP,
/* 44: T5_Insert */ KEYSYM_NOP,
/* 45: R4/KP_Equal */ KEYSYM_NOP,
/* 46: R5/KP_Div */ KEYSYM_NOP,
/* 47: R6/KP_Mult */ KEYSYM_NOP,
/* 48: */ KEYSYM_NOP,
/* 49: L5/Front */ KEYSYM_NOP,
/* 50: KP_Delete */ KEYSYM_NOP,
/* 51: L6/Copy */ KEYSYM_NOP,
/* 52: T5_Home */ KEYSYM_NOP,
/* 53: Tab */ KEYSYM_NOP,
/* 54: Q */ KEYSYM_NOP,
/* 55: W */ KEYSYM_NOP,
/* 56: E */ KEYSYM_NOP,
/* 57: R */ KEYSYM_NOP,
/* 58: T */ KEYSYM_NOP,
/* 59: Y */ KEYSYM_NOP,
/* 60: U */ KEYSYM_NOP,
/* 61: I */ KEYSYM_NOP,
/* 62: O */ KEYSYM_NOP,
/* 63: P */ KEYSYM_NOP,
/* 64: [ */ KEYSYM_NOP,
/* 65: ] */ KEYSYM_NOP,
/* 66: Delete */ KEYSYM_NOP,
/* 67: Compose */ KEYSYM_NOP,
/* 68: R7/Home */ KEYSYM_NOP,
/* 69: R8/Up */ KEYSYM_NOP,
/* 70: R9/PgUp */ KEYSYM_NOP,
/* 71: KP_Minus */ KEYSYM_NOP,
/* 72: L7/Open */ KEYSYM_NOP,
/* 73: L8/Paste */ KEYSYM_NOP,
/* 74: T5_End */ KEYSYM_NOP,
/* 75: */ KEYSYM_HOLE,
/* 76: Ctrl_L */ KEYSYM_CLRMOD | KBMOD_CTRL_L,
/* 77: A */ KEYSYM_NOP,
/* 78: S */ KEYSYM_NOP,
/* 79: D */ KEYSYM_NOP,
/* 80: F */ KEYSYM_NOP,
/* 81: G */ KEYSYM_NOP,
/* 82: H */ KEYSYM_NOP,
/* 83: J */ KEYSYM_NOP,
/* 84: K */ KEYSYM_NOP,
/* 85: L */ KEYSYM_NOP,
/* 86: ; */ KEYSYM_NOP,
/* 87: apostr. */ KEYSYM_NOP,
/* 88: backslash */ KEYSYM_NOP,
/* 89: Return */ KEYSYM_NOP,
/* 90: KP_Enter */ KEYSYM_NOP,
/* 91: R10/Left */ KEYSYM_NOP,
/* 92: R11/KP_5 */ KEYSYM_NOP,
/* 93: R12/Right */ KEYSYM_NOP,
/* 94: KP_Insert */ KEYSYM_NOP,
/* 95: L9/Find */ KEYSYM_NOP,
/* 96: T5_PgUp */ KEYSYM_NOP,
/* 97: L10/Cut */ KEYSYM_NOP,
/* 98: Num_Lock */ KEYSYM_NOP,
/* 99: Shift_L */ KEYSYM_CLRMOD | KBMOD_SHIFT_L,
/* 100: Z */ KEYSYM_NOP,
/* 101: X */ KEYSYM_NOP,
/* 102: C */ KEYSYM_NOP,
/* 103: V */ KEYSYM_NOP,
/* 104: B */ KEYSYM_NOP,
/* 105: N */ KEYSYM_NOP,
/* 106: M */ KEYSYM_NOP,
/* 107: , */ KEYSYM_NOP,
/* 108: . */ KEYSYM_NOP,
/* 109: / */ KEYSYM_NOP,
/* 110: Shift_R */ KEYSYM_CLRMOD | KBMOD_SHIFT_R,
/* 111: Linefeed */ KEYSYM_NOP,
/* 112: R13/End */ KEYSYM_NOP,
/* 113: R14/Down */ KEYSYM_NOP,
/* 114: R15/PgDn */ KEYSYM_NOP,
/* 115: */ KEYSYM_HOLE,
/* 116: */ KEYSYM_HOLE,
/* 117: */ KEYSYM_HOLE,
/* 118: L16/Help */ KEYSYM_NOP,
/* 119: CapsLock */ KEYSYM_NOP,
/* 120: Meta_L */ KEYSYM_CLRMOD | KBMOD_META_L,
/* 121: SpaceBar */ KEYSYM_NOP,
/* 122: Meta_R */ KEYSYM_CLRMOD | KBMOD_META_R,
/* 123: T5_PgDn */ KEYSYM_NOP,
/* 124: */ KEYSYM_HOLE,
/* 125: KP_Add */ KEYSYM_NOP,
/* 126: */ KEYSYM_LAYOUT, /* layout next */
/* 127: */ KEYSYM_RESET, /* kbd ID next */
};
/*
* This map is used when a control key is down.
*/
#define CTL(c) ((c)&0x1F)
u_short keymap_control[KEYMAP_SIZE] = {
/* 0: */ KEYSYM_HOLE,
/* 1: L1/Stop */ KEYSYM_NOP,
/* 2: */ KEYSYM_HOLE,
/* 3: L2/Again */ KEYSYM_NOP,
/* 4: */ KEYSYM_HOLE,
/* 5: F1 */ KEYSYM_NOP,
/* 6: F2 */ KEYSYM_NOP,
/* 7: F10 */ KEYSYM_NOP,
/* 8: F3 */ KEYSYM_NOP,
/* 9: F11 */ KEYSYM_NOP,
/* 10: F4 */ KEYSYM_NOP,
/* 11: F12 */ KEYSYM_NOP,
/* 12: F5 */ KEYSYM_NOP,
/* 13: AltGraph */ KEYSYM_SETMOD | KBMOD_ALTGRAPH,
/* 14: F6 */ KEYSYM_NOP,
/* 15: */ KEYSYM_HOLE,
/* 16: F7 */ KEYSYM_NOP,
/* 17: F8 */ KEYSYM_NOP,
/* 18: F9 */ KEYSYM_NOP,
/* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L,
/* 20: T5_Up */ KEYSYM_NOP,
/* 21: R1/Pause */ KEYSYM_NOP,
/* 22: R2/Print */ KEYSYM_NOP,
/* 23: R3/Break */ KEYSYM_NOP,
/* 24: T5_Left */ KEYSYM_NOP,
/* 25: L3/Props */ KEYSYM_NOP,
/* 26: L4/Undo */ KEYSYM_NOP,
/* 27: T5_Down */ KEYSYM_NOP,
/* 28: T5_Right */ KEYSYM_NOP,
/* 29: Esc */ 0x1b,
/* 30: 1 */ KEYSYM_NOP,
/* 31: 2 */ CTL('@'),
/* 32: 3 */ KEYSYM_NOP,
/* 33: 4 */ KEYSYM_NOP,
/* 34: 5 */ KEYSYM_NOP,
/* 35: 6 */ CTL('^'),
/* 36: 7 */ KEYSYM_NOP,
/* 37: 8 */ KEYSYM_NOP,
/* 38: 9 */ KEYSYM_NOP,
/* 39: 0 */ KEYSYM_NOP,
/* 40: minus _ */ CTL('_'),
/* 41: equal */ KEYSYM_NOP,
/* 42: grave/tilde */ CTL('~'),
/* 43: BackSpace */ '\b',
/* 44: T5_Insert */ KEYSYM_NOP,
/* 45: R4/KP_Equal */ KEYSYM_NOP,
/* 46: R5/KP_Div */ KEYSYM_NOP,
/* 47: R6/KP_Mult */ KEYSYM_NOP,
/* 48: */ KEYSYM_NOP,
/* 49: L5/Front */ KEYSYM_NOP,
/* 50: KP_Delete */ KEYSYM_NOP,
/* 51: L6/Copy */ KEYSYM_NOP,
/* 52: T5_Home */ KEYSYM_NOP,
/* 53: Tab */ '\t',
/* 54: Q */ CTL('Q'),
/* 55: W */ CTL('W'),
/* 56: E */ CTL('E'),
/* 57: R */ CTL('R'),
/* 58: T */ CTL('T'),
/* 59: Y */ CTL('Y'),
/* 60: U */ CTL('U'),
/* 61: I */ CTL('I'),
/* 62: O */ CTL('O'),
/* 63: P */ CTL('P'),
/* 64: [ */ CTL('['),
/* 65: ] */ CTL(']'),
/* 66: Delete */ 0x7f,
/* 67: Compose */ KEYSYM_COMPOSE,
/* 68: R7/Home */ CTL('A'), /* emacs */
/* 69: R8/Up */ CTL('P'), /* emacs */
/* 70: R9/PgUp */ 0x80|'v', /* emacs */
/* 71: KP_Minus */ KEYSYM_NOP,
/* 72: L7/Open */ KEYSYM_NOP,
/* 73: L8/Paste */ KEYSYM_NOP,
/* 74: T5_End */ KEYSYM_NOP,
/* 75: */ KEYSYM_HOLE,
/* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L,
/* 77: A */ CTL('A'),
/* 78: S */ CTL('S'),
/* 79: D */ CTL('D'),
/* 80: F */ CTL('F'),
/* 81: G */ CTL('G'),
/* 82: H */ CTL('H'),
/* 83: J */ CTL('J'),
/* 84: K */ CTL('K'),
/* 85: L */ CTL('L'),
/* 86: ; */ KEYSYM_NOP,
/* 87: apostr. */ KEYSYM_NOP,
/* 88: backslash */ CTL('\\'),
/* 89: Return */ '\r',
/* 90: KP_Enter */ KEYSYM_NOP,
/* 91: R10/Left */ CTL('B'), /* emacs */
/* 92: R11/KP_5 */ KEYSYM_NOP,
/* 93: R12/Right */ CTL('F'), /* emacs */
/* 94: KP_Insert */ KEYSYM_NOP,
/* 95: L9/Find */ KEYSYM_NOP,
/* 96: T5_PgUp */ KEYSYM_NOP,
/* 97: L10/Cut */ KEYSYM_NOP,
/* 98: Num_Lock */ KEYSYM_INVMOD | KBMOD_NUMLOCK,
/* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L,
/* 100: Z */ CTL('Z'),
/* 101: X */ CTL('X'),
/* 102: C */ CTL('C'),
/* 103: V */ CTL('V'),
/* 104: B */ CTL('B'),
/* 105: N */ CTL('N'),
/* 106: M */ CTL('M'),
/* 107: , */ KEYSYM_NOP,
/* 108: . */ KEYSYM_NOP,
/* 109: / ? */ CTL('?'),
/* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R,
/* 111: Linefeed */ '\n',
/* 112: R13/End */ CTL('E'), /* emacs */
/* 113: R14/Down */ CTL('N'), /* emacs */
/* 114: R15/PgDn */ CTL('V'), /* emacs */
/* 115: */ KEYSYM_HOLE,
/* 116: */ KEYSYM_HOLE,
/* 117: */ KEYSYM_HOLE,
/* 118: L16/Help */ KEYSYM_NOP,
/* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK,
/* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L,
/* 121: SpaceBar */ CTL(' '),
/* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R,
/* 123: T5_PgDn */ KEYSYM_NOP,
/* 124: */ KEYSYM_HOLE,
/* 125: KP_Add */ KEYSYM_NOP,
/* 126: */ KEYSYM_HW_ERR,
/* 127: */ KEYSYM_ALL_UP,
};
#undef CTL
/*
* Keymaps for the "type 3" keyboard.
* (lower-case, upper-case)
*/
u_short keymap_s3_lc[KEYMAP_SIZE] = {
/* 0: */ KEYSYM_HOLE,
/* 1: L1/Stop */ KEYSYM_FUNC_L(1),
/* 2: */ KEYSYM_HOLE,
/* 3: L2/Again */ KEYSYM_FUNC_L(2),
/* 4: */ KEYSYM_HOLE,
/* 5: F1 */ KEYSYM_FUNC_F(1),
/* 6: F2 */ KEYSYM_FUNC_F(2),
/* 7: F10 */ KEYSYM_HOLE,
/* 8: F3 */ KEYSYM_FUNC_F(3),
/* 9: F11 */ KEYSYM_HOLE,
/* 10: F4 */ KEYSYM_FUNC_F(4),
/* 11: F12 */ KEYSYM_HOLE,
/* 12: F5 */ KEYSYM_FUNC_F(5),
/* 13: AltGraph */ KEYSYM_HOLE,
/* 14: F6 */ KEYSYM_FUNC_F(6),
/* 15: */ KEYSYM_HOLE,
/* 16: F7 */ KEYSYM_FUNC_F(7),
/* 17: F8 */ KEYSYM_FUNC_F(8),
/* 18: F9 */ KEYSYM_FUNC_F(9),
/* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L,
/* 20: T5_Up */ KEYSYM_HOLE,
/* 21: R1/Pause */ KEYSYM_FUNC_R(1),
/* 22: R2/Print */ KEYSYM_FUNC_R(2),
/* 23: R3/Break */ KEYSYM_FUNC_R(3),
/* 24: T5_Left */ KEYSYM_HOLE,
/* 25: L3/Props */ KEYSYM_FUNC_L(3),
/* 26: L4/Undo */ KEYSYM_FUNC_L(4),
/* 27: T5_Down */ KEYSYM_HOLE,
/* 28: T5_Right */ KEYSYM_HOLE,
/* 29: Esc */ 0x1b,
/* 30: 1 */ '1',
/* 31: 2 */ '2',
/* 32: 3 */ '3',
/* 33: 4 */ '4',
/* 34: 5 */ '5',
/* 35: 6 */ '6',
/* 36: 7 */ '7',
/* 37: 8 */ '8',
/* 38: 9 */ '9',
/* 39: 0 */ '0',
/* 40: minus */ '-',
/* 41: equal */ '=',
/* 42: grave/tilde */ '`',
/* 43: BackSpace */ '\b',
/* 44: */ KEYSYM_HOLE,
/* 45: R4/KP_Equal */ KEYSYM_FUNC_R(4),
/* 46: R5/KP_Div */ KEYSYM_FUNC_R(5),
/* 47: R6/KP_Mult */ KEYSYM_FUNC_R(6),
/* 48: */ KEYSYM_HOLE,
/* 49: L5/Front */ KEYSYM_FUNC_L(5),
/* 50: KP_Delete */ KEYSYM_HOLE,
/* 51: L6/Copy */ KEYSYM_FUNC_L(6),
/* 52: */ KEYSYM_HOLE,
/* 53: Tab */ '\t',
/* 54: Q */ 'q',
/* 55: W */ 'w',
/* 56: E */ 'e',
/* 57: R */ 'r',
/* 58: T */ 't',
/* 59: Y */ 'y',
/* 60: U */ 'u',
/* 61: I */ 'i',
/* 62: O */ 'o',
/* 63: P */ 'p',
/* 64: [ */ '[',
/* 65: ] */ ']',
/* 66: Delete */ 0x7f,
/* 67: Compose */ KEYSYM_HOLE,
/* 68: R7/Home */ KEYSYM_FUNC_R(7),
/* 69: R8/Up */ KEYSYM_FUNC_R(8),
/* 70: R9/PgUp */ KEYSYM_FUNC_R(9),
/* 71: KP_Minus */ KEYSYM_HOLE,
/* 72: L7/Open */ KEYSYM_FUNC_L(7),
/* 73: L8/Paste */ KEYSYM_FUNC_L(8),
/* 74: */ KEYSYM_HOLE,
/* 75: */ KEYSYM_HOLE,
/* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L,
/* 77: A */ 'a',
/* 78: S */ 's',
/* 79: D */ 'd',
/* 80: F */ 'f',
/* 81: G */ 'g',
/* 82: H */ 'h',
/* 83: J */ 'j',
/* 84: K */ 'k',
/* 85: L */ 'l',
/* 86: ; */ ';',
/* 87: apostr. */ '\'',
/* 88: backslash */ '\\',
/* 89: Return */ '\r',
/* 90: KP_Enter */ KEYSYM_HOLE,
/* 91: R10/Left */ KEYSYM_FUNC_R(10),
/* 92: R11/KP_5 */ KEYSYM_FUNC_R(11),
/* 93: R12/Right */ KEYSYM_FUNC_R(12),
/* 94: KP_Insert */ KEYSYM_HOLE,
/* 95: L9/Find */ KEYSYM_FUNC_L(9),
/* 96: */ KEYSYM_HOLE,
/* 97: L10/Cut */ KEYSYM_FUNC_L(10),
/* 98: Num_Lock */ KEYSYM_HOLE,
/* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L,
/* 100: Z */ 'z',
/* 101: X */ 'x',
/* 102: C */ 'c',
/* 103: V */ 'v',
/* 104: B */ 'b',
/* 105: N */ 'n',
/* 106: M */ 'm',
/* 107: , */ ',',
/* 108: . */ '.',
/* 109: / */ '/',
/* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R,
/* 111: Linefeed */ '\n',
/* 112: R13/End */ KEYSYM_FUNC_R(13),
/* 113: R14/Down */ KEYSYM_FUNC_R(14),
/* 114: R15/PgDn */ KEYSYM_FUNC_R(15),
/* 115: */ KEYSYM_HOLE,
/* 116: */ KEYSYM_HOLE,
/* 117: */ KEYSYM_HOLE,
/* 118: L16/Help */ KEYSYM_HOLE,
/* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK,
/* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L,
/* 121: SpaceBar */ ' ',
/* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R,
/* 123: */ KEYSYM_HOLE,
/* 124: */ KEYSYM_HOLE,
/* 125: KP_Add */ KEYSYM_HOLE,
/* 126: */ KEYSYM_HW_ERR,
/* 127: */ KEYSYM_ALL_UP,
};
u_short keymap_s3_uc[KEYMAP_SIZE] = {
/* 0: */ KEYSYM_HOLE,
/* 1: L1/Stop */ KEYSYM_FUNC_L(1),
/* 2: */ KEYSYM_HOLE,
/* 3: L2/Again */ KEYSYM_FUNC_L(2),
/* 4: */ KEYSYM_HOLE,
/* 5: F1 */ KEYSYM_FUNC_F(1),
/* 6: F2 */ KEYSYM_FUNC_F(2),
/* 7: F10 */ KEYSYM_HOLE,
/* 8: F3 */ KEYSYM_FUNC_F(3),
/* 9: F11 */ KEYSYM_HOLE,
/* 10: F4 */ KEYSYM_FUNC_F(4),
/* 11: F12 */ KEYSYM_HOLE,
/* 12: F5 */ KEYSYM_FUNC_F(5),
/* 13: AltGraph */ KEYSYM_HOLE,
/* 14: F6 */ KEYSYM_FUNC_F(6),
/* 15: */ KEYSYM_HOLE,
/* 16: F7 */ KEYSYM_FUNC_F(7),
/* 17: F8 */ KEYSYM_FUNC_F(8),
/* 18: F9 */ KEYSYM_FUNC_F(9),
/* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L,
/* 20: T5_Up */ KEYSYM_HOLE,
/* 21: R1/Pause */ KEYSYM_FUNC_R(1),
/* 22: R2/Print */ KEYSYM_FUNC_R(2),
/* 23: R3/Break */ KEYSYM_FUNC_R(3),
/* 24: T5_Left */ KEYSYM_HOLE,
/* 25: L3/Props */ KEYSYM_FUNC_L(3),
/* 26: L4/Undo */ KEYSYM_FUNC_L(4),
/* 27: T5_Down */ KEYSYM_HOLE,
/* 28: T5_Right */ KEYSYM_HOLE,
/* 29: Esc */ 0x1b,
/* 30: 1 */ '!',
/* 31: 2 */ '@',
/* 32: 3 */ '#',
/* 33: 4 */ '$',
/* 34: 5 */ '%',
/* 35: 6 */ '^',
/* 36: 7 */ '&',
/* 37: 8 */ '*',
/* 38: 9 */ '(',
/* 39: 0 */ ')',
/* 40: minus */ '_',
/* 41: equal */ '+',
/* 42: grave/tilde */ '~',
/* 43: BackSpace */ '\b',
/* 44: */ KEYSYM_HOLE,
/* 45: R4/KP_Equal */ KEYSYM_FUNC_R(4),
/* 46: R5/KP_Div */ KEYSYM_FUNC_R(5),
/* 47: R6/KP_Mult */ KEYSYM_FUNC_R(6),
/* 48: */ KEYSYM_HOLE,
/* 49: L5/Front */ KEYSYM_FUNC_L(5),
/* 50: KP_Delete */ KEYSYM_HOLE,
/* 51: L6/Copy */ KEYSYM_FUNC_L(6),
/* 52: */ KEYSYM_HOLE,
/* 53: Tab */ '\t',
/* 54: Q */ 'Q',
/* 55: W */ 'W',
/* 56: E */ 'E',
/* 57: R */ 'R',
/* 58: T */ 'T',
/* 59: Y */ 'Y',
/* 60: U */ 'U',
/* 61: I */ 'I',
/* 62: O */ 'O',
/* 63: P */ 'P',
/* 64: [ */ '{',
/* 65: ] */ '}',
/* 66: Delete */ 0x7f,
/* 67: Compose */ KEYSYM_HOLE,
/* 68: R7/Home */ KEYSYM_FUNC_R(7),
/* 69: R8/Up */ KEYSYM_FUNC_R(8),
/* 70: R9/PgUp */ KEYSYM_FUNC_R(9),
/* 71: KP_Minus */ KEYSYM_HOLE,
/* 72: L7/Open */ KEYSYM_FUNC_L(7),
/* 73: L8/Paste */ KEYSYM_FUNC_L(8),
/* 74: */ KEYSYM_HOLE,
/* 75: */ KEYSYM_HOLE,
/* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L,
/* 77: A */ 'A',
/* 78: S */ 'S',
/* 79: D */ 'D',
/* 80: F */ 'F',
/* 81: G */ 'G',
/* 82: H */ 'H',
/* 83: J */ 'J',
/* 84: K */ 'K',
/* 85: L */ 'L',
/* 86: ; */ ':',
/* 87: apostr. */ '"',
/* 88: backslash */ '|',
/* 89: Return */ '\r',
/* 90: KP_Enter */ KEYSYM_HOLE,
/* 91: R10/Left */ KEYSYM_FUNC_R(10),
/* 92: R11/KP_5 */ KEYSYM_FUNC_R(11),
/* 93: R12/Right */ KEYSYM_FUNC_R(12),
/* 94: KP_Insert */ KEYSYM_HOLE,
/* 95: L9/Find */ KEYSYM_FUNC_L(9),
/* 96: */ KEYSYM_HOLE,
/* 97: L10/Cut */ KEYSYM_FUNC_L(10),
/* 98: Num_Lock */ KEYSYM_HOLE,
/* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L,
/* 100: Z */ 'Z',
/* 101: X */ 'X',
/* 102: C */ 'C',
/* 103: V */ 'V',
/* 104: B */ 'B',
/* 105: N */ 'N',
/* 106: M */ 'M',
/* 107: , */ '<',
/* 108: . */ '>',
/* 109: / */ '?',
/* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R,
/* 111: Linefeed */ '\n',
/* 112: R13/End */ KEYSYM_FUNC_R(13),
/* 113: R14/Down */ KEYSYM_FUNC_R(14),
/* 114: R15/PgDn */ KEYSYM_FUNC_R(15),
/* 115: */ KEYSYM_HOLE,
/* 116: */ KEYSYM_HOLE,
/* 117: */ KEYSYM_HOLE,
/* 118: L16/Help */ KEYSYM_HOLE,
/* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK,
/* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L,
/* 121: SpaceBar */ ' ',
/* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R,
/* 123: */ KEYSYM_HOLE,
/* 124: */ KEYSYM_HOLE,
/* 125: KP_Add */ KEYSYM_HOLE,
/* 126: */ KEYSYM_HW_ERR,
/* 127: */ KEYSYM_ALL_UP,
};
/*
* Keymaps for the "type 4" keyboard.
* (lower-case, upper-case)
*/
u_short keymap_s4_lc[KEYMAP_SIZE] = {
/* 0: */ KEYSYM_HOLE,
/* 1: L1/Stop */ KEYSYM_FUNC_L(1),
/* 2: */ KEYSYM_HOLE,
/* 3: L2/Again */ KEYSYM_FUNC_L(2),
/* 4: */ KEYSYM_HOLE,
/* 5: F1 */ KEYSYM_FUNC_F(1),
/* 6: F2 */ KEYSYM_FUNC_F(2),
/* 7: F10 */ KEYSYM_FUNC_F(10),
/* 8: F3 */ KEYSYM_FUNC_F(3),
/* 9: F11 */ KEYSYM_FUNC_F(11),
/* 10: F4 */ KEYSYM_FUNC_F(4),
/* 11: F12 */ KEYSYM_FUNC_F(12),
/* 12: F5 */ KEYSYM_FUNC_F(5),
/* 13: AltGraph */ KEYSYM_SETMOD | KBMOD_ALTGRAPH,
/* 14: F6 */ KEYSYM_FUNC_F(6),
/* 15: */ KEYSYM_HOLE,
/* 16: F7 */ KEYSYM_FUNC_F(7),
/* 17: F8 */ KEYSYM_FUNC_F(8),
/* 18: F9 */ KEYSYM_FUNC_F(9),
/* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L,
/* 20: T5_Up */ KEYSYM_STRING | 1,
/* 21: R1/Pause */ KEYSYM_FUNC_R(1),
/* 22: R2/Print */ KEYSYM_FUNC_R(2),
/* 23: R3/Break */ KEYSYM_FUNC_R(3),
/* 24: T5_Left */ KEYSYM_STRING | 3,
/* 25: L3/Props */ KEYSYM_FUNC_L(3),
/* 26: L4/Undo */ KEYSYM_FUNC_L(4),
/* 27: T5_Down */ KEYSYM_STRING | 2,
/* 28: T5_Right */ KEYSYM_STRING | 4,
/* 29: Esc */ 0x1b,
/* 30: 1 */ '1',
/* 31: 2 */ '2',
/* 32: 3 */ '3',
/* 33: 4 */ '4',
/* 34: 5 */ '5',
/* 35: 6 */ '6',
/* 36: 7 */ '7',
/* 37: 8 */ '8',
/* 38: 9 */ '9',
/* 39: 0 */ '0',
/* 40: minus */ '-',
/* 41: equal */ '=',
/* 42: grave/tilde */ '`',
/* 43: BackSpace */ '\b',
/* 44: T5_Insert */ KEYSYM_FUNC_N(8),
/* 45: R4/KP_Equal */ KEYSYM_FUNC_R(4),
/* 46: R5/KP_Div */ KEYSYM_FUNC_R(5),
/* 47: R6/KP_Mult */ KEYSYM_FUNC_R(6),
/* 48: */ KEYSYM_FUNC_N(13),
/* 49: L5/Front */ KEYSYM_FUNC_L(5),
/* 50: KP_Delete */ KEYSYM_FUNC_N(10),
/* 51: L6/Copy */ KEYSYM_FUNC_L(6),
/* 52: T5_Home */ KEYSYM_FUNC_R(7),
/* 53: Tab */ '\t',
/* 54: Q */ 'q',
/* 55: W */ 'w',
/* 56: E */ 'e',
/* 57: R */ 'r',
/* 58: T */ 't',
/* 59: Y */ 'y',
/* 60: U */ 'u',
/* 61: I */ 'i',
/* 62: O */ 'o',
/* 63: P */ 'p',
/* 64: [ */ '[',
/* 65: ] */ ']',
/* 66: Delete */ 0x7f,
/* 67: Compose */ KEYSYM_COMPOSE,
/* 68: R7/Home */ KEYSYM_FUNC_R(7),
/* 69: R8/Up */ KEYSYM_FUNC_R(8),
/* 70: R9/PgUp */ KEYSYM_FUNC_R(9),
/* 71: KP_Minus */ KEYSYM_FUNC_N(15),
/* 72: L7/Open */ KEYSYM_FUNC_L(7),
/* 73: L8/Paste */ KEYSYM_FUNC_L(8),
/* 74: T5_End */ KEYSYM_FUNC_R(13),
/* 75: */ KEYSYM_HOLE,
/* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L,
/* 77: A */ 'a',
/* 78: S */ 's',
/* 79: D */ 'd',
/* 80: F */ 'f',
/* 81: G */ 'g',
/* 82: H */ 'h',
/* 83: J */ 'j',
/* 84: K */ 'k',
/* 85: L */ 'l',
/* 86: ; */ ';',
/* 87: apostr. */ '\'',
/* 88: backslash */ '\\',
/* 89: Return */ '\r',
/* 90: KP_Enter */ KEYSYM_FUNC_N(11),
/* 91: R10/Left */ KEYSYM_FUNC_R(10),
/* 92: R11/KP_5 */ KEYSYM_FUNC_R(11),
/* 93: R12/Right */ KEYSYM_FUNC_R(12),
/* 94: KP_Insert */ KEYSYM_FUNC_N(8),
/* 95: L9/Find */ KEYSYM_FUNC_L(9),
/* 96: T5_PgUp */ KEYSYM_FUNC_R(9),
/* 97: L10/Cut */ KEYSYM_FUNC_L(10),
/* 98: Num_Lock */ KEYSYM_INVMOD | KBMOD_NUMLOCK,
/* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L,
/* 100: Z */ 'z',
/* 101: X */ 'x',
/* 102: C */ 'c',
/* 103: V */ 'v',
/* 104: B */ 'b',
/* 105: N */ 'n',
/* 106: M */ 'm',
/* 107: , */ ',',
/* 108: . */ '.',
/* 109: / */ '/',
/* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R,
/* 111: Linefeed */ '\n',
/* 112: R13/End */ KEYSYM_FUNC_R(13),
/* 113: R14/Down */ KEYSYM_FUNC_R(14),
/* 114: R15/PgDn */ KEYSYM_FUNC_R(15),
/* 115: */ KEYSYM_HOLE,
/* 116: */ KEYSYM_HOLE,
/* 117: */ KEYSYM_HOLE,
/* 118: L16/Help */ KEYSYM_FUNC_L(16),
/* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK,
/* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L,
/* 121: SpaceBar */ ' ',
/* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R,
/* 123: T5_PgDn */ KEYSYM_FUNC_R(15),
/* 124: */ KEYSYM_HOLE,
/* 125: KP_Add */ KEYSYM_FUNC_N(14),
/* 126: */ KEYSYM_HW_ERR,
/* 127: */ KEYSYM_ALL_UP,
};
u_short keymap_s4_uc[KEYMAP_SIZE] = {
/* 0: */ KEYSYM_HOLE,
/* 1: L1/Stop */ KEYSYM_FUNC_L(1),
/* 2: */ KEYSYM_HOLE,
/* 3: L2/Again */ KEYSYM_FUNC_L(2),
/* 4: */ KEYSYM_HOLE,
/* 5: F1 */ KEYSYM_FUNC_F(1),
/* 6: F2 */ KEYSYM_FUNC_F(2),
/* 7: F10 */ KEYSYM_FUNC_F(10),
/* 8: F3 */ KEYSYM_FUNC_F(3),
/* 9: F11 */ KEYSYM_FUNC_F(11),
/* 10: F4 */ KEYSYM_FUNC_F(4),
/* 11: F12 */ KEYSYM_FUNC_F(12),
/* 12: F5 */ KEYSYM_FUNC_F(5),
/* 13: AltGraph */ KEYSYM_SETMOD | KBMOD_ALTGRAPH,
/* 14: F6 */ KEYSYM_FUNC_F(6),
/* 15: */ KEYSYM_HOLE,
/* 16: F7 */ KEYSYM_FUNC_F(7),
/* 17: F8 */ KEYSYM_FUNC_F(8),
/* 18: F9 */ KEYSYM_FUNC_F(9),
/* 19: Alt_L */ KEYSYM_SETMOD | KBMOD_ALT_L,
/* 20: T5_Up */ KEYSYM_STRING | 1,
/* 21: R1/Pause */ KEYSYM_FUNC_R(1),
/* 22: R2/Print */ KEYSYM_FUNC_R(2),
/* 23: R3/Break */ KEYSYM_FUNC_R(3),
/* 24: T5_Left */ KEYSYM_STRING | 3,
/* 25: L3/Props */ KEYSYM_FUNC_L(3),
/* 26: L4/Undo */ KEYSYM_FUNC_L(4),
/* 27: T5_Down */ KEYSYM_STRING | 2,
/* 28: T5_Right */ KEYSYM_STRING | 4,
/* 29: Esc */ 0x1b,
/* 30: 1 */ '!',
/* 31: 2 */ '@',
/* 32: 3 */ '#',
/* 33: 4 */ '$',
/* 34: 5 */ '%',
/* 35: 6 */ '^',
/* 36: 7 */ '&',
/* 37: 8 */ '*',
/* 38: 9 */ '(',
/* 39: 0 */ ')',
/* 40: minus */ '_',
/* 41: equal */ '+',
/* 42: grave/tilde */ '~',
/* 43: BackSpace */ '\b',
/* 44: T5_Insert */ KEYSYM_FUNC_N(8),
/* 45: R4/KP_Equal */ KEYSYM_FUNC_R(4),
/* 46: R5/KP_Div */ KEYSYM_FUNC_R(5),
/* 47: R6/KP_Mult */ KEYSYM_FUNC_R(6),
/* 48: */ KEYSYM_FUNC_N(13),
/* 49: L5/Front */ KEYSYM_FUNC_L(5),
/* 50: KP_Delete */ KEYSYM_FUNC_N(10),
/* 51: L6/Copy */ KEYSYM_FUNC_L(6),
/* 52: T5_Home */ KEYSYM_FUNC_R(7),
/* 53: Tab */ '\t',
/* 54: Q */ 'Q',
/* 55: W */ 'W',
/* 56: E */ 'E',
/* 57: R */ 'R',
/* 58: T */ 'T',
/* 59: Y */ 'Y',
/* 60: U */ 'U',
/* 61: I */ 'I',
/* 62: O */ 'O',
/* 63: P */ 'P',
/* 64: [ */ '{',
/* 65: ] */ '}',
/* 66: Delete */ 0x7f,
/* 67: Compose */ KEYSYM_COMPOSE,
/* 68: R7/Home */ KEYSYM_FUNC_R(7),
/* 69: R8/Up */ KEYSYM_FUNC_R(8),
/* 70: R9/PgUp */ KEYSYM_FUNC_R(9),
/* 71: KP_Minus */ KEYSYM_FUNC_N(15),
/* 72: L7/Open */ KEYSYM_FUNC_L(7),
/* 73: L8/Paste */ KEYSYM_FUNC_L(8),
/* 74: T5_End */ KEYSYM_FUNC_R(13),
/* 75: */ KEYSYM_HOLE,
/* 76: Ctrl_L */ KEYSYM_SETMOD | KBMOD_CTRL_L,
/* 77: A */ 'A',
/* 78: S */ 'S',
/* 79: D */ 'D',
/* 80: F */ 'F',
/* 81: G */ 'G',
/* 82: H */ 'H',
/* 83: J */ 'J',
/* 84: K */ 'K',
/* 85: L */ 'L',
/* 86: ; */ ':',
/* 87: apostr. */ '"',
/* 88: backslash */ '|',
/* 89: Return */ '\r',
/* 90: KP_Enter */ KEYSYM_FUNC_N(11),
/* 91: R10/Left */ KEYSYM_FUNC_R(10),
/* 92: R11/KP_5 */ KEYSYM_FUNC_R(11),
/* 93: R12/Right */ KEYSYM_FUNC_R(12),
/* 94: KP_Insert */ KEYSYM_FUNC_N(8),
/* 95: L9/Find */ KEYSYM_FUNC_L(9),
/* 96: T5_PgUp */ KEYSYM_FUNC_R(9),
/* 97: L10/Cut */ KEYSYM_FUNC_L(10),
/* 98: Num_Lock */ KEYSYM_INVMOD | KBMOD_NUMLOCK,
/* 99: Shift_L */ KEYSYM_SETMOD | KBMOD_SHIFT_L,
/* 100: Z */ 'Z',
/* 101: X */ 'X',
/* 102: C */ 'C',
/* 103: V */ 'V',
/* 104: B */ 'B',
/* 105: N */ 'N',
/* 106: M */ 'M',
/* 107: , */ '<',
/* 108: . */ '>',
/* 109: / */ '?',
/* 110: Shift_R */ KEYSYM_SETMOD | KBMOD_SHIFT_R,
/* 111: Linefeed */ '\n',
/* 112: R13/End */ KEYSYM_FUNC_R(13),
/* 113: R14/Down */ KEYSYM_FUNC_R(14),
/* 114: R15/PgDn */ KEYSYM_FUNC_R(15),
/* 115: */ KEYSYM_HOLE,
/* 116: */ KEYSYM_HOLE,
/* 117: */ KEYSYM_HOLE,
/* 118: L16/Help */ KEYSYM_FUNC_L(16),
/* 119: CapsLock */ KEYSYM_INVMOD | KBMOD_CAPSLOCK,
/* 120: Meta_L */ KEYSYM_SETMOD | KBMOD_META_L,
/* 121: SpaceBar */ ' ',
/* 122: Meta_R */ KEYSYM_SETMOD | KBMOD_META_R,
/* 123: T5_PgDn */ KEYSYM_FUNC_R(15),
/* 124: */ KEYSYM_HOLE,
/* 125: KP_Add */ KEYSYM_FUNC_N(14),
/* 126: */ KEYSYM_HW_ERR,
/* 127: */ KEYSYM_ALL_UP,
};
/*
* Strings indexed by: (KEYSYM_STRING | idx)
*/
char kbd_stringtab[16][10] = {
{ 0x1b, '[', 'H', 0 }, /* 0: Home */
{ 0x1b, '[', 'A', 0 }, /* 1: Up */
{ 0x1b, '[', 'B', 0 }, /* 2: Down */
{ 0x1b, '[', 'D', 0 }, /* 3: Left */
{ 0x1b, '[', 'C', 0 }, /* 4: Right */
};
/*
* The "NumLock" map, which is used to remap
* function keysyms when NumLock is on.
*/
unsigned short kbd_numlock_map[64] = {
/* KEYSYM_FUNC_L: Identity map */
0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607,
0x608, 0x609, 0x60a, 0x60b, 0x60c, 0x60d, 0x60e, 0x60f,
/* KEYSYM_FUNC_R: remap to numbers... */
0x610, 0x611, 0x612,
'=', '/', '*',
'7', '8', '9',
'4', '5', '6',
'1', '2', '3',
0x61f,
/* KEYSYM_FUNC_F: Identity map */
0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627,
0x628, 0x629, 0x62a, 0x62b, 0x62c, 0x62d, 0x62e, 0x62f,
/* KEYSYM_FUNC_N: remap just a few... */
0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, '0',
0x638, '.', '\r', 0x63b, 0x63c, '+', '-', 0x63f,
};
/*
* Keyboard descriptions for each type.
*/
/* Treat type 2 as type 3 (close enough) */
#define kbd_type2 kbd_type3
static struct keyboard kbd_type3 = {
keymap_release,
keymap_control,
keymap_s3_lc,
keymap_s3_uc,
};
static struct keyboard kbd_type4 = {
keymap_release,
keymap_control,
keymap_s4_lc,
keymap_s4_uc,
};
/* Treat type 5 as type 4 (close enough) */
#define kbd_type5 kbd_type4
struct keyboard * keyboards[] = {
0, /* type 0 */
0, /* type 1 */
&kbd_type2,
&kbd_type3,
&kbd_type4,
&kbd_type5,
};
int kbd_max_type = 5;