xref: /openbsd/sys/dev/sun/sunkbdmap.c (revision 7c772976)
1*7c772976Snicm /*	$OpenBSD: sunkbdmap.c,v 1.7 2023/01/23 09:36:40 nicm Exp $	*/
2e45e36eeSmiod 
3e45e36eeSmiod /*
4e45e36eeSmiod  * Copyright (c) 2002, 2003 Miodrag Vallat.
5e45e36eeSmiod  * Copyright (c) 2002 Jason L. Wright (jason@thought.net)
6e45e36eeSmiod  * All rights reserved.
7e45e36eeSmiod  *
8e45e36eeSmiod  * Redistribution and use in source and binary forms, with or without
9e45e36eeSmiod  * modification, are permitted provided that the following conditions
10e45e36eeSmiod  * are met:
11e45e36eeSmiod  * 1. Redistributions of source code must retain the above copyright
12e45e36eeSmiod  *    notice, this list of conditions and the following disclaimer.
13e45e36eeSmiod  * 2. Redistributions in binary form must reproduce the above copyright
14e45e36eeSmiod  *    notice, this list of conditions and the following disclaimer in the
15e45e36eeSmiod  *    documentation and/or other materials provided with the distribution.
16e45e36eeSmiod  *
17e45e36eeSmiod  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18e45e36eeSmiod  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19e45e36eeSmiod  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20e45e36eeSmiod  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
21e45e36eeSmiod  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22e45e36eeSmiod  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23e45e36eeSmiod  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24e45e36eeSmiod  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
25e45e36eeSmiod  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26e45e36eeSmiod  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27e45e36eeSmiod  * POSSIBILITY OF SUCH DAMAGE.
28e45e36eeSmiod  *
29e45e36eeSmiod  * Effort sponsored in part by the Defense Advanced Research Projects
30e45e36eeSmiod  * Agency (DARPA) and Air Force Research Laboratory, Air Force
31e45e36eeSmiod  * Materiel Command, USAF, under agreement number F30602-01-2-0537.
32e45e36eeSmiod  *
33e45e36eeSmiod  */
34e45e36eeSmiod 
35e45e36eeSmiod #include <sys/param.h>
36e45e36eeSmiod #include <sys/systm.h>
37e45e36eeSmiod #include <sys/device.h>
38e45e36eeSmiod #include <sys/kernel.h>
39e45e36eeSmiod #include <sys/timeout.h>
40e45e36eeSmiod 
41e45e36eeSmiod #include <dev/wscons/wsconsio.h>
42e45e36eeSmiod #include <dev/wscons/wskbdvar.h>
43e45e36eeSmiod #include <dev/wscons/wsksymdef.h>
44e45e36eeSmiod #include <dev/wscons/wsksymvar.h>
45e45e36eeSmiod 
46e45e36eeSmiod #include <dev/sun/sunkbdreg.h>
47e45e36eeSmiod #include <dev/sun/sunkbdvar.h>
48e45e36eeSmiod 
498ff6df28Smiod #ifdef WSDISPLAY_COMPAT_RAWKBD
508ff6df28Smiod #include <dev/wscons/wskbdraw.h>
518ff6df28Smiod 
528ff6df28Smiod /*
538ff6df28Smiod  * Translate Sun keycodes to US keyboard XT scancodes, for proper
548ff6df28Smiod  * X11-over-wsmux operation.
558ff6df28Smiod  */
568ff6df28Smiod const u_int8_t sunkbd_rawmap[0x80] = {
578ff6df28Smiod 	RAWKEY_Null,
588ff6df28Smiod 	RAWKEY_L1,
598ff6df28Smiod 	RAWKEY_AudioLower,
608ff6df28Smiod 	RAWKEY_L2,
618ff6df28Smiod 	RAWKEY_AudioRaise,
628ff6df28Smiod 	RAWKEY_f1,
638ff6df28Smiod 	RAWKEY_f2,
648ff6df28Smiod 	RAWKEY_f10,
658ff6df28Smiod 	RAWKEY_f3,
668ff6df28Smiod 	RAWKEY_f11,
678ff6df28Smiod 	RAWKEY_f4,
688ff6df28Smiod 	RAWKEY_f12,
698ff6df28Smiod 	RAWKEY_f5,
708ff6df28Smiod 	RAWKEY_Alt_R,
718ff6df28Smiod 	RAWKEY_f6,
728ff6df28Smiod 	RAWKEY_Null,
738ff6df28Smiod 	RAWKEY_f7,
748ff6df28Smiod 	RAWKEY_f8,
758ff6df28Smiod 	RAWKEY_f9,
768ff6df28Smiod 	RAWKEY_Alt_L,
778ff6df28Smiod 	RAWKEY_Up,
788ff6df28Smiod 	RAWKEY_Pause,
798ff6df28Smiod 	RAWKEY_Print_Screen,
808ff6df28Smiod 	RAWKEY_Hold_Screen,
818ff6df28Smiod 	RAWKEY_Left,
828ff6df28Smiod 	RAWKEY_L3,
838ff6df28Smiod 	RAWKEY_L4,
848ff6df28Smiod 	RAWKEY_Down,
858ff6df28Smiod 	RAWKEY_Right,
868ff6df28Smiod 	RAWKEY_Escape,
878ff6df28Smiod 	RAWKEY_1,
888ff6df28Smiod 	RAWKEY_2,
898ff6df28Smiod 	RAWKEY_3,
908ff6df28Smiod 	RAWKEY_4,
918ff6df28Smiod 	RAWKEY_5,
928ff6df28Smiod 	RAWKEY_6,
938ff6df28Smiod 	RAWKEY_7,
948ff6df28Smiod 	RAWKEY_8,
958ff6df28Smiod 	RAWKEY_9,
968ff6df28Smiod 	RAWKEY_0,
978ff6df28Smiod 	RAWKEY_minus,
988ff6df28Smiod 	RAWKEY_equal,
998ff6df28Smiod 	RAWKEY_grave,
1008ff6df28Smiod 	RAWKEY_BackSpace,
1018ff6df28Smiod 	RAWKEY_Insert,
102a4e5462dSmiod 	RAWKEY_KP_Equal,	/* type 4 only */
1038ff6df28Smiod 	RAWKEY_KP_Divide,
1048ff6df28Smiod 	RAWKEY_KP_Multiply,
1058ff6df28Smiod 	RAWKEY_Null,
1068ff6df28Smiod 	RAWKEY_L5,
1078ff6df28Smiod 	RAWKEY_KP_Delete,
1088ff6df28Smiod 	RAWKEY_L6,
1098ff6df28Smiod 	RAWKEY_Home,
1108ff6df28Smiod 	RAWKEY_Tab,
1118ff6df28Smiod 	RAWKEY_q,
1128ff6df28Smiod 	RAWKEY_w,
1138ff6df28Smiod 	RAWKEY_e,
1148ff6df28Smiod 	RAWKEY_r,
1158ff6df28Smiod 	RAWKEY_t,
1168ff6df28Smiod 	RAWKEY_y,
1178ff6df28Smiod 	RAWKEY_u,
1188ff6df28Smiod 	RAWKEY_i,
1198ff6df28Smiod 	RAWKEY_o,
1208ff6df28Smiod 	RAWKEY_p,
1218ff6df28Smiod 	RAWKEY_bracketleft,
1228ff6df28Smiod 	RAWKEY_bracketright,
1238ff6df28Smiod 	RAWKEY_Delete,
12487722ce9Smiod 	RAWKEY_Compose,
1258ff6df28Smiod 	RAWKEY_KP_Home,
1268ff6df28Smiod 	RAWKEY_KP_Up,
1278ff6df28Smiod 	RAWKEY_KP_Prior,
1288ff6df28Smiod 	RAWKEY_KP_Subtract,
1298ff6df28Smiod 	RAWKEY_L7,
1308ff6df28Smiod 	RAWKEY_L8,
1318ff6df28Smiod 	RAWKEY_End,
1328ff6df28Smiod 	RAWKEY_Null,
1338ff6df28Smiod 	RAWKEY_Control_L,
1348ff6df28Smiod 	RAWKEY_a,
1358ff6df28Smiod 	RAWKEY_s,
1368ff6df28Smiod 	RAWKEY_d,
1378ff6df28Smiod 	RAWKEY_f,
1388ff6df28Smiod 	RAWKEY_g,
1398ff6df28Smiod 	RAWKEY_h,
1408ff6df28Smiod 	RAWKEY_j,
1418ff6df28Smiod 	RAWKEY_k,
1428ff6df28Smiod 	RAWKEY_l,
1438ff6df28Smiod 	RAWKEY_semicolon,
1448ff6df28Smiod 	RAWKEY_apostrophe,
1458ff6df28Smiod 	RAWKEY_backslash,
1468ff6df28Smiod 	RAWKEY_Return,
1478ff6df28Smiod 	RAWKEY_KP_Enter,
1488ff6df28Smiod 	RAWKEY_KP_Left,
1498ff6df28Smiod 	RAWKEY_KP_Begin,
1508ff6df28Smiod 	RAWKEY_KP_Right,
1518ff6df28Smiod 	RAWKEY_KP_Insert,
1528ff6df28Smiod 	RAWKEY_L9,
1538ff6df28Smiod 	RAWKEY_Prior,
1548ff6df28Smiod 	RAWKEY_L10,
1558ff6df28Smiod 	RAWKEY_Num_Lock,
1568ff6df28Smiod 	RAWKEY_Shift_L,
1578ff6df28Smiod 	RAWKEY_z,
1588ff6df28Smiod 	RAWKEY_x,
1598ff6df28Smiod 	RAWKEY_c,
1608ff6df28Smiod 	RAWKEY_v,
1618ff6df28Smiod 	RAWKEY_b,
1628ff6df28Smiod 	RAWKEY_n,
1638ff6df28Smiod 	RAWKEY_m,
1648ff6df28Smiod 	RAWKEY_comma,
1658ff6df28Smiod 	RAWKEY_period,
1668ff6df28Smiod 	RAWKEY_slash,
1678ff6df28Smiod 	RAWKEY_Shift_R,
1688ff6df28Smiod 	RAWKEY_Null,		/* KS_Linefeed on type 3/4 */
1698ff6df28Smiod 	RAWKEY_KP_End,
1708ff6df28Smiod 	RAWKEY_KP_Down,
1718ff6df28Smiod 	RAWKEY_KP_Next,
1728ff6df28Smiod 	RAWKEY_Null,
1738ff6df28Smiod 	RAWKEY_Null,
1748ff6df28Smiod 	RAWKEY_Null,
1758ff6df28Smiod 	RAWKEY_Help,
1768ff6df28Smiod 	RAWKEY_Caps_Lock,
1778ff6df28Smiod 	RAWKEY_Meta_L,
1788ff6df28Smiod 	RAWKEY_space,
1798ff6df28Smiod 	RAWKEY_Meta_R,
1808ff6df28Smiod 	RAWKEY_Next,
1818ff6df28Smiod 	RAWKEY_Null,
1828ff6df28Smiod 	RAWKEY_KP_Add,
1838ff6df28Smiod 	RAWKEY_Null,
184a4e5462dSmiod 	RAWKEY_AudioMute	/* type 5 remapped 0x2d */
1858ff6df28Smiod };
1868ff6df28Smiod #endif
1878ff6df28Smiod 
188e45e36eeSmiod #define	KC(n)	KS_KEYCODE(n)
189e45e36eeSmiod 
190e45e36eeSmiod /* 000/021/022 US English type 4/5 keyboard */
191e45e36eeSmiod const keysym_t sunkbd_keydesc_us[] = {
192e45e36eeSmiod     KC(0x01), KS_Cmd,
193e45e36eeSmiod     KC(0x02), KS_Cmd_BrightnessDown,
194e45e36eeSmiod     KC(0x03),				KS_Again,
195e45e36eeSmiod     KC(0x04), KS_Cmd_BrightnessUp,
196e45e36eeSmiod     KC(0x05),				KS_f1,
197e45e36eeSmiod     KC(0x06),				KS_f2,
198e45e36eeSmiod     KC(0x07),				KS_f10,
199e45e36eeSmiod     KC(0x08),				KS_f3,
200e45e36eeSmiod     KC(0x09),				KS_f11,
201e45e36eeSmiod     KC(0x0a),				KS_f4,
202e45e36eeSmiod     KC(0x0b),				KS_f12,
203e45e36eeSmiod     KC(0x0c),				KS_f5,
204e45e36eeSmiod     KC(0x0d),				KS_Alt_R,
205e45e36eeSmiod     KC(0x0e),				KS_f6,
206e45e36eeSmiod     KC(0x10),				KS_f7,
207e45e36eeSmiod     KC(0x11),				KS_f8,
208e45e36eeSmiod     KC(0x12),				KS_f9,
209e45e36eeSmiod     KC(0x13),				KS_Alt_L,
210e45e36eeSmiod     KC(0x14),				KS_Up,
211e45e36eeSmiod     KC(0x15),				KS_Pause,
212e45e36eeSmiod     KC(0x16),				KS_Print_Screen,
213e45e36eeSmiod     KC(0x17),				KS_Hold_Screen,
214e45e36eeSmiod     KC(0x18),				KS_Left,
215e45e36eeSmiod     KC(0x19),				KS_Props,
216e45e36eeSmiod     KC(0x1a),				KS_Undo,
217e45e36eeSmiod     KC(0x1b),				KS_Down,
218e45e36eeSmiod     KC(0x1c),				KS_Right,
219e45e36eeSmiod     KC(0x1d),				KS_Escape,
220e45e36eeSmiod     KC(0x1e),				KS_1,		KS_exclam,
221e45e36eeSmiod     KC(0x1f),				KS_2,		KS_at,
222e45e36eeSmiod     KC(0x20),				KS_3,		KS_numbersign,
223e45e36eeSmiod     KC(0x21),				KS_4,		KS_dollar,
224e45e36eeSmiod     KC(0x22),				KS_5,		KS_percent,
225e45e36eeSmiod     KC(0x23),				KS_6,		KS_asciicircum,
226e45e36eeSmiod     KC(0x24),				KS_7,		KS_ampersand,
227e45e36eeSmiod     KC(0x25),				KS_8,		KS_asterisk,
228e45e36eeSmiod     KC(0x26),				KS_9,		KS_parenleft,
229e45e36eeSmiod     KC(0x27),				KS_0,		KS_parenright,
230e45e36eeSmiod     KC(0x28),				KS_minus,	KS_underscore,
231e45e36eeSmiod     KC(0x29),				KS_equal,	KS_plus,
232e45e36eeSmiod     KC(0x2a),				KS_grave,	KS_asciitilde,
233e45e36eeSmiod     KC(0x2b),				KS_Delete,
234e45e36eeSmiod     KC(0x2c),				KS_Insert,
235a4e5462dSmiod     KC(0x2d),				KS_KP_Equal,	/* type 4 */
236e45e36eeSmiod     KC(0x2e),				KS_KP_Divide,
237e45e36eeSmiod     KC(0x2f),				KS_KP_Multiply,
238e45e36eeSmiod     KC(0x31),				KS_Front,
239e45e36eeSmiod     KC(0x32),				KS_KP_Delete,	KS_KP_Decimal,
240e45e36eeSmiod     KC(0x33),				KS_Copy,
241e45e36eeSmiod     KC(0x34),				KS_Home,
242*7c772976Snicm     KC(0x35),				KS_Tab,		KS_Backtab,
243e45e36eeSmiod     KC(0x36),				KS_q,
244e45e36eeSmiod     KC(0x37),				KS_w,
245e45e36eeSmiod     KC(0x38),				KS_e,
246e45e36eeSmiod     KC(0x39),				KS_r,
247e45e36eeSmiod     KC(0x3a),				KS_t,
248e45e36eeSmiod     KC(0x3b),				KS_y,
249e45e36eeSmiod     KC(0x3c),				KS_u,
250e45e36eeSmiod     KC(0x3d),				KS_i,
251e45e36eeSmiod     KC(0x3e),				KS_o,
252e45e36eeSmiod     KC(0x3f),				KS_p,
253e45e36eeSmiod     KC(0x40),				KS_bracketleft,	KS_braceleft,
254e45e36eeSmiod     KC(0x41),				KS_bracketright,KS_braceright,
255e45e36eeSmiod     KC(0x42),				KS_Delete,
256e45e36eeSmiod     KC(0x43),				KS_Multi_key,
257e45e36eeSmiod     KC(0x44),				KS_KP_Home,	KS_KP_7,
258e45e36eeSmiod     KC(0x45),				KS_KP_Up,	KS_KP_8,
259e45e36eeSmiod     KC(0x46),				KS_KP_Prior,	KS_KP_9,
260e45e36eeSmiod     KC(0x47),				KS_KP_Subtract,
261e45e36eeSmiod     KC(0x48),				KS_Open,
262e45e36eeSmiod     KC(0x49),				KS_Paste,
263e45e36eeSmiod     KC(0x4a),				KS_End,
264e45e36eeSmiod     KC(0x4c),				KS_Control_L,
265e45e36eeSmiod     KC(0x4d), KS_Cmd_Debugger,		KS_a,
266e45e36eeSmiod     KC(0x4e),				KS_s,
267e45e36eeSmiod     KC(0x4f),				KS_d,
268e45e36eeSmiod     KC(0x50),				KS_f,
269e45e36eeSmiod     KC(0x51),				KS_g,
270e45e36eeSmiod     KC(0x52),				KS_h,
271e45e36eeSmiod     KC(0x53),				KS_j,
272e45e36eeSmiod     KC(0x54),				KS_k,
273e45e36eeSmiod     KC(0x55),				KS_l,
274e45e36eeSmiod     KC(0x56),				KS_semicolon,	KS_colon,
275e45e36eeSmiod     KC(0x57),				KS_apostrophe,	KS_quotedbl,
276e45e36eeSmiod     KC(0x58),				KS_backslash,	KS_bar,
277e45e36eeSmiod     KC(0x59),				KS_Return,
278e45e36eeSmiod     KC(0x5a),				KS_KP_Enter,
279e45e36eeSmiod     KC(0x5b),				KS_KP_Left,	KS_KP_4,
280e45e36eeSmiod     KC(0x5c),				KS_KP_Begin,	KS_KP_5,
281e45e36eeSmiod     KC(0x5d),				KS_KP_Right,	KS_KP_6,
282e45e36eeSmiod     KC(0x5e),				KS_KP_Insert,	KS_KP_0,
283e45e36eeSmiod     KC(0x5f),				KS_Find,
284e45e36eeSmiod     KC(0x60),				KS_Prior,
285e45e36eeSmiod     KC(0x61),				KS_Cut,
286e45e36eeSmiod     KC(0x62),				KS_Num_Lock,
287e45e36eeSmiod     KC(0x63),				KS_Shift_L,
288e45e36eeSmiod     KC(0x64),				KS_z,
289e45e36eeSmiod     KC(0x65),				KS_x,
290e45e36eeSmiod     KC(0x66),				KS_c,
291e45e36eeSmiod     KC(0x67),				KS_v,
292e45e36eeSmiod     KC(0x68),				KS_b,
293e45e36eeSmiod     KC(0x69),				KS_n,
294e45e36eeSmiod     KC(0x6a),				KS_m,
295e45e36eeSmiod     KC(0x6b),				KS_comma,	KS_less,
296e45e36eeSmiod     KC(0x6c),				KS_period,	KS_greater,
297e45e36eeSmiod     KC(0x6d),				KS_slash,	KS_question,
298e45e36eeSmiod     KC(0x6e),				KS_Shift_R,
299e45e36eeSmiod     KC(0x6f),				KS_Linefeed,
300e45e36eeSmiod     KC(0x70),				KS_KP_End,	KS_KP_1,
301e45e36eeSmiod     KC(0x71),				KS_KP_Down,	KS_KP_2,
302e45e36eeSmiod     KC(0x72),				KS_KP_Next,	KS_KP_3,
303e45e36eeSmiod     KC(0x76),				KS_Help,
304e45e36eeSmiod     KC(0x77),				KS_Caps_Lock,
305e45e36eeSmiod     KC(0x78),				KS_Meta_L,
306e45e36eeSmiod     KC(0x79),				KS_space,
307e45e36eeSmiod     KC(0x7a),				KS_Meta_R,
308e45e36eeSmiod     KC(0x7b),				KS_Next,
309e45e36eeSmiod     KC(0x7d),				KS_KP_Add,
310a4e5462dSmiod     KC(0x7f),				KS_AudioMute,	/* type 5 KC(0x2d) */
311e45e36eeSmiod };
312e45e36eeSmiod 
313e45e36eeSmiod /* 002 French/Belgian type 4 keyboard */
314e45e36eeSmiod const keysym_t sunkbd_keydesc_befr[] = {
315e45e36eeSmiod     KC(0x0d),		KS_Caps_Lock,
316e45e36eeSmiod     KC(0x0f),		KS_bracketright,KS_braceright,	KS_guillemotright,
317e45e36eeSmiod     KC(0x1e),		KS_ampersand,	KS_1,
318e45e36eeSmiod     KC(0x1f),		KS_eacute,	KS_2,		KS_twosuperior,
319e45e36eeSmiod     KC(0x20),		KS_quotedbl,	KS_3,		KS_threesuperior,
320e45e36eeSmiod     KC(0x21),		KS_apostrophe,	KS_4,
321e45e36eeSmiod     KC(0x22),		KS_parenleft,	KS_5,
322e45e36eeSmiod     KC(0x23),		KS_section,	KS_6,
323e45e36eeSmiod     KC(0x24),		KS_egrave,	KS_7,
324e45e36eeSmiod     KC(0x25),		KS_exclam,	KS_8,		KS_sterling,
325e45e36eeSmiod     KC(0x26),		KS_ccedilla,	KS_9,		KS_backslash,
326e45e36eeSmiod     KC(0x27),		KS_agrave,	KS_0,
327e45e36eeSmiod     KC(0x28),		KS_parenright,	KS_degree,	KS_asciitilde,
328e45e36eeSmiod     KC(0x29),		KS_minus,	KS_underscore,	KS_numbersign,
329e45e36eeSmiod     KC(0x2a),		KS_asterisk,	KS_bar,		KS_currency,
330e45e36eeSmiod     KC(0x36),		KS_a,
331e45e36eeSmiod     KC(0x37),		KS_z,
332e45e36eeSmiod     KC(0x40),		KS_dead_circumflex,KS_dead_diaeresis,
333e45e36eeSmiod     KC(0x41),		KS_grave,	KS_dollar,	KS_at,
334e45e36eeSmiod     KC(0x4d), KS_Cmd_Debugger,	KS_q,
335e45e36eeSmiod     KC(0x56),		KS_m,		KS_M,		KS_mu,
336e45e36eeSmiod     KC(0x57),		KS_ugrave,	KS_percent,
337e45e36eeSmiod     KC(0x58),		KS_bracketleft,	KS_braceleft,	KS_guillemotleft,
338e45e36eeSmiod     KC(0x64),		KS_w,
339e45e36eeSmiod     KC(0x6a),		KS_comma,	KS_question,
340e45e36eeSmiod     KC(0x6b),		KS_semicolon,	KS_period,
341e45e36eeSmiod     KC(0x6c),		KS_colon,	KS_slash,
342e45e36eeSmiod     KC(0x6d),		KS_equal,	KS_plus,
343e45e36eeSmiod     KC(0x77),		KS_Mode_switch,
344e45e36eeSmiod     KC(0x7c),		KS_less,	KS_greater,
345e45e36eeSmiod };
346e45e36eeSmiod 
347e45e36eeSmiod /* 023 French type 5 keyboard */
348e45e36eeSmiod const keysym_t sunkbd5_keydesc_fr[] = {
349e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
350e45e36eeSmiod     KC(0x1e),		KS_ampersand,	KS_1,
351e45e36eeSmiod     KC(0x1f),		KS_eacute,	KS_2,		KS_asciitilde,
352e45e36eeSmiod     KC(0x20),		KS_quotedbl,	KS_3,		KS_numbersign,
353e45e36eeSmiod     KC(0x21),		KS_apostrophe,	KS_4,		KS_braceleft,
354e45e36eeSmiod     KC(0x22),		KS_parenleft,	KS_5,		KS_bracketleft,
355e45e36eeSmiod     KC(0x23),		KS_minus,	KS_6,		KS_bar,
356e45e36eeSmiod     KC(0x24),		KS_egrave,	KS_7,		KS_grave,
357e45e36eeSmiod     KC(0x25),		KS_underscore,	KS_8,		KS_backslash,
358e45e36eeSmiod     KC(0x26),		KS_ccedilla,	KS_9,		KS_asciicircum,
359e45e36eeSmiod     KC(0x27),		KS_agrave,	KS_0,		KS_at,
360e45e36eeSmiod     KC(0x28),		KS_parenright,	KS_degree,	KS_bracketright,
361e45e36eeSmiod     KC(0x29),		KS_equal,	KS_plus,	KS_braceright,
362e45e36eeSmiod     KC(0x2a),		KS_twosuperior,
363e45e36eeSmiod     KC(0x36),		KS_a,
364e45e36eeSmiod     KC(0x37),		KS_z,
365e45e36eeSmiod     KC(0x40),		KS_dead_circumflex,KS_dead_diaeresis,
366e45e36eeSmiod     KC(0x41),		KS_dollar,	KS_sterling,	KS_currency,
367e45e36eeSmiod     KC(0x4d), KS_Cmd_Debugger,	KS_q,
368e45e36eeSmiod     KC(0x56),		KS_m,
369e45e36eeSmiod     KC(0x57),		KS_ugrave,	KS_percent,
370e45e36eeSmiod     KC(0x58),		KS_asterisk,	KS_mu,
371e45e36eeSmiod     KC(0x64),		KS_w,
372e45e36eeSmiod     KC(0x6a),		KS_comma,	KS_question,
373e45e36eeSmiod     KC(0x6b),		KS_semicolon,	KS_period,
374e45e36eeSmiod     KC(0x6c),		KS_colon,	KS_slash,
375e45e36eeSmiod     KC(0x6d),		KS_exclam,	KS_section,
376e45e36eeSmiod     KC(0x7c),		KS_less,	KS_greater,
377e45e36eeSmiod };
378e45e36eeSmiod 
379e45e36eeSmiod /* 004 Danish type 4 keyboard */
380e45e36eeSmiod const keysym_t sunkbd_keydesc_dk[] = {
381e45e36eeSmiod     KC(0x0d),		KS_Multi_key,
382e45e36eeSmiod     KC(0x0f),		KS_asciitilde,	KS_asciicircum,
383e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
384e45e36eeSmiod     KC(0x20),		KS_3,		KS_numbersign,	KS_sterling,
385e45e36eeSmiod     KC(0x21),		KS_4,		KS_currency,	KS_dollar,
386e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,
387e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,	KS_braceleft,
388e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_bracketleft,
389e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_bracketright,
390e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_braceright,
391e45e36eeSmiod     KC(0x28),		KS_plus,	KS_question,
392e45e36eeSmiod     KC(0x29),		KS_dead_acute,	KS_dead_grave,	KS_bar,
393e45e36eeSmiod     KC(0x2a),		KS_apostrophe,	KS_asterisk,	KS_grave,
394e45e36eeSmiod     KC(0x40),		KS_aring,
395e45e36eeSmiod     KC(0x41),		KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde,
396e45e36eeSmiod     KC(0x43),		KS_Mode_switch,
397e45e36eeSmiod     KC(0x4c),		KS_Caps_Lock,
398e45e36eeSmiod     KC(0x56),		KS_ae,
399e45e36eeSmiod     KC(0x57),		KS_oslash,
400e45e36eeSmiod     KC(0x58),		KS_onehalf,	KS_section,
401e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
402e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
403e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
404e45e36eeSmiod     KC(0x77),		KS_Control_L,
405e45e36eeSmiod     KC(0x7c),		KS_less,	KS_greater,	KS_backslash,
406e45e36eeSmiod };
407e45e36eeSmiod 
408e45e36eeSmiod /* 024 Danish type 5 keyboard */
409e45e36eeSmiod const keysym_t sunkbd5_keydesc_dk[] = {
410e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
411e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
412e45e36eeSmiod     KC(0x20),		KS_3,		KS_numbersign,	KS_sterling,
413e45e36eeSmiod     KC(0x21),		KS_4,		KS_currency,	KS_dollar,
414e45e36eeSmiod     KC(0x22),		KS_5,		KS_percent,	KS_asciitilde,
415e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,	KS_asciicircum,
416e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,	KS_braceleft,
417e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_bracketleft,
418e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_bracketright,
419e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_braceright,
420e45e36eeSmiod     KC(0x28),		KS_plus,	KS_question,
421e45e36eeSmiod     KC(0x29),		KS_dead_acute,	KS_dead_grave,	KS_bar,
422e45e36eeSmiod     KC(0x2a),		KS_onehalf,	KS_asterisk,	KS_grave,
423e45e36eeSmiod     KC(0x40),		KS_aring,
424e45e36eeSmiod     KC(0x41),		KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde,
425e45e36eeSmiod     KC(0x56),		KS_ae,
426e45e36eeSmiod     KC(0x57),		KS_oslash,
427e45e36eeSmiod     KC(0x58),		KS_backslash,	KS_asterisk,	KS_grave,
428e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
429e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
430e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
431e45e36eeSmiod     KC(0x7c),		KS_less,	KS_greater,	KS_backslash,
432e45e36eeSmiod };
433e45e36eeSmiod 
434e45e36eeSmiod /* 005 German type 4 keyboard */
435e45e36eeSmiod const keysym_t sunkbd_keydesc_de[] = {
436e45e36eeSmiod     KC(0x0d),		KS_Alt_L,
437e45e36eeSmiod     KC(0x0f),		KS_bracketright,KS_braceright,	KS_guillemotright,
438e45e36eeSmiod     KC(0x13),		KS_Mode_switch,
439e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_twosuperior,
440e45e36eeSmiod     KC(0x20),		KS_3,		KS_section,	KS_threesuperior,
441e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,
442e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,	KS_degree,
443e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_grave,
444e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_apostrophe,
445e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_bar,
446e45e36eeSmiod     KC(0x28),		KS_ssharp,	KS_question,	KS_backslash,
447e45e36eeSmiod     KC(0x29),		KS_dead_acute,	KS_dead_grave,
448e45e36eeSmiod     KC(0x2a),		KS_numbersign,	KS_asciicircum,	KS_at,
449e45e36eeSmiod     KC(0x3b),		KS_z,
450e45e36eeSmiod     KC(0x40),		KS_udiaeresis,
45157e094dbSshadchin     KC(0x41),		KS_plus,	KS_asterisk,	KS_asciitilde,
452e45e36eeSmiod     KC(0x4c),		KS_Caps_Lock,
453e45e36eeSmiod     KC(0x56),		KS_odiaeresis,
454e45e36eeSmiod     KC(0x57),		KS_adiaeresis,
455e45e36eeSmiod     KC(0x58),		KS_bracketleft,	KS_braceleft,	KS_guillemotleft,
456e45e36eeSmiod     KC(0x64),		KS_y,
457e45e36eeSmiod     KC(0x6a),		KS_m,		KS_M,		KS_mu,
458e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
459e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
460e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
461e45e36eeSmiod     KC(0x77),		KS_Control_L,
462e45e36eeSmiod     KC(0x7c),		KS_less,	KS_greater,
463e45e36eeSmiod };
464e45e36eeSmiod 
465e45e36eeSmiod /* 025 German type 5 keyboard */
466e45e36eeSmiod const keysym_t sunkbd5_keydesc_de[] = {
467e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
468e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_twosuperior,
469e45e36eeSmiod     KC(0x20),		KS_3,		KS_section,	KS_threesuperior,
470e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,
471e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,	KS_braceleft,
472e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_bracketleft,
473e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_bracketright,
474e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_braceright,
475e45e36eeSmiod     KC(0x28),		KS_ssharp,	KS_question,	KS_backslash,
476e45e36eeSmiod     KC(0x29),		KS_dead_acute,	KS_dead_grave,
477e45e36eeSmiod     KC(0x2a),		KS_asciicircum,	KS_degree,
478e45e36eeSmiod     KC(0x36),		KS_q,		KS_Q,		KS_at,
479e45e36eeSmiod     KC(0x3b),		KS_z,
480e45e36eeSmiod     KC(0x40),		KS_udiaeresis,
48157e094dbSshadchin     KC(0x41),		KS_plus,	KS_asterisk,	KS_asciitilde,
482e45e36eeSmiod     KC(0x56),		KS_odiaeresis,
483e45e36eeSmiod     KC(0x57),		KS_adiaeresis,
484e45e36eeSmiod     KC(0x58),		KS_numbersign,	KS_apostrophe,	KS_grave,
485e45e36eeSmiod     KC(0x64),		KS_y,
486e45e36eeSmiod     KC(0x6a),		KS_m,		KS_M,		KS_mu,
487e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
488e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
489e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
490e45e36eeSmiod     KC(0x7c),		KS_less,	KS_greater,	KS_bar,
491e45e36eeSmiod };
492e45e36eeSmiod 
493e45e36eeSmiod /* 006 Italian type 4 keyboard */
494e45e36eeSmiod const keysym_t sunkbd_keydesc_it[] = {
495e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
496e45e36eeSmiod     KC(0x0f),		KS_bracketright,KS_braceright,	KS_guillemotright,
497e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_twosuperior,
498e45e36eeSmiod     KC(0x20),		KS_3,		KS_sterling,	KS_threesuperior,
499e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,	KS_notsign,
500e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,
501e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,
502e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_backslash,
503e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_bar,
504e45e36eeSmiod     KC(0x28),		KS_apostrophe,	KS_question,	KS_grave,
505e45e36eeSmiod     KC(0x29),		KS_igrave,	KS_asciicircum,
506e45e36eeSmiod     KC(0x2a),		KS_ugrave,	KS_section,
507e45e36eeSmiod     KC(0x40),		KS_egrave,	KS_eacute,
508e45e36eeSmiod     KC(0x41),		KS_plus,	KS_asterisk,	KS_asciitilde,
509e45e36eeSmiod     KC(0x4c),		KS_Caps_Lock,
510e45e36eeSmiod     KC(0x56),		KS_ograve,	KS_ccedilla,	KS_at,
511e45e36eeSmiod     KC(0x57),		KS_agrave,	KS_degree,	KS_numbersign,
512e45e36eeSmiod     KC(0x58),		KS_bracketleft,	KS_braceleft,	KS_guillemotleft,
513e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
514e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
515e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
516e45e36eeSmiod     KC(0x77),		KS_Control_L,
517e45e36eeSmiod     KC(0x7c),		KS_less,	KS_greater,
518e45e36eeSmiod };
519e45e36eeSmiod 
520e45e36eeSmiod /* 026 Italian type 5 keyboard */
521e45e36eeSmiod const keysym_t sunkbd5_keydesc_it[] = {
522e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
523e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,
524e45e36eeSmiod     KC(0x20),		KS_3,		KS_sterling,
525e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,
526e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,
527e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_braceleft,
528e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_braceright,
529e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,
530e45e36eeSmiod     KC(0x28),		KS_apostrophe,	KS_question,	KS_grave,
531e45e36eeSmiod     KC(0x29),		KS_igrave,	KS_asciicircum,
532e45e36eeSmiod     KC(0x2a),		KS_backslash,	KS_bar,
533e45e36eeSmiod     KC(0x40),		KS_egrave,	KS_eacute,	KS_bracketleft,
534e45e36eeSmiod     KC(0x41),		KS_plus,	KS_asterisk,	KS_bracketright,
535e45e36eeSmiod     KC(0x56),		KS_ograve,	KS_ccedilla,	KS_at,
536e45e36eeSmiod     KC(0x57),		KS_agrave,	KS_degree,	KS_numbersign,
537e45e36eeSmiod     KC(0x58),		KS_ugrave,	KS_section,	KS_asciitilde,
538e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
539e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
540e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
541e45e36eeSmiod     KC(0x7c),		KS_less,	KS_greater,
542e45e36eeSmiod };
543e45e36eeSmiod 
544e45e36eeSmiod /* 007 Dutch type 4 keyboard */
545e45e36eeSmiod const keysym_t sunkbd_keydesc_nl[] = {
546e45e36eeSmiod     KC(0x0d),		KS_Caps_Lock,
547e45e36eeSmiod     KC(0x0f),		KS_backslash,	KS_bar,
548e45e36eeSmiod     KC(0x1e),		KS_1,		KS_exclam,	KS_onesuperior,
549e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_twosuperior,
550e45e36eeSmiod     KC(0x20),		KS_3,		KS_numbersign,	KS_threesuperior,
551e45e36eeSmiod     KC(0x21),		KS_4,		KS_dollar,	KS_onequarter,
552e45e36eeSmiod     KC(0x22),		KS_5,		KS_percent,	KS_onehalf,
553e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,	KS_threequarters,
554e45e36eeSmiod     KC(0x24),		KS_7,		KS_underscore,	KS_sterling,
555e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_braceleft,
556e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_braceright,
557e45e36eeSmiod     KC(0x27),		KS_0,		KS_apostrophe,	KS_grave,
558e45e36eeSmiod     KC(0x28),		KS_slash,	KS_question,
559e45e36eeSmiod     KC(0x29),		KS_degree,	KS_dead_tilde,	KS_dead_abovering,
560e45e36eeSmiod     KC(0x2a),		KS_less,	KS_greater,
561e45e36eeSmiod     KC(0x40),		KS_dead_diaeresis,KS_dead_circumflex,
562e45e36eeSmiod     KC(0x41),		KS_asterisk,	KS_brokenbar,	KS_asciitilde,
563e45e36eeSmiod     KC(0x4e),		KS_s,		KS_S,		KS_ssharp,
564e45e36eeSmiod     KC(0x56),		KS_plus,	KS_plusminus,
565e45e36eeSmiod     KC(0x57),		KS_dead_acute,	KS_dead_grave,
566e45e36eeSmiod     KC(0x58),		KS_at,		KS_section,	KS_notsign,
567e45e36eeSmiod     KC(0x64),		KS_z,		KS_Z,		KS_guillemotleft,
568e45e36eeSmiod     KC(0x65),		KS_x,		KS_X,		KS_guillemotright,
569e45e36eeSmiod     KC(0x66),		KS_c,		KS_C,		KS_cent,
570e45e36eeSmiod     KC(0x6a),		KS_m,		KS_M,		KS_mu,
571e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
572e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
573e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_equal,
574e45e36eeSmiod     KC(0x77),		KS_Mode_switch,
575e45e36eeSmiod     KC(0x7d),		KS_bracketright,KS_bracketleft,
576e45e36eeSmiod };
577e45e36eeSmiod 
578e45e36eeSmiod /* 027 Dutch type 5 keyboard */
579e45e36eeSmiod const keysym_t sunkbd5_keydesc_nl[] = {
580e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
581e45e36eeSmiod     KC(0x1e),		KS_1,		KS_exclam,	KS_onesuperior,
582e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_twosuperior,
583e45e36eeSmiod     KC(0x20),		KS_3,		KS_numbersign,	KS_threesuperior,
584e45e36eeSmiod     KC(0x21),		KS_4,		KS_dollar,	KS_onequarter,
585e45e36eeSmiod     KC(0x22),		KS_5,		KS_percent,	KS_onehalf,
586e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,	KS_threequarters,
587e45e36eeSmiod     KC(0x24),		KS_7,		KS_underscore,	KS_sterling,
588e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_braceleft,
589e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_braceright,
590e45e36eeSmiod     KC(0x27),		KS_0,		KS_apostrophe,	KS_grave,
591e45e36eeSmiod     KC(0x28),		KS_slash,	KS_question,	KS_backslash,
592e45e36eeSmiod     KC(0x29),		KS_degree,	KS_dead_tilde,	KS_dead_abovering,
593e45e36eeSmiod     KC(0x2a),		KS_at,		KS_section,	KS_notsign,
594e45e36eeSmiod     KC(0x40),		KS_dead_diaeresis,KS_dead_circumflex,
595e45e36eeSmiod     KC(0x41),		KS_asterisk,	KS_bar,		KS_asciitilde,
596e45e36eeSmiod     KC(0x4e),		KS_s,		KS_S,		KS_ssharp,
597e45e36eeSmiod     KC(0x56),		KS_plus,	KS_plusminus,
598e45e36eeSmiod     KC(0x57),		KS_dead_acute,	KS_dead_grave,
599e45e36eeSmiod     KC(0x58),		KS_less,	KS_greater,	KS_asciicircum,
600e45e36eeSmiod     KC(0x64),		KS_z,		KS_Z,		KS_guillemotleft,
601e45e36eeSmiod     KC(0x65),		KS_x,		KS_X,		KS_guillemotright,
602e45e36eeSmiod     KC(0x66),		KS_c,		KS_C,		KS_cent,
603e45e36eeSmiod     KC(0x6a),		KS_m,		KS_M,		KS_mu,
604e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
605e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,	KS_hyphen,
606e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_equal,
607e45e36eeSmiod     KC(0x7d),		KS_bracketright,KS_bracketleft,	KS_brokenbar,
608e45e36eeSmiod };
609e45e36eeSmiod 
610e45e36eeSmiod /* 008 Norwegian type 4 keyboard */
611e45e36eeSmiod const keysym_t sunkbd_keydesc_no[] = {
612e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
613e45e36eeSmiod     KC(0x0f),		KS_asciitilde,	KS_asciicircum,
614e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
615e45e36eeSmiod     KC(0x20),		KS_3,		KS_numbersign,	KS_sterling,
616e45e36eeSmiod     KC(0x21),		KS_4,		KS_currency,	KS_dollar,
617e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,
618e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,	KS_braceleft,
619e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_bracketleft,
620e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_bracketright,
621e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_braceright,
622e45e36eeSmiod     KC(0x28),		KS_plus,	KS_question,
623e45e36eeSmiod     KC(0x29),		KS_backslash,	KS_dead_grave,	KS_dead_acute,
624e45e36eeSmiod     KC(0x2a),		KS_apostrophe,	KS_asterisk,	KS_grave,
625e45e36eeSmiod     KC(0x40),		KS_aring,
626e45e36eeSmiod     KC(0x41),		KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde,
627e45e36eeSmiod     KC(0x4c),		KS_Caps_Lock,
628e45e36eeSmiod     KC(0x56),		KS_oslash,
629e45e36eeSmiod     KC(0x57),		KS_ae,
630e45e36eeSmiod     KC(0x58),		KS_bar,		KS_section,
631e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
632e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
633e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
634e45e36eeSmiod     KC(0x77),		KS_Control_L,
635e45e36eeSmiod     KC(0x7d),		KS_less,	KS_greater,
636e45e36eeSmiod };
637e45e36eeSmiod 
638e45e36eeSmiod /* 028 Norwegian type 5 keyboard */
639e45e36eeSmiod const keysym_t sunkbd5_keydesc_no[] = {
640e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
641e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
642e45e36eeSmiod     KC(0x20),		KS_3,		KS_numbersign,	KS_sterling,
643e45e36eeSmiod     KC(0x21),		KS_4,		KS_currency,	KS_dollar,
644e45e36eeSmiod     KC(0x22),		KS_5,		KS_percent,	KS_asciitilde,
645e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,	KS_asciicircum,
646e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,	KS_braceleft,
647e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_bracketleft,
648e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_bracketright,
649e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_braceright,
650e45e36eeSmiod     KC(0x28),		KS_plus,	KS_question,
651e45e36eeSmiod     KC(0x29),		KS_backslash,	KS_dead_grave,	KS_dead_acute,
652e45e36eeSmiod     KC(0x2a),		KS_bar,		KS_section,
653e45e36eeSmiod     KC(0x40),		KS_aring,
654e45e36eeSmiod     KC(0x41),		KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde,
655e45e36eeSmiod     KC(0x56),		KS_oslash,
656e45e36eeSmiod     KC(0x57),		KS_ae,
657e45e36eeSmiod     KC(0x58),		KS_apostrophe,	KS_asterisk,	KS_grave,
658e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
659e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
660e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
661e45e36eeSmiod     KC(0x7d),		KS_less,	KS_greater,
662e45e36eeSmiod };
663e45e36eeSmiod 
664e45e36eeSmiod /* 009 Portuguese type 4 keyboard */
665e45e36eeSmiod const keysym_t sunkbd_keydesc_pt[] = {
666e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
667e45e36eeSmiod     KC(0x0f),		KS_bracketright,KS_braceright,	KS_guillemotright,
668e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
669e45e36eeSmiod     KC(0x20),		KS_3,		KS_numbersign,	KS_sterling,
670e45e36eeSmiod     KC(0x21),		KS_4,		KS_dollar,	KS_section,
671e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,	KS_notsign,
672e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,
673e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,
674e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_backslash,
675e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_bar,
676e45e36eeSmiod     KC(0x28),		KS_apostrophe,	KS_question,	KS_grave,
677e45e36eeSmiod     KC(0x29),		KS_exclamdown,	KS_questiondown,
678e45e36eeSmiod     KC(0x2a),		KS_dead_tilde,	KS_dead_circumflex,KS_asciicircum,
679e45e36eeSmiod     KC(0x40),		KS_dead_diaeresis,KS_asterisk,	KS_plus,
680e45e36eeSmiod     KC(0x41),		KS_dead_acute,	KS_dead_grave,	KS_asciitilde,
681e45e36eeSmiod     KC(0x4c),		KS_Caps_Lock,
682e45e36eeSmiod     KC(0x56),		KS_ccedilla,
683e45e36eeSmiod     KC(0x57),		KS_masculine,	KS_ordfeminine,
684e45e36eeSmiod     KC(0x58),		KS_bracketleft,	KS_braceleft,	KS_guillemotleft,
685e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
686e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
687e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
688e45e36eeSmiod     KC(0x77),		KS_Control_L,
689e45e36eeSmiod     KC(0x7d),		KS_less,	KS_greater,
690e45e36eeSmiod };
691e45e36eeSmiod 
692e45e36eeSmiod /* 029 Portuguese type 4 keyboard */
693e45e36eeSmiod const keysym_t sunkbd5_keydesc_pt[] = {
694e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
695e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
696e45e36eeSmiod     KC(0x20),		KS_3,		KS_numbersign,	KS_sterling,
697e45e36eeSmiod     KC(0x21),		KS_4,		KS_dollar,	KS_section,
698e45e36eeSmiod     KC(0x22),		KS_5,		KS_percent,	KS_asciitilde,
699e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,	KS_asciicircum,
700e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,	KS_braceleft,
701e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_bracketleft,
702e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_bracketright,
703e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_braceright,
704e45e36eeSmiod     KC(0x28),		KS_apostrophe,	KS_question,	KS_grave,
705e45e36eeSmiod     KC(0x29),		KS_guillemotleft,KS_guillemotright,
706e45e36eeSmiod     KC(0x2a),		KS_backslash,	KS_bar,
707e45e36eeSmiod     KC(0x40),		KS_plus,	KS_asterisk,	KS_dead_diaeresis,
708e45e36eeSmiod     KC(0x41),		KS_dead_acute,	KS_dead_grave,
709e45e36eeSmiod     KC(0x56),		KS_ccedilla,
710e45e36eeSmiod     KC(0x57),		KS_masculine,	KS_ordfeminine,
711e45e36eeSmiod     KC(0x58),		KS_dead_tilde,	KS_dead_circumflex,
712e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
713e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
714e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
715e45e36eeSmiod     KC(0x7d),		KS_less,	KS_greater,
716e45e36eeSmiod };
717e45e36eeSmiod 
718e45e36eeSmiod /* 00a Spanish type 4 keyboard */
719e45e36eeSmiod const keysym_t sunkbd_keydesc_es[] = {
720e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
721e45e36eeSmiod     KC(0x0f),		KS_bracketright,KS_braceright,	KS_guillemotright,
722e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
723e45e36eeSmiod     KC(0x20),		KS_3,		KS_hyphen,	KS_numbersign,
724e45e36eeSmiod     KC(0x22),		KS_5,		KS_percent,	KS_degree,
725e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,	KS_notsign,
726e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,
727e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,
728e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_backslash,
729e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_bar,
730e45e36eeSmiod     KC(0x28),		KS_apostrophe,	KS_question,	KS_grave,
731e45e36eeSmiod     KC(0x29),		KS_exclamdown,	KS_questiondown,
732e45e36eeSmiod     KC(0x2a),		KS_ccedilla,
733e45e36eeSmiod     KC(0x3e),		KS_o,		KS_O,		KS_masculine,
734e45e36eeSmiod     KC(0x40),		KS_dead_grave,	KS_dead_circumflex,KS_asciicircum,
735e45e36eeSmiod     KC(0x41),		KS_plus,	KS_asterisk,	KS_asciitilde,
736e45e36eeSmiod     KC(0x4c),		KS_Caps_Lock,
737e45e36eeSmiod     KC(0x4d),		KS_a,		KS_A,		KS_ordfeminine,
738e45e36eeSmiod     KC(0x56),		KS_ntilde,
739e45e36eeSmiod     KC(0x57),		KS_dead_acute,	KS_dead_diaeresis,
740e45e36eeSmiod     KC(0x58),		KS_bracketleft,	KS_braceleft,	KS_guillemotleft,
741e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
742e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
743e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
744e45e36eeSmiod     KC(0x77),		KS_Control_L,
745e45e36eeSmiod     KC(0x7d),		KS_less,	KS_greater,
746e45e36eeSmiod };
747e45e36eeSmiod 
748e45e36eeSmiod /* 02a Spanish type 5 keyboard */
749e45e36eeSmiod const keysym_t sunkbd5_keydesc_es[] = {
750e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
751e45e36eeSmiod     KC(0x1e),		KS_1,		KS_exclam,	KS_bar,
752e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
753e45e36eeSmiod     KC(0x20),		KS_3,		KS_hyphen,	KS_numbersign,
754e45e36eeSmiod     KC(0x21),		KS_4,		KS_dollar,	KS_asciicircum,
755e45e36eeSmiod     KC(0x22),		KS_5,		KS_percent,	KS_asciitilde,
756e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,	KS_notsign,
757e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,
758e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,
759e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,
760e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,
761e45e36eeSmiod     KC(0x28),		KS_apostrophe,	KS_question,	KS_grave,
762e45e36eeSmiod     KC(0x29),		KS_exclamdown,	KS_questiondown,
763e45e36eeSmiod     KC(0x2a),		KS_masculine,	KS_ordfeminine,	KS_backslash,
764e45e36eeSmiod     KC(0x40),		KS_dead_grave,	KS_dead_circumflex,KS_bracketleft,
765e45e36eeSmiod     KC(0x41),		KS_plus,	KS_asterisk,	KS_bracketright,
766e45e36eeSmiod     KC(0x56),		KS_ntilde,
767e45e36eeSmiod     KC(0x57),		KS_dead_acute,	KS_dead_diaeresis,KS_braceleft,
768e45e36eeSmiod     KC(0x58),		KS_ccedilla,	KS_Ccedilla,	KS_braceright,
769e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
770e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
771e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
772e45e36eeSmiod     KC(0x7d),		KS_less,	KS_greater,
773e45e36eeSmiod };
774e45e36eeSmiod 
775e45e36eeSmiod /* 00b Swedish/Finnish type 4 keyboard */
776e45e36eeSmiod const keysym_t sunkbd_keydesc_sv[] = {
777e45e36eeSmiod     KC(0x0d),		KS_Multi_key,
778e45e36eeSmiod     KC(0x0f),		KS_asciitilde,	KS_asciicircum,
779e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
780e45e36eeSmiod     KC(0x20),		KS_3,		KS_numbersign,	KS_sterling,
781e45e36eeSmiod     KC(0x21),		KS_4,		KS_currency,	KS_dollar,
782e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,
783e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,	KS_braceleft,
784e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_bracketleft,
785e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_bracketright,
786e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_braceright,
787e45e36eeSmiod     KC(0x28),		KS_plus,	KS_question,	KS_backslash,
788e45e36eeSmiod     KC(0x29),		KS_dead_acute,	KS_dead_grave,
789e45e36eeSmiod     KC(0x2a),		KS_apostrophe,	KS_asterisk,	KS_grave,
790e45e36eeSmiod     KC(0x40),		KS_aring,
791e45e36eeSmiod     KC(0x41),		KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde,
792e45e36eeSmiod     KC(0x43),		KS_Mode_switch,
793e45e36eeSmiod     KC(0x4c),		KS_Caps_Lock,
794e45e36eeSmiod     KC(0x56),		KS_odiaeresis,
795e45e36eeSmiod     KC(0x57),		KS_adiaeresis,
796e45e36eeSmiod     KC(0x58),		KS_section,	KS_onehalf,
797e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
798e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
799e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
800e45e36eeSmiod     KC(0x77),		KS_Control_L,
801e45e36eeSmiod     KC(0x7c),		KS_less,	KS_greater,	KS_bar,
802e45e36eeSmiod };
803e45e36eeSmiod 
804e45e36eeSmiod const keysym_t sunkbd_keydesc_sv_nodead[] = {
805e45e36eeSmiod     KC(0x29),		KS_apostrophe,	KS_grave,
806e45e36eeSmiod     KC(0x41),		KS_diaeresis,	KS_asciicircum,	KS_asciitilde,
807e45e36eeSmiod };
808e45e36eeSmiod 
809e45e36eeSmiod /* 02b Swedish type 5 keyboard */
810e45e36eeSmiod const keysym_t sunkbd5_keydesc_sv[] = {
811e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
812e45e36eeSmiod     KC(0x0f),		KS_asciitilde,	KS_asciicircum,
813e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
814e45e36eeSmiod     KC(0x20),		KS_3,		KS_numbersign,	KS_sterling,
815e45e36eeSmiod     KC(0x21),		KS_4,		KS_currency,	KS_dollar,
816e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,
817e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,	KS_braceleft,
818e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_bracketleft,
819e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_bracketright,
820e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_braceright,
821e45e36eeSmiod     KC(0x28),		KS_plus,	KS_question,	KS_backslash,
822e45e36eeSmiod     KC(0x29),		KS_dead_acute,	KS_dead_grave,
823e45e36eeSmiod     KC(0x2a),		KS_section,	KS_onehalf,
824e45e36eeSmiod     KC(0x40),		KS_aring,
825e45e36eeSmiod     KC(0x41),		KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde,
826e45e36eeSmiod     KC(0x43),		KS_Multi_key,
827e45e36eeSmiod     KC(0x4c),		KS_Control_L,
828e45e36eeSmiod     KC(0x56),		KS_odiaeresis,
829e45e36eeSmiod     KC(0x57),		KS_adiaeresis,
830e45e36eeSmiod     KC(0x58),		KS_apostrophe,	KS_asterisk,	KS_grave,
831e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
832e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
833e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
834e45e36eeSmiod     KC(0x77),		KS_Caps_Lock,
835e45e36eeSmiod     KC(0x7c),		KS_less,	KS_greater,	KS_bar,
836e45e36eeSmiod };
837e45e36eeSmiod 
838e45e36eeSmiod /* 00c Swiss-French type 4 keyboard */
839e45e36eeSmiod const keysym_t sunkbd_keydesc_sf[] = {
840e45e36eeSmiod     KC(0x0d),		KS_Multi_key,
841e45e36eeSmiod     KC(0x0f),		KS_greater,	KS_braceright,
842e45e36eeSmiod     KC(0x1e),		KS_1,		KS_plus,	KS_exclam,
843e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
844e45e36eeSmiod     KC(0x20),		KS_3,		KS_asterisk,	KS_numbersign,
845e45e36eeSmiod     KC(0x21),		KS_4,		KS_ccedilla,	KS_cent,
846e45e36eeSmiod     KC(0x22),		KS_5,		KS_percent,	KS_asciitilde,
847e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,	KS_section,
848e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,	KS_bar,
849e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_degree,
850e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_backslash,
851e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_asciicircum,
852e45e36eeSmiod     KC(0x28),		KS_apostrophe,	KS_question,	KS_grave,
853e45e36eeSmiod     KC(0x29),		KS_dead_circumflex,KS_dead_grave,
854e45e36eeSmiod     KC(0x2a),		KS_dollar,	KS_dead_tilde,	KS_sterling,
855e45e36eeSmiod     KC(0x3b),		KS_z,
856e45e36eeSmiod     KC(0x40),		KS_egrave,	KS_udiaeresis,
857e45e36eeSmiod     KC(0x41),		KS_dead_diaeresis,KS_dead_acute,
858e45e36eeSmiod     KC(0x43),		KS_Mode_switch,
859e45e36eeSmiod     KC(0x4c),		KS_Caps_Lock,
860e45e36eeSmiod     KC(0x56),		KS_eacute,	KS_odiaeresis,
861e45e36eeSmiod     KC(0x57),		KS_agrave,	KS_adiaeresis,
862e45e36eeSmiod     KC(0x58),		KS_less,	KS_braceleft,
863e45e36eeSmiod     KC(0x64),		KS_y,
864e45e36eeSmiod     KC(0x6a),		KS_m,		KS_M,		KS_mu,
865e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
866e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
867e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
868e45e36eeSmiod     KC(0x77),		KS_Control_L,
869e45e36eeSmiod     KC(0x7c),		KS_bracketright,KS_bracketleft,	KS_backslash,
870e45e36eeSmiod };
871e45e36eeSmiod 
872e45e36eeSmiod /* 02c Swiss-French type 5 keyboard */
873e45e36eeSmiod const keysym_t sunkbd5_keydesc_sf[] = {
874e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
875e45e36eeSmiod     KC(0x1e),		KS_1,		KS_plus,	KS_bar,
876e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
877e45e36eeSmiod     KC(0x20),		KS_3,		KS_asterisk,	KS_numbersign,
878e45e36eeSmiod     KC(0x21),		KS_4,		KS_ccedilla,	KS_asciicircum,
879e45e36eeSmiod     KC(0x22),		KS_5,		KS_percent,	KS_asciitilde,
880e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,
881e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,
882e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,
883e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,
884e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_grave,
885e45e36eeSmiod     KC(0x28),		KS_apostrophe,	KS_question,	KS_dead_acute,
886e45e36eeSmiod     KC(0x29),		KS_dead_circumflex,KS_dead_grave,KS_dead_tilde,
887e45e36eeSmiod     KC(0x2a),		KS_dollar,	KS_degree,
888e45e36eeSmiod     KC(0x3b),		KS_z,
889e45e36eeSmiod     KC(0x40),		KS_egrave,	KS_udiaeresis,	KS_bracketleft,
890e45e36eeSmiod     KC(0x41),		KS_dead_diaeresis,KS_exclam,	KS_bracketright,
891e45e36eeSmiod     KC(0x56),		KS_eacute,	KS_odiaeresis,
892e45e36eeSmiod     KC(0x57),		KS_agrave,	KS_adiaeresis,	KS_braceleft,
893e45e36eeSmiod     KC(0x58),		KS_dollar,	KS_sterling,	KS_braceright,
894e45e36eeSmiod     KC(0x64),		KS_y,
895e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
896e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
897e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
898e45e36eeSmiod     KC(0x7c),		KS_less,	KS_greater,	KS_backslash,
899e45e36eeSmiod };
900e45e36eeSmiod 
901e45e36eeSmiod /* 00d Swiss-German type 4 keyboard */
902e45e36eeSmiod const keysym_t sunkbd_keydesc_sg[] = {
903e45e36eeSmiod     KC(0x0d),		KS_Multi_key,
904e45e36eeSmiod     KC(0x0f),		KS_greater,	KS_braceright,
905e45e36eeSmiod     KC(0x1e),		KS_1,		KS_plus,	KS_exclam,
906e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
907e45e36eeSmiod     KC(0x20),		KS_3,		KS_asterisk,	KS_numbersign,
908e45e36eeSmiod     KC(0x21),		KS_4,		KS_ccedilla,	KS_cent,
909e45e36eeSmiod     KC(0x22),		KS_5,		KS_percent,	KS_asciitilde,
910e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,	KS_section,
911e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,	KS_bar,
912e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,	KS_degree,
913e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,	KS_backslash,
914e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_asciicircum,
915e45e36eeSmiod     KC(0x28),		KS_apostrophe,	KS_question,	KS_grave,
916e45e36eeSmiod     KC(0x29),		KS_dead_circumflex,KS_dead_grave,
917e45e36eeSmiod     KC(0x2a),		KS_dollar,	KS_dead_tilde,	KS_sterling,
918e45e36eeSmiod     KC(0x3b),		KS_z,
919e45e36eeSmiod     KC(0x40),		KS_udiaeresis,	KS_egrave,
920e45e36eeSmiod     KC(0x41),		KS_dead_diaeresis,KS_dead_acute,
921e45e36eeSmiod     KC(0x43),		KS_Mode_switch,
922e45e36eeSmiod     KC(0x4c),		KS_Caps_Lock,
923e45e36eeSmiod     KC(0x56),		KS_odiaeresis,	KS_eacute,
924e45e36eeSmiod     KC(0x57),		KS_adiaeresis,	KS_agrave,
925e45e36eeSmiod     KC(0x58),		KS_less,	KS_braceleft,
926e45e36eeSmiod     KC(0x64),		KS_y,
927e45e36eeSmiod     KC(0x6a),		KS_m,		KS_M,		KS_mu,
928e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
929e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
930e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
931e45e36eeSmiod     KC(0x77),		KS_Control_L,
932e45e36eeSmiod     KC(0x7c),		KS_bracketright,KS_bracketleft,	KS_backslash,
933e45e36eeSmiod };
934e45e36eeSmiod 
935e45e36eeSmiod /* 02d Swiss-German type 5 keyboard */
936e45e36eeSmiod const keysym_t sunkbd5_keydesc_sg[] = {
937e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
938e45e36eeSmiod     KC(0x1e),		KS_1,		KS_plus,	KS_bar,
939e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,	KS_at,
940e45e36eeSmiod     KC(0x20),		KS_3,		KS_asterisk,	KS_numbersign,
941e45e36eeSmiod     KC(0x21),		KS_4,		KS_ccedilla,	KS_asciicircum,
942e45e36eeSmiod     KC(0x22),		KS_5,		KS_percent,	KS_asciitilde,
943e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,
944e45e36eeSmiod     KC(0x24),		KS_7,		KS_slash,
945e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,
946e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,
947e45e36eeSmiod     KC(0x27),		KS_0,		KS_equal,	KS_grave,
948e45e36eeSmiod     KC(0x28),		KS_apostrophe,	KS_question,	KS_dead_acute,
949e45e36eeSmiod     KC(0x29),		KS_dead_circumflex,KS_dead_grave,KS_dead_tilde,
950e45e36eeSmiod     KC(0x2a),		KS_dollar,	KS_degree,
951e45e36eeSmiod     KC(0x3b),		KS_z,
952e45e36eeSmiod     KC(0x40),		KS_udiaeresis,	KS_egrave,	KS_bracketleft,
953e45e36eeSmiod     KC(0x41),		KS_dead_diaeresis,KS_exclam,	KS_bracketright,
954e45e36eeSmiod     KC(0x56),		KS_odiaeresis,	KS_eacute,
955e45e36eeSmiod     KC(0x57),		KS_adiaeresis,	KS_agrave,	KS_braceleft,
956e45e36eeSmiod     KC(0x58),		KS_dollar,	KS_sterling,	KS_braceright,
957e45e36eeSmiod     KC(0x64),		KS_y,
958e45e36eeSmiod     KC(0x6b),		KS_comma,	KS_semicolon,
959e45e36eeSmiod     KC(0x6c),		KS_period,	KS_colon,
960e45e36eeSmiod     KC(0x6d),		KS_minus,	KS_underscore,
961e45e36eeSmiod     KC(0x7c),		KS_less,	KS_greater,	KS_backslash,
962e45e36eeSmiod };
963e45e36eeSmiod 
964e45e36eeSmiod /* 00e UK English type 4 keyboard */
965e45e36eeSmiod const keysym_t sunkbd_keydesc_uk[] = {
966e45e36eeSmiod     KC(0x1e),		KS_1,		KS_exclam,	KS_bar,
967e45e36eeSmiod     KC(0x21),		KS_3,		KS_sterling,	KS_numbersign,
968e45e36eeSmiod     KC(0x28),		KS_minus,	KS_underscore,	KS_notsign,
969e45e36eeSmiod     KC(0x43),		KS_Mode_switch,
970e45e36eeSmiod };
971e45e36eeSmiod 
972e45e36eeSmiod /* 02e UK English type 5 keyboard */
973e45e36eeSmiod const keysym_t sunkbd5_keydesc_uk[] = {
974e45e36eeSmiod     KC(0x0d),		KS_Mode_switch,
975e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,
976e45e36eeSmiod     KC(0x20),		KS_3,		KS_sterling,
977e45e36eeSmiod     KC(0x2a),		KS_grave,	KS_notsign,	KS_brokenbar,
978e45e36eeSmiod     KC(0x57),		KS_apostrophe,	KS_at,
979e45e36eeSmiod     KC(0x58),		KS_numbersign,	KS_asciitilde,
980e45e36eeSmiod     KC(0x7c),		KS_backslash,	KS_bar,
981e45e36eeSmiod };
982e45e36eeSmiod 
983e45e36eeSmiod /* 031 Japan type 5 keyboard */
984e45e36eeSmiod const keysym_t sunkbd5_keydesc_jp[] = {
985e45e36eeSmiod     KC(0x1f),		KS_2,		KS_quotedbl,
986e45e36eeSmiod     KC(0x23),		KS_6,		KS_ampersand,
987e45e36eeSmiod     KC(0x24),		KS_7,		KS_apostrophe,
988e45e36eeSmiod     KC(0x25),		KS_8,		KS_parenleft,
989e45e36eeSmiod     KC(0x26),		KS_9,		KS_parenright,
990e45e36eeSmiod     KC(0x27),		KS_0,
991e45e36eeSmiod     KC(0x28),		KS_minus,	KS_equal,
992e45e36eeSmiod     KC(0x29),		KS_asciicircum,	KS_asciitilde,
993e45e36eeSmiod     KC(0x2a),		KS_yen,		KS_bar,
994e45e36eeSmiod     KC(0x40),		KS_at,		KS_grave,
995e45e36eeSmiod     KC(0x41),		KS_bracketleft,	KS_braceleft,
996e45e36eeSmiod     KC(0x56),		KS_semicolon,	KS_plus,
997e45e36eeSmiod     KC(0x57),		KS_colon,	KS_asterisk,
998e45e36eeSmiod     KC(0x58),		KS_bracketright,KS_braceright,
999e45e36eeSmiod     KC(0x7c),		KS_backslash,	KS_underscore,
1000e45e36eeSmiod };
1001e45e36eeSmiod 
1002e45e36eeSmiod #define KBD_MAP(name, base, map) \
1003e45e36eeSmiod     { name, base, sizeof(map)/sizeof(keysym_t), map }
1004e45e36eeSmiod 
1005e45e36eeSmiod /* Supported type 4 keyboard layouts */
1006e45e36eeSmiod const struct wscons_keydesc sunkbd_keydesctab[] = {
1007e45e36eeSmiod 	KBD_MAP(KB_US,			0,	sunkbd_keydesc_us),
1008e45e36eeSmiod 	KBD_MAP(KB_BE,			KB_US,	sunkbd_keydesc_befr),
1009e45e36eeSmiod 	KBD_MAP(KB_DE,			KB_US,	sunkbd_keydesc_de),
1010e45e36eeSmiod 	KBD_MAP(KB_DK,			KB_US,	sunkbd_keydesc_dk),
1011e45e36eeSmiod 	KBD_MAP(KB_ES,			KB_US,	sunkbd_keydesc_es),
1012e45e36eeSmiod 	KBD_MAP(KB_FR,			KB_US,	sunkbd_keydesc_befr),
1013e45e36eeSmiod 	KBD_MAP(KB_IT,			KB_US,	sunkbd_keydesc_it),
1014e45e36eeSmiod 	KBD_MAP(KB_NL,			KB_US,	sunkbd_keydesc_nl),
1015e45e36eeSmiod 	KBD_MAP(KB_NO,			KB_US,	sunkbd_keydesc_no),
1016e45e36eeSmiod 	KBD_MAP(KB_PT,			KB_US,	sunkbd_keydesc_pt),
1017e45e36eeSmiod 	KBD_MAP(KB_SF,			KB_US,	sunkbd_keydesc_sf),
1018e45e36eeSmiod 	KBD_MAP(KB_SG,			KB_US,	sunkbd_keydesc_sg),
1019e45e36eeSmiod 	KBD_MAP(KB_SV,			KB_US,	sunkbd_keydesc_sv),
1020e45e36eeSmiod 	KBD_MAP(KB_SV | KB_NODEAD,	KB_SV,	sunkbd_keydesc_sv_nodead),
1021e45e36eeSmiod 	KBD_MAP(KB_UK,			KB_US,	sunkbd_keydesc_uk),
1022e45e36eeSmiod 	{0, 0, 0, 0},
1023e45e36eeSmiod };
1024e45e36eeSmiod 
1025e45e36eeSmiod /* Supported type 5 keyboard layouts */
1026e45e36eeSmiod const struct wscons_keydesc sunkbd5_keydesctab[] = {
1027e45e36eeSmiod 	KBD_MAP(KB_US,			0,	sunkbd_keydesc_us),
1028e45e36eeSmiod 	KBD_MAP(KB_DE,			KB_US,	sunkbd5_keydesc_de),
1029e45e36eeSmiod 	KBD_MAP(KB_DK,			KB_US,	sunkbd5_keydesc_dk),
1030e45e36eeSmiod 	KBD_MAP(KB_ES,			KB_US,	sunkbd5_keydesc_es),
1031e45e36eeSmiod 	KBD_MAP(KB_FR,			KB_US,	sunkbd5_keydesc_fr),
1032e45e36eeSmiod 	KBD_MAP(KB_IT,			KB_US,	sunkbd5_keydesc_it),
1033e45e36eeSmiod 	KBD_MAP(KB_JP,			KB_US,	sunkbd5_keydesc_jp),
1034e45e36eeSmiod 	KBD_MAP(KB_NL,			KB_US,	sunkbd5_keydesc_nl),
1035e45e36eeSmiod 	KBD_MAP(KB_NO,			KB_US,	sunkbd5_keydesc_no),
1036e45e36eeSmiod 	KBD_MAP(KB_PT,			KB_US,	sunkbd5_keydesc_pt),
1037e45e36eeSmiod 	KBD_MAP(KB_SF,			KB_US,	sunkbd5_keydesc_sf),
1038e45e36eeSmiod 	KBD_MAP(KB_SG,			KB_US,	sunkbd5_keydesc_sg),
1039e45e36eeSmiod 	KBD_MAP(KB_SV,			KB_US,	sunkbd5_keydesc_sv),
1040e45e36eeSmiod 	KBD_MAP(KB_SV | KB_NODEAD,	KB_SV,	sunkbd_keydesc_sv_nodead),
1041e45e36eeSmiod 	KBD_MAP(KB_UK,			KB_US,	sunkbd5_keydesc_uk),
1042e45e36eeSmiod 	{0, 0, 0, 0},
1043e45e36eeSmiod };
1044e45e36eeSmiod 
1045e45e36eeSmiod /*
1046e45e36eeSmiod  * Keyboard layout to ID table
1047e45e36eeSmiod  * References:
1048e45e36eeSmiod  *	Sun Type 5 Keyboard Supplement Installation Guide, May 1992
1049e45e36eeSmiod  *	http://docs.sun.com/db/doc/806-6642/6jfipqu57?a=view
1050e45e36eeSmiod  *	http://jp.sunsolve.sun.com/handbook_pub/Systems/SSVygr/INPUT_Compact1_Keyboard.html
1051e45e36eeSmiod  */
1052e45e36eeSmiod const int sunkbd_layouts[MAXSUNLAYOUT] = {
1053e45e36eeSmiod 	/* Type 4 layouts */
1054e45e36eeSmiod 	KB_US,	/* 000 USA */
1055e45e36eeSmiod 	KB_US,	/* 001 same as 000 */
1056e45e36eeSmiod 	KB_BE,	/* 002 Belgium/French */
1057e45e36eeSmiod 	-1,	/* 003 Canada */
1058e45e36eeSmiod 	KB_DK,	/* 004 Denmark */
1059e45e36eeSmiod 	KB_DE,	/* 005 Germany */
1060e45e36eeSmiod 	KB_IT,	/* 006 Italy */
1061e45e36eeSmiod 	KB_NL,	/* 007 The Netherlands */
1062e45e36eeSmiod 	KB_NO,	/* 008 Norway */
1063e45e36eeSmiod 	KB_PT,	/* 009 Portugal */
1064e45e36eeSmiod 	KB_ES,	/* 00a Latin America/Spanish */
1065e45e36eeSmiod 	KB_SV,	/* 00b Sweden */
1066e45e36eeSmiod 	KB_SF,	/* 00c Switzerland/French */
1067e45e36eeSmiod 	KB_SG,	/* 00d Switzerland/German */
1068e45e36eeSmiod 	KB_UK,	/* 00e Great Britain */
1069e45e36eeSmiod 	-1,	/* 00f unaffected */
1070e45e36eeSmiod 	-1,	/* 010 Korea */
1071e45e36eeSmiod 	-1,	/* 011 Taiwan */
1072e45e36eeSmiod 	-1,	/* 012 unaffected */
1073e45e36eeSmiod 	-1,	/* 013 unaffected */
1074e45e36eeSmiod 	-1,	/* 014 VT220 */
1075e45e36eeSmiod 	-1,	/* 015 VT220 Switzerland/French */
1076e45e36eeSmiod 	-1,	/* 016 VT220 Switzerland/German */
1077e45e36eeSmiod 	-1,	/* 017 VT220 Switzerland/Italian */
1078e45e36eeSmiod 	-1,	/* 018 unaffected */
1079e45e36eeSmiod 	-1,	/* 019 Belgium */
1080e45e36eeSmiod 	-1,	/* 01a unaffected */
1081e45e36eeSmiod 	-1,	/* 01b unaffected */
1082e45e36eeSmiod 	-1,	/* 01c unaffected */
1083e45e36eeSmiod 	-1,	/* 01d unaffected */
1084e45e36eeSmiod 	-1,	/* 01e unaffected */
1085e45e36eeSmiod 	-1,	/* 01f unaffected */
1086e45e36eeSmiod 	-1,	/* 020 Japan */
1087e45e36eeSmiod 
1088e45e36eeSmiod 	/* Type 5 layouts */
1089e45e36eeSmiod 	KB_US,	/* 021 USA */
1090e45e36eeSmiod 	KB_US,	/* 022 UNIX */
1091e45e36eeSmiod 	KB_FR,	/* 023 France */
1092e45e36eeSmiod 	KB_DK,	/* 024 Denmark */
1093e45e36eeSmiod 	KB_DE,	/* 025 Germany */
1094e45e36eeSmiod 	KB_IT,	/* 026 Italy */
1095e45e36eeSmiod 	KB_NL,	/* 027 The Netherlands */
1096e45e36eeSmiod 	KB_NO,	/* 028 Norway */
1097e45e36eeSmiod 	KB_PT,	/* 029 Portugal */
1098e45e36eeSmiod 	KB_ES,	/* 02a Spain */
1099e45e36eeSmiod 	KB_SV,	/* 02b Sweden */
1100e45e36eeSmiod 	KB_SF,	/* 02c Switzerland/French */
1101e45e36eeSmiod 	KB_SG,	/* 02d Switzerland/German */
1102e45e36eeSmiod 	KB_UK,	/* 02e Great Britain */
1103e45e36eeSmiod 	-1,	/* 02f Korea */
1104e45e36eeSmiod 	-1,	/* 030 Taiwan */
1105e45e36eeSmiod 	KB_JP,	/* 031 Japan */
1106e45e36eeSmiod 	-1,	/* 032 Canada/French */
1107e45e36eeSmiod 	-1,	/* 033 Hungary */
1108e45e36eeSmiod 	-1,	/* 034 Poland */
1109e45e36eeSmiod 	-1,	/* 035 Czech */
1110e45e36eeSmiod 	-1,	/* 036 Russia */
1111e45e36eeSmiod 	-1,	/* 037 Latvia */
1112e45e36eeSmiod 	-1,	/* 038 Turkey-Q5 */
1113e45e36eeSmiod 	-1,	/* 039 Greece */
1114e45e36eeSmiod 	-1,	/* 03a Arabic */
1115e45e36eeSmiod 	-1,	/* 03b Lithuania */
1116e45e36eeSmiod 	-1,	/* 03c Belgium */
1117e45e36eeSmiod 	-1,	/* 03d unaffected */
1118e45e36eeSmiod 	-1,	/* 03e Turkey-F5 */
1119e45e36eeSmiod 	-1,	/* 03f Canada/French */
1120e45e36eeSmiod 
1121e45e36eeSmiod 	/* Not affected range */
1122e45e36eeSmiod 	-1,	/* 040 */
1123e45e36eeSmiod 	-1,	/* 041 */
1124e45e36eeSmiod 	-1,	/* 042 */
1125e45e36eeSmiod 	-1,	/* 043 */
1126e45e36eeSmiod 	-1,	/* 044 */
1127e45e36eeSmiod 	-1,	/* 045 */
1128e45e36eeSmiod 	-1,	/* 046 */
1129e45e36eeSmiod 	-1,	/* 047 */
1130e45e36eeSmiod 	-1,	/* 048 */
1131e45e36eeSmiod 	-1,	/* 049 */
1132e45e36eeSmiod 	-1,	/* 04a */
1133e45e36eeSmiod 	-1,	/* 04b */
1134e45e36eeSmiod 	-1,	/* 04c */
1135e45e36eeSmiod 	-1,	/* 04d */
1136e45e36eeSmiod 	-1,	/* 04e */
1137e45e36eeSmiod 	-1,	/* 04f */
1138e45e36eeSmiod 
1139e45e36eeSmiod 	/* ``Compact-1'' layouts */
1140e45e36eeSmiod 	KB_US,	/* 050 USA */
1141e45e36eeSmiod 	KB_US,	/* 051 UNIX */
1142e45e36eeSmiod 	KB_FR,	/* 052 France */
1143e45e36eeSmiod 	KB_DK,	/* 053 Denmark */
1144e45e36eeSmiod 	KB_DE,	/* 054 Germany */
1145e45e36eeSmiod 	KB_IT,	/* 055 Italy */
1146e45e36eeSmiod 	KB_NL,	/* 056 The Netherlands */
1147e45e36eeSmiod 	KB_NO,	/* 057 Norway */
1148e45e36eeSmiod 	KB_PT,	/* 058 Portugal */
1149e45e36eeSmiod 	KB_ES,	/* 059 Spain */
1150e45e36eeSmiod 	KB_SV,	/* 05a Sweden */
1151e45e36eeSmiod 	KB_SF,	/* 05b Switzerland/French */
1152e45e36eeSmiod 	KB_SG,	/* 05c Switzerland/German */
1153e45e36eeSmiod 	KB_UK,	/* 05d Great Britain */
1154e45e36eeSmiod 	-1,	/* 05e Korea */
1155e45e36eeSmiod 	-1,	/* 05f Taiwan */
1156e45e36eeSmiod 	KB_JP,	/* 060 Japan */
1157e45e36eeSmiod 	-1,	/* 061 Canada/French */
1158e45e36eeSmiod };
1159e45e36eeSmiod 
1160e45e36eeSmiod struct wskbd_mapdata sunkbd_keymapdata = {
1161e45e36eeSmiod 	sunkbd_keydesctab,
1162e45e36eeSmiod #ifdef SUNKBD_LAYOUT
1163e45e36eeSmiod 	SUNKBD_LAYOUT,
1164e45e36eeSmiod #else
1165c8b0a2fbSmiod 	KB_US | KB_DEFAULT,
1166e45e36eeSmiod #endif
1167e45e36eeSmiod };
1168e45e36eeSmiod 
1169e45e36eeSmiod struct wskbd_mapdata sunkbd5_keymapdata = {
1170e45e36eeSmiod 	sunkbd5_keydesctab,
1171e45e36eeSmiod #ifdef SUNKBD5_LAYOUT
1172e45e36eeSmiod 	SUNKBD5_LAYOUT,
1173e45e36eeSmiod #else
1174c8b0a2fbSmiod 	KB_US | KB_DEFAULT,
1175e45e36eeSmiod #endif
1176e45e36eeSmiod };
1177