xref: /openbsd/sys/dev/pckbc/wskbdmap_mfii.c (revision 7c772976)
1 /*	$OpenBSD: wskbdmap_mfii.c,v 1.48 2023/01/23 09:36:40 nicm Exp $ */
2 /*	$NetBSD: wskbdmap_mfii.c,v 1.15 2000/05/19 16:40:04 drochner Exp $	*/
3 
4 /*
5  * PLEASE DO NOT FORGET TO REGEN
6  *	sys/dev/usb/ukbdmap.c
7  * AFTER ANY CHANGES TO THIS FILE!
8  */
9 
10 /*-
11  * Copyright (c) 1997 The NetBSD Foundation, Inc.
12  * All rights reserved.
13  *
14  * This code is derived from software contributed to The NetBSD Foundation
15  * by Juergen Hannken-Illjes.
16  *
17  * Redistribution and use in source and binary forms, with or without
18  * modification, are permitted provided that the following conditions
19  * are met:
20  * 1. Redistributions of source code must retain the above copyright
21  *    notice, this list of conditions and the following disclaimer.
22  * 2. Redistributions in binary form must reproduce the above copyright
23  *    notice, this list of conditions and the following disclaimer in the
24  *    documentation and/or other materials provided with the distribution.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
30  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36  * POSSIBILITY OF SUCH DAMAGE.
37  */
38 
39 #include <sys/types.h>
40 #include <dev/wscons/wsksymdef.h>
41 #include <dev/wscons/wsksymvar.h>
42 #include <dev/pckbc/wskbdmap_mfii.h>
43 
44 #define KC(n) KS_KEYCODE(n)
45 
46 static const keysym_t pckbd_keydesc_us[] = {
47 /*  pos      command		normal		shifted */
48     KC(1),   KS_Cmd_Debugger,	KS_Escape,
49     KC(2),			KS_1,		KS_exclam,
50     KC(3),			KS_2,		KS_at,
51     KC(4),			KS_3,		KS_numbersign,
52     KC(5),			KS_4,		KS_dollar,
53     KC(6),			KS_5,		KS_percent,
54     KC(7),			KS_6,		KS_asciicircum,
55     KC(8),			KS_7,		KS_ampersand,
56     KC(9),			KS_8,		KS_asterisk,
57     KC(10),			KS_9,		KS_parenleft,
58     KC(11),			KS_0,		KS_parenright,
59     KC(12),			KS_minus,	KS_underscore,
60     KC(13),			KS_equal,	KS_plus,
61     KC(14),  KS_Cmd_ResetEmul,	KS_Delete,
62     KC(15),			KS_Tab,		KS_Backtab,
63     KC(16),			KS_q,
64     KC(17),			KS_w,
65     KC(18),			KS_e,
66     KC(19),			KS_r,
67     KC(20),			KS_t,
68     KC(21),			KS_y,
69     KC(22),			KS_u,
70     KC(23),			KS_i,
71     KC(24),			KS_o,
72     KC(25),			KS_p,
73     KC(26),			KS_bracketleft,	KS_braceleft,
74     KC(27),			KS_bracketright, KS_braceright,
75     KC(28),			KS_Return,
76     KC(29),  KS_Cmd1,		KS_Control_L,
77     KC(30),			KS_a,
78     KC(31),			KS_s,
79     KC(32),			KS_d,
80     KC(33),			KS_f,
81     KC(34),			KS_g,
82     KC(35),			KS_h,
83     KC(36),			KS_j,
84     KC(37),			KS_k,
85     KC(38),			KS_l,
86     KC(39),			KS_semicolon,	KS_colon,
87     KC(40),			KS_apostrophe,	KS_quotedbl,
88     KC(41),			KS_grave,	KS_asciitilde,
89     KC(42),			KS_Shift_L,
90     KC(43),			KS_backslash,	KS_bar,
91     KC(44),			KS_z,
92     KC(45),			KS_x,
93     KC(46),			KS_c,
94     KC(47),			KS_v,
95     KC(48),			KS_b,
96     KC(49),			KS_n,
97     KC(50),			KS_m,
98     KC(51),			KS_comma,	KS_less,
99     KC(52),			KS_period,	KS_greater,
100     KC(53),			KS_slash,	KS_question,
101     KC(54),			KS_Shift_R,
102     KC(55),			KS_KP_Multiply,
103     KC(56),  KS_Cmd2,		KS_Alt_L,
104     KC(57),			KS_space,
105     KC(58),			KS_Caps_Lock,
106     KC(59),  KS_Cmd_Screen0,	KS_f1,
107     KC(60),  KS_Cmd_Screen1,	KS_f2,
108     KC(61),  KS_Cmd_Screen2,	KS_f3,
109     KC(62),  KS_Cmd_Screen3,	KS_f4,
110     KC(63),  KS_Cmd_Screen4,	KS_f5,
111     KC(64),  KS_Cmd_Screen5,	KS_f6,
112     KC(65),  KS_Cmd_Screen6,	KS_f7,
113     KC(66),  KS_Cmd_Screen7,	KS_f8,
114     KC(67),  KS_Cmd_Screen8,	KS_f9,
115     KC(68),  KS_Cmd_Screen9,	KS_f10,
116     KC(69),			KS_Num_Lock,
117     KC(70),			KS_Hold_Screen,
118     KC(71),			KS_KP_Home,	KS_KP_7,
119     KC(72),			KS_KP_Up,	KS_KP_8,
120     KC(73),			KS_KP_Prior,	KS_KP_9,
121     KC(74),			KS_KP_Subtract,
122     KC(75),			KS_KP_Left,	KS_KP_4,
123     KC(76),			KS_KP_Begin,	KS_KP_5,
124     KC(77),			KS_KP_Right,	KS_KP_6,
125     KC(78),			KS_KP_Add,
126     KC(79),			KS_KP_End,	KS_KP_1,
127     KC(80),			KS_KP_Down,	KS_KP_2,
128     KC(81),			KS_KP_Next,	KS_KP_3,
129     KC(82),			KS_KP_Insert,	KS_KP_0,
130     KC(83),			KS_KP_Delete,	KS_KP_Decimal,
131     KC(87),  KS_Cmd_Screen10,	KS_f11,
132     KC(88),  KS_Cmd_Screen11,	KS_f12,
133     KC(91),			KS_f13,
134     KC(92),			KS_f14,
135     KC(93),			KS_f15,
136     KC(99),			KS_f16,
137     KC(100),			KS_f17,
138     KC(101),			KS_f18,
139     KC(102),			KS_f19,
140     KC(103),			KS_f20,
141     KC(104),			KS_f21,
142     KC(105),			KS_f22,
143     KC(106),			KS_f23,
144     KC(107),			KS_f24,
145     KC(127),			KS_Pause, /* Break */
146     KC(156),			KS_KP_Enter,
147     KC(157), KS_Cmd1,		KS_Control_R,
148     KC(160),			KS_AudioMute,
149     KC(170),			KS_Print_Screen,
150     KC(174),			KS_AudioLower,
151     KC(176),			KS_AudioRaise,
152     KC(181),			KS_KP_Divide,
153     KC(183),			KS_Print_Screen,
154     KC(184), KS_Cmd2,		KS_Alt_R,	KS_Multi_key,
155 #if 0
156     KC(198),  KS_Cmd_ResetClose, /* CTL-Break */
157 #endif
158     KC(199),			KS_Home,
159     KC(200),			KS_Up,
160     KC(201), KS_Cmd_ScrollBack,	KS_Prior,
161     KC(203),			KS_Left,
162     KC(205),			KS_Right,
163     KC(207),			KS_End,
164     KC(208),			KS_Down,
165     KC(209), KS_Cmd_ScrollFwd,	KS_Next,
166     KC(210),			KS_Insert,
167     KC(211), KS_Cmd_KbdReset,	KS_KP_Delete,
168     KC(219),			KS_Meta_L,
169     KC(220),			KS_Meta_R,
170     KC(221),			KS_Menu,
171 };
172 
173 #if !defined(WSKBD_NO_INTL_LAYOUTS)
174 
175 static const keysym_t pckbd_keydesc_de[] = {
176 /*  pos      normal		shifted		altgr		shift-altgr */
177     KC(3),   KS_2,		KS_quotedbl,	KS_twosuperior,
178     KC(4),   KS_3,		KS_section,	KS_threesuperior,
179     KC(7),   KS_6,		KS_ampersand,
180     KC(8),   KS_7,		KS_slash,	KS_braceleft,
181     KC(9),   KS_8,		KS_parenleft,	KS_bracketleft,
182     KC(10),  KS_9,		KS_parenright,	KS_bracketright,
183     KC(11),  KS_0,		KS_equal,	KS_braceright,
184     KC(12),  KS_ssharp,		KS_question,	KS_backslash,
185     KC(13),  KS_dead_acute,	KS_dead_grave,
186     KC(16),  KS_q,		KS_Q,		KS_at,
187     KC(21),  KS_z,
188     KC(26),  KS_udiaeresis,
189     KC(27),  KS_plus,		KS_asterisk,	KS_dead_tilde,
190     KC(39),  KS_odiaeresis,
191     KC(40),  KS_adiaeresis,
192     KC(41),  KS_dead_circumflex,KS_dead_abovering,
193     KC(43),  KS_numbersign,	KS_apostrophe,
194     KC(44),  KS_y,
195     KC(50),  KS_m,		KS_M,		KS_mu,
196     KC(51),  KS_comma,		KS_semicolon,
197     KC(52),  KS_period,		KS_colon,
198     KC(53),  KS_minus,		KS_underscore,
199     KC(86),  KS_less,		KS_greater,	KS_bar,		KS_brokenbar,
200     KC(184), KS_Mode_switch,	KS_Multi_key,
201 };
202 
203 static const keysym_t pckbd_keydesc_de_nodead[] = {
204 /*  pos      normal		shifted		altgr		shift-altgr */
205     KC(13),  KS_apostrophe,	KS_grave,
206     KC(27),  KS_plus,		KS_asterisk,	KS_asciitilde,
207     KC(41),  KS_asciicircum,	KS_degree,
208 };
209 
210 static const keysym_t pckbd_keydesc_dk[] = {
211 /*  pos      normal		shifted		altgr		shift-altgr */
212     KC(3),   KS_2,		KS_quotedbl,	KS_at,
213     KC(4),   KS_3,		KS_numbersign,	KS_sterling,
214     KC(5),   KS_4,		KS_currency,	KS_dollar,
215     KC(7),   KS_6,		KS_ampersand,
216     KC(8),   KS_7,		KS_slash,	KS_braceleft,
217     KC(9),   KS_8,		KS_parenleft,	KS_bracketleft,
218     KC(10),  KS_9,		KS_parenright,	KS_bracketright,
219     KC(11),  KS_0,		KS_equal,	KS_braceright,
220     KC(12),  KS_plus,		KS_question,
221     KC(13),  KS_dead_acute,	KS_dead_grave,	KS_bar,
222     KC(26),  KS_aring,
223     KC(27),  KS_dead_diaeresis,	KS_dead_circumflex, KS_dead_tilde,
224     KC(39),  KS_ae,
225     KC(40),  KS_oslash,
226     KC(41),  KS_onehalf,	KS_paragraph,
227     KC(43),  KS_apostrophe,	KS_asterisk,
228     KC(51),  KS_comma,		KS_semicolon,
229     KC(52),  KS_period,		KS_colon,
230     KC(53),  KS_minus,		KS_underscore,
231     KC(86),  KS_less,		KS_greater,	KS_backslash,
232     KC(184), KS_Mode_switch,	KS_Multi_key,
233 };
234 
235 static const keysym_t pckbd_keydesc_dk_nodead[] = {
236 /*  pos      normal		shifted		altgr		shift-altgr */
237     KC(13),  KS_apostrophe,	KS_grave,	KS_bar,
238     KC(27),  KS_diaeresis,	KS_asciicircum,	KS_asciitilde,
239 };
240 
241 static const keysym_t pckbd_keydesc_sv[] = {
242 /*  pos      normal		shifted		altgr		shift-altgr */
243     KC(12),  KS_plus,		KS_question,	KS_backslash,
244     KC(27),  KS_dead_diaeresis,	KS_dead_circumflex, KS_dead_tilde,
245     KC(39),  KS_odiaeresis,
246     KC(40),  KS_adiaeresis,
247     KC(41),  KS_section,	KS_onehalf,
248     KC(86),  KS_less,		KS_greater,	KS_bar,
249     KC(184), KS_Mode_switch,	KS_Multi_key,
250 };
251 
252 static const keysym_t pckbd_keydesc_sv_nodead[] = {
253 /*  pos      normal		shifted		altgr		shift-altgr */
254     KC(13),  KS_apostrophe,	KS_grave,	KS_bar,
255     KC(27),  KS_diaeresis,	KS_asciicircum,	KS_asciitilde,
256 };
257 
258 static const keysym_t pckbd_keydesc_no[] = {
259 /*  pos      normal		shifted		altgr		shift-altgr */
260     KC(13),  KS_backslash,	KS_dead_grave,	KS_dead_acute,
261     KC(27),  KS_dead_diaeresis,	KS_dead_circumflex, KS_dead_tilde,
262     KC(39),  KS_oslash,
263     KC(40),  KS_ae,
264     KC(41),  KS_bar,		KS_paragraph,
265     KC(86),  KS_less,		KS_greater,
266 };
267 
268 static const keysym_t pckbd_keydesc_no_nodead[] = {
269 /*  pos      normal		shifted		altgr		shift-altgr */
270     KC(13),  KS_backslash,	KS_grave,	KS_acute,
271     KC(27),  KS_diaeresis,	KS_asciicircum,	KS_asciitilde,
272 };
273 
274 static const keysym_t pckbd_keydesc_fr[] = {
275 /*  pos	     normal		shifted		altgr		shift-altgr */
276     KC(2),   KS_ampersand,	KS_1,
277     KC(3),   KS_eacute,		KS_2,		KS_asciitilde,
278     KC(4),   KS_quotedbl,	KS_3,		KS_numbersign,
279     KC(5),   KS_apostrophe,	KS_4,		KS_braceleft,
280     KC(6),   KS_parenleft,	KS_5,		KS_bracketleft,
281     KC(7),   KS_minus,		KS_6,		KS_bar,
282     KC(8),   KS_egrave,		KS_7,		KS_grave,
283     KC(9),   KS_underscore,	KS_8,		KS_backslash,
284     KC(10),  KS_ccedilla,	KS_9,		KS_asciicircum,
285     KC(11),  KS_agrave,		KS_0,		KS_at,
286     KC(12),  KS_parenright,	KS_degree,	KS_bracketright,
287     KC(13),  KS_equal,		KS_plus,	KS_braceright,
288     KC(16),  KS_a,
289     KC(17),  KS_z,
290     KC(26),  KS_dead_circumflex, KS_dead_diaeresis,
291     KC(27),  KS_dollar,		KS_sterling,	KS_currency,
292     KC(30),  KS_q,
293     KC(39),  KS_m,
294     KC(40),  KS_ugrave,		KS_percent,
295     KC(41),  KS_twosuperior,
296     KC(43),  KS_asterisk,	KS_mu,
297     KC(44),  KS_w,
298     KC(50),  KS_comma,		KS_question,
299     KC(51),  KS_semicolon,	KS_period,
300     KC(52),  KS_colon,		KS_slash,
301     KC(53),  KS_exclam,		KS_section,
302     KC(86),  KS_less,		KS_greater,
303     KC(184), KS_Mode_switch,	KS_Multi_key,
304 };
305 
306 /*
307  * fr-dvorak-be'po layout, simplified map, per http://www.clavier-dvorak.org/
308  * (the complete map is still a moving target)
309  */
310 static const keysym_t pckbd_keydesc_fr_dvorak_bepo[] = {
311     KC(2),   KS_quotedbl,	KS_1,		KS_hyphen,
312     KC(3),   KS_guillemotleft,	KS_2,		KS_less,
313     KC(4),   KS_guillemotright,	KS_3,		KS_greater,
314     KC(5),   KS_parenleft,	KS_4,		KS_bracketleft,
315     KC(6),   KS_parenright,	KS_5,		KS_bracketright,
316     KC(7),   KS_at,		KS_6,
317     KC(8),   KS_plus,		KS_7,
318     KC(9),   KS_minus,		KS_8,
319     KC(10),  KS_slash,		KS_9,
320     KC(11),  KS_asterisk,	KS_0,
321     KC(12),  KS_equal,		KS_asciicircum,
322     KC(13),  KS_percent,	KS_grave,
323     KC(16),  KS_b,		KS_B,		KS_bar,
324     KC(17),  KS_eacute,		KS_Eacute,	KS_dead_acute,
325     KC(18),  KS_p,		KS_P,		KS_ampersand,
326     KC(19),  KS_o,		KS_O,
327 						/* oe ligature */
328     KC(20),  KS_egrave,		KS_Egrave,	KS_dead_grave,
329     KC(21),  KS_dead_circumflex,KS_exclam,
330     KC(22),			KS_v,
331     KC(23),			KS_d,
332     KC(24),			KS_l,
333     KC(25),			KS_j,
334     KC(26),			KS_z,
335     KC(27),			KS_w,
336     KC(30),  KS_a,		KS_A,		KS_ae,		KS_AE,
337     KC(31),  KS_u,		KS_U,		KS_ugrave,	KS_Ugrave,
338     KC(32),  KS_i,		KS_I,		KS_dead_diaeresis,
339     KC(33),  KS_e,		KS_E,
340 						/* euro currency */
341     KC(34),  KS_comma,		KS_semicolon,
342     KC(35),			KS_c,
343     KC(36),			KS_t,
344     KC(37),			KS_s,
345     KC(38),			KS_r,
346     KC(39),			KS_n,
347     KC(40),			KS_m,
348     KC(41),  KS_dollar,		KS_numbersign,
349     KC(43),  KS_ccedilla,	KS_Ccedilla,
350     KC(44),  KS_agrave,		KS_Agrave,	KS_backslash,
351     KC(45),  KS_y,		KS_Y,		KS_braceleft,
352     KC(46),  KS_x,		KS_X,		KS_braceright,
353     KC(47),  KS_period,		KS_colon,	/* ellipsis */
354     KC(48),  KS_k,		KS_K,		KS_asciitilde,
355     KC(49),  KS_apostrophe,	KS_question,
356     KC(50),  KS_q,		KS_Q,
357     KC(51),  KS_g,		KS_G,		KS_mu,
358     KC(52),			KS_h,
359     KC(53),			KS_f,
360     KC(57),  KS_space,		KS_nobreakspace,KS_underscore,
361     KC(86),  KS_egrave,		KS_Egrave,	KS_slash,
362     KC(184), KS_Mode_switch,	KS_Multi_key,
363 };
364 
365 static const keysym_t pckbd_keydesc_it[] = {
366 /*  pos      normal		shifted		altgr		shift-altgr */
367     KC(3),   KS_2,		KS_quotedbl,	KS_twosuperior,
368     KC(4),   KS_3,		KS_sterling,	KS_threesuperior,
369     KC(6),   KS_5,		KS_percent,
370     KC(7),   KS_6,		KS_ampersand,
371     KC(8),   KS_7,		KS_slash,
372     KC(9),   KS_8,		KS_parenleft,
373     KC(10),  KS_9,		KS_parenright,
374     KC(11),  KS_0,		KS_equal,
375     KC(12),  KS_apostrophe,	KS_question,
376     KC(13),  KS_igrave,		KS_asciicircum,
377     KC(26),  KS_egrave,		KS_eacute,	KS_braceleft,	KS_bracketleft,
378     KC(27),  KS_plus,		KS_asterisk,	KS_braceright,	KS_bracketright,
379     KC(39),  KS_ograve,		KS_Ccedilla,	KS_at,
380     KC(40),  KS_agrave,		KS_degree,	KS_numbersign,
381     KC(41),  KS_backslash,	KS_bar,
382     KC(43),  KS_ugrave,		KS_section,
383     KC(51),  KS_comma,		KS_semicolon,
384     KC(52),  KS_period,		KS_colon,
385     KC(53),  KS_minus,		KS_underscore,
386     KC(86),  KS_less,		KS_greater,
387     KC(184), KS_Mode_switch,	KS_Multi_key,
388 };
389 
390 static const keysym_t pckbd_keydesc_uk[] = {
391 /*  pos      normal		shifted		altgr		shift-altgr */
392     KC(2),   KS_1,		KS_exclam,	KS_plusminus,	KS_exclamdown,
393     KC(3),   KS_2,		KS_quotedbl,	KS_twosuperior,	KS_cent,
394     KC(4),   KS_3,		KS_sterling,	KS_threesuperior,
395     KC(5),   KS_4,		KS_dollar,	KS_acute,	KS_currency,
396     KC(6),   KS_5,		KS_percent,	KS_mu,		KS_yen,
397     KC(7),   KS_6,		KS_asciicircum,	KS_paragraph,
398     KC(8),   KS_7,		KS_ampersand,	KS_periodcentered, KS_brokenbar,
399     KC(9),   KS_8,		KS_asterisk,	KS_cedilla,	KS_ordfeminine,
400     KC(10),  KS_9,		KS_parenleft,	KS_onesuperior,	KS_diaeresis,
401     KC(11),  KS_0,		KS_parenright,	KS_masculine,	KS_copyright,
402     KC(12),  KS_minus,		KS_underscore,	KS_hyphen,	KS_ssharp,
403     KC(13),  KS_equal,		KS_plus,	KS_onehalf,    KS_guillemotleft,
404     KC(40),  KS_apostrophe,	KS_at,		KS_section,	KS_Agrave,
405     KC(41),  KS_grave,		KS_grave,	KS_agrave,	KS_agrave,
406     KC(43),  KS_numbersign,	KS_asciitilde,  KS_sterling,	KS_thorn,
407     KC(86),  KS_backslash,	KS_bar,		KS_Udiaeresis,
408 };
409 
410 static const keysym_t pckbd_keydesc_jp[] = {
411 /*  pos      normal		shifted		altgr		shift-altgr */
412     KC(3),   KS_2,		KS_quotedbl,
413     KC(7),   KS_6,		KS_ampersand,
414     KC(8),   KS_7,		KS_apostrophe,
415     KC(9),   KS_8,		KS_parenleft,
416     KC(10),  KS_9,		KS_parenright,
417     KC(11),  KS_0,
418     KC(12),  KS_minus,		KS_equal,
419     KC(13),  KS_asciicircum,	KS_asciitilde,
420     KC(26),  KS_at,		KS_grave,
421     KC(27),  KS_bracketleft,	KS_braceleft,
422     KC(39),  KS_semicolon,	KS_plus,
423     KC(40),  KS_colon,		KS_asterisk,
424     KC(41),  KS_Zenkaku_Hankaku, /* replace grave/tilde */
425     KC(43),  KS_bracketright,	KS_braceright,
426     KC(112), KS_Hiragana_Katakana,
427     KC(115), KS_backslash,	KS_underscore,
428     KC(121), KS_Henkan,
429     KC(123), KS_Muhenkan,
430     KC(125), KS_backslash,	KS_bar,
431 };
432 
433 static const keysym_t pckbd_keydesc_es[] = {
434 /*  pos      normal		shifted		altgr		shift-altgr */
435     KC(2),   KS_1,		KS_exclam,	KS_bar,
436     KC(3),   KS_2,		KS_quotedbl,	KS_at,
437     KC(4),   KS_3,		KS_periodcentered, KS_numbersign,
438     KC(5),   KS_4,		KS_dollar,	KS_asciitilde,
439     KC(7),   KS_6,		KS_ampersand,
440     KC(8),   KS_7,		KS_slash,
441     KC(9),   KS_8,		KS_parenleft,
442     KC(10),  KS_9,		KS_parenright,
443     KC(11),  KS_0,		KS_equal,
444     KC(12),  KS_apostrophe,	KS_question,
445     KC(13),  KS_exclamdown,	KS_questiondown,
446     KC(26),  KS_dead_grave,	KS_dead_circumflex, KS_bracketleft,
447     KC(27),  KS_plus,		KS_asterisk,	KS_bracketright,
448     KC(39),  KS_ntilde,
449     KC(40),  KS_dead_acute,	KS_dead_diaeresis, KS_braceleft,
450     KC(41),  KS_degree,		KS_ordfeminine,	KS_backslash,
451     KC(43),  KS_ccedilla,	KS_Ccedilla,	KS_braceright,
452     KC(51),  KS_comma,		KS_semicolon,
453     KC(52),  KS_period,		KS_colon,
454     KC(53),  KS_minus,		KS_underscore,
455     KC(86),  KS_less,		KS_greater,
456     KC(184), KS_Mode_switch,	KS_Multi_key,
457 };
458 
459 static const keysym_t pckbd_keydesc_lt[] = {
460 /*  pos      normal		shifted		altgr		shift-altgr */
461     KC(2),   KS_exclam,		KS_1,		KS_at,
462     KC(3),   KS_minus,		KS_2,		KS_underscore,
463     KC(4),   KS_slash,		KS_3,		KS_numbersign,
464     KC(5),   KS_semicolon,	KS_4,		KS_dollar,
465     KC(6),   KS_colon,		KS_5,		KS_paragraph,
466     KC(7),   KS_comma,		KS_6,		KS_asciicircum,
467     KC(8),   KS_period,		KS_7,		KS_ampersand,
468     KC(9),   KS_equal,		KS_8,		KS_asterisk,
469     KC(10),  KS_bracketleft,	KS_9,		KS_parenleft,
470     KC(11),  KS_bracketright,	KS_0,		KS_parenright,
471     KC(12),  KS_question,	KS_plus,	KS_apostrophe,
472     KC(13),  KS_x,		KS_X,		KS_percent,
473     KC(16),  KS_L7_aogonek,	KS_L7_Aogonek,
474     KC(17),  KS_L7_zcaron,	KS_L7_Zcaron,
475     KC(18),  KS_e,		KS_E,		KS_currency,
476     KC(26),  KS_L7_iogonek,	KS_L7_Iogonek,	KS_braceleft,
477     KC(27),  KS_w,		KS_W,		KS_braceright,
478     KC(33),  KS_L7_scaron,	KS_L7_Scaron,
479     KC(39),  KS_L7_uogonek,	KS_L7_Uogonek,
480     KC(40),  KS_L7_edot,	KS_L7_Edot,	KS_quotedbl,
481     KC(41),  KS_grave,		KS_asciitilde,
482     KC(43),  KS_q,		KS_Q,		KS_bar,
483     KC(45),  KS_L7_umacron,	KS_L7_Umacron,
484     KC(51),  KS_L7_ccaron,	KS_L7_Ccaron,	KS_L7_dbllow9quot,
485     KC(52),  KS_f,		KS_F,		KS_L7_leftdblquot,
486     KC(53),  KS_L7_eogonek,	KS_L7_Eogonek,	KS_backslash,
487     KC(57),  KS_space,		KS_space,	KS_nobreakspace,
488     KC(184), KS_Mode_switch,	KS_Multi_key,
489 };
490 
491 static const keysym_t pckbd_keydesc_be[] = {
492 /*  pos      normal		shifted		altgr		shift-altgr */
493     KC(2),   KS_ampersand,	KS_1,		KS_bar,
494     KC(3),   KS_eacute,		KS_2,		KS_at,
495     KC(4),   KS_quotedbl,	KS_3,		KS_numbersign,
496     KC(5),   KS_apostrophe,	KS_4,
497     KC(6),   KS_parenleft,	KS_5,
498     KC(7),   KS_section,	KS_6,		KS_asciicircum,
499     KC(8),   KS_egrave,		KS_7,
500     KC(9),   KS_exclam,		KS_8,
501     KC(10),  KS_ccedilla,	KS_9,		KS_braceleft,
502     KC(11),  KS_agrave,		KS_0,		KS_braceright,
503     KC(12),  KS_parenright,	KS_degree,
504     KC(13),  KS_minus,		KS_underscore,
505     KC(16),  KS_a,
506     KC(17),  KS_z,
507     KC(26),  KS_dead_circumflex, KS_dead_diaeresis, KS_bracketleft,
508     KC(27),  KS_dollar,		KS_asterisk,	KS_bracketright,
509     KC(30),  KS_q,
510     KC(39),  KS_m,
511     KC(40),  KS_ugrave,		KS_percent,	KS_acute,
512     KC(41),  KS_twosuperior,	KS_threesuperior,
513     KC(43),  KS_mu,		KS_sterling,	KS_grave,
514     KC(44),  KS_w,
515     KC(50),  KS_comma,		KS_question,
516     KC(51),  KS_semicolon,	KS_period,
517     KC(52),  KS_colon,		KS_slash,
518     KC(53),  KS_equal,		KS_plus,	KS_asciitilde,
519     KC(86),  KS_less,		KS_greater,	KS_backslash,
520     KC(184), KS_Mode_switch,	KS_Multi_key,
521 };
522 
523 static const keysym_t pckbd_keydesc_us_declk[] = {
524 /*  pos      normal		shifted		altgr		shift-altgr */
525     KC(1),	KS_grave,	KS_asciitilde, /* replace escape */
526     KC(41),	KS_less,	KS_greater, /* replace grave/tilde */
527     KC(143),	KS_Multi_key, /* left compose */
528     KC(157),	KS_Multi_key, /* right compose, replace right control */
529     KC(87),	KS_Cmd_Debugger,	KS_Escape, /* replace F11 */
530     KC(189),	KS_f13,
531     KC(190),	KS_f14,
532     KC(191),	KS_Help,
533     KC(192),	KS_Execute,
534     KC(193),	KS_f17,
535     KC(183),	KS_f18,
536     KC(70),	KS_f19, /* replace scroll lock */
537     KC(127),	KS_f20, /* replace break */
538     KC(69),	KS_KP_F1, /* replace num lock */
539     KC(181),	KS_KP_F2, /* replace divide */
540     KC(55),	KS_KP_F3, /* replace multiply */
541     KC(74),	KS_KP_F4, /* replace subtract */
542 
543     /* keypad is numbers only - no num lock */
544     KC(71),	KS_KP_7,
545     KC(72),	KS_KP_8,
546     KC(73),	KS_KP_9,
547     KC(75),	KS_KP_4,
548     KC(76),	KS_KP_5,
549     KC(77),	KS_KP_6,
550     KC(79),	KS_KP_1,
551     KC(80),	KS_KP_2,
552     KC(81),	KS_KP_3,
553     KC(82),	KS_KP_0,
554     KC(83),	KS_KP_Decimal,
555 
556     KC(206),	KS_KP_Subtract,
557     KC(78),	KS_KP_Separator, /* replace add */
558     KC(199),	KS_Find, /* replace home */
559     KC(207),	KS_Select, /* replace end */
560 };
561 
562 static const keysym_t pckbd_keydesc_us_dvorak[] = {
563 /*  pos      command		normal		shifted */
564     KC(12),			KS_bracketleft,	KS_braceleft,
565     KC(13),			KS_bracketright, KS_braceright,
566     KC(16),			KS_apostrophe, KS_quotedbl,
567     KC(17),			KS_comma, KS_less,
568     KC(18),			KS_period, KS_greater,
569     KC(19),			KS_p,
570     KC(20),			KS_y,
571     KC(21),			KS_f,
572     KC(22),			KS_g,
573     KC(23),			KS_c,
574     KC(24),			KS_r,
575     KC(25),			KS_l,
576     KC(26),			KS_slash, KS_question,
577     KC(27),			KS_equal, KS_plus,
578     KC(31),			KS_o,
579     KC(32),			KS_e,
580     KC(33),			KS_u,
581     KC(34),			KS_i,
582     KC(35),			KS_d,
583     KC(36),			KS_h,
584     KC(37),			KS_t,
585     KC(38),			KS_n,
586     KC(39),			KS_s,
587     KC(40),			KS_minus, KS_underscore,
588     KC(44),			KS_semicolon, KS_colon,
589     KC(45),			KS_q,
590     KC(46),			KS_j,
591     KC(47),			KS_k,
592     KC(48),			KS_x,
593     KC(49),			KS_b,
594     KC(51),			KS_w,
595     KC(52),			KS_v,
596     KC(53),			KS_z,
597 };
598 
599 static const keysym_t pckbd_keydesc_us_colemak[] = {
600 /*  pos      command		normal		shifted */
601     KC(18),			KS_f,
602     KC(19),			KS_p,
603     KC(20),			KS_g,
604     KC(21),			KS_j,
605     KC(22),			KS_l,
606     KC(23),			KS_u,
607     KC(24),			KS_y,
608     KC(25),			KS_semicolon,	KS_colon,
609     KC(31),			KS_r,
610     KC(32),			KS_s,
611     KC(33),			KS_t,
612     KC(34),			KS_d,
613     KC(36),			KS_n,
614     KC(37),			KS_e,
615     KC(38),			KS_i,		KS_I,
616     KC(39),			KS_o,
617     KC(49),			KS_k,
618 };
619 
620 static const keysym_t pckbd_keydesc_swapctrlcaps[] = {
621 /*  pos      command		normal		shifted */
622     KC(29),			KS_Caps_Lock,
623     KC(58),  KS_Cmd1,		KS_Control_L,
624 };
625 
626 static const keysym_t pckbd_keydesc_iopener[] = {
627 /*  pos      command		normal		shifted */
628     KC(59),  KS_Cmd_Debugger,	KS_Escape,
629     KC(60),  KS_Cmd_Screen0,	KS_f1,
630     KC(61),  KS_Cmd_Screen1,	KS_f2,
631     KC(62),  KS_Cmd_Screen2,	KS_f3,
632     KC(63),  KS_Cmd_Screen3,	KS_f4,
633     KC(64),  KS_Cmd_Screen4,	KS_f5,
634     KC(65),  KS_Cmd_Screen5,	KS_f6,
635     KC(66),  KS_Cmd_Screen6,	KS_f7,
636     KC(67),  KS_Cmd_Screen7,	KS_f8,
637     KC(68),  KS_Cmd_Screen8,	KS_f9,
638     KC(87),  KS_Cmd_Screen9,	KS_f10,
639     KC(88),			KS_f11,
640 };
641 
642 static const keysym_t pckbd_keydesc_ru[] = {
643 /*  pos      normal		shifted		altgr			shift-altgr */
644     KC(7),   KS_6,		KS_asciicircum,	KS_6,			KS_comma,
645     KC(8),   KS_7,		KS_ampersand,	KS_7,			KS_period,
646     KC(16),  KS_q,		KS_Q,		KS_Cyrillic_ishort,	KS_Cyrillic_ISHORT,
647     KC(17),  KS_w,		KS_W,		KS_Cyrillic_tse,	KS_Cyrillic_TSE,
648     KC(18),  KS_e,		KS_E,		KS_Cyrillic_u,		KS_Cyrillic_U,
649     KC(19),  KS_r,		KS_R,		KS_Cyrillic_ka,		KS_Cyrillic_KA,
650     KC(20),  KS_t,		KS_T,		KS_Cyrillic_ie,		KS_Cyrillic_IE,
651     KC(21),  KS_y,		KS_Y,		KS_Cyrillic_en,		KS_Cyrillic_EN,
652     KC(22),  KS_u,		KS_U,		KS_Cyrillic_ge,		KS_Cyrillic_GE,
653     KC(23),  KS_i,		KS_I,		KS_Cyrillic_sha,	KS_Cyrillic_SHA,
654     KC(24),  KS_o,		KS_O,		KS_Cyrillic_scha,	KS_Cyrillic_SCHA,
655     KC(25),  KS_p,		KS_P,		KS_Cyrillic_ze,		KS_Cyrillic_ZE,
656     KC(26),  KS_bracketleft,	KS_braceleft,	KS_Cyrillic_ha,		KS_Cyrillic_HA,
657     KC(27),  KS_bracketright,	KS_braceright,	KS_Cyrillic_hsighn,	KS_Cyrillic_HSIGHN,
658     KC(30),  KS_a,		KS_A,		KS_Cyrillic_ef,		KS_Cyrillic_EF,
659     KC(31),  KS_s,		KS_S,		KS_Cyrillic_yeru,	KS_Cyrillic_YERU,
660     KC(32),  KS_d,		KS_D,		KS_Cyrillic_ve,		KS_Cyrillic_VE,
661     KC(33),  KS_f,		KS_F,		KS_Cyrillic_a,		KS_Cyrillic_A,
662     KC(34),  KS_g,		KS_G,		KS_Cyrillic_pe,		KS_Cyrillic_PE,
663     KC(35),  KS_h,		KS_H,		KS_Cyrillic_er,		KS_Cyrillic_ER,
664     KC(36),  KS_j,		KS_J,		KS_Cyrillic_o,		KS_Cyrillic_O,
665     KC(37),  KS_k,		KS_K,		KS_Cyrillic_el,		KS_Cyrillic_EL,
666     KC(38),  KS_l,		KS_L,		KS_Cyrillic_de,		KS_Cyrillic_DE,
667     KC(39),  KS_semicolon,	KS_colon,	KS_Cyrillic_zhe,	KS_Cyrillic_ZHE,
668     KC(40),  KS_apostrophe,	KS_quotedbl,	KS_Cyrillic_e,		KS_Cyrillic_E,
669     KC(44),  KS_z,		KS_Z,		KS_Cyrillic_ya,		KS_Cyrillic_YA,
670     KC(45),  KS_x,		KS_X,		KS_Cyrillic_che,	KS_Cyrillic_CHE,
671     KC(46),  KS_c,		KS_C,		KS_Cyrillic_es,		KS_Cyrillic_ES,
672     KC(47),  KS_v,		KS_V,		KS_Cyrillic_em,		KS_Cyrillic_EM,
673     KC(48),  KS_b,		KS_B,		KS_Cyrillic_i,		KS_Cyrillic_I,
674     KC(49),  KS_n,		KS_N,		KS_Cyrillic_te,		KS_Cyrillic_TE,
675     KC(50),  KS_m,		KS_M,		KS_Cyrillic_ssighn,	KS_Cyrillic_SSIGHN,
676     KC(51),  KS_comma,		KS_less,	KS_Cyrillic_be,		KS_Cyrillic_BE,
677     KC(52),  KS_period,		KS_greater,	KS_Cyrillic_yu,		KS_Cyrillic_YU,
678     KC(53),  KS_slash,		KS_question,	KS_Cyrillic_yo,		KS_Cyrillic_YO,
679     KC(184), KS_Mode_switch,   KS_Multi_key,
680 };
681 
682 static const keysym_t pckbd_keydesc_ua[] = {
683 /*  pos      normal		shifted		altgr			shift-altgr */
684     KC(7),   KS_6,		KS_asciicircum,	KS_6,			KS_comma,
685     KC(8),   KS_7,		KS_ampersand,	KS_7,			KS_period,
686     KC(12),   KS_minus,		KS_underscore,	KS_Cyrillic_iukr,			KS_Cyrillic_IUKR,
687     KC(13),   KS_equal,		KS_plus,	KS_Cyrillic_yeukr,			KS_Cyrillic_YEUKR,
688     KC(16),  KS_q,		KS_Q,		KS_Cyrillic_ishort,	KS_Cyrillic_ISHORT,
689     KC(17),  KS_w,		KS_W,		KS_Cyrillic_tse,	KS_Cyrillic_TSE,
690     KC(18),  KS_e,		KS_E,		KS_Cyrillic_u,		KS_Cyrillic_U,
691     KC(19),  KS_r,		KS_R,		KS_Cyrillic_ka,		KS_Cyrillic_KA,
692     KC(20),  KS_t,		KS_T,		KS_Cyrillic_ie,		KS_Cyrillic_IE,
693     KC(21),  KS_y,		KS_Y,		KS_Cyrillic_en,		KS_Cyrillic_EN,
694     KC(22),  KS_u,		KS_U,		KS_Cyrillic_ge,		KS_Cyrillic_GE,
695     KC(23),  KS_i,		KS_I,		KS_Cyrillic_sha,	KS_Cyrillic_SHA,
696     KC(24),  KS_o,		KS_O,		KS_Cyrillic_scha,	KS_Cyrillic_SCHA,
697     KC(25),  KS_p,		KS_P,		KS_Cyrillic_ze,		KS_Cyrillic_ZE,
698     KC(26),  KS_bracketleft,	KS_braceleft,	KS_Cyrillic_ha,		KS_Cyrillic_HA,
699     KC(27),  KS_bracketright,	KS_braceright,	KS_Cyrillic_hsighn,	KS_Cyrillic_HSIGHN,
700     KC(30),  KS_a,		KS_A,		KS_Cyrillic_ef,		KS_Cyrillic_EF,
701     KC(31),  KS_s,		KS_S,		KS_Cyrillic_yeru,	KS_Cyrillic_YERU,
702     KC(32),  KS_d,		KS_D,		KS_Cyrillic_ve,		KS_Cyrillic_VE,
703     KC(33),  KS_f,		KS_F,		KS_Cyrillic_a,		KS_Cyrillic_A,
704     KC(34),  KS_g,		KS_G,		KS_Cyrillic_pe,		KS_Cyrillic_PE,
705     KC(35),  KS_h,		KS_H,		KS_Cyrillic_er,		KS_Cyrillic_ER,
706     KC(36),  KS_j,		KS_J,		KS_Cyrillic_o,		KS_Cyrillic_O,
707     KC(37),  KS_k,		KS_K,		KS_Cyrillic_el,		KS_Cyrillic_EL,
708     KC(38),  KS_l,		KS_L,		KS_Cyrillic_de,		KS_Cyrillic_DE,
709     KC(39),  KS_semicolon,	KS_colon,	KS_Cyrillic_zhe,	KS_Cyrillic_ZHE,
710     KC(40),  KS_apostrophe,	KS_quotedbl,	KS_Cyrillic_e,		KS_Cyrillic_E,
711     KC(41),  KS_grave,	KS_asciitilde,	KS_Cyrillic_gheukr,		KS_Cyrillic_GHEUKR,
712     KC(43),  KS_backslash,	KS_bar,	KS_Cyrillic_yi,		KS_Cyrillic_YI,
713     KC(44),  KS_z,		KS_Z,		KS_Cyrillic_ya,		KS_Cyrillic_YA,
714     KC(45),  KS_x,		KS_X,		KS_Cyrillic_che,	KS_Cyrillic_CHE,
715     KC(46),  KS_c,		KS_C,		KS_Cyrillic_es,		KS_Cyrillic_ES,
716     KC(47),  KS_v,		KS_V,		KS_Cyrillic_em,		KS_Cyrillic_EM,
717     KC(48),  KS_b,		KS_B,		KS_Cyrillic_i,		KS_Cyrillic_I,
718     KC(49),  KS_n,		KS_N,		KS_Cyrillic_te,		KS_Cyrillic_TE,
719     KC(50),  KS_m,		KS_M,		KS_Cyrillic_ssighn,	KS_Cyrillic_SSIGHN,
720     KC(51),  KS_comma,		KS_less,	KS_Cyrillic_be,		KS_Cyrillic_BE,
721     KC(52),  KS_period,		KS_greater,	KS_Cyrillic_yu,		KS_Cyrillic_YU,
722     KC(53),  KS_slash,		KS_question,	KS_Cyrillic_yo,		KS_Cyrillic_YO,
723     KC(184), KS_Mode_switch,   KS_Multi_key,
724 };
725 
726 static const keysym_t pckbd_keydesc_sg[] = {
727 /*  pos      normal		shifted		altgr		shift-altgr */
728     KC(2),   KS_1,		KS_plus,	KS_bar,
729     KC(3),   KS_2,		KS_quotedbl,	KS_at,
730     KC(4),   KS_3,		KS_asterisk,	KS_numbersign,
731     KC(5),   KS_4,		KS_ccedilla,
732     KC(7),   KS_6,		KS_ampersand,	KS_notsign,
733     KC(8),   KS_7,		KS_slash,	KS_brokenbar,
734     KC(9),   KS_8,		KS_parenleft,	KS_cent,
735     KC(10),  KS_9,		KS_parenright,
736     KC(11),  KS_0,		KS_equal,
737     KC(12),  KS_apostrophe,	KS_question,	KS_dead_acute,
738     KC(13),  KS_dead_circumflex,KS_dead_grave,	KS_dead_tilde,
739     KC(18),  KS_e,		KS_E,		KS_currency,
740     KC(21),  KS_z,
741     KC(26),  KS_udiaeresis,	KS_egrave,	KS_bracketleft,
742     KC(27),  KS_dead_diaeresis,	KS_exclam,	KS_bracketright,
743     KC(39),  KS_odiaeresis,	KS_eacute,
744     KC(40),  KS_adiaeresis,	KS_agrave,	KS_braceleft,
745     KC(41),  KS_section,	KS_degree,	KS_dead_abovering,
746     KC(43),  KS_dollar,		KS_sterling,	KS_braceright,
747     KC(44),  KS_y,
748     KC(51),  KS_comma,		KS_semicolon,
749     KC(52),  KS_period,		KS_colon,
750     KC(53),  KS_minus,		KS_underscore,
751     KC(86),  KS_less,		KS_greater,	KS_backslash,
752     KC(184), KS_Mode_switch,	KS_Multi_key,
753 };
754 
755 static const keysym_t pckbd_keydesc_sg_nodead[] = {
756 /*  pos      normal		shifted		altgr		shift-altgr */
757     KC(12),  KS_apostrophe,	KS_question,	KS_acute,
758     KC(13),  KS_asciicircum,	KS_grave,	KS_asciitilde,
759     KC(27),  KS_diaeresis,	KS_exclam,	KS_bracketright
760 };
761 
762 static const keysym_t pckbd_keydesc_sf[] = {
763 /*  pos      normal		shifted		altgr		shift-altgr */
764     KC(26),  KS_egrave,		KS_udiaeresis,	KS_bracketleft,
765     KC(39),  KS_eacute,		KS_odiaeresis,
766     KC(40),  KS_agrave,		KS_adiaeresis,	KS_braceleft
767 };
768 
769 static const keysym_t pckbd_keydesc_pt[] = {
770 /*  pos      normal		shifted		altgr		shift-altgr */
771     KC(3),   KS_2,		KS_quotedbl,	KS_at,
772     KC(4),   KS_3,		KS_numbersign,	KS_sterling,
773     KC(7),   KS_6,		KS_ampersand,
774     KC(8),   KS_7,		KS_slash,	KS_braceleft,
775     KC(9),   KS_8,		KS_parenleft,	KS_bracketleft,
776     KC(10),  KS_9,		KS_parenright,	KS_bracketright,
777     KC(11),  KS_0,		KS_equal,	KS_braceright,
778     KC(12),  KS_apostrophe,	KS_question,
779     KC(13),  KS_less,		KS_greater,
780     KC(26),  KS_plus,		KS_asterisk,
781     KC(27),  KS_dead_acute,	KS_dead_grave,
782     KC(39),  KS_ccedilla,	KS_Ccedilla,
783     KC(40),  KS_masculine,	KS_ordfeminine,
784     KC(41),  KS_backslash,	KS_bar,
785     KC(43),  KS_dead_tilde,	KS_dead_circumflex,
786     KC(51),  KS_comma,		KS_semicolon,
787     KC(52),  KS_period,		KS_colon,
788     KC(53),  KS_minus,		KS_underscore,
789     KC(86),  KS_less,		KS_greater,
790     KC(184), KS_Mode_switch,	KS_Multi_key,
791 };
792 
793 static const keysym_t pckbd_keydesc_la[] = {
794 /*  pos      normal		shifted		altgr		shift-altgr */
795     KC(2),   KS_1,		KS_exclam,
796     KC(3),   KS_2,		KS_quotedbl,
797     KC(4),   KS_3,		KS_numbersign,
798     KC(7),   KS_6,		KS_ampersand,
799     KC(8),   KS_7,		KS_slash,
800     KC(9),   KS_8,		KS_parenleft,
801     KC(10),  KS_9,		KS_parenright,
802     KC(11),  KS_0,		KS_equal,
803     KC(12),  KS_apostrophe,	KS_question,	KS_backslash,
804     KC(13),  KS_questiondown,	KS_exclamdown,
805     KC(16),  KS_q,		KS_Q,		KS_at,
806     KC(26),  KS_dead_acute,	KS_dead_diaeresis,
807     KC(27),  KS_plus,		KS_asterisk,	KS_asciitilde,
808     KC(39),  KS_ntilde,
809     KC(40),  KS_braceleft,	KS_bracketleft,	KS_dead_circumflex,
810     KC(41),  KS_bar,		KS_degree,	KS_notsign,
811     KC(43),  KS_braceright,	KS_bracketright,KS_dead_grave,
812     KC(51),  KS_comma,		KS_semicolon,
813     KC(52),  KS_period,		KS_colon,
814     KC(53),  KS_minus,		KS_underscore,
815     KC(86),  KS_less,		KS_greater,
816     KC(184), KS_Mode_switch,	KS_Multi_key,
817 };
818 
819 static const keysym_t pckbd_keydesc_br[] = {
820 /*  pos      normal		shifted         altgr           shift-altgr */
821     KC(2),   KS_1,		KS_exclam,	KS_onesuperior,
822     KC(3),   KS_2,		KS_at,		KS_twosuperior,
823     KC(4),   KS_3,		KS_numbersign,	KS_threesuperior,
824     KC(5),   KS_4,		KS_dollar,	KS_sterling,
825     KC(6),   KS_5,		KS_percent,	KS_cent,
826     KC(7),   KS_6,		KS_dead_diaeresis,	KS_notsign,
827     KC(13),  KS_equal,		KS_plus,	KS_section,
828     KC(26),  KS_dead_acute,	KS_dead_grave,
829     KC(27),  KS_bracketleft,	KS_braceleft,	KS_ordfeminine,
830     KC(39),  KS_ccedilla,	KS_Ccedilla,
831     KC(40),  KS_dead_tilde,	KS_dead_circumflex,
832     KC(41),  KS_apostrophe,	KS_quotedbl,
833     KC(43),  KS_bracketright,	KS_braceright,	KS_masculine,
834     KC(53),  KS_semicolon,	KS_colon,
835     KC(83),  KS_KP_Delete,	KS_KP_Decimal,
836     KC(86),  KS_backslash,	KS_bar,
837     KC(115), KS_slash,		KS_question,	KS_degree,
838 };
839 
840 static const keysym_t pckbd_keydesc_tr[] = {
841 /*  pos      normal		shifted         altgr           shift-altgr */
842     KC(3),   KS_2,		KS_apostrophe,	KS_sterling,
843     KC(4),   KS_3,		KS_asciicircum,	KS_numbersign,
844     KC(5),   KS_4,		KS_plus,	KS_dollar,
845     KC(6),   KS_5,		KS_percent,	KS_onehalf,
846     KC(7),   KS_6,		KS_ampersand,
847     KC(8),   KS_7,		KS_slash,	KS_braceleft,
848     KC(9),   KS_8,		KS_parenleft,	KS_bracketleft,
849     KC(10),  KS_9,		KS_parenright,	KS_bracketright,
850     KC(11),  KS_0,		KS_equal,	KS_braceright,
851     KC(12),  KS_asterisk,	KS_question,	KS_backslash,
852     KC(13),  KS_minus,		KS_underscore,
853     KC(16),  KS_q,		KS_Q,		KS_at,
854     KC(23),  KS_L5_idotless,	KS_I,
855     KC(26),  KS_L5_gbreve,	KS_L5_Gbreve,	KS_dead_diaeresis,
856     KC(27),  KS_udiaeresis,	KS_Udiaeresis,	KS_asciitilde,
857     KC(39),  KS_L5_scedilla,	KS_L5_Scedilla,	KS_dead_acute,
858     KC(40),  KS_i,		KS_L5_Idotabove,
859     KC(41),  KS_quotedbl,	KS_eacute,
860     KC(43),  KS_comma,		KS_semicolon,	KS_dead_grave,
861     KC(51),  KS_odiaeresis,	KS_Odiaeresis,
862     KC(52),  KS_ccedilla,	KS_Ccedilla,
863     KC(53),  KS_period,	KS_colon,
864     KC(86),  KS_less,		KS_greater,	KS_bar,
865     KC(184), KS_Mode_switch,	KS_Multi_key,
866 };
867 
868 static const keysym_t pckbd_keydesc_tr_nodead[] = {
869 /*  pos      normal		shifted         altgr           shift-altgr */
870     KC(26),  KS_L5_gbreve,	KS_L5_Gbreve,
871     KC(39),  KS_L5_scedilla,	KS_L5_Scedilla,	KS_apostrophe,
872     KC(43),  KS_comma,		KS_semicolon,	KS_grave,
873 };
874 
875 static const keysym_t pckbd_keydesc_pl[] = {
876 /*  pos      normal		shifted         altgr           shift-altgr */
877     KC(18),  KS_e,		KS_E,		KS_L2_eogonek,	KS_L2_Eogonek,
878     KC(24),  KS_o,		KS_O,		KS_oacute,	KS_Oacute,
879     KC(30),  KS_a,		KS_A,		KS_L2_aogonek,	KS_L2_Aogonek,
880     KC(31),  KS_s,		KS_S,		KS_L2_sacute,	KS_L2_Sacute,
881     KC(38),  KS_l,		KS_L,		KS_L2_lstroke,	KS_L2_Lstroke,
882     KC(44),  KS_z,		KS_Z,		KS_L2_zdotabove,KS_L2_Zdotabove,
883     KC(45),  KS_x,		KS_X,		KS_L2_zacute,	KS_L2_Zacute,
884     KC(46),  KS_c,		KS_C,		KS_L2_cacute,	KS_L2_Cacute,
885     KC(49),  KS_n,		KS_N,		KS_L2_nacute,	KS_L2_Nacute,
886     KC(184), KS_Mode_switch,	KS_Multi_key,
887 };
888 
889 static const keysym_t pckbd_keydesc_hu[] = {
890 /*  pos      normal		shifted		altgr		shift-altgr */
891     KC(2),   KS_1,		KS_apostrophe,	KS_asciitilde,
892     KC(3),   KS_2,		KS_quotedbl,
893     KC(4),   KS_3,		KS_plus,	KS_asciicircum,
894     KC(5),   KS_4,		KS_exclam,
895     KC(6),   KS_5,		KS_percent,
896     KC(7),   KS_6,		KS_slash,
897     KC(8),   KS_7,		KS_equal,KS_grave,
898     KC(9),   KS_8,		KS_parenleft,
899     KC(10),  KS_9,		KS_parenright,	KS_acute,
900     KC(11),  KS_odiaeresis,	KS_Odiaeresis,
901     KC(12),  KS_udiaeresis,	KS_Udiaeresis,
902     KC(13),  KS_oacute,		KS_Oacute,
903     KC(16),  KS_q,		KS_Q,		KS_backslash,
904     KC(17),  KS_w,		KS_W,KS_bar,
905     KC(21),  KS_z,		KS_Z,
906     KC(23),  KS_i,		KS_I,		KS_iacute,
907     KC(26),  KS_odoubleacute,	KS_Odoubleacute,	KS_division,
908     KC(27),  KS_uacute,		KS_Uacute,	KS_multiply,
909     KC(33),  KS_f,		KS_F,		KS_bracketleft,
910     KC(34),  KS_g,		KS_G,		KS_bracketright,
911     KC(36),  KS_j,		KS_J,		KS_iacute,
912     KC(39),  KS_eacute,		KS_Eacute,	KS_dollar,
913     KC(40),  KS_aacute,		KS_Aacute,	KS_ssharp,
914     KC(41),  KS_0,		KS_section,
915     KC(43),  KS_udoubleacute,	KS_Udoubleacute,	KS_currency,
916     KC(44),  KS_y,		KS_Y,		KS_greater,
917     KC(45),  KS_x,		KS_X,		KS_numbersign,
918     KC(46),  KS_c,		KS_C,		KS_ampersand,
919     KC(47),  KS_v,		KS_V,		KS_at,
920     KC(48),  KS_b,		KS_B,		KS_braceleft,
921     KC(49),  KS_n,		KS_N,		KS_braceright,
922     KC(51),  KS_comma,		KS_question,	KS_semicolon,
923     KC(52),  KS_period,		KS_colon,
924     KC(53),  KS_minus,		KS_underscore,	KS_asterisk,
925     KC(86),  KS_iacute,		KS_Iacute,	KS_less,
926     KC(184), KS_Mode_switch,	KS_Multi_key,
927 };
928 
929 static const keysym_t pckbd_keydesc_si[]=
930 {
931 /*  pos      normal		shifted		altgr		shift-altgr */
932     KC(2),   KS_1,		KS_exclam,	KS_asciitilde,
933     KC(3),   KS_2,		KS_quotedbl,	KS_L2_caron,
934     KC(4),   KS_3,		KS_numbersign,	KS_asciicircum,
935     KC(5),   KS_4,		KS_dollar,	KS_L2_breve,
936     KC(6),   KS_5,		KS_percent,	KS_degree,
937     KC(7),   KS_6,		KS_ampersand,	KS_L2_ogonek,
938     KC(8),   KS_7,		KS_slash,	KS_grave,
939     KC(9),   KS_8,		KS_parenleft,	KS_L2_dotabove,
940     KC(10),  KS_9,		KS_parenright,	KS_acute,
941     KC(11),  KS_0,		KS_equal,	KS_L2_dblacute,
942     KC(12),  KS_apostrophe,	KS_question,	KS_diaeresis,
943     KC(13),  KS_plus,		KS_asterisk,	KS_cedilla,
944     KC(16),  KS_q,		KS_Q,		KS_backslash,
945     KC(17),  KS_w,		KS_W,		KS_bar,
946     KC(21),  KS_z,		KS_Z,
947     KC(26),  KS_L2_scaron,	KS_L2_Scaron,	KS_division,
948     KC(27),  KS_L2_dstroke,	KS_L2_Dstroke,	KS_multiply,
949     KC(33),  KS_f,		KS_F,		KS_bracketleft,
950     KC(34),  KS_g,		KS_G,		KS_bracketright,
951     KC(37),  KS_k,		KS_K,		KS_L2_lstroke,
952     KC(38),  KS_l,		KS_L,		KS_L2_Lstroke,
953     KC(39),  KS_L2_ccaron,	KS_L2_Ccaron,
954     KC(40),  KS_L2_cacute,	KS_L2_Cacute,	KS_ssharp,
955     KC(41),  KS_cedilla,	KS_diaeresis,
956     KC(43),  KS_L2_zcaron,	KS_L2_Zcaron,	KS_currency,
957     KC(44),  KS_y,		KS_Y,
958     KC(47),  KS_v,		KS_V,		KS_at,
959     KC(48),  KS_b,		KS_B,		KS_braceleft,
960     KC(49),  KS_n,		KS_N,		KS_braceright,
961     KC(50),  KS_m,		KS_M,		KS_section,
962     KC(51),  KS_comma,		KS_semicolon,	KS_less,
963     KC(52),  KS_period,		KS_colon,	KS_greater,
964     KC(53),  KS_minus,		KS_underscore,
965     KC(86),  KS_less,		KS_greater,
966     KC(184), KS_Mode_switch,	KS_Multi_key,
967 };
968 
969 static const keysym_t pckbd_keydesc_cf[] = {
970 /*  pos      normal		shifted		altgr		shift-altgr */
971 	KC(2),   KS_1,		KS_exclam,	KS_plusminus,
972 	KC(3), 	 KS_2,		KS_quotedbl,	KS_at,
973 	KC(4),   KS_3,		KS_slash,	KS_sterling,
974 	KC(5),   KS_4,		KS_dollar,	KS_cent,
975 	KC(6),   KS_5,		KS_percent,	KS_diaeresis,
976 	KC(7),   KS_6,		KS_question,	KS_macron,
977 	KC(8),   KS_7,		KS_ampersand,	KS_brokenbar,
978 	KC(9),   KS_8,		KS_asterisk,	KS_twosuperior,
979 	KC(10),  KS_9,		KS_parenleft,	KS_threesuperior,
980 	KC(11),  KS_0,		KS_parenright,	KS_onequarter,
981 	KC(12),  KS_minus,	KS_underscore,	KS_onehalf,
982 	KC(13),  KS_equal,	KS_plus,	KS_threequarters,
983 	KC(24),  KS_o,		KS_O,		KS_section,
984 	KC(25),  KS_p,		KS_P,		KS_paragraph,
985 	KC(26),  KS_dead_circumflex,KS_dead_circumflex, KS_bracketleft,
986 	KC(27),  KS_dead_cedilla,KS_dead_diaeresis, KS_bracketright,
987 	KC(39),  KS_semicolon,	KS_colon,	KS_asciitilde,
988 	KC(40),  KS_dead_grave,	KS_dead_grave,	KS_braceleft,
989 	KC(41),  KS_numbersign,	KS_bar,		KS_backslash,
990 	KC(43),  KS_less,	KS_greater,	KS_braceright,
991 	KC(50),  KS_m,		KS_M,		KS_mu,
992 	KC(51),  KS_comma,	KS_apostrophe,	KS_hyphen,
993 	KC(52),  KS_period,	KS_period,
994 	KC(53),  KS_eacute,	KS_Eacute,	KS_dead_acute,
995 	KC(86),  KS_guillemotleft,KS_guillemotright, KS_degree,
996 	KC(184), KS_Mode_switch,KS_Multi_key,
997 };
998 
999 static const keysym_t pckbd_keydesc_cf_nodead[] = {
1000 /*  pos      normal		shifted		altgr		shift-altgr */
1001 	KC(26),  KS_asciicircum,KS_asciicircum,	KS_bracketleft,
1002 	KC(27),  KS_cedilla,	KS_diaeresis,	KS_bracketright,
1003 	KC(40),  KS_grave,	KS_grave,	KS_braceleft,
1004 	KC(53),  KS_eacute,	KS_Eacute,	KS_acute,
1005 };
1006 
1007 static const keysym_t pckbd_keydesc_lv[] = {
1008 /*  pos      normal		shifted		altgr		shift-altgr */
1009     KC(18),  KS_e,		KS_E,		KS_L7_emacron,	KS_L7_Emacron,
1010     KC(22),  KS_u,		KS_U,		KS_L7_umacron,	KS_L7_Umacron,
1011     KC(23),  KS_i,		KS_I,		KS_L7_imacron,	KS_L7_Imacron,
1012     KC(24),  KS_o,		KS_O,		KS_L7_omacron,	KS_L7_Omacron,
1013     KC(30),  KS_a,		KS_A,		KS_L7_amacron,	KS_L7_Amacron,
1014     KC(31),  KS_s,		KS_S,		KS_L7_scaron,	KS_L7_Scaron,
1015     KC(34),  KS_g,		KS_G,		KS_L7_gcedilla,	KS_L7_Gcedilla,
1016     KC(37),  KS_k,		KS_K,		KS_L7_kcedilla,	KS_L7_Kcedilla,
1017     KC(38),  KS_l,		KS_L,		KS_L7_lcedilla,	KS_L7_Lcedilla,
1018     KC(44),  KS_z,		KS_Z,		KS_L7_zcaron,	KS_L7_Zcaron,
1019     KC(46),  KS_c,		KS_C,		KS_L7_ccaron,	KS_L7_Ccaron,
1020     KC(49),  KS_n,		KS_N,		KS_L7_ncedilla,	KS_L7_Ncedilla,
1021     KC(184), KS_Mode_switch,	KS_Multi_key,
1022 };
1023 
1024 static const keysym_t pckbd_keydesc_nl[] = {
1025 /*  pos      normal		shifted		altgr		shift-altgr */
1026     KC(2),   KS_1,		KS_exclam,	KS_onesuperior,
1027     KC(3),   KS_2,		KS_quotedbl,	KS_twosuperior,
1028     KC(4),   KS_3,		KS_numbersign,	KS_threesuperior,
1029     KC(5),   KS_4,		KS_dollar,	KS_onequarter,
1030     KC(6),   KS_5,		KS_percent,	KS_onehalf,
1031     KC(7),   KS_6,		KS_ampersand,	KS_threequarters,
1032     KC(8),   KS_7,		KS_underscore,	KS_sterling,
1033     KC(9),   KS_8,		KS_parenleft,	KS_braceleft,
1034     KC(10),  KS_9,		KS_parenright,	KS_braceright,
1035     KC(11),  KS_0,		KS_apostrophe,
1036     KC(12),  KS_slash,		KS_question,	KS_backslash,
1037     KC(13),  KS_degree,		KS_dead_tilde,	KS_dead_cedilla,
1038     KC(19),  KS_r,		KS_R,		KS_paragraph,
1039     KC(26),  KS_dead_diaeresis, KS_dead_circumflex,
1040     KC(27),  KS_asterisk,	KS_bar,
1041     KC(31),  KS_s,		KS_S,		KS_ssharp,
1042     KC(39),  KS_plus,		KS_plusminus,
1043     KC(40),  KS_dead_acute,	KS_dead_grave,
1044     KC(41),  KS_at,		KS_section,	KS_notsign,
1045     KC(43),  KS_less,		KS_greater,
1046     KC(44),  KS_z,		KS_Z,		KS_guillemotleft,
1047     KC(45),  KS_x,		KS_X,		KS_guillemotright,
1048     KC(46),  KS_c,		KS_C,		KS_cent,
1049     KC(50),  KS_m,		KS_M,		KS_mu,
1050     KC(51),  KS_comma,		KS_semicolon,
1051     KC(52),  KS_period,		KS_colon,	KS_periodcentered,
1052     KC(53),  KS_minus,		KS_equal,
1053     KC(86),  KS_bracketright,	KS_bracketleft,	KS_brokenbar,
1054     KC(184), KS_Mode_switch,	KS_Multi_key,
1055 };
1056 
1057 static const keysym_t pckbd_keydesc_nl_nodead[] = {
1058 /*  pos      normal		shifted		altgr		shift-altgr */
1059     KC(13),  KS_degree,		KS_asciitilde,	KS_cedilla,
1060     KC(26),  KS_quotedbl,	KS_asciicircum,
1061     KC(40),  KS_apostrophe,	KS_grave,
1062 };
1063 
1064 static const keysym_t pckbd_keydesc_is[] = {
1065 /*  pos      normal		shifted		altgr		shift-altgr */
1066     KC(3),   KS_2,		KS_quotedbl,
1067     KC(7),   KS_6,		KS_ampersand,
1068     KC(8),   KS_7,		KS_slash,	KS_braceleft,
1069     KC(9),   KS_8,		KS_parenleft,	KS_bracketleft,
1070     KC(10),  KS_9,		KS_parenright,	KS_bracketright,
1071     KC(11),  KS_0,		KS_equal,	KS_braceright,
1072     KC(12),  KS_odiaeresis,	KS_Odiaeresis,	KS_backslash,
1073     KC(13),  KS_minus,		KS_underscore,
1074     KC(16),  KS_q,		KS_Q,		KS_at,
1075     KC(18),  KS_e,		KS_E,
1076 						/* euro currency */
1077     KC(26),  KS_eth,
1078     KC(27),  KS_apostrophe,	KS_question,	KS_asciitilde,
1079     KC(39),  KS_ae,
1080     KC(40),  KS_dead_acute,	KS_dead_diaeresis, KS_dead_circumflex,
1081     KC(41),  KS_degree,		KS_diaeresis,
1082     KC(43),  KS_plus,		KS_asterisk,	KS_grave,
1083     KC(51),  KS_comma,		KS_semicolon,
1084     KC(52),  KS_period,		KS_colon,
1085     KC(53),  KS_thorn,
1086     KC(86),  KS_less,		KS_greater,	KS_bar,
1087     KC(184), KS_Mode_switch,	KS_Multi_key,
1088 };
1089 
1090 static const keysym_t pckbd_keydesc_is_nodead[] = {
1091 /*  pos      normal		shifted		altgr		shift-altgr */
1092     KC(40),  KS_acute,		KS_diaeresis,	KS_asciicircum,
1093 };
1094 
1095 static const keysym_t pckbd_keydesc_ee[] = {
1096 /*  pos      normal		shifted		altgr		shift-altgr */
1097     KC(3),   KS_2,		KS_quotedbl,	KS_at,
1098     KC(4),   KS_3,		KS_numbersign,	KS_sterling,
1099     KC(5),   KS_4,		KS_currency,	KS_dollar,
1100     KC(7),   KS_6,		KS_ampersand,
1101     KC(8),   KS_7,		KS_slash,	KS_braceleft,
1102     KC(9),   KS_8,		KS_parenleft,	KS_bracketleft,
1103     KC(10),  KS_9,		KS_parenright,	KS_bracketright,
1104     KC(11),  KS_0,		KS_equal,	KS_braceright,
1105     KC(12),  KS_plus,		KS_question,	KS_backslash,
1106     KC(13),  KS_dead_acute,	KS_dead_grave,
1107     KC(26),  KS_udiaeresis,
1108     KC(27),  KS_otilde,		KS_Otilde,	KS_section,
1109     KC(31),  KS_s,		KS_S,		KS_L2_scaron,	KS_L2_Scaron,
1110     KC(39),  KS_odiaeresis,
1111     KC(40),  KS_adiaeresis,	KS_Adiaeresis,	KS_dead_circumflex,
1112     KC(41),  KS_dead_caron,	KS_dead_tilde,
1113     KC(43),  KS_apostrophe,	KS_asterisk,	KS_onehalf,
1114     KC(44),  KS_z,		KS_Z,		KS_L2_zcaron,	KS_L2_Zcaron,
1115     KC(51),  KS_comma,		KS_semicolon,
1116     KC(52),  KS_period,		KS_colon,
1117     KC(53),  KS_minus,		KS_underscore,
1118     KC(86),  KS_less,		KS_greater,	KS_bar,		KS_brokenbar,
1119     KC(184), KS_Mode_switch,	KS_Multi_key,
1120 };
1121 
1122 static const keysym_t pckbd_keydesc_ee_nodead[] = {
1123 /*  pos      normal		shifted		altgr		shift-altgr */
1124     KC(13),  KS_apostrophe,	KS_grave,
1125     KC(40),  KS_adiaeresis,	KS_Adiaeresis,	KS_asciicircum,
1126     KC(41),  KS_L2_caron,	KS_asciitilde,
1127 };
1128 
1129 #endif	/* WSKBD_NO_INTL_LAYOUTS */
1130 
1131 #define KBD_MAP(name, base, map) \
1132 			{ name, base, sizeof(map)/sizeof(keysym_t), map }
1133 
1134 const struct wscons_keydesc pckbd_keydesctab[] = {
1135 	KBD_MAP(KB_US,			0,	pckbd_keydesc_us),
1136 #if !defined(WSKBD_NO_INTL_LAYOUTS)
1137 	KBD_MAP(KB_DE,			KB_US,	pckbd_keydesc_de),
1138 	KBD_MAP(KB_DE | KB_NODEAD,	KB_DE,	pckbd_keydesc_de_nodead),
1139 	KBD_MAP(KB_FR,			KB_US,	pckbd_keydesc_fr),
1140 	KBD_MAP(KB_FR | KB_DVORAK,	KB_US,	pckbd_keydesc_fr_dvorak_bepo),
1141 	KBD_MAP(KB_DK,			KB_US,	pckbd_keydesc_dk),
1142 	KBD_MAP(KB_DK | KB_NODEAD,	KB_DK,	pckbd_keydesc_dk_nodead),
1143 	KBD_MAP(KB_IT,			KB_US,	pckbd_keydesc_it),
1144 	KBD_MAP(KB_UK,			KB_US,	pckbd_keydesc_uk),
1145 	KBD_MAP(KB_JP,			KB_US,	pckbd_keydesc_jp),
1146 	KBD_MAP(KB_SV,			KB_DK,	pckbd_keydesc_sv),
1147 	KBD_MAP(KB_SV | KB_NODEAD,	KB_SV,	pckbd_keydesc_sv_nodead),
1148 	KBD_MAP(KB_NO,			KB_DK,	pckbd_keydesc_no),
1149 	KBD_MAP(KB_NO | KB_NODEAD,	KB_NO,	pckbd_keydesc_no_nodead),
1150 	KBD_MAP(KB_US | KB_DECLK,	KB_US,	pckbd_keydesc_us_declk),
1151 	KBD_MAP(KB_US | KB_DVORAK,	KB_US,	pckbd_keydesc_us_dvorak),
1152 	KBD_MAP(KB_US | KB_COLEMAK,	KB_US,	pckbd_keydesc_us_colemak),
1153 	KBD_MAP(KB_US | KB_SWAPCTRLCAPS, KB_US,	pckbd_keydesc_swapctrlcaps),
1154 	KBD_MAP(KB_US | KB_IOPENER,	KB_US,	pckbd_keydesc_iopener),
1155 	KBD_MAP(KB_UK | KB_SWAPCTRLCAPS, KB_UK,	pckbd_keydesc_swapctrlcaps),
1156 	KBD_MAP(KB_JP | KB_SWAPCTRLCAPS, KB_JP,	pckbd_keydesc_swapctrlcaps),
1157 	KBD_MAP(KB_FR | KB_SWAPCTRLCAPS, KB_FR,	pckbd_keydesc_swapctrlcaps),
1158 	KBD_MAP(KB_FR | KB_DVORAK | KB_SWAPCTRLCAPS,	KB_FR | KB_DVORAK,
1159 		pckbd_keydesc_swapctrlcaps),
1160 	KBD_MAP(KB_BE | KB_SWAPCTRLCAPS, KB_BE,	pckbd_keydesc_swapctrlcaps),
1161 	KBD_MAP(KB_US | KB_DVORAK | KB_SWAPCTRLCAPS,	KB_US | KB_DVORAK,
1162 		pckbd_keydesc_swapctrlcaps),
1163 	KBD_MAP(KB_US | KB_COLEMAK | KB_SWAPCTRLCAPS,	KB_US | KB_COLEMAK,
1164 		pckbd_keydesc_swapctrlcaps),
1165 	KBD_MAP(KB_US | KB_IOPENER | KB_SWAPCTRLCAPS,	KB_US | KB_IOPENER,
1166 		pckbd_keydesc_swapctrlcaps),
1167 	KBD_MAP(KB_ES,			KB_US,	pckbd_keydesc_es),
1168 	KBD_MAP(KB_BE,			KB_US,	pckbd_keydesc_be),
1169 	KBD_MAP(KB_RU,			KB_US,	pckbd_keydesc_ru),
1170 	KBD_MAP(KB_UA,			KB_US,	pckbd_keydesc_ua),
1171 	KBD_MAP(KB_SG,			KB_US,	pckbd_keydesc_sg),
1172 	KBD_MAP(KB_SG | KB_NODEAD,	KB_SG,	pckbd_keydesc_sg_nodead),
1173 	KBD_MAP(KB_SF,			KB_SG,	pckbd_keydesc_sf),
1174 	KBD_MAP(KB_SF | KB_NODEAD,	KB_SF,	pckbd_keydesc_sg_nodead),
1175 	KBD_MAP(KB_PT,			KB_US,	pckbd_keydesc_pt),
1176 	KBD_MAP(KB_LT,			KB_US,	pckbd_keydesc_lt),
1177 	KBD_MAP(KB_LA,			KB_US,	pckbd_keydesc_la),
1178 	KBD_MAP(KB_BR,			KB_US,	pckbd_keydesc_br),
1179 	KBD_MAP(KB_TR,			KB_US,	pckbd_keydesc_tr),
1180 	KBD_MAP(KB_TR | KB_NODEAD,	KB_TR,	pckbd_keydesc_tr_nodead),
1181 	KBD_MAP(KB_PL,			KB_US,	pckbd_keydesc_pl),
1182 	KBD_MAP(KB_HU,			KB_US,	pckbd_keydesc_hu),
1183 	KBD_MAP(KB_SI,			KB_US,	pckbd_keydesc_si),
1184 	KBD_MAP(KB_CF,			KB_US, 	pckbd_keydesc_cf),
1185 	KBD_MAP(KB_CF | KB_NODEAD,	KB_CF,	pckbd_keydesc_cf_nodead),
1186 	KBD_MAP(KB_LV,			KB_US,	pckbd_keydesc_lv),
1187 	KBD_MAP(KB_NL,			KB_US, 	pckbd_keydesc_nl),
1188 	KBD_MAP(KB_NL | KB_NODEAD,	KB_NL,	pckbd_keydesc_nl_nodead),
1189 	KBD_MAP(KB_IS,			KB_US, 	pckbd_keydesc_is),
1190 	KBD_MAP(KB_IS | KB_NODEAD,	KB_IS, 	pckbd_keydesc_is_nodead),
1191 	KBD_MAP(KB_EE,			KB_US,	pckbd_keydesc_ee),
1192 	KBD_MAP(KB_EE | KB_NODEAD,	KB_EE,	pckbd_keydesc_ee_nodead),
1193 #endif	/* WSKBD_NO_INTL_LAYOUTS */
1194 	{0, 0, 0, 0}
1195 };
1196 
1197 #undef KBD_MAP
1198 #undef KC
1199