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