|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)keytables.c 1.1 86/02/03 Copyr 1985 Sun Micro";
3: #endif
4:
5: /*
6: * Copyright (C) 1983 by Sun Microsystems, Inc.
7: */
8:
9: /*
10: * keytables.c
11: *
12: * This module contains the translation tables for the up-down encoded
13: * Sun keyboards.
14: */
15: #include "../sundev/kbdvar.h"
16:
17: /* handy way to define control characters in the tables */
18: #define c(char) (char&0x1F)
19: #define ESC 0x1B
20:
21:
22: /* Unshifted keyboard table for Micro Switch 103SD32-2 */
23:
24: static struct keymap keytab_ms_lc = {
25: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
26: LF(2), LF(3), HOLE, TF(1), TF(2), TF(3),
27: /* 8 */ TF(4), TF(5), TF(6), TF(7), TF(8), TF(9), TF(10), TF(11),
28: /* 16 */ TF(12), TF(13), TF(14), c('['), HOLE, RF(1), '+', '-',
29: /* 24 */ HOLE, LF(4), '\f', LF(6), HOLE, SHIFTKEYS+CAPSLOCK,
30: '1', '2',
31: /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0',
32: /* 40 */ '-', '~', '`', '\b', HOLE, '7', '8', '9',
33: /* 48 */ HOLE, LF(7), STRING+UPARROW,
34: LF(9), HOLE, '\t', 'q', 'w',
35: /* 56 */ 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p',
36: /* 64 */ '{', '}', '_', HOLE, '4', '5', '6', HOLE,
37: /* 72 */ STRING+LEFTARROW,
38: STRING+HOMEARROW,
39: STRING+RIGHTARROW,
40: HOLE, SHIFTKEYS+SHIFTLOCK,
41: 'a', 's', 'd',
42: /* 80 */ 'f', 'g', 'h', 'j', 'k', 'l', ';', ':',
43: /* 88 */ '|', '\r', HOLE, '1', '2', '3', HOLE, NOSCROLL,
44: /* 96 */ STRING+DOWNARROW,
45: LF(15), HOLE, HOLE, SHIFTKEYS+LEFTSHIFT,
46: 'z', 'x', 'c',
47: /*104 */ 'v', 'b', 'n', 'm', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
48: /*112 */ NOP, 0x7F, '0', NOP, '.', HOLE, HOLE, HOLE,
49: /*120 */ HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
50: ' ', SHIFTKEYS+RIGHTCTRL,
51: HOLE, HOLE, IDLE,
52: };
53:
54: /* Shifted keyboard table for Micro Switch 103SD32-2 */
55:
56: static struct keymap keytab_ms_uc = {
57: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
58: LF(2), LF(3), HOLE, TF(1), TF(2), TF(3),
59: /* 8 */ TF(4), TF(5), TF(6), TF(7), TF(8), TF(9), TF(10), TF(11),
60: /* 16 */ TF(12), TF(13), TF(14), c('['), HOLE, RF(1), '+', '-',
61: /* 24 */ HOLE, LF(4), '\f', LF(6), HOLE, SHIFTKEYS+CAPSLOCK,
62: '!', '"',
63: /* 32 */ '#', '$', '%', '&', '\'', '(', ')', '0',
64: /* 40 */ '=', '^', '@', '\b', HOLE, '7', '8', '9',
65: /* 48 */ HOLE, LF(7), STRING+UPARROW,
66: LF(9), HOLE, '\t', 'Q', 'W',
67: /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
68: /* 64 */ '[', ']', '_', HOLE, '4', '5', '6', HOLE,
69: /* 72 */ STRING+LEFTARROW,
70: STRING+HOMEARROW,
71: STRING+RIGHTARROW,
72: HOLE, SHIFTKEYS+SHIFTLOCK,
73: 'A', 'S', 'D',
74: /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', '+', '*',
75: /* 88 */ '\\', '\r', HOLE, '1', '2', '3', HOLE, NOSCROLL,
76: /* 96 */ STRING+DOWNARROW,
77: LF(15), HOLE, HOLE, SHIFTKEYS+LEFTSHIFT,
78: 'Z', 'X', 'C',
79: /*104 */ 'V', 'B', 'N', 'M', '<', '>', '?', SHIFTKEYS+RIGHTSHIFT,
80: /*112 */ NOP, 0x7F, '0', NOP, '.', HOLE, HOLE, HOLE,
81: /*120 */ HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
82: ' ', SHIFTKEYS+RIGHTCTRL,
83: HOLE, HOLE, IDLE,
84: };
85:
86:
87: /* Caps Locked keyboard table for Micro Switch 103SD32-2 */
88:
89: static struct keymap keytab_ms_cl = {
90: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
91: LF(2), LF(3), HOLE, TF(1), TF(2), TF(3),
92: /* 8 */ TF(4), TF(5), TF(6), TF(7), TF(8), TF(9), TF(10), TF(11),
93: /* 16 */ TF(12), TF(13), TF(14), c('['), HOLE, RF(1), '+', '-',
94: /* 24 */ HOLE, LF(4), '\f', LF(6), HOLE, SHIFTKEYS+CAPSLOCK,
95: '1', '2',
96: /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0',
97: /* 40 */ '-', '~', '`', '\b', HOLE, '7', '8', '9',
98: /* 48 */ HOLE, LF(7), STRING+UPARROW,
99: LF(9), HOLE, '\t', 'Q', 'W',
100: /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
101: /* 64 */ '{', '}', '_', HOLE, '4', '5', '6', HOLE,
102: /* 72 */ STRING+LEFTARROW,
103: STRING+HOMEARROW,
104: STRING+RIGHTARROW,
105: HOLE, SHIFTKEYS+SHIFTLOCK,
106: 'A', 'S', 'D',
107: /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ';', ':',
108: /* 88 */ '|', '\r', HOLE, '1', '2', '3', HOLE, NOSCROLL,
109: /* 96 */ STRING+DOWNARROW,
110: LF(15), HOLE, HOLE, SHIFTKEYS+LEFTSHIFT,
111: 'Z', 'X', 'C',
112: /*104 */ 'V', 'B', 'N', 'M', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
113: /*112 */ NOP, 0x7F, '0', NOP, '.', HOLE, HOLE, HOLE,
114: /*120 */ HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
115: ' ', SHIFTKEYS+RIGHTCTRL,
116: HOLE, HOLE, IDLE,
117: };
118:
119: /* Controlled keyboard table for Micro Switch 103SD32-2 */
120:
121: static struct keymap keytab_ms_ct = {
122: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
123: LF(2), LF(3), HOLE, TF(1), TF(2), TF(3),
124: /* 8 */ TF(4), TF(5), TF(6), TF(7), TF(8), TF(9), TF(10), TF(11),
125: /* 16 */ TF(12), TF(13), TF(14), c('['), HOLE, RF(1), OOPS, OOPS,
126: /* 24 */ HOLE, LF(4), '\f', LF(6), HOLE, SHIFTKEYS+CAPSLOCK,
127: OOPS, OOPS,
128: /* 32 */ OOPS, OOPS, OOPS, OOPS, OOPS, OOPS, OOPS, OOPS,
129: /* 40 */ OOPS, c('^'), c('@'), '\b', HOLE, OOPS, OOPS, OOPS,
130: /* 48 */ HOLE, LF(7), STRING+UPARROW,
131: LF(9), HOLE, '\t', CTRLQ, c('W'),
132: /* 56 */ c('E'), c('R'), c('T'), c('Y'), c('U'), c('I'), c('O'), c('P'),
133: /* 64 */ c('['), c(']'), c('_'), HOLE, OOPS, OOPS, OOPS, HOLE,
134: /* 72 */ STRING+LEFTARROW,
135: STRING+HOMEARROW,
136: STRING+RIGHTARROW,
137: HOLE, SHIFTKEYS+SHIFTLOCK,
138: c('A'), CTRLS, c('D'),
139: /* 80 */ c('F'), c('G'), c('H'), c('J'), c('K'), c('L'), OOPS, OOPS,
140: /* 88 */ c('\\'),
141: '\r', HOLE, OOPS, OOPS, OOPS, HOLE, NOSCROLL,
142: /* 96 */ STRING+DOWNARROW,
143: LF(15), HOLE, HOLE, SHIFTKEYS+LEFTSHIFT,
144: c('Z'), c('X'), c('C'),
145: /*104 */ c('V'), c('B'), c('N'), c('M'), OOPS, OOPS, OOPS, SHIFTKEYS+RIGHTSHIFT,
146: /*112 */ NOP, 0x7F, OOPS, NOP, OOPS, HOLE, HOLE, HOLE,
147: /*120 */ HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
148: '\0', SHIFTKEYS+RIGHTCTRL,
149: HOLE, HOLE, IDLE,
150: };
151:
152:
153: /* "Key Up" keyboard table for Micro Switch 103SD32-2 */
154:
155: static struct keymap keytab_ms_up = {
156: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
157: OOPS, OOPS, HOLE, OOPS, OOPS, OOPS,
158: /* 8 */ OOPS, OOPS, OOPS, OOPS, OOPS, OOPS, OOPS, OOPS,
159: /* 16 */ OOPS, OOPS, OOPS, NOP, HOLE, OOPS, NOP, NOP,
160: /* 24 */ HOLE, OOPS, NOP, OOPS, HOLE, SHIFTKEYS+CAPSLOCK,
161: NOP, NOP,
162: /* 32 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
163: /* 40 */ NOP, NOP, NOP, NOP, HOLE, NOP, NOP, NOP,
164: /* 48 */ HOLE, OOPS, NOP, OOPS, HOLE, NOP, NOP, NOP,
165: /* 56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
166: /* 64 */ NOP, NOP, NOP, HOLE, NOP, NOP, NOP, HOLE,
167: /* 72 */ NOP, NOP, NOP, HOLE, SHIFTKEYS+SHIFTLOCK,
168: NOP, NOP, NOP,
169: /* 80 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
170: /* 88 */ NOP, NOP, HOLE, NOP, NOP, NOP, HOLE, NOP,
171: /* 96 */ NOP, OOPS, HOLE, HOLE, SHIFTKEYS+LEFTSHIFT,
172: NOP, NOP, NOP,
173: /*104 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+RIGHTSHIFT,
174: /*112 */ NOP, NOP, NOP, NOP, NOP, HOLE, HOLE, HOLE,
175: /*120 */ HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
176: NOP, SHIFTKEYS+RIGHTCTRL,
177: HOLE, HOLE, RESET,
178: };
179:
180:
181: /* Index to keymaps for Micro Switch 103SD32-2 */
182: static struct keyboard keyindex_ms = {
183: &keytab_ms_lc,
184: &keytab_ms_uc,
185: &keytab_ms_cl,
186: &keytab_ms_ct,
187: &keytab_ms_up,
188: CTLSMASK, /* Shift bits which stay on with idle keyboard */
189: 0x0000, /* Bucky bits which stay on with idle keyboard */
190: 1, 77, /* abort keys */
191: 0x0000, /* Shift bits which toggle on down event */
192: };
193:
194: /* Unshifted keyboard table for Sun-2 keyboard */
195:
196: static struct keymap keytab_s2_lc = {
197: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
198: LF(11), LF(2), HOLE, TF(1), TF(2), TF(11),
199: /* 8 */ TF(3), TF(12), TF(4), TF(13), TF(5), TF(14), TF(6), TF(15),
200: /* 16 */ TF(7), TF(8), TF(9), TF(10), HOLE, RF(1), RF(2), RF(3),
201: /* 24 */ HOLE, LF(3), LF(4), LF(12), HOLE, c('['), '1', '2',
202: /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0',
203: /* 40 */ '-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6),
204: /* 48 */ HOLE, LF(5), LF(13), LF(6), HOLE, '\t', 'q', 'w',
205: /* 56 */ 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p',
206: /* 64 */ '[', ']', 0x7F, HOLE, RF(7), STRING+UPARROW,
207: RF(9), HOLE,
208: /* 72 */ LF(7), LF(8), LF(14), HOLE, SHIFTKEYS+LEFTCTRL,
209: 'a', 's', 'd',
210: /* 80 */ 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'',
211: /* 88 */ '\\', '\r', HOLE, STRING+LEFTARROW,
212: RF(11), STRING+RIGHTARROW,
213: HOLE, LF(9),
214: /* 96 */ LF(15), LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
215: 'z', 'x', 'c', 'v',
216: /*104 */ 'b', 'n', 'm', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
217: '\n',
218: /*112 */ RF(13), STRING+DOWNARROW,
219: RF(15), HOLE, HOLE, HOLE, HOLE, HOLE,
220: /*120 */ BUCKYBITS+METABIT,
221: ' ', BUCKYBITS+METABIT,
222: HOLE, HOLE, HOLE, ERROR, IDLE,
223: };
224:
225: /* Shifted keyboard table for Sun-2 keyboard */
226:
227: static struct keymap keytab_s2_uc = {
228: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
229: LF(11), LF(2), HOLE, TF(1), TF(2), TF(11),
230: /* 8 */ TF(3), TF(12), TF(4), TF(13), TF(5), TF(14), TF(6), TF(15),
231: /* 16 */ TF(7), TF(8), TF(9), TF(10), HOLE, RF(1), RF(2), RF(3),
232: /* 24 */ HOLE, LF(3), LF(4), LF(12), HOLE, c('['), '!', '@',
233: /* 32 */ '#', '$', '%', '^', '&', '*', '(', ')',
234: /* 40 */ '_', '+', '~', '\b', HOLE, RF(4), RF(5), RF(6),
235: /* 48 */ HOLE, LF(5), LF(13), LF(6), HOLE, '\t', 'Q', 'W',
236: /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
237: /* 64 */ '{', '}', 0x7F, HOLE, RF(7), STRING+UPARROW,
238: RF(9), HOLE,
239: /* 72 */ LF(7), LF(8), LF(14), HOLE, SHIFTKEYS+LEFTCTRL,
240: 'A', 'S', 'D',
241: /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ':', '"',
242: /* 88 */ '|', '\r', HOLE, STRING+LEFTARROW,
243: RF(11), STRING+RIGHTARROW,
244: HOLE, LF(9),
245: /* 96 */ LF(15), LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
246: 'Z', 'X', 'C', 'V',
247: /*104 */ 'B', 'N', 'M', '<', '>', '?', SHIFTKEYS+RIGHTSHIFT,
248: '\n',
249: /*112 */ RF(13), STRING+DOWNARROW,
250: RF(15), HOLE, HOLE, HOLE, HOLE, HOLE,
251: /*120 */ BUCKYBITS+METABIT,
252: ' ', BUCKYBITS+METABIT,
253: HOLE, HOLE, HOLE, ERROR, IDLE,
254: };
255:
256:
257: /* Caps Locked keyboard table for Sun-2 keyboard */
258:
259: static struct keymap keytab_s2_cl = {
260: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
261: LF(11), LF(2), HOLE, TF(1), TF(2), TF(11),
262: /* 8 */ TF(3), TF(12), TF(4), TF(13), TF(5), TF(14), TF(6), TF(15),
263: /* 16 */ TF(7), TF(8), TF(9), TF(10), HOLE, RF(1), RF(2), RF(3),
264: /* 24 */ HOLE, LF(3), LF(4), LF(12), HOLE, c('['), '1', '2',
265: /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0',
266: /* 40 */ '-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6),
267: /* 48 */ HOLE, LF(5), LF(13), LF(6), HOLE, '\t', 'Q', 'W',
268: /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
269: /* 64 */ '[', ']', 0x7F, HOLE, RF(7), STRING+UPARROW,
270: RF(9), HOLE,
271: /* 72 */ LF(7), LF(8), LF(14), HOLE, SHIFTKEYS+LEFTCTRL,
272: 'A', 'S', 'D',
273: /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ';', '\'',
274: /* 88 */ '\\', '\r', HOLE, STRING+LEFTARROW,
275: RF(11), STRING+RIGHTARROW,
276: HOLE, LF(9),
277: /* 96 */ LF(15), LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
278: 'Z', 'X', 'C', 'V',
279: /*104 */ 'B', 'N', 'M', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
280: '\n',
281: /*112 */ RF(13), STRING+DOWNARROW,
282: RF(15), HOLE, HOLE, HOLE, HOLE, HOLE,
283: /*120 */ BUCKYBITS+METABIT,
284: ' ', BUCKYBITS+METABIT,
285: HOLE, HOLE, HOLE, ERROR, IDLE,
286: };
287:
288: /* Controlled keyboard table for Sun-2 keyboard */
289:
290: static struct keymap keytab_s2_ct = {
291: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
292: LF(11), LF(2), HOLE, TF(1), TF(2), TF(11),
293: /* 8 */ TF(3), TF(12), TF(4), TF(13), TF(5), TF(14), TF(6), TF(15),
294: /* 16 */ TF(7), TF(8), TF(9), TF(10), HOLE, RF(1), RF(2), RF(3),
295: /* 24 */ HOLE, LF(3), LF(4), LF(12), HOLE, c('['), '1', c('@'),
296: /* 32 */ '3', '4', '5', c('^'), '7', '8', '9', '0',
297: /* 40 */ c('_'), '=', c('^'), '\b', HOLE, RF(4), RF(5), RF(6),
298: /* 48 */ HOLE, LF(5), LF(13), LF(6), HOLE, '\t', c('q'), c('w'),
299: /* 56 */ c('e'), c('r'), c('t'), c('y'), c('u'), c('i'), c('o'), c('p'),
300: /* 64 */ c('['), c(']'), 0x7F, HOLE, RF(7), STRING+UPARROW,
301: RF(9), HOLE,
302: /* 72 */ LF(7), LF(8), LF(14), HOLE, SHIFTKEYS+LEFTCTRL,
303: c('a'), c('s'), c('d'),
304: /* 80 */ c('f'), c('g'), c('h'), c('j'), c('k'), c('l'), ';', '\'',
305: /* 88 */ c('\\'),
306: '\r', HOLE, STRING+LEFTARROW,
307: RF(11), STRING+RIGHTARROW,
308: HOLE, LF(9),
309: /* 96 */ LF(15), LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
310: c('z'), c('x'), c('c'), c('v'),
311: /*104 */ c('b'), c('n'), c('m'), ',', '.', c('_'), SHIFTKEYS+RIGHTSHIFT,
312: '\n',
313: /*112 */ RF(13), STRING+DOWNARROW,
314: RF(15), HOLE, HOLE, HOLE, HOLE, HOLE,
315: /*120 */ BUCKYBITS+METABIT,
316: c(' '), BUCKYBITS+METABIT,
317: HOLE, HOLE, HOLE, ERROR, IDLE,
318: };
319:
320:
321:
322: /* "Key Up" keyboard table for Sun-2 keyboard */
323:
324: static struct keymap keytab_s2_up = {
325: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
326: OOPS, OOPS, HOLE, OOPS, OOPS, OOPS,
327: /* 8 */ OOPS, OOPS, OOPS, OOPS, OOPS, OOPS, OOPS, OOPS,
328: /* 16 */ OOPS, OOPS, OOPS, OOPS, HOLE, OOPS, OOPS, NOP,
329: /* 24 */ HOLE, OOPS, OOPS, OOPS, HOLE, NOP, NOP, NOP,
330: /* 32 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
331: /* 40 */ NOP, NOP, NOP, NOP, HOLE, OOPS, OOPS, NOP,
332: /* 48 */ HOLE, OOPS, OOPS, OOPS, HOLE, NOP, NOP, NOP,
333: /* 56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
334: /* 64 */ NOP, NOP, NOP, HOLE, OOPS, OOPS, NOP, HOLE,
335: /* 72 */ OOPS, OOPS, OOPS, HOLE, SHIFTKEYS+LEFTCTRL,
336: NOP, NOP, NOP,
337: /* 80 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
338: /* 88 */ NOP, NOP, HOLE, OOPS, OOPS, NOP, HOLE, OOPS,
339: /* 96 */ OOPS, OOPS, HOLE, SHIFTKEYS+LEFTSHIFT,
340: NOP, NOP, NOP, NOP,
341: /*104 */ NOP, NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+RIGHTSHIFT,
342: NOP,
343: /*112 */ OOPS, OOPS, NOP, HOLE, HOLE, HOLE, HOLE, HOLE,
344: /*120 */ BUCKYBITS+METABIT,
345: NOP, BUCKYBITS+METABIT,
346: HOLE, HOLE, HOLE, HOLE, RESET,
347: };
348:
349: /* Index to keymaps for Sun-2 keyboard */
350: static struct keyboard keyindex_s2 = {
351: &keytab_s2_lc,
352: &keytab_s2_uc,
353: &keytab_s2_cl,
354: &keytab_s2_ct,
355: &keytab_s2_up,
356: CAPSMASK, /* Shift bits which stay on with idle keyboard */
357: 0x0000, /* Bucky bits which stay on with idle keyboard */
358: 1, 77, /* abort keys */
359: 0x0000, /* Shift bits which toggle on down event */
360: };
361:
362: /* Unshifted keyboard table for "VT100 style" */
363:
364: static struct keymap keytab_vt_lc = {
365: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
366: HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
367: /* 8 */ HOLE, HOLE, STRING+UPARROW,
368: STRING+DOWNARROW,
369: STRING+LEFTARROW,
370: STRING+RIGHTARROW,
371: HOLE, TF(1),
372: /* 16 */ TF(2), TF(3), TF(4), c('['), '1', '2', '3', '4',
373: /* 24 */ '5', '6', '7', '8', '9', '0', '-', '=',
374: /* 32 */ '`', c('H'), BUCKYBITS+METABIT,
375: '7', '8', '9', '-', '\t',
376: /* 40 */ 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
377: /* 48 */ 'o', 'p', '[', ']', 0x7F, '4', '5', '6',
378: /* 56 */ ',', SHIFTKEYS+LEFTCTRL,
379: SHIFTKEYS+CAPSLOCK,
380: 'a', 's', 'd', 'f', 'g',
381: /* 64 */ 'h', 'j', 'k', 'l', ';', '\'', '\r', '\\',
382: /* 72 */ '1', '2', '3', NOP, NOSCROLL,
383: SHIFTKEYS+LEFTSHIFT,
384: 'z', 'x',
385: /* 80 */ 'c', 'v', 'b', 'n', 'm', ',', '.', '/',
386: /* 88 */ SHIFTKEYS+RIGHTSHIFT,
387: '\n', '0', HOLE, '.', '\r', HOLE, HOLE,
388: /* 96 */ HOLE, HOLE, ' ', HOLE, HOLE, HOLE, HOLE, HOLE,
389: /*104 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
390: /*112 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
391: /*120 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, IDLE,
392: };
393:
394:
395: /* Shifted keyboard table for "VT100 style" */
396:
397: static struct keymap keytab_vt_uc = {
398: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
399: HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
400: /* 8 */ HOLE, HOLE, STRING+UPARROW,
401: STRING+DOWNARROW,
402: STRING+LEFTARROW,
403: STRING+RIGHTARROW,
404: HOLE, TF(1),
405: /* 16 */ TF(2), TF(3), TF(4), c('['), '!', '@', '#', '$',
406: /* 24 */ '%', '^', '&', '*', '(', ')', '_', '+',
407: /* 32 */ '~', c('H'), BUCKYBITS+METABIT,
408: '7', '8', '9', '-', '\t',
409: /* 40 */ 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
410: /* 48 */ 'O', 'P', '{', '}', 0x7F, '4', '5', '6',
411: /* 56 */ ',', SHIFTKEYS+LEFTCTRL,
412: SHIFTKEYS+CAPSLOCK,
413: 'A', 'S', 'D', 'F', 'G',
414: /* 64 */ 'H', 'J', 'K', 'L', ':', '"', '\r', '|',
415: /* 72 */ '1', '2', '3', NOP, NOSCROLL,
416: SHIFTKEYS+LEFTSHIFT,
417: 'Z', 'X',
418: /* 80 */ 'C', 'V', 'B', 'N', 'M', '<', '>', '?',
419: /* 88 */ SHIFTKEYS+RIGHTSHIFT,
420: '\n', '0', HOLE, '.', '\r', HOLE, HOLE,
421: /* 96 */ HOLE, HOLE, ' ', HOLE, HOLE, HOLE, HOLE, HOLE,
422: /*104 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
423: /*112 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
424: /*120 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, IDLE,
425: };
426:
427: /* Caps Locked keyboard table for "VT100 style" */
428:
429: static struct keymap keytab_vt_cl = {
430: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
431: HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
432: /* 8 */ HOLE, HOLE, STRING+UPARROW,
433: STRING+DOWNARROW,
434: STRING+LEFTARROW,
435: STRING+RIGHTARROW,
436: HOLE, TF(1),
437: /* 16 */ TF(2), TF(3), TF(4), c('['), '1', '2', '3', '4',
438: /* 24 */ '5', '6', '7', '8', '9', '0', '-', '=',
439: /* 32 */ '`', c('H'), BUCKYBITS+METABIT,
440: '7', '8', '9', '-', '\t',
441: /* 40 */ 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
442: /* 48 */ 'O', 'P', '[', ']', 0x7F, '4', '5', '6',
443: /* 56 */ ',', SHIFTKEYS+LEFTCTRL,
444: SHIFTKEYS+CAPSLOCK,
445: 'A', 'S', 'D', 'F', 'G',
446: /* 64 */ 'H', 'J', 'K', 'L', ';', '\'', '\r', '\\',
447: /* 72 */ '1', '2', '3', NOP, NOSCROLL,
448: SHIFTKEYS+LEFTSHIFT,
449: 'Z', 'X',
450: /* 80 */ 'C', 'V', 'B', 'N', 'M', ',', '.', '/',
451: /* 88 */ SHIFTKEYS+RIGHTSHIFT,
452: '\n', '0', HOLE, '.', '\r', HOLE, HOLE,
453: /* 96 */ HOLE, HOLE, ' ', HOLE, HOLE, HOLE, HOLE, HOLE,
454: /*104 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
455: /*112 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
456: /*120 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, IDLE,
457: };
458:
459: /* Controlled keyboard table for "VT100 style" */
460:
461: static struct keymap keytab_vt_ct = {
462: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
463: HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
464: /* 8 */ HOLE, HOLE, STRING+UPARROW,
465: STRING+DOWNARROW,
466: STRING+LEFTARROW,
467: STRING+RIGHTARROW,
468: HOLE, TF(1),
469: /* 16 */ TF(2), TF(3), TF(4), c('['), '1', c('@'), '3', '4',
470: /* 24 */ '5', c('^'), '7', '8', '9', '0', c('_'), '=',
471: /* 32 */ c('^'), c('H'), BUCKYBITS+METABIT,
472: '7', '8', '9', '-', '\t',
473: /* 40 */ CTRLQ, c('W'), c('E'), c('R'), c('T'), c('Y'), c('U'), c('I'),
474: /* 48 */ c('O'), c('P'), c('['), c(']'), 0x7F, '4', '5', '6',
475: /* 56 */ ',', SHIFTKEYS+LEFTCTRL,
476: SHIFTKEYS+CAPSLOCK,
477: c('A'), CTRLS, c('D'), c('F'), c('G'),
478: /* 64 */ c('H'), c('J'), c('K'), c('L'), ':', '"', '\r', c('\\'),
479: /* 72 */ '1', '2', '3', NOP, NOSCROLL,
480: SHIFTKEYS+LEFTSHIFT,
481: c('Z'), c('X'),
482: /* 80 */ c('C'), c('V'), c('B'), c('N'), c('M'), ',', '.', c('_'),
483: /* 88 */ SHIFTKEYS+RIGHTSHIFT,
484: '\n', '0', HOLE, '.', '\r', HOLE, HOLE,
485: /* 96 */ HOLE, HOLE, c(' '), HOLE, HOLE, HOLE, HOLE, HOLE,
486: /*104 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
487: /*112 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
488: /*120 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, IDLE,
489: };
490:
491:
492: /* "Key Up" keyboard table for "VT100 style" */
493:
494: static struct keymap keytab_vt_up = {
495: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
496: HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
497: /* 8 */ HOLE, HOLE, NOP, NOP, NOP, NOP, HOLE, OOPS,
498: /* 16 */ OOPS, OOPS, OOPS, NOP, NOP, NOP, NOP, NOP,
499: /* 24 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
500: /* 32 */ NOP, NOP, BUCKYBITS+METABIT,
501: NOP, NOP, NOP, NOP, NOP,
502: /* 40 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
503: /* 48 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
504: /* 56 */ NOP, SHIFTKEYS+LEFTCTRL,
505: SHIFTKEYS+CAPSLOCK,
506: NOP, NOP, NOP, NOP, NOP,
507: /* 64 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
508: /* 72 */ NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+LEFTSHIFT,
509: NOP, NOP,
510: /* 80 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
511: /* 88 */ SHIFTKEYS+RIGHTSHIFT,
512: NOP, NOP, HOLE, NOP, NOP, HOLE, HOLE,
513: /* 96 */ HOLE, HOLE, NOP, HOLE, HOLE, HOLE, HOLE, HOLE,
514: /*104 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
515: /*112 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE,
516: /*120 */ HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, RESET,
517: };
518:
519:
520: /* Index to keymaps for "VT100 style" keyboard */
521: static struct keyboard keyindex_vt = {
522: &keytab_vt_lc,
523: &keytab_vt_uc,
524: &keytab_vt_cl,
525: &keytab_vt_ct,
526: &keytab_vt_up,
527: CAPSMASK+CTLSMASK, /* Shift keys that stay on at idle keyboard */
528: 0x0000, /* Bucky bits that stay on at idle keyboard */
529: 1, 59, /* abort keys */
530: 0x0000, /* Shift bits which toggle on down event */
531: };
532:
533: /* Unshifted keyboard table for Sun-3 keyboard */
534:
535: static struct keymap keytab_s3_lc = {
536: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
537: HOLE, LF(2), HOLE, TF(1), TF(2), HOLE,
538: /* 8 */ TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE,
539: /* 16 */ TF(7), TF(8), TF(9), ALT, HOLE, RF(1), RF(2), RF(3),
540: /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, c('['), '1', '2',
541: /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0',
542: /* 40 */ '-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6),
543: /* 48 */ HOLE, LF(5), HOLE, LF(6), HOLE, '\t', 'q', 'w',
544: /* 56 */ 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p',
545: /* 64 */ '[', ']', 0x7F, HOLE, RF(7), STRING+UPARROW,
546: RF(9), HOLE,
547: /* 72 */ LF(7), LF(8), LF(14), HOLE, SHIFTKEYS+LEFTCTRL,
548: 'a', 's', 'd',
549: /* 80 */ 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'',
550: /* 88 */ '\\', '\r', HOLE, STRING+LEFTARROW,
551: RF(11), STRING+RIGHTARROW,
552: HOLE, LF(9),
553: /* 96 */ LF(15), LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
554: 'z', 'x', 'c', 'v',
555: /*104 */ 'b', 'n', 'm', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
556: '\n',
557: /*112 */ RF(13), STRING+DOWNARROW,
558: RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK,
559: /*120 */ BUCKYBITS+METABIT,
560: ' ', BUCKYBITS+METABIT,
561: HOLE, HOLE, HOLE, ERROR, IDLE,
562: };
563:
564: /* Shifted keyboard table for Sun-3 keyboard */
565:
566: static struct keymap keytab_s3_uc = {
567: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
568: HOLE, LF(2), HOLE, TF(1), TF(2), HOLE,
569: /* 8 */ TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE,
570: /* 16 */ TF(7), TF(8), TF(9), ALT, HOLE, RF(1), RF(2), RF(3),
571: /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, c('['), '!', '@',
572: /* 32 */ '#', '$', '%', '^', '&', '*', '(', ')',
573: /* 40 */ '_', '+', '~', '\b', HOLE, RF(4), RF(5), RF(6),
574: /* 48 */ HOLE, LF(5), HOLE, LF(6), HOLE, '\t', 'Q', 'W',
575: /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
576: /* 64 */ '{', '}', 0x7F, HOLE, RF(7), STRING+UPARROW,
577: RF(9), HOLE,
578: /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
579: 'A', 'S', 'D',
580: /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ':', '"',
581: /* 88 */ '|', '\r', HOLE, STRING+LEFTARROW,
582: RF(11), STRING+RIGHTARROW,
583: HOLE, LF(9),
584: /* 96 */ LF(15), LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
585: 'Z', 'X', 'C', 'V',
586: /*104 */ 'B', 'N', 'M', '<', '>', '?', SHIFTKEYS+RIGHTSHIFT,
587: '\n',
588: /*112 */ RF(13), STRING+DOWNARROW,
589: RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK,
590: /*120 */ BUCKYBITS+METABIT,
591: ' ', BUCKYBITS+METABIT,
592: HOLE, HOLE, HOLE, ERROR, IDLE,
593: };
594:
595:
596: /* Caps Locked keyboard table for Sun-3 keyboard */
597:
598: static struct keymap keytab_s3_cl = {
599: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
600: HOLE, LF(2), HOLE, TF(1), TF(2), HOLE,
601: /* 8 */ TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE,
602: /* 16 */ TF(7), TF(8), TF(9), ALT, HOLE, RF(1), RF(2), RF(3),
603: /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, c('['), '1', '2',
604: /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0',
605: /* 40 */ '-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6),
606: /* 48 */ HOLE, LF(5), HOLE, LF(6), HOLE, '\t', 'Q', 'W',
607: /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
608: /* 64 */ '[', ']', 0x7F, HOLE, RF(7), STRING+UPARROW,
609: RF(9), HOLE,
610: /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
611: 'A', 'S', 'D',
612: /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ';', '\'',
613: /* 88 */ '\\', '\r', HOLE, STRING+LEFTARROW,
614: RF(11), STRING+RIGHTARROW,
615: HOLE, LF(9),
616: /* 96 */ LF(15), LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
617: 'Z', 'X', 'C', 'V',
618: /*104 */ 'B', 'N', 'M', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT,
619: '\n',
620: /*112 */ RF(13), STRING+DOWNARROW,
621: RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK,
622: /*120 */ BUCKYBITS+METABIT,
623: ' ', BUCKYBITS+METABIT,
624: HOLE, HOLE, HOLE, ERROR, IDLE,
625: };
626:
627: /* Controlled keyboard table for Sun-3 keyboard */
628:
629: static struct keymap keytab_s3_ct = {
630: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
631: HOLE, LF(2), HOLE, TF(1), TF(2), HOLE,
632: /* 8 */ TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE,
633: /* 16 */ TF(7), TF(8), TF(9), ALT, HOLE, RF(1), RF(2), RF(3),
634: /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, c('['), '1', c('@'),
635: /* 32 */ '3', '4', '5', c('^'), '7', '8', '9', '0',
636: /* 40 */ c('_'), '=', c('^'), '\b', HOLE, RF(4), RF(5), RF(6),
637: /* 48 */ HOLE, LF(5), HOLE, LF(6), HOLE, '\t', c('q'), c('w'),
638: /* 56 */ c('e'), c('r'), c('t'), c('y'), c('u'), c('i'), c('o'), c('p'),
639: /* 64 */ c('['), c(']'), 0x7F, HOLE, RF(7), STRING+UPARROW,
640: RF(9), HOLE,
641: /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
642: c('a'), c('s'), c('d'),
643: /* 80 */ c('f'), c('g'), c('h'), c('j'), c('k'), c('l'), ';', '\'',
644: /* 88 */ c('\\'),
645: '\r', HOLE, STRING+LEFTARROW,
646: RF(11), STRING+RIGHTARROW,
647: HOLE, LF(9),
648: /* 96 */ LF(15), LF(10), HOLE, SHIFTKEYS+LEFTSHIFT,
649: c('z'), c('x'), c('c'), c('v'),
650: /*104 */ c('b'), c('n'), c('m'), ',', '.', c('_'), SHIFTKEYS+RIGHTSHIFT,
651: '\n',
652: /*112 */ RF(13), STRING+DOWNARROW,
653: RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK,
654: /*120 */ BUCKYBITS+METABIT,
655: c(' '), BUCKYBITS+METABIT,
656: HOLE, HOLE, HOLE, ERROR, IDLE,
657: };
658:
659:
660:
661: /* "Key Up" keyboard table for Sun-3 keyboard */
662:
663: static struct keymap keytab_s3_up = {
664: /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT,
665: HOLE, OOPS, HOLE, OOPS, OOPS, HOLE,
666: /* 8 */ OOPS, HOLE, OOPS, HOLE, OOPS, HOLE, OOPS, HOLE,
667: /* 16 */ OOPS, OOPS, OOPS, OOPS, HOLE, OOPS, OOPS, NOP,
668: /* 24 */ HOLE, OOPS, OOPS, HOLE, HOLE, NOP, NOP, NOP,
669: /* 32 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
670: /* 40 */ NOP, NOP, NOP, NOP, HOLE, OOPS, OOPS, NOP,
671: /* 48 */ HOLE, OOPS, HOLE, OOPS, HOLE, NOP, NOP, NOP,
672: /* 56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
673: /* 64 */ NOP, NOP, NOP, HOLE, OOPS, OOPS, NOP, HOLE,
674: /* 72 */ OOPS, OOPS, HOLE, HOLE, SHIFTKEYS+LEFTCTRL,
675: NOP, NOP, NOP,
676: /* 80 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
677: /* 88 */ NOP, NOP, HOLE, OOPS, OOPS, NOP, HOLE, OOPS,
678: /* 96 */ OOPS, OOPS, HOLE, SHIFTKEYS+LEFTSHIFT,
679: NOP, NOP, NOP, NOP,
680: /*104 */ NOP, NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+RIGHTSHIFT,
681: NOP,
682: /*112 */ OOPS, OOPS, NOP, HOLE, HOLE, HOLE, HOLE, NOP,
683: /*120 */ BUCKYBITS+METABIT,
684: NOP, BUCKYBITS+METABIT,
685: HOLE, HOLE, HOLE, HOLE, RESET,
686: };
687:
688: /* Index to keymaps for Sun-3 keyboard */
689: static struct keyboard keyindex_s3 = {
690: &keytab_s3_lc,
691: &keytab_s3_uc,
692: &keytab_s3_cl,
693: &keytab_s3_ct,
694: &keytab_s3_up,
695: 0x0000, /* Shift bits which stay on with idle keyboard */
696: 0x0000, /* Bucky bits which stay on with idle keyboard */
697: 1, 77, /* abort keys */
698: CAPSMASK, /* Shift bits which toggle on down event */
699: };
700:
701: /***************************************************************************/
702: /* Index table for the whole shebang */
703: /***************************************************************************/
704: int nkeytables = 4; /* max 16 */
705: struct keyboard *keytables[] = {
706: &keyindex_ms,
707: &keyindex_vt,
708: &keyindex_s2,
709: &keyindex_s3,
710: };
711:
712: /*
713: Keyboard String Table
714:
715: This defines the strings sent by various keys (as selected in the
716: tables above).
717:
718: The first byte of each string is its length, the rest is data.
719: */
720:
721: #define kstescinit(c) {'\033', '[', 'c', '\0'}
722: char keystringtab[16][KTAB_STRLEN] = {
723: kstescinit(H) /*home*/,
724: kstescinit(A) /*up*/,
725: kstescinit(B) /*down*/,
726: kstescinit(D) /*left*/,
727: kstescinit(C) /*right*/,
728: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.