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