kbdmap.c revision 1.5
1/*
2 *	$Id: kbdmap.c,v 1.5 1994/02/11 07:01:56 chopps Exp $
3 */
4
5#include "kbdmap.h"
6
7/* define a default keymap. This can be changed by keyboard ioctl's
8   (later at least..) */
9
10/* mode shortcuts: */
11#define	S KBD_MODE_STRING
12#define DG (KBD_MODE_DEAD | KBD_MODE_GRAVE)
13#define DA (KBD_MODE_DEAD | KBD_MODE_ACUTE)
14#define DC (KBD_MODE_DEAD | KBD_MODE_CIRC)
15#define DT (KBD_MODE_DEAD | KBD_MODE_TILDE)
16#define DD (KBD_MODE_DEAD | KBD_MODE_DIER)
17#define C KBD_MODE_CAPS
18#define K KBD_MODE_KPAD
19
20struct kbdmap kbdmap;
21struct kbdmap ascii_kbdmap = {
22	/* normal map */
23	{
24	   0, '`',	/* 0x00 */
25	   0, '1',
26	   0, '2',
27	   0, '3',
28	   0, '4',
29	   0, '5',
30	   0, '6',
31	   0, '7',
32	   0, '8',	/* 0x08 */
33	   0, '9',
34	   0, '0',
35	   0, '-',
36	   0, '=',
37	   0, '\\',
38	   0, 0,
39	   K, '0',
40	   C, 'q',	/* 0x10 */
41	   C, 'w',
42	   C, 'e',
43	   C, 'r',
44	   C, 't',
45	   C, 'y',
46	   C, 'u',
47	   C, 'i',
48	   C, 'o',	/* 0x18 */
49	   C, 'p',
50	   0, '[',
51	   0, ']',
52	   0, 0,
53	   K, '1',
54	   K, '2',
55	   K, '3',
56	   C, 'a',	/* 0x20 */
57	   C, 's',
58	   C, 'd',
59	   C, 'f',
60	   C, 'g',
61	   C, 'h',
62	   C, 'j',
63	   C, 'k',
64	   C, 'l',	/* 0x28 */
65	   0, ';',
66	   0, '\'',
67	   0, 0,
68	   0, 0,
69	   K, '4',
70	   K, '5',
71	   K, '6',
72	   0, 0,	/* 0x30 */
73	   C, 'z',
74	   C, 'x',
75	   C, 'c',
76	   C, 'v',
77	   C, 'b',
78	   C, 'n',
79	   C, 'm',
80	   0, ',',	/* 0x38 */
81	   0, '.',
82	   0, '/',
83	   0, 0,
84	   K, '.',
85	   K, '7',
86	   K, '8',
87	   K, '9',
88	   0, ' ',	/* 0x40 */
89	   0, DEL,	/* really BS, DEL & BS swapped */
90	   0, '\t',
91	   K, '\r',	/* enter */
92	   0, '\r',	/* return */
93	   0, ESC,
94	   0, '\b',	/* really DEL, BS & DEL swapped */
95	   0, 0,
96	   0, 0,	/* 0x48 */
97	   0, 0,
98	   K, '-',
99	   0, 0,
100	   S, 0x00,	/* now it gets hairy.. CRSR UP */
101	   S, 0x04,	/* CRSR DOWN */
102	   S, 0x08,	/* CRSR RIGHT */
103	   S, 0x0C,	/* CRSR LEFT */
104	   S, 0x10,	/* 0x50 F1 */
105	   S, 0x15,	/* F2 */
106	   S, 0x1A,	/* F3 */
107	   S, 0x1F,	/* F4 */
108	   S, 0x24,	/* F5 */
109	   S, 0x29,	/* F6 */
110	   S, 0x2E,	/* F7 */
111	   S, 0x33,	/* 0x58 F8 */
112	   S, 0x38,	/* F9 */
113	   S, 0x3D,	/* F10 */
114	   K, '(',
115	   K, ')',
116	   K, '/',
117	   K, '*',
118	   S, 0x42,	/* HELP */
119	},
120
121	/* shifted map */
122	{
123	   0, '~',	/* 0x00 */
124	   0, '!',
125	   0, '@',
126	   0, '#',
127	   0, '$',
128	   0, '%',
129	   0, '^',
130	   0, '&',
131	   0, '*',	/* 0x08 */
132	   0, '(',
133	   0, ')',
134	   0, '_',
135	   0, '+',
136	   0, '|',
137	   0, 0,
138	   K, '0',
139	   C, 'Q',	/* 0x10 */
140	   C, 'W',
141	   C, 'E',
142	   C, 'R',
143	   C, 'T',
144	   C, 'Y',
145	   C, 'U',
146	   C, 'I',
147	   C, 'O',	/* 0x18 */
148	   C, 'P',
149	   0, '{',
150	   0, '}',
151	   0, 0,
152	   K, '1',
153	   K, '2',
154	   K, '3',
155	   C, 'A',	/* 0x20 */
156	   C, 'S',
157	   C, 'D',
158	   C, 'F',
159	   C, 'G',
160	   C, 'H',
161	   C, 'J',
162	   C, 'K',
163	   C, 'L',	/* 0x28 */
164	   0, ':',
165	   0, '\"',
166	   0, 0,
167	   0, 0,
168	   K, '4',
169	   K, '5',
170	   K, '6',
171	   0, 0,	/* 0x30 */
172	   C, 'Z',
173	   C, 'X',
174	   C, 'C',
175	   C, 'V',
176	   C, 'B',
177	   C, 'N',
178	   C, 'M',
179	   0, '<',	/* 0x38 */
180	   0, '>',
181	   0, '?',
182	   0, 0,
183	   K, '.',
184	   K, '7',
185	   K, '8',
186	   K, '9',
187	   0, ' ',	/* 0x40 */
188	   0, DEL,	/* really BS, DEL & BS swapped */
189	   S, 0x99,	/* shift TAB */
190	   K, '\r',	/* enter */
191	   0, '\r',	/* return */
192	   0, ESC,
193	   0, '\b',	/* really DEL, BS & DEL swapped */
194	   0, 0,
195	   0, 0,	/* 0x48 */
196	   0, 0,
197	   K, '-',
198	   0, 0,
199	   S, 0x47,	/* shift CRSR UP */
200	   S, 0x4C,	/* shift CRSR DOWN */
201	   S, 0x51,	/* shift CRSR RIGHT */
202	   S, 0x57,	/* shift CRSR LEFT */
203	   S, 0x5D,	/* 0x50 shift F1 */
204	   S, 0x63,	/* shift F2 */
205	   S, 0x69,	/* shift F3 */
206	   S, 0x6F,	/* shift F4 */
207	   S, 0x75,	/* shift F5 */
208	   S, 0x7B,	/* shift F6 */
209	   S, 0x81,	/* shift F7 */
210	   S, 0x87,	/* 0x58 shift F8 */
211	   S, 0x8D,	/* shift F9 */
212	   S, 0x93,	/* shift F10 */
213	   K, '(',
214	   K, ')',
215	   K, '/',
216	   K, '*',
217	   S, 0x42,	/* HELP (no special shift code) */
218	},
219
220
221	/* alt map */
222	{
223	   0, '`',	/* 0x00 */
224	   0, '�',
225	   0, '�',
226	   0, '�',
227	   0, '�',
228	   0, '�',
229	   0, '�',
230	   0, '�',
231	   0, '�',	/* 0x08 */
232	   0, '�',
233	   0, '�',
234	   0, '-',
235	   0, '=',
236	   0, '\\',
237	   0, 0,
238	   K, '0',
239	   C, '�',	/* 0x10 */
240	   0, '�',
241	   0, '�',
242	   0, '�',
243	   C, '�',
244	   0, '�',
245	   0, '�',
246	   0, '�',
247	   C, '�',	/* 0x18 */
248	   0, '�',
249	   0, '[',
250	   0, ']',
251	   0, 0,
252	   K, '1',
253	   K, '2',
254	   K, '3',
255	   C, '�',	/* 0x20 */
256	   0, '�',
257	   C, '�',
258	   DA, '�',
259	   DG, '`',
260	   DC, '^',
261	   DT, '~',
262	   DD, '�',
263	   0, '�',	/* 0x28 */
264	   0, ';',
265	   0, '\'',
266	   0, 0,
267	   0, 0,
268	   K, '4',
269	   K, '5',
270	   K, '6',
271	   0, 0,	/* 0x30 */
272	   0, '�',
273	   0, '�',
274	   C, '�',
275	   0, '�',
276	   0, '�',
277	   0, '�',
278	   0, '�',
279	   0, ',',	/* 0x38 */
280	   0, '.',
281	   0, '/',
282	   0, 0,
283	   K, '.',
284	   K, '7',
285	   K, '8',
286	   K, '9',
287	   0, ' ',	/* 0x40 */
288	   0, DEL,	/* really BS, DEL & BS swapped */
289	   0, '\t',
290	   K, '\r',	/* enter */
291	   0, '\r',	/* return */
292	   S, 0x9d,	/* CSI */
293	   0, '\b',	/* really DEL, BS & DEL swapped */
294	   0, 0,
295	   0, 0,	/* 0x48 */
296	   0, 0,
297	   K, '-',
298	   0, 0,
299	   S, 0x00,	/* now it gets hairy.. CRSR UP */
300	   S, 0x04,	/* CRSR DOWN */
301	   S, 0x08,	/* CRSR RIGHT */
302	   S, 0x0C,	/* CRSR LEFT */
303	   S, 0x10,	/* 0x50 F1 */
304	   S, 0x15,	/* F2 */
305	   S, 0x1A,	/* F3 */
306	   S, 0x1F,	/* F4 */
307	   S, 0x24,	/* F5 */
308	   S, 0x29,	/* F6 */
309	   S, 0x2E,	/* F7 */
310	   S, 0x33,	/* 0x58 F8 */
311	   S, 0x38,	/* F9 */
312	   S, 0x3D,	/* F10 */
313	   K, '(',
314	   K, ')',
315	   K, '/',
316	   K, '*',
317	   S, 0x42,	/* HELP */
318	},
319
320	/* shift alt map */
321	{
322	   0, '~',	/* 0x00 */
323	   0, '!',
324	   0, '@',
325	   0, '#',
326	   0, '$',
327	   0, '%',
328	   0, '^',
329	   0, '&',
330	   0, '*',	/* 0x08 */
331	   0, '(',
332	   0, ')',
333	   0, '_',
334	   0, '+',
335	   0, '|',
336	   0, 0,
337	   K, '0',
338	   C, '�',	/* 0x10 */
339	   0, '�',
340	   0, '�',
341	   0, '�',
342	   C, '�',
343	   0, '�',
344	   0, '�',
345	   0, '�',
346	   C, '�',	/* 0x18 */
347	   0, '�',
348	   0, '[',
349	   0, ']',
350	   0, 0,
351	   K, '1',
352	   K, '2',
353	   K, '3',
354	   C, '�',	/* 0x20 */
355	   0, '�',
356	   C, '�',
357	   DA, '�',
358	   DG, '`',
359	   DC, '^',
360	   DT, '~',
361	   DD, '�',
362	   0, '�',	/* 0x28 */
363	   0, ';',
364	   0, '\'',
365	   0, 0,
366	   0, 0,
367	   K, '4',
368	   K, '5',
369	   K, '6',
370	   0, 0,	/* 0x30 */
371	   0, '�',
372	   0, '�',
373	   C, '�',
374	   0, '�',
375	   0, '�',
376	   0, '�',
377	   0, '�',
378	   0, ',',	/* 0x38 */
379	   0, '.',
380	   0, '/',
381	   0, 0,
382	   K, '.',
383	   K, '7',
384	   K, '8',
385	   K, '9',
386	   0, ' ',	/* 0x40 */
387	   0, DEL,	/* really BS, DEL & BS swapped */
388	   0, '\t',
389	   K, '\r',	/* enter */
390	   0, '\r',	/* return */
391	   S, 0x9d,	/* CSI */
392	   0, '\b',	/* really DEL, BS & DEL swapped */
393	   0, 0,
394	   0, 0,	/* 0x48 */
395	   0, 0,
396	   K, '-',
397	   0, 0,
398	   S, 0x00,	/* now it gets hairy.. CRSR UP */
399	   S, 0x04,	/* CRSR DOWN */
400	   S, 0x08,	/* CRSR RIGHT */
401	   S, 0x0C,	/* CRSR LEFT */
402	   S, 0x10,	/* 0x50 F1 */
403	   S, 0x15,	/* F2 */
404	   S, 0x1A,	/* F3 */
405	   S, 0x1F,	/* F4 */
406	   S, 0x24,	/* F5 */
407	   S, 0x29,	/* F6 */
408	   S, 0x2E,	/* F7 */
409	   S, 0x33,	/* 0x58 F8 */
410	   S, 0x38,	/* F9 */
411	   S, 0x3D,	/* F10 */
412	   K, '(',
413	   K, ')',
414	   K, '/',
415	   K, '*',
416	   S, 0x42,	/* HELP */
417	},
418
419	{
420	  /* string table. If there's a better way to get the offsets into the
421	     above table, please tell me..
422
423	     NOTE: save yourself and others a lot of grief by *not* using
424	           CSI == 0x9b, using the two-character sequence gives
425	           much less trouble, especially in GNU-Emacs.. */
426
427	  3, ESC, '[', 'A',		/* 0x00: CRSR UP */
428	  3, ESC, '[', 'B',		/* 0x04: CRSR DOWN */
429	  3, ESC, '[', 'C',		/* 0x08: CRSR RIGHT */
430	  3, ESC, '[', 'D',		/* 0x0C: CRSR LEFT */
431	  4, ESC, '[', '0', '~',	/* 0x10: F1 */
432	  4, ESC, '[', '1', '~',	/* 0x15: F2 */
433	  4, ESC, '[', '2', '~',	/* 0x1A: F3 */
434	  4, ESC, '[', '3', '~',	/* 0x1F: F4 */
435	  4, ESC, '[', '4', '~',	/* 0x24: F5 */
436	  4, ESC, '[', '5', '~',	/* 0x29: F6 */
437	  4, ESC, '[', '6', '~',	/* 0x2E: F7 */
438	  4, ESC, '[', '7', '~',	/* 0x33: F8 */
439	  4, ESC, '[', '8', '~',	/* 0x38: F9 */
440	  4, ESC, '[', '9', '~',	/* 0x3D: F10 */
441	  4, ESC, '[', '?', '~',	/* 0x42: HELP */
442
443	  4, ESC, '[', 'T', '~',	/* 0x47: shift CRSR UP */
444	  4, ESC, '[', 'S', '~',	/* 0x4C: shift CRSR DOWN */
445	  5, ESC, '[', ' ', '@', '~',	/* 0x51: shift CRSR RIGHT */
446	  5, ESC, '[', ' ', 'A', '~',	/* 0x57: shift CRSR LEFT */
447	  5, ESC, '[', '1', '0', '~',	/* 0x5D: shift F1 */
448	  5, ESC, '[', '1', '1', '~',	/* 0x63: shift F2 */
449	  5, ESC, '[', '1', '2', '~',	/* 0x69: shift F3 */
450	  5, ESC, '[', '1', '3', '~',	/* 0x6F: shift F4 */
451	  5, ESC, '[', '1', '4', '~',	/* 0x75: shift F5 */
452	  5, ESC, '[', '1', '5', '~',	/* 0x7B: shift F6 */
453	  5, ESC, '[', '1', '6', '~',	/* 0x81: shift F7 */
454	  5, ESC, '[', '1', '7', '~',	/* 0x87: shift F8 */
455	  5, ESC, '[', '1', '8', '~',	/* 0x8D: shift F9 */
456	  5, ESC, '[', '1', '9', '~',	/* 0x93: shift F10 */
457	  3, ESC, '[', 'Z',		/* 0x99: shift TAB */
458	  2, ESC, '[',			/* 0x9d: alt ESC == CSI */
459	},
460};
461
462unsigned char acctable[KBD_NUM_ACC][64] = {
463  {	"@�BCD�FGH�JKLMN�PQRST�VWXYZ[\\]^_"
464	"`�bcd�fgh�jklmn�pqrst�vwxyz{|}~\177"},	/* KBD_ACC_GRAVE */
465
466  {	"@�BCD�FGH�JKLMN�PQRST�VWXYZ[\\]^_"
467	"`�bcd�fgh�jklmn�pqrst�vwxyz{|}~\177"},	/* KBD_ACC_ACUTE */
468
469  {	"@�BCD�FGH�JKLMN�PQRST�VWXYZ[\\]^_"
470	"`�bcd�fgh�jklmn�pqrst�vwxyz{|}~\177"},	/* KBD_ACC_CIRC */
471
472  {	"@�BCDEFGHIJKLM��PQRSTUVWXYZ[\\]^_"
473	"`�bcdefghijklm��pqrstuvwxyz{|}~\177"},	/* KBD_ACC_TILDE */
474
475  {	"@�BCD�FGH�JKLMN�PQRST�VWXYZ[\\]^_"
476	"`�bcd�fgh�jklmn�pqrst�vwxyz{|}~\177"},	/* KBD_ACC_DIER */
477};
478
479
480