|
|
1.1 root 1: /*
2: * Copyright (c) 1988 University of Utah.
3: * Copyright (c) 1990 The Regents of the University of California.
4: * All rights reserved.
5: *
6: * This code is derived from software contributed to Berkeley by
7: * the Systems Programming Group of the University of Utah Computer
8: * Science Department.
9: *
10: * Redistribution is only permitted until one year after the first shipment
11: * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and
12: * binary forms are permitted provided that: (1) source distributions retain
13: * this entire copyright notice and comment, and (2) distributions including
14: * binaries display the following acknowledgement: This product includes
15: * software developed by the University of California, Berkeley and its
16: * contributors'' in the documentation or other materials provided with the
17: * distribution and in all advertising materials mentioning features or use
18: * of this software. Neither the name of the University nor the names of
19: * its contributors may be used to endorse or promote products derived from
20: * this software without specific prior written permission.
21: * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
22: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
23: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
24: *
25: * from: Utah $Hdr: hil.c 1.1 89/08/22$
26: *
27: * @(#)hil.c 7.1 (Berkeley) 5/8/90
28: */
29:
30: /*
31: * Keyboard routines for the standalone ITE.
32: */
33: #include "samachdep.h"
34:
35: #ifdef ITECONSOLE
36:
37: #include "param.h"
38: #include "../hpdev/hilreg.h"
39: #include "../hpdev/kbdmap.h"
40: #include "../hpdev/itevar.h"
41:
42: #ifndef SMALL
43:
44: /*
45: * HIL cooked keyboard keymaps.
46: * Supports only unshifted, shifted and control keys.
47: */
48: char us_keymap[] = {
49: NULL, '`', '\\', ESC, NULL, DEL, NULL, NULL,
50: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL,
51: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL,
52: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL,
53: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
54: NULL, NULL, NULL, NULL, NULL, NULL, '\b', NULL,
55: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
56: ESC, '\r', NULL, '\n', '0', '.', ',', '+',
57: '1', '2', '3', '-', '4', '5', '6', '*',
58: '7', '8', '9', '/', 'E', '(', ')', '^',
59: '1', '2', '3', '4', '5', '6', '7', '8',
60: '9', '0', '-', '=', '[', ']', ';', '\'',
61: ',', '.', '/', '\040', 'o', 'p', 'k', 'l',
62: 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
63: 'a', 's', 'd', 'f', 'g', 'h', 'j', 'm',
64: 'z', 'x', 'c', 'v', 'b', 'n', NULL, NULL
65: };
66:
67: char us_shiftmap[] = {
68: NULL, '~', '|', DEL, NULL, DEL, NULL, NULL,
69: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL,
70: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL,
71: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL,
72: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
73: NULL, NULL, NULL, NULL, NULL, NULL, DEL, NULL,
74: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
75: ESC, '\r', NULL, '\n', '0', '.', ',', '+',
76: '1', '2', '3', '-', '4', '5', '6', '*',
77: '7', '8', '9', '/', '`', '|', '\\', '~',
78: '!', '@', '#', '$', '%', '^', '&', '*',
79: '(', ')', '_', '+', '{', '}', ':', '\"',
80: '<', '>', '?', '\040', 'O', 'P', 'K', 'L',
81: 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
82: 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'M',
83: 'Z', 'X', 'C', 'V', 'B', 'N', NULL, NULL
84: };
85:
86: char us_ctrlmap[] = {
87: NULL, '`', '\034', ESC, NULL, DEL, NULL, NULL,
88: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL,
89: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL,
90: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL,
91: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
92: NULL, NULL, NULL, NULL, NULL, NULL, '\b', NULL,
93: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
94: ESC, '\r', NULL, '\n', '0', '.', ',', '+',
95: '1', '2', '3', '-', '4', '5', '6', '*',
96: '7', '8', '9', '/', 'E', '(', ')', '\036',
97: '1', '2', '3', '4', '5', '6', '7', '8',
98: '9', '0', '-', '=', '\033', '\035', ';', '\'',
99: ',', '.', '/', '\040', '\017', '\020', '\013', '\014',
100: '\021', '\027', '\005', '\022', '\024', '\031', '\025', '\011',
101: '\001', '\023', '\004', '\006', '\007', '\010', '\012', '\015',
102: '\032', '\030', '\003', '\026', '\002', '\016', NULL, NULL
103: };
104:
105: #ifdef UK_KEYBOARD
106: char uk_keymap[] = {
107: NULL, '`', '<', ESC, NULL, DEL, NULL, NULL,
108: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL,
109: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL,
110: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL,
111: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
112: NULL, NULL, NULL, NULL, NULL, NULL, '\b', NULL,
113: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
114: ESC, '\r', NULL, '\n', '0', '.', ',', '+',
115: '1', '2', '3', '-', '4', '5', '6', '*',
116: '7', '8', '9', '/', 'E', '(', ')', '^',
117: '1', '2', '3', '4', '5', '6', '7', '8',
118: '9', '0', '+', '\'', '[', ']', '*', '\\',
119: ',', '.', '-', '\040', 'o', 'p', 'k', 'l',
120: 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
121: 'a', 's', 'd', 'f', 'g', 'h', 'j', 'm',
122: 'z', 'x', 'c', 'v', 'b', 'n', NULL, NULL
123: };
124:
125: char uk_shiftmap[] = {
126: NULL, '~', '>', DEL, NULL, DEL, NULL, NULL,
127: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL,
128: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL,
129: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL,
130: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
131: NULL, NULL, NULL, NULL, NULL, NULL, DEL, NULL,
132: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
133: ESC, '\r', NULL, '\n', '0', '.', ',', '+',
134: '1', '2', '3', '-', '4', '5', '6', '*',
135: '7', '8', '9', '/', '`', '|', '\\', '~',
136: '!', '\"', '#', '$', '%', '&', '^', '(',
137: ')', '=', '?', '/', '{', '}', '@', '|',
138: ';', ':', '_', '\040', 'O', 'P', 'K', 'L',
139: 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
140: 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'M',
141: 'Z', 'X', 'C', 'V', 'B', 'N', NULL, NULL
142: };
143:
144: char uk_ctrlmap[] = {
145: NULL, '`', '<', ESC, NULL, DEL, NULL, NULL,
146: '\n', '\t', NULL, NULL, NULL, NULL, NULL, NULL,
147: NULL, '\n', NULL, NULL, NULL, NULL, NULL, NULL,
148: NULL, '\t', NULL, NULL, NULL, NULL, NULL, NULL,
149: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
150: NULL, NULL, NULL, NULL, NULL, NULL, '\b', NULL,
151: NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
152: ESC, '\r', NULL, '\n', '0', '.', ',', '+',
153: '1', '2', '3', '-', '4', '5', '6', '*',
154: '7', '8', '9', '/', 'E', '(', ')', '\036',
155: '1', '2', '3', '4', '5', '6', '7', '8',
156: '9', '0', '+', '\'', '\033', '\035', '*', '\034',
157: ',', '.', '/', '\040', '\017', '\020', '\013', '\014',
158: '\021', '\027', '\005', '\022', '\024', '\031', '\025', '\011',
159: '\001', '\023', '\004', '\006', '\007', '\010', '\012', '\015',
160: '\032', '\030', '\003', '\026', '\002', '\016', NULL, NULL
161: };
162: #endif
163:
164: /*
165: * The keyboard map table.
166: * Lookup is by hardware returned language code.
167: */
168: struct kbdmap kbd_map[] = {
169: KBD_US, NULL,
170: us_keymap, us_shiftmap, us_ctrlmap, NULL, NULL,
171:
172: #ifdef UK_KEYBOARD
173: KBD_UK, NULL,
174: uk_keymap, uk_shiftmap, uk_ctrlmap, NULL, NULL,
175: #endif
176:
177: 0, NULL,
178: NULL, NULL, NULL, NULL, NULL,
179: };
180:
181: char *kbd_keymap = us_keymap;
182: char *kbd_shiftmap = us_shiftmap;
183: char *kbd_ctrlmap = us_ctrlmap;
184:
185: kbdgetc()
186: {
187: register int status, c;
188: register struct hil_dev *hiladdr = HILADDR;
189:
190: status = hiladdr->hil_stat;
191: if ((status & HIL_DATA_RDY) == 0)
192: return(0);
193: c = hiladdr->hil_data;
194: switch ((status>>KBD_SSHIFT) & KBD_SMASK) {
195: case KBD_SHIFT:
196: c = kbd_shiftmap[c & KBD_CHARMASK];
197: break;
198: case KBD_CTRL:
199: c = kbd_ctrlmap[c & KBD_CHARMASK];
200: break;
201: case KBD_KEY:
202: c = kbd_keymap[c & KBD_CHARMASK];
203: break;
204: default:
205: c = 0;
206: break;
207: }
208: return(c);
209: }
210: #endif
211:
212: kbdnmi()
213: {
214: register struct hil_dev *hiladdr = HILADDR;
215:
216: HILWAIT(hiladdr);
217: hiladdr->hil_cmd = HIL_CNMT;
218: HILWAIT(hiladdr);
219: hiladdr->hil_cmd = HIL_CNMT;
220: HILWAIT(hiladdr);
221: printf("\nboot interrupted\n");
222: }
223:
224: kbdinit()
225: {
226: register struct hil_dev *hiladdr = HILADDR;
227: register struct kbdmap *km;
228: u_char lang;
229:
230: HILWAIT(hiladdr);
231: hiladdr->hil_cmd = HIL_SETARR;
232: HILWAIT(hiladdr);
233: hiladdr->hil_data = ar_format(KBD_ARR);
234: HILWAIT(hiladdr);
235: hiladdr->hil_cmd = HIL_READKBDLANG;
236: HILDATAWAIT(hiladdr);
237: lang = hiladdr->hil_data;
238: for (km = kbd_map; km->kbd_code; km++)
239: if (km->kbd_code == lang) {
240: kbd_keymap = km->kbd_keymap;
241: kbd_shiftmap = km->kbd_shiftmap;
242: kbd_ctrlmap = km->kbd_ctrlmap;
243: }
244: HILWAIT(hiladdr);
245: hiladdr->hil_cmd = HIL_INTON;
246: }
247: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.