xref: /csrg-svn/sys/hp/dev/hil_keymaps.c (revision 45497)
141480Smckusick /*
241480Smckusick  * Copyright (c) 1988 University of Utah.
341480Smckusick  * Copyright (c) 1990 The Regents of the University of California.
441480Smckusick  * All rights reserved.
541480Smckusick  *
641480Smckusick  * This code is derived from software contributed to Berkeley by
741480Smckusick  * the Systems Programming Group of the University of Utah Computer
841480Smckusick  * Science Department.
941480Smckusick  *
1041480Smckusick  * %sccs.include.redist.c%
1141480Smckusick  *
12*45497Smckusick  * from: Utah $Hdr: hil_keymaps.c 1.1 90/07/09$
1341480Smckusick  *
14*45497Smckusick  *	@(#)hil_keymaps.c	7.2 (Berkeley) 11/04/90
1541480Smckusick  */
1641480Smckusick 
1741480Smckusick /*
1841480Smckusick  * Keymaps for various HP-HIL keyboard layouts.
1941480Smckusick  * These tables apply only to keyboards in "cooked" mode.
2041480Smckusick  * Currently only one is supported as an ITE keyboard.
2141480Smckusick  *
2241480Smckusick  * Maps are indexed by cooked keycode and contain the ASCII
2341480Smckusick  * character for that keycode.  The map-set used depends on the
2441480Smckusick  * keyboard "language".  The map used within that set depends on
2541480Smckusick  * the shift/control status that is returned by the hardware along
2641480Smckusick  * with the keycode.  If an entry is NULL for a key in the appropriate
2741480Smckusick  * unshifted, shifted, control, or control-shifted table, then a
2841480Smckusick  * single "string" table is consulted.  In this fashion, a multi-
2941480Smckusick  * character sequence can be returned for a key press.  Note that
3041480Smckusick  * control/shift status have no effect on multi-character lookup
3141480Smckusick  * (i.e. there is only one string table per set, not four).
3241480Smckusick  *
3341480Smckusick  * Someday we could allow user-definable keymaps, but we would have
3441480Smckusick  * to come up with a better format (at least externally).  This
3541480Smckusick  * format takes up lots of space.  Having keymaps for all 18 or so
3641480Smckusick  * HP supported layouts would be bad news.
3741480Smckusick  */
3841480Smckusick #include "param.h"
3941480Smckusick #include "kbdmap.h"
4041480Smckusick 
4141480Smckusick char	us_keymap[] = {
4241480Smckusick 	NULL,	'`',	'\\',	ESC,	NULL,	DEL,	NULL,	NULL,
4341480Smckusick 	'\n',	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
4441480Smckusick 	NULL,	'\n',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
4541480Smckusick 	NULL,	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
4641480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
4741480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	'\b',	NULL,
4841480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
4941480Smckusick 	ESC,	'\r',	NULL,	'\n',	'0',	'.',	',',	'+',
5041480Smckusick 	'1',	'2',	'3',	'-',	'4',	'5',	'6',	'*',
5141480Smckusick 	'7',	'8',	'9',	'/',	'E',	'(',	')',	'^',
5241480Smckusick 	'1',	'2',	'3',	'4',	'5',	'6',	'7',	'8',
5341480Smckusick 	'9',	'0',	'-',	'=',	'[',	']',	';',	'\'',
5441480Smckusick 	',',	'.',	'/',	'\040',	'o',	'p',	'k',	'l',
5541480Smckusick 	'q',	'w',	'e',	'r',	't',	'y',	'u',	'i',
5641480Smckusick 	'a',	's',	'd',	'f',	'g',	'h',	'j',	'm',
5741480Smckusick 	'z',	'x',	'c',	'v',	'b',	'n',	NULL,	NULL
5841480Smckusick };
5941480Smckusick 
6041480Smckusick char	us_shiftmap[] = {
6141480Smckusick 	NULL,	'~',	'|',	DEL,	NULL,	DEL,	NULL,	NULL,
6241480Smckusick 	'\n',	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
6341480Smckusick 	NULL,	'\n',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
6441480Smckusick 	NULL,	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
6541480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
6641480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	DEL,	NULL,
6741480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
6841480Smckusick 	ESC,	'\r',	NULL,	'\n',	'0',	'.',	',',	'+',
6941480Smckusick 	'1',	'2',	'3',	'-',	'4',	'5',	'6',	'*',
7041480Smckusick 	'7',	'8',	'9',	'/',	'`',	'|',	'\\',	'~',
7141480Smckusick 	'!',	'@',	'#',	'$',	'%',	'^',	'&',	'*',
7241480Smckusick 	'(',	')',	'_',	'+',	'{',	'}',	':',	'\"',
7341480Smckusick 	'<',	'>',	'?',	'\040',	'O',	'P',	'K',	'L',
7441480Smckusick 	'Q',	'W',	'E',	'R',	'T',	'Y',	'U',	'I',
7541480Smckusick 	'A',	'S',	'D',	'F',	'G',	'H',	'J',	'M',
7641480Smckusick 	'Z',	'X',	'C',	'V',	'B',	'N',	NULL,	NULL
7741480Smckusick };
7841480Smckusick 
7941480Smckusick char	us_ctrlmap[] = {
8041480Smckusick 	NULL,	'`',	'\034',	ESC,	NULL,	DEL,	NULL,	NULL,
8141480Smckusick 	'\n',	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
8241480Smckusick 	NULL,	'\n',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
8341480Smckusick 	NULL,	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
8441480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
8541480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	'\b',	NULL,
8641480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
8741480Smckusick 	ESC,	'\r',	NULL,	'\n',	'0',	'.',	',',	'+',
8841480Smckusick 	'1',	'2',	'3',	'-',	'4',	'5',	'6',	'*',
8941480Smckusick 	'7',	'8',	'9',	'/',	'E',	'(',	')',	'\036',
9041480Smckusick 	'1',	'2',	'3',	'4',	'5',	'6',	'7',	'8',
9141480Smckusick 	'9',	'0',	'-',	'=',	'\033',	'\035',	';',	'\'',
9241480Smckusick 	',',	'.',	'/',	'\040',	'\017',	'\020',	'\013',	'\014',
9341480Smckusick 	'\021',	'\027',	'\005',	'\022',	'\024',	'\031',	'\025',	'\011',
9441480Smckusick 	'\001',	'\023',	'\004',	'\006',	'\007',	'\010',	'\012',	'\015',
9541480Smckusick 	'\032',	'\030',	'\003',	'\026',	'\002',	'\016',	NULL,	NULL
9641480Smckusick };
9741480Smckusick 
9841480Smckusick char	us_ctrlshiftmap[] = {
9941480Smckusick 	NULL,	'~',	'|',	DEL,	NULL,	DEL,	NULL,	NULL,
10041480Smckusick 	'\n',	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
10141480Smckusick 	NULL,	'\n',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
10241480Smckusick 	NULL,	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
10341480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
10441480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	DEL,	NULL,
10541480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
10641480Smckusick 	ESC,	'\r',	NULL,	'\n',	'0',	'.',	',',	'+',
10741480Smckusick 	'1',	'2',	'3',	'-',	'4',	'5',	'6',	'*',
10841480Smckusick 	'7',	'8',	'9',	'/',	'`',	'|',	'\034',	'~',
10941480Smckusick 	'!',	'\000',	'#',	'$',	'%',	'\036',	'&',	'*',
11041480Smckusick 	'(',	')',	'\037',	'+',	'{',	'}',	':',	'\"',
11141480Smckusick 	'<',	'>',	'?',	'\040',	'\017',	'\020',	'\013',	'\014',
11241480Smckusick 	'\021',	'\027',	'\005',	'\022',	'\024',	'\031',	'\025',	'\011',
11341480Smckusick 	'\001',	'\023',	'\004',	'\006',	'\007',	'\010',	'\012',	'\015',
11441480Smckusick 	'\032',	'\030',	'\003',	'\026',	'\002',	'\016',	NULL,	NULL
11541480Smckusick };
11641480Smckusick 
11741480Smckusick char	*us_stringmap[] = {
11841480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
11941480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	"\033V","\033h",
12041480Smckusick 	"\033U",NULL,	NULL,	NULL,	NULL,	NULL,	"\033K","\033J",
12141480Smckusick 	NULL,	NULL,	NULL,	"\033p","\033q","\033t","\033u","\033v",
12241480Smckusick 	"\033r","\033s","\033B","\033A","\033w",NULL,	"\033D","\033C",
12341480Smckusick 	"\033L","\033M",NULL,	NULL,	"\033P",NULL,	NULL,	NULL,
12441480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
12541480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
12641480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
12741480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
12841480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
12941480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
13041480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
13141480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
13241480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
13341480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL
13441480Smckusick };
13541480Smckusick 
13641480Smckusick #ifdef UK_KEYBOARD
13741480Smckusick char	uk_keymap[] = {
13841480Smckusick 	NULL,	'`',	'<',	ESC,	NULL,	DEL,	NULL,	NULL,
13941480Smckusick 	'\n',	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
14041480Smckusick 	NULL,	'\n',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
14141480Smckusick 	NULL,	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
14241480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
14341480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	'\b',	NULL,
14441480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
14541480Smckusick 	ESC,	'\r',	NULL,	'\n',	'0',	'.',	',',	'+',
14641480Smckusick 	'1',	'2',	'3',	'-',	'4',	'5',	'6',	'*',
14741480Smckusick 	'7',	'8',	'9',	'/',	'E',	'(',	')',	'^',
14841480Smckusick 	'1',	'2',	'3',	'4',	'5',	'6',	'7',	'8',
14941480Smckusick 	'9',	'0',	'+',	'\'',	'[',	']',	'*',	'\\',
15041480Smckusick 	',',	'.',	'-',	'\040',	'o',	'p',	'k',	'l',
15141480Smckusick 	'q',	'w',	'e',	'r',	't',	'y',	'u',	'i',
15241480Smckusick 	'a',	's',	'd',	'f',	'g',	'h',	'j',	'm',
15341480Smckusick 	'z',	'x',	'c',	'v',	'b',	'n',	NULL,	NULL
15441480Smckusick };
15541480Smckusick 
15641480Smckusick char	uk_shiftmap[] = {
15741480Smckusick 	NULL,	'~',	'>',	DEL,	NULL,	DEL,	NULL,	NULL,
15841480Smckusick 	'\n',	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
15941480Smckusick 	NULL,	'\n',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
16041480Smckusick 	NULL,	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
16141480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
16241480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	DEL,	NULL,
16341480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
16441480Smckusick 	ESC,	'\r',	NULL,	'\n',	'0',	'.',	',',	'+',
16541480Smckusick 	'1',	'2',	'3',	'-',	'4',	'5',	'6',	'*',
16641480Smckusick 	'7',	'8',	'9',	'/',	'`',	'|',	'\\',	'~',
16741480Smckusick 	'!',	'\"',	'#',	'$',	'%',	'&',	'^',	'(',
16841480Smckusick 	')',	'=',	'?',	'/',	'{',	'}',	'@',	'|',
16941480Smckusick 	';',	':',	'_',	'\040',	'O',	'P',	'K',	'L',
17041480Smckusick 	'Q',	'W',	'E',	'R',	'T',	'Y',	'U',	'I',
17141480Smckusick 	'A',	'S',	'D',	'F',	'G',	'H',	'J',	'M',
17241480Smckusick 	'Z',	'X',	'C',	'V',	'B',	'N',	NULL,	NULL
17341480Smckusick };
17441480Smckusick 
17541480Smckusick char	uk_ctrlmap[] = {
17641480Smckusick 	NULL,	'`',	'<',	ESC,	NULL,	DEL,	NULL,	NULL,
17741480Smckusick 	'\n',	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
17841480Smckusick 	NULL,	'\n',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
17941480Smckusick 	NULL,	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
18041480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
18141480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	'\b',	NULL,
18241480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
18341480Smckusick 	ESC,	'\r',	NULL,	'\n',	'0',	'.',	',',	'+',
18441480Smckusick 	'1',	'2',	'3',	'-',	'4',	'5',	'6',	'*',
18541480Smckusick 	'7',	'8',	'9',	'/',	'E',	'(',	')',	'\036',
18641480Smckusick 	'1',	'2',	'3',	'4',	'5',	'6',	'7',	'8',
18741480Smckusick 	'9',	'0',	'+',	'\'',	'\033',	'\035',	'*',	'\034',
18841480Smckusick 	',',	'.',	'/',	'\040',	'\017',	'\020',	'\013',	'\014',
18941480Smckusick 	'\021',	'\027',	'\005',	'\022',	'\024',	'\031',	'\025',	'\011',
19041480Smckusick 	'\001',	'\023',	'\004',	'\006',	'\007',	'\010',	'\012',	'\015',
19141480Smckusick 	'\032',	'\030',	'\003',	'\026',	'\002',	'\016',	NULL,	NULL
19241480Smckusick };
19341480Smckusick 
19441480Smckusick char	uk_ctrlshiftmap[] = {
19541480Smckusick 	NULL,	'~',	'>',	DEL,	NULL,	DEL,	NULL,	NULL,
19641480Smckusick 	'\n',	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
19741480Smckusick 	NULL,	'\n',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
19841480Smckusick 	NULL,	'\t',	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
19941480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
20041480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	DEL,	NULL,
20141480Smckusick 	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,
20241480Smckusick 	ESC,	'\r',	NULL,	'\n',	'0',	'.',	',',	'+',
20341480Smckusick 	'1',	'2',	'3',	'-',	'4',	'5',	'6',	'*',
20441480Smckusick 	'7',	'8',	'9',	'/',	'`',	'|',	'\034',	'~',
20541480Smckusick 	'!',	'\"',	'#',	'$',	'%',	'&',	'\036',	'(',
20641480Smckusick 	')',	'=',	'?',	'/',	'{',	'}',	'\000',	'|',
20741480Smckusick 	';',	':',	'\037',	'\040',	'\017',	'\020',	'\013',	'\014',
20841480Smckusick 	'\021',	'\027',	'\005',	'\022',	'\024',	'\031',	'\025',	'\011',
20941480Smckusick 	'\001',	'\023',	'\004',	'\006',	'\007',	'\010',	'\012',	'\015',
21041480Smckusick 	'\032',	'\030',	'\003',	'\026',	'\002',	'\016',	NULL,	NULL
21141480Smckusick };
21241480Smckusick #endif
21341480Smckusick 
21441480Smckusick /*
21541480Smckusick  * The keyboard map table.
21641480Smckusick  * Lookup is by hardware returned language code.
21741480Smckusick  */
21841480Smckusick struct kbdmap kbd_map[] = {
21941480Smckusick 	KBD_US,		"US ASCII",
22041480Smckusick 	us_keymap,	us_shiftmap,	us_ctrlmap,	us_ctrlshiftmap,
22141480Smckusick 	us_stringmap,
22241480Smckusick 
22341480Smckusick #ifdef UK_KEYBOARD
22441480Smckusick 	KBD_UK,		"United Kingdom",
22541480Smckusick 	uk_keymap,	uk_shiftmap,	uk_ctrlmap,	uk_ctrlshiftmap,
22641480Smckusick 	us_stringmap,
22741480Smckusick #endif
22841480Smckusick 
22941480Smckusick 	0,		NULL,
23041480Smckusick 	NULL,		NULL,		NULL,		NULL,
23141480Smckusick 	NULL,
23241480Smckusick };
233