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