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