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