bsd_KbdMap.c revision abaf7e73
1/*
2 * Slightly modified xf86KbdBSD.c which is
3 *
4 * Derived from xf86Kbd.c by S_ren Schmidt (sos@login.dkuug.dk)
5 * which is Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
6 * and from xf86KbdCODrv.c by Holger Veit
7 */
8
9#ifdef HAVE_CONFIG_H
10#include "config.h"
11#endif
12
13#include <xorg-server.h>
14#include <X11/X.h>
15#include <X11/Xmd.h>
16#include "input.h"
17#include "scrnintstr.h"
18
19#include "compiler.h"
20
21#include "xf86.h"
22#include "xf86Priv.h"
23#include "xf86_OSlib.h"
24#include "xf86Xinput.h"
25#include "xf86OSKbd.h"
26#include "atKeynames.h"
27#include "xf86Keymap.h"
28#include "bsd_kbd.h"
29
30#if (defined(SYSCONS_SUPPORT) || defined(PCVT_SUPPORT)) && defined(GIO_KEYMAP)
31#define KD_GET_ENTRY(i,n) \
32  eascii_to_x[((keymap.key[i].spcl << (n+1)) & 0x100) + keymap.key[i].map[n]]
33
34static unsigned char remap[NUM_KEYCODES] = {
35     0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,   /* 0x00 - 0x07 */
36  0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,   /* 0x08 - 0x0f */
37  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,   /* 0x10 - 0x17 */
38  0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,   /* 0x18 - 0x1f */
39  0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,   /* 0x20 - 0x27 */
40  0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,   /* 0x28 - 0x2f */
41  0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,    0,   /* 0x30 - 0x37 */
42  0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,   /* 0x38 - 0x3f */
43  0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,    0,   /* 0x40 - 0x47 */
44     0,    0,    0,    0,    0,    0,    0,    0,   /* 0x48 - 0x4f */
45     0,    0,    0,    0,    0,    0, 0x56, 0x57,   /* 0x50 - 0x57 */
46  0x58,    0,    0,    0,    0,    0,    0,    0,   /* 0x58 - 0x5f */
47     0,    0,    0,    0,    0,    0,    0,    0,   /* 0x60 - 0x67 */
48     0,    0,    0,    0,    0,    0,    0,    0,   /* 0x68 - 0x6f */
49     0,    0, 0x69, 0x65,    0,    0,    0,    0,   /* 0x70 - 0x77 */
50     0,    0,    0,    0,    0,    0,    0,    0,   /* 0x78 - 0x7f */
51};
52
53/* This table assumes the ibm code page 437 coding for characters
54 * > 0x80. They are returned in this form by PCVT */
55static KeySym eascii_to_x[512] = {
56	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
57	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
58	XK_BackSpace,	XK_Tab,		XK_Linefeed,	NoSymbol,
59	NoSymbol,	XK_Return,	NoSymbol,	NoSymbol,
60	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
61	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
62	NoSymbol,	NoSymbol,	NoSymbol,	XK_Escape,
63	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
64	XK_space,	XK_exclam,	XK_quotedbl,	XK_numbersign,
65	XK_dollar,	XK_percent,	XK_ampersand,	XK_apostrophe,
66	XK_parenleft,	XK_parenright,	XK_asterisk,	XK_plus,
67	XK_comma,	XK_minus,	XK_period,	XK_slash,
68	XK_0,		XK_1,		XK_2,		XK_3,
69	XK_4,		XK_5,		XK_6,		XK_7,
70	XK_8,		XK_9,		XK_colon,	XK_semicolon,
71	XK_less,	XK_equal,	XK_greater,	XK_question,
72	XK_at,		XK_A,		XK_B,		XK_C,
73	XK_D,		XK_E,		XK_F,		XK_G,
74	XK_H,		XK_I,		XK_J,		XK_K,
75	XK_L,		XK_M,		XK_N,		XK_O,
76	XK_P,		XK_Q,		XK_R,		XK_S,
77	XK_T,		XK_U,		XK_V,		XK_W,
78	XK_X,		XK_Y,		XK_Z,		XK_bracketleft,
79	XK_backslash,	XK_bracketright,XK_asciicircum,	XK_underscore,
80	XK_grave,	XK_a,		XK_b,		XK_c,
81	XK_d,		XK_e,		XK_f,		XK_g,
82	XK_h,		XK_i,		XK_j,		XK_k,
83	XK_l,		XK_m,		XK_n,		XK_o,
84	XK_p,		XK_q,		XK_r,		XK_s,
85	XK_t,		XK_u,		XK_v,		XK_w,
86	XK_x,		XK_y,		XK_z,		XK_braceleft,
87	XK_bar,		XK_braceright,	XK_asciitilde,	XK_Delete,
88	XK_Ccedilla,	XK_udiaeresis,	XK_eacute,	XK_acircumflex,
89	XK_adiaeresis,	XK_agrave,	XK_aring,	XK_ccedilla,
90	XK_ecircumflex,	XK_ediaeresis,	XK_egrave,	XK_idiaeresis,
91	XK_icircumflex,	XK_igrave,	XK_Adiaeresis,	XK_Aring,
92	XK_Eacute,	XK_ae,		XK_AE,		XK_ocircumflex,
93	XK_odiaeresis,	XK_ograve,	XK_ucircumflex,	XK_ugrave,
94	XK_ydiaeresis,	XK_Odiaeresis,	XK_Udiaeresis,	XK_cent,
95	XK_sterling,	XK_yen,		XK_paragraph,	XK_section,
96	XK_aacute,	XK_iacute,	XK_oacute,	XK_uacute,
97	XK_ntilde,	XK_Ntilde,	XK_ordfeminine,	XK_masculine,
98	XK_questiondown,XK_hyphen,	XK_notsign,	XK_onehalf,
99	XK_onequarter,	XK_exclamdown,	XK_guillemotleft,XK_guillemotright,
100	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
101	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
102	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
103	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
104	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
105	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
106	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
107	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
108	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
109	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
110	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
111	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
112	XK_Greek_alpha,	XK_ssharp,	XK_Greek_GAMMA,	XK_Greek_pi,
113	XK_Greek_SIGMA,	XK_Greek_sigma,	XK_mu,	        XK_Greek_tau,
114	XK_Greek_PHI,	XK_Greek_THETA,	XK_Greek_OMEGA,	XK_Greek_delta,
115	XK_infinity,	XK_Ooblique,	XK_Greek_epsilon, XK_intersection,
116	XK_identical,	XK_plusminus,	XK_greaterthanequal, XK_lessthanequal,
117	XK_topintegral,	XK_botintegral,	XK_division,	XK_similarequal,
118	XK_degree,	NoSymbol,	NoSymbol,	XK_radical,
119	XK_Greek_eta,	XK_twosuperior,	XK_periodcentered, NoSymbol,
120
121	/*
122	 * special marked entries (256 + x)
123	 */
124
125	/* This has been checked against what syscons actually does */
126	NoSymbol,	NoSymbol,	XK_Shift_L,	XK_Shift_R,
127	XK_Caps_Lock,	XK_Num_Lock,	XK_Scroll_Lock,	XK_Alt_L,
128	XK_ISO_Left_Tab,XK_Control_L,	NoSymbol,	NoSymbol,
129	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
130	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
131	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
132	NoSymbol,	NoSymbol,	NoSymbol,	XK_F1,
133	XK_F2,		XK_F3,		XK_F4,		XK_F5,
134	XK_F6,		XK_F7,		XK_F8,		XK_F9,
135	XK_F10,		XK_F11,		XK_F12,		NoSymbol,
136	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
137	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
138	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
139	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
140	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
141	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
142	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
143	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
144	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
145	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
146	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
147	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
148	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
149	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
150	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
151	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
152	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
153	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
154	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
155	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
156	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
157	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
158	XK_Control_R,	XK_Alt_R,	NoSymbol,	NoSymbol,
159	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
160	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
161	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
162	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
163	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
164	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
165	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
166	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
167	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
168	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
169	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
170	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
171	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
172	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
173	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
174	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
175	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
176	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
177	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
178	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
179	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
180	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
181	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
182	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
183	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
184	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
185	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
186	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
187	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
188	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
189	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol
190};
191
192#ifdef SYSCONS_SUPPORT
193static
194unsigned char sysconsCODEMap[] = {
195	KEY_KP_Enter,	KEY_RCtrl,	KEY_KP_Divide,	KEY_Print,
196	KEY_AltLang,	KEY_KP_7,	KEY_KP_8,	KEY_KP_9,
197	KEY_KP_4,	KEY_KP_6,	KEY_KP_1,	KEY_KP_2,
198	KEY_KP_3,	KEY_KP_0,	KEY_KP_Decimal,	KEY_Pause,
199	KEY_LMeta,	KEY_RMeta,	KEY_Menu,	KEY_Break
200};
201static
202TransMapRec sysconsCODE = {
203    0x59,
204    0x6d,
205    sysconsCODEMap
206};
207#endif
208#endif /* SYSCONS_SUPPORT || PCVT_SUPPORT */
209
210#ifdef WSCONS_SUPPORT
211
212static CARD8 wsUsbMap[] = {
213	/* 0 */ KEY_NOTUSED,
214	/* 1 */ KEY_NOTUSED,
215	/* 2 */ KEY_NOTUSED,
216	/* 3 */ KEY_NOTUSED,
217	/* 4 */ KEY_A,
218	/* 5 */ KEY_B,
219	/* 6 */ KEY_C,
220	/* 7 */ KEY_D,
221	/* 8 */ KEY_E,
222	/* 9 */ KEY_F,
223	/* 10 */ KEY_G,
224	/* 11 */ KEY_H,
225	/* 12 */ KEY_I,
226	/* 13 */ KEY_J,
227	/* 14 */ KEY_K,
228	/* 15 */ KEY_L,
229	/* 16 */ KEY_M,
230	/* 17 */ KEY_N,
231	/* 18 */ KEY_O,
232	/* 19 */ KEY_P,
233	/* 20 */ KEY_Q,
234	/* 21 */ KEY_R,
235	/* 22 */ KEY_S,
236	/* 23 */ KEY_T,
237	/* 24 */ KEY_U,
238	/* 25 */ KEY_V,
239	/* 26 */ KEY_W,
240	/* 27 */ KEY_X,
241	/* 28 */ KEY_Y,
242	/* 29 */ KEY_Z,
243	/* 30 */ KEY_1,		/* 1 !*/
244	/* 31 */ KEY_2,		/* 2 @ */
245	/* 32 */ KEY_3,		/* 3 # */
246	/* 33 */ KEY_4,		/* 4 $ */
247	/* 34 */ KEY_5,		/* 5 % */
248	/* 35 */ KEY_6,		/* 6 ^ */
249	/* 36 */ KEY_7,		/* 7 & */
250	/* 37 */ KEY_8,		/* 8 * */
251	/* 38 */ KEY_9,		/* 9 ( */
252	/* 39 */ KEY_0,		/* 0 ) */
253	/* 40 */ KEY_Enter,	/* Return  */
254	/* 41 */ KEY_Escape,	/* Escape */
255	/* 42 */ KEY_BackSpace,	/* Backspace Delete */
256	/* 43 */ KEY_Tab,	/* Tab */
257	/* 44 */ KEY_Space,	/* Space */
258	/* 45 */ KEY_Minus,	/* - _ */
259	/* 46 */ KEY_Equal,	/* = + */
260	/* 47 */ KEY_LBrace,	/* [ { */
261	/* 48 */ KEY_RBrace,	/* ] } */
262	/* 49 */ KEY_BSlash,	/* \ | */
263	/* 50 */ KEY_BSlash,    /* \ _ # ~ on some keyboards */
264	/* 51 */ KEY_SemiColon,	/* ; : */
265	/* 52 */ KEY_Quote,	/* ' " */
266	/* 53 */ KEY_Tilde,	/* ` ~ */
267	/* 54 */ KEY_Comma,	/* , <  */
268	/* 55 */ KEY_Period,	/* . > */
269	/* 56 */ KEY_Slash,	/* / ? */
270	/* 57 */ KEY_CapsLock,	/* Caps Lock */
271	/* 58 */ KEY_F1,		/* F1 */
272	/* 59 */ KEY_F2,		/* F2 */
273	/* 60 */ KEY_F3,		/* F3 */
274	/* 61 */ KEY_F4,		/* F4 */
275	/* 62 */ KEY_F5,		/* F5 */
276	/* 63 */ KEY_F6,		/* F6 */
277	/* 64 */ KEY_F7,		/* F7 */
278	/* 65 */ KEY_F8,		/* F8 */
279	/* 66 */ KEY_F9,		/* F9 */
280	/* 67 */ KEY_F10,	/* F10 */
281	/* 68 */ KEY_F11,	/* F11 */
282	/* 69 */ KEY_F12,	/* F12 */
283	/* 70 */ KEY_Print,	/* PrintScrn SysReq */
284	/* 71 */ KEY_ScrollLock,	/* Scroll Lock */
285	/* 72 */ KEY_Pause,	/* Pause Break */
286	/* 73 */ KEY_Insert,	/* Insert XXX  Help on some Mac Keyboards */
287	/* 74 */ KEY_Home,	/* Home */
288	/* 75 */ KEY_PgUp,	/* Page Up */
289	/* 76 */ KEY_Delete,	/* Delete */
290	/* 77 */ KEY_End,	/* End */
291	/* 78 */ KEY_PgDown,	/* Page Down */
292	/* 79 */ KEY_Right,	/* Right Arrow */
293	/* 80 */ KEY_Left,	/* Left Arrow */
294	/* 81 */ KEY_Down,	/* Down Arrow */
295	/* 82 */ KEY_Up,		/* Up Arrow */
296	/* 83 */ KEY_NumLock,	/* Num Lock */
297	/* 84 */ KEY_KP_Divide,	/* Keypad / */
298	/* 85 */ KEY_KP_Multiply, /* Keypad * */
299	/* 86 */ KEY_KP_Minus,	/* Keypad - */
300	/* 87 */ KEY_KP_Plus,	/* Keypad + */
301	/* 88 */ KEY_KP_Enter,	/* Keypad Enter */
302	/* 89 */ KEY_KP_1,	/* Keypad 1 End */
303	/* 90 */ KEY_KP_2,	/* Keypad 2 Down */
304	/* 91 */ KEY_KP_3,	/* Keypad 3 Pg Down */
305	/* 92 */ KEY_KP_4,	/* Keypad 4 Left  */
306	/* 93 */ KEY_KP_5,	/* Keypad 5 */
307	/* 94 */ KEY_KP_6,	/* Keypad 6 */
308	/* 95 */ KEY_KP_7,	/* Keypad 7 Home */
309	/* 96 */ KEY_KP_8,	/* Keypad 8 Up */
310	/* 97 */ KEY_KP_9,	/* KEypad 9 Pg Up */
311	/* 98 */ KEY_KP_0,	/* Keypad 0 Ins */
312	/* 99 */ KEY_KP_Decimal,	/* Keypad . Del */
313	/* 100 */ KEY_Less,	/* < > on some keyboards */
314	/* 101 */ KEY_Menu,	/* Menu */
315	/* 102 */ KEY_Power,	/* sleep key on Sun USB */
316	/* 103 */ KEY_KP_Equal, /* Keypad = on Mac keyboards */
317	/* 104 */ KEY_F13,
318	/* 105 */ KEY_F14,
319	/* 106 */ KEY_F15,
320	/* 107 */ KEY_F16,
321	/* 108 */ KEY_NOTUSED,
322	/* 109 */ KEY_Power,
323	/* 110 */ KEY_NOTUSED,
324	/* 111 */ KEY_NOTUSED,
325	/* 112 */ KEY_NOTUSED,
326	/* 113 */ KEY_NOTUSED,
327	/* 114 */ KEY_NOTUSED,
328	/* 115 */ KEY_NOTUSED,
329	/* 116 */ KEY_L7,
330	/* 117 */ KEY_Help,
331	/* 118 */ KEY_L3,
332	/* 119 */ KEY_L5,
333	/* 120 */ KEY_L1,
334	/* 121 */ KEY_L2,
335	/* 122 */ KEY_L4,
336	/* 123 */ KEY_L10,
337	/* 124 */ KEY_L6,
338	/* 125 */ KEY_L8,
339	/* 126 */ KEY_L9,
340	/* 127 */ KEY_Mute,
341	/* 128 */ KEY_AudioRaise,
342	/* 129 */ KEY_AudioLower,
343	/* 130 */ KEY_NOTUSED,
344	/* 131 */ KEY_NOTUSED,
345	/* 132 */ KEY_NOTUSED,
346	/* 133 */ KEY_NOTUSED,
347	/* 134 */ KEY_NOTUSED,
348/*
349 * Special keycodes for Japanese keyboards
350 * Override atKeyname HKTG and BSlash2 code to unique values for JP106 keyboards
351 */
352#undef KEY_HKTG
353#define KEY_HKTG	200	/* Japanese Hiragana Katakana Toggle */
354#undef KEY_BSlash2
355#define KEY_BSlash2	203	/* Japanese '\_' key */
356
357	/* 135 */ KEY_BSlash2,	/* Japanese 106 kbd: '\_' */
358	/* 136 */ KEY_HKTG,	/* Japanese 106 kbd: Hiragana Katakana toggle */
359	/* 137 */ KEY_Yen,	/* Japanese 106 kbd: '\|' */
360	/* 138 */ KEY_XFER,	/* Japanese 106 kbd: Henkan */
361	/* 139 */ KEY_NFER,	/* Japanese 106 kbd: Muhenkan */
362	/* 140 */ KEY_NOTUSED,
363	/* 141 */ KEY_NOTUSED,
364	/* 142 */ KEY_NOTUSED,
365	/* 143 */ KEY_NOTUSED,
366/*
367 * Special keycodes for Korean keyboards
368 * Define Hangul and Hangul_Hanja unique key codes
369 * These keys also use KANA and EISU on some Macintosh Japanese USB keyboards
370 */
371#define KEY_Hangul		201	/* Also KANA Key on Mac JP USB kbd */
372#define KEY_Hangul_Hanja	202	/* Also EISU Key on Mac JP USB kbd */
373	/* 144 */ KEY_Hangul,		/* Korean 106 kbd: Hangul */
374	/* 145 */ KEY_Hangul_Hanja,	/* Korean 106 kbd: Hangul Hanja */
375	/* 146 */ KEY_NOTUSED,
376	/* 147 */ KEY_NOTUSED,
377	/* 148 */ KEY_NOTUSED,
378	/* 149 */ KEY_NOTUSED,
379	/* 150 */ KEY_NOTUSED,
380	/* 151 */ KEY_NOTUSED,
381	/* 152 */ KEY_NOTUSED,
382	/* 153 */ KEY_NOTUSED,
383	/* 154 */ KEY_NOTUSED,
384	/* 155 */ KEY_NOTUSED,
385	/* 156 */ KEY_NOTUSED,
386	/* 157 */ KEY_NOTUSED,
387	/* 158 */ KEY_NOTUSED,
388	/* 159 */ KEY_NOTUSED,
389	/* 160 */ KEY_NOTUSED,
390	/* 161 */ KEY_NOTUSED,
391	/* 162 */ KEY_NOTUSED,
392	/* 163 */ KEY_NOTUSED,
393	/* 164 */ KEY_NOTUSED,
394	/* 165 */ KEY_NOTUSED,
395	/* 166 */ KEY_NOTUSED,
396	/* 167 */ KEY_NOTUSED,
397	/* 168 */ KEY_NOTUSED,
398	/* 169 */ KEY_NOTUSED,
399	/* 170 */ KEY_NOTUSED,
400	/* 171 */ KEY_NOTUSED,
401	/* 172 */ KEY_NOTUSED,
402	/* 173 */ KEY_NOTUSED,
403	/* 174 */ KEY_NOTUSED,
404	/* 175 */ KEY_NOTUSED,
405	/* 176 */ KEY_NOTUSED,
406	/* 177 */ KEY_NOTUSED,
407	/* 178 */ KEY_NOTUSED,
408	/* 179 */ KEY_NOTUSED,
409	/* 180 */ KEY_NOTUSED,
410	/* 181 */ KEY_NOTUSED,
411	/* 182 */ KEY_NOTUSED,
412	/* 183 */ KEY_NOTUSED,
413	/* 184 */ KEY_NOTUSED,
414	/* 185 */ KEY_NOTUSED,
415	/* 186 */ KEY_NOTUSED,
416	/* 187 */ KEY_NOTUSED,
417	/* 188 */ KEY_NOTUSED,
418	/* 189 */ KEY_NOTUSED,
419	/* 190 */ KEY_NOTUSED,
420	/* 191 */ KEY_NOTUSED,
421	/* 192 */ KEY_NOTUSED,
422	/* 193 */ KEY_NOTUSED,
423	/* 194 */ KEY_NOTUSED,
424	/* 195 */ KEY_NOTUSED,
425	/* 196 */ KEY_NOTUSED,
426	/* 197 */ KEY_NOTUSED,
427	/* 198 */ KEY_NOTUSED,
428	/* 199 */ KEY_NOTUSED,
429	/* 200 */ KEY_NOTUSED,
430	/* 201 */ KEY_NOTUSED,
431	/* 202 */ KEY_NOTUSED,
432	/* 203 */ KEY_NOTUSED,
433	/* 204 */ KEY_NOTUSED,
434	/* 205 */ KEY_NOTUSED,
435	/* 206 */ KEY_NOTUSED,
436	/* 207 */ KEY_NOTUSED,
437	/* 208 */ KEY_NOTUSED,
438	/* 209 */ KEY_NOTUSED,
439	/* 210 */ KEY_NOTUSED,
440	/* 211 */ KEY_NOTUSED,
441	/* 212 */ KEY_NOTUSED,
442	/* 213 */ KEY_NOTUSED,
443	/* 214 */ KEY_NOTUSED,
444	/* 215 */ KEY_NOTUSED,
445	/* 216 */ KEY_NOTUSED,
446	/* 217 */ KEY_NOTUSED,
447	/* 218 */ KEY_NOTUSED,
448	/* 219 */ KEY_NOTUSED,
449	/* 220 */ KEY_NOTUSED,
450	/* 221 */ KEY_NOTUSED,
451	/* 222 */ KEY_NOTUSED,
452	/* 223 */ KEY_NOTUSED,
453	/* 224 */ KEY_LCtrl,	/* Left Control */
454	/* 225 */ KEY_ShiftL,	/* Left Shift */
455	/* 226 */ KEY_Alt,	/* Left Alt */
456	/* 227 */ KEY_LMeta,	/* Left Meta */
457	/* 228 */ KEY_RCtrl,	/* Right Control */
458	/* 229 */ KEY_ShiftR,	/* Right Shift */
459	/* 230 */ KEY_AltLang,	/* Right Alt, AKA AltGr */
460	/* 231 */ KEY_LMeta,	/* Right Meta XXX */
461};
462#define WS_USB_MAP_SIZE (sizeof(wsUsbMap)/sizeof(*wsUsbMap))
463
464static
465TransMapRec wsUsb = {
466    0,
467    WS_USB_MAP_SIZE,
468    wsUsbMap
469};
470
471static CARD8 wsXtMap[] = {
472	/* 0 */ KEY_NOTUSED,
473	/* 1 */ KEY_Escape,
474	/* 2 */ KEY_1,
475	/* 3 */ KEY_2,
476	/* 4 */ KEY_3,
477	/* 5 */ KEY_4,
478	/* 6 */ KEY_5,
479	/* 7 */ KEY_6,
480	/* 8 */ KEY_7,
481	/* 9 */ KEY_8,
482	/* 10 */ KEY_9,
483	/* 11 */ KEY_0,
484	/* 12 */ KEY_Minus,
485	/* 13 */ KEY_Equal,
486	/* 14 */ KEY_BackSpace,
487	/* 15 */ KEY_Tab,
488	/* 16 */ KEY_Q,
489	/* 17 */ KEY_W,
490	/* 18 */ KEY_E,
491	/* 19 */ KEY_R,
492	/* 20 */ KEY_T,
493	/* 21 */ KEY_Y,
494	/* 22 */ KEY_U,
495	/* 23 */ KEY_I,
496	/* 24 */ KEY_O,
497	/* 25 */ KEY_P,
498	/* 26 */ KEY_LBrace,
499	/* 27 */ KEY_RBrace,
500	/* 28 */ KEY_Enter,
501	/* 29 */ KEY_LCtrl,
502	/* 30 */ KEY_A,
503	/* 31 */ KEY_S,
504	/* 32 */ KEY_D,
505	/* 33 */ KEY_F,
506	/* 34 */ KEY_G,
507	/* 35 */ KEY_H,
508	/* 36 */ KEY_J,
509	/* 37 */ KEY_K,
510	/* 38 */ KEY_L,
511	/* 39 */ KEY_SemiColon,
512	/* 40 */ KEY_Quote,
513	/* 41 */ KEY_Tilde,
514	/* 42 */ KEY_ShiftL,
515	/* 43 */ KEY_BSlash,
516	/* 44 */ KEY_Z,
517	/* 45 */ KEY_X,
518	/* 46 */ KEY_C,
519	/* 47 */ KEY_V,
520	/* 48 */ KEY_B,
521	/* 49 */ KEY_N,
522	/* 50 */ KEY_M,
523	/* 51 */ KEY_Comma,
524	/* 52 */ KEY_Period,
525	/* 53 */ KEY_Slash,
526	/* 54 */ KEY_ShiftR,
527	/* 55 */ KEY_KP_Multiply,
528	/* 56 */ KEY_Alt,
529	/* 57 */ KEY_Space,
530	/* 58 */ KEY_CapsLock,
531	/* 59 */ KEY_F1,
532	/* 60 */ KEY_F2,
533	/* 61 */ KEY_F3,
534	/* 62 */ KEY_F4,
535	/* 63 */ KEY_F5,
536	/* 64 */ KEY_F6,
537	/* 65 */ KEY_F7,
538	/* 66 */ KEY_F8,
539	/* 67 */ KEY_F9,
540	/* 68 */ KEY_F10,
541	/* 69 */ KEY_NumLock,
542	/* 70 */ KEY_ScrollLock,
543	/* 71 */ KEY_KP_7,
544	/* 72 */ KEY_KP_8,
545	/* 73 */ KEY_KP_9,
546	/* 74 */ KEY_KP_Minus,
547	/* 75 */ KEY_KP_4,
548	/* 76 */ KEY_KP_5,
549	/* 77 */ KEY_KP_6,
550	/* 78 */ KEY_KP_Plus,
551	/* 79 */ KEY_KP_1,
552	/* 80 */ KEY_KP_2,
553	/* 81 */ KEY_KP_3,
554	/* 82 */ KEY_KP_0,
555	/* 83 */ KEY_KP_Decimal,
556	/* 84 */ KEY_NOTUSED,
557	/* 85 */ KEY_NOTUSED,
558	/* 86 */ KEY_Less,	/* backslash on uk, < on german */
559	/* 87 */ KEY_F11,
560	/* 88 */ KEY_F12,
561	/* 89 */ KEY_NOTUSED,
562	/* 90 */ KEY_NOTUSED,
563	/* 91 */ KEY_NOTUSED,
564	/* 92 */ KEY_NOTUSED,
565	/* 93 */ KEY_NOTUSED,
566	/* 94 */ KEY_NOTUSED,
567	/* 95 */ KEY_NOTUSED,
568	/* 96 */ KEY_NOTUSED,
569	/* 97 */ KEY_NOTUSED,
570	/* 98 */ KEY_NOTUSED,
571	/* 99 */ KEY_NOTUSED,
572	/* 100 */ KEY_NOTUSED,
573	/* 101 */ KEY_NOTUSED,
574	/* 102 */ KEY_NOTUSED,
575	/* 103 */ KEY_NOTUSED,
576	/* 104 */ KEY_NOTUSED,
577	/* 105 */ KEY_NOTUSED,
578	/* 106 */ KEY_NOTUSED,
579	/* 107 */ KEY_NOTUSED,
580	/* 108 */ KEY_NOTUSED,
581	/* 109 */ KEY_NOTUSED,
582	/* 110 */ KEY_NOTUSED,
583	/* 111 */ KEY_NOTUSED,
584	/* 112 */ KEY_HKTG,
585	/* 113 */ KEY_NOTUSED,
586	/* 114 */ KEY_NOTUSED,
587	/* 115 */ KEY_BSlash2,
588	/* 116 */ KEY_NOTUSED,
589	/* 117 */ KEY_NOTUSED,
590	/* 118 */ KEY_NOTUSED,
591	/* 119 */ KEY_NOTUSED,
592	/* 120 */ KEY_NOTUSED,
593	/* 121 */ KEY_XFER,
594	/* 122 */ KEY_NOTUSED,
595	/* 123 */ KEY_NFER,
596	/* 124 */ KEY_NOTUSED,
597	/* 125 */ KEY_Yen,
598	/* 126 */ KEY_NOTUSED,
599	/* 127 */ KEY_Pause,
600	/* 128 */ KEY_NOTUSED,
601	/* 129 */ KEY_NOTUSED,
602	/* 130 */ KEY_NOTUSED,
603	/* 131 */ KEY_NOTUSED,
604	/* 132 */ KEY_NOTUSED,
605	/* 133 */ KEY_NOTUSED,
606	/* 134 */ KEY_NOTUSED,
607	/* 135 */ KEY_NOTUSED,
608	/* 136 */ KEY_NOTUSED,
609	/* 137 */ KEY_NOTUSED,
610	/* 138 */ KEY_NOTUSED,
611	/* 139 */ KEY_NOTUSED,
612	/* 140 */ KEY_NOTUSED,
613	/* 141 */ KEY_NOTUSED,
614	/* 142 */ KEY_NOTUSED,
615	/* 143 */ KEY_NOTUSED,
616	/* 144 */ KEY_NOTUSED,
617	/* 145 */ KEY_NOTUSED,
618	/* 146 */ KEY_NOTUSED,
619	/* 147 */ KEY_NOTUSED,
620	/* 148 */ KEY_NOTUSED,
621	/* 149 */ KEY_NOTUSED,
622	/* 150 */ KEY_NOTUSED,
623	/* 151 */ KEY_NOTUSED,
624	/* 152 */ KEY_NOTUSED,
625	/* 153 */ KEY_NOTUSED,
626	/* 154 */ KEY_NOTUSED,
627	/* 155 */ KEY_NOTUSED,
628	/* 156 */ KEY_KP_Enter,
629	/* 157 */ KEY_RCtrl,
630	/* 158 */ KEY_NOTUSED,
631	/* 159 */ KEY_NOTUSED,
632	/* 160 */ KEY_Mute,
633	/* 161 */ KEY_NOTUSED,
634	/* 162 */ KEY_NOTUSED,
635	/* 163 */ KEY_NOTUSED,
636	/* 164 */ KEY_NOTUSED,
637	/* 165 */ KEY_NOTUSED,
638	/* 166 */ KEY_NOTUSED,
639	/* 167 */ KEY_NOTUSED,
640	/* 168 */ KEY_NOTUSED,
641	/* 169 */ KEY_NOTUSED,
642	/* 170 */ KEY_Print,
643	/* 171 */ KEY_NOTUSED,
644	/* 172 */ KEY_NOTUSED,
645	/* 173 */ KEY_NOTUSED,
646	/* 174 */ KEY_AudioLower,
647	/* 175 */ KEY_AudioRaise,
648	/* 176 */ KEY_NOTUSED,
649	/* 177 */ KEY_NOTUSED,
650	/* 178 */ KEY_NOTUSED,
651	/* 179 */ KEY_NOTUSED,
652	/* 180 */ KEY_NOTUSED,
653	/* 181 */ KEY_KP_Divide,
654	/* 182 */ KEY_NOTUSED,
655	/* 183 */ KEY_Print,
656	/* 184 */ KEY_AltLang,
657	/* 185 */ KEY_NOTUSED,
658	/* 186 */ KEY_NOTUSED,
659	/* 187 */ KEY_NOTUSED,
660	/* 188 */ KEY_NOTUSED,
661	/* 189 */ KEY_NOTUSED,
662	/* 190 */ KEY_NOTUSED,
663	/* 191 */ KEY_NOTUSED,
664	/* 192 */ KEY_NOTUSED,
665	/* 193 */ KEY_NOTUSED,
666	/* 194 */ KEY_NOTUSED,
667	/* 195 */ KEY_NOTUSED,
668	/* 196 */ KEY_NOTUSED,
669	/* 197 */ KEY_NOTUSED,
670	/* 198 */ KEY_NOTUSED,
671	/* 199 */ KEY_Home,
672	/* 200 */ KEY_Up,
673	/* 201 */ KEY_PgUp,
674	/* 202 */ KEY_NOTUSED,
675	/* 203 */ KEY_Left,
676	/* 204 */ KEY_NOTUSED,
677	/* 205 */ KEY_Right,
678	/* 206 */ KEY_NOTUSED,
679	/* 207 */ KEY_End,
680	/* 208 */ KEY_Down,
681	/* 209 */ KEY_PgDown,
682	/* 210 */ KEY_Insert,
683	/* 211 */ KEY_Delete,
684	/* 212 */ KEY_NOTUSED,
685	/* 213 */ KEY_NOTUSED,
686	/* 214 */ KEY_NOTUSED,
687	/* 215 */ KEY_NOTUSED,
688	/* 216 */ KEY_NOTUSED,
689	/* 217 */ KEY_NOTUSED,
690	/* 218 */ KEY_NOTUSED,
691	/* 219 */ KEY_LMeta,
692	/* 220 */ KEY_RMeta,
693	/* 221 */ KEY_Menu,
694};
695#define WS_XT_MAP_SIZE (sizeof(wsXtMap)/sizeof(*wsXtMap))
696
697static
698TransMapRec wsXt = {
699    0,
700    WS_XT_MAP_SIZE,
701    wsXtMap
702};
703
704/* Map for adb keyboards  */
705static CARD8 wsAdbMap[] = {
706	/* 0 */ KEY_A,
707	/* 1 */ KEY_S,
708	/* 2 */ KEY_D,
709	/* 3 */ KEY_F,
710	/* 4 */ KEY_H,
711	/* 5 */ KEY_G,
712	/* 6 */ KEY_Z,
713	/* 7 */ KEY_X,
714	/* 8 */ KEY_C,
715	/* 9 */ KEY_V,
716	/* 10 */ KEY_UNKNOWN,	/* @ # on french keyboards */
717	/* 11 */ KEY_B,
718	/* 12 */ KEY_Q,
719	/* 13 */ KEY_W,
720	/* 14 */ KEY_E,
721	/* 15 */ KEY_R,
722	/* 16 */ KEY_Y,
723	/* 17 */ KEY_T,
724	/* 18 */ KEY_1,
725	/* 19 */ KEY_2,
726	/* 20 */ KEY_3,
727	/* 21 */ KEY_4,
728	/* 22 */ KEY_6,
729	/* 23 */ KEY_5,
730	/* 24 */ KEY_Equal,
731	/* 25 */ KEY_9,
732	/* 26 */ KEY_7,
733	/* 27 */ KEY_Minus,
734	/* 28 */ KEY_8,
735	/* 29 */ KEY_0,
736	/* 30 */ KEY_RBrace,
737	/* 31 */ KEY_O,
738	/* 32 */ KEY_U,
739	/* 33 */ KEY_LBrace,
740	/* 34 */ KEY_I,
741	/* 35 */ KEY_P,
742	/* 36 */ KEY_Enter,
743	/* 37 */ KEY_L,
744	/* 38 */ KEY_J,
745	/* 39 */ KEY_Quote,
746	/* 40 */ KEY_K,
747	/* 41 */ KEY_SemiColon,
748	/* 42 */ KEY_BSlash,
749	/* 43 */ KEY_Comma,
750	/* 44 */ KEY_Slash,
751	/* 45 */ KEY_N,
752	/* 46 */ KEY_M,
753	/* 47 */ KEY_Period,
754	/* 48 */ KEY_Tab,
755	/* 49 */ KEY_Space,
756	/* 50 */ KEY_Tilde,
757	/* 51 */ KEY_BackSpace,
758	/* 52 */ KEY_AltLang,
759	/* 53 */ KEY_Escape,
760	/* 54 */ KEY_LCtrl,
761	/* 55 */ KEY_LMeta,
762	/* 56 */ KEY_ShiftL,
763	/* 57 */ KEY_CapsLock,
764	/* 58 */ KEY_Alt,
765	/* 59 */ KEY_Left,
766	/* 60 */ KEY_Right,
767	/* 61 */ KEY_Down,
768	/* 62 */ KEY_Up,
769	/* 63 */ KEY_UNKNOWN,	/* Fn */
770	/* 64 */ KEY_NOTUSED,
771	/* 65 */ KEY_KP_Decimal,
772	/* 66 */ KEY_NOTUSED,
773	/* 67 */ KEY_KP_Multiply,
774	/* 68 */ KEY_NOTUSED,
775	/* 69 */ KEY_KP_Plus,
776	/* 70 */ KEY_NOTUSED,
777	/* 71 */ KEY_NumLock,	/* Clear */
778	/* 72 */ KEY_NOTUSED,
779	/* 73 */ KEY_NOTUSED,
780	/* 74 */ KEY_NOTUSED,
781	/* 75 */ KEY_KP_Divide,
782	/* 76 */ KEY_KP_Enter,
783	/* 77 */ KEY_NOTUSED,
784	/* 78 */ KEY_KP_Minus,
785	/* 79 */ KEY_NOTUSED,
786	/* 80 */ KEY_NOTUSED,
787	/* 81 */ KEY_KP_Equal,	/* Keypad = */
788	/* 82 */ KEY_KP_0,
789	/* 83 */ KEY_KP_1,
790	/* 84 */ KEY_KP_2,
791	/* 85 */ KEY_KP_3,
792	/* 86 */ KEY_KP_4,
793	/* 87 */ KEY_KP_5,
794	/* 88 */ KEY_KP_6,
795	/* 89 */ KEY_KP_7,
796	/* 90 */ KEY_NOTUSED,
797	/* 91 */ KEY_KP_8,
798	/* 92 */ KEY_KP_9,
799	/* 93 */ KEY_NOTUSED,
800	/* 94 */ KEY_NOTUSED,
801	/* 95 */ KEY_KP_Decimal,	/* Keypad ,  */
802	/* 96 */ KEY_F5,
803	/* 97 */ KEY_F6,
804	/* 98 */ KEY_F7,
805	/* 99 */ KEY_F3,
806	/* 100 */ KEY_F8,
807	/* 101 */ KEY_F9,
808	/* 102 */ KEY_NOTUSED,
809	/* 103 */ KEY_F11,
810	/* 104 */ KEY_NOTUSED,
811	/* 105 */ KEY_Print,
812	/* 106 */ KEY_KP_Enter,
813	/* 107 */ KEY_ScrollLock,
814	/* 108 */ KEY_NOTUSED,
815	/* 109 */ KEY_F10,
816	/* 110 */ KEY_NOTUSED,
817	/* 111 */ KEY_F12,
818	/* 112 */ KEY_NOTUSED,
819	/* 113 */ KEY_Pause,
820	/* 114 */ KEY_Insert,
821	/* 115 */ KEY_Home,
822	/* 116 */ KEY_PgUp,
823	/* 117 */ KEY_Delete,
824	/* 118 */ KEY_F4,
825	/* 119 */ KEY_End,
826	/* 120 */ KEY_F2,
827	/* 121 */ KEY_PgDown,
828	/* 122 */ KEY_F1,
829	/* 123 */ KEY_NOTUSED,
830	/* 124 */ KEY_NOTUSED,
831	/* 125 */ KEY_NOTUSED,
832	/* 126 */ KEY_NOTUSED,
833	/* 127 */ KEY_Power
834};
835#define WS_ADB_MAP_SIZE (sizeof(wsAdbMap)/sizeof(*wsAdbMap))
836
837static
838TransMapRec wsAdb = {
839    0,
840    WS_ADB_MAP_SIZE,
841    wsAdbMap
842};
843
844/* Map for amiga keyboards  */
845static CARD8 wsAmigaMap[] = {
846	/* 0 */ KEY_Tilde,
847	/* 1 */ KEY_1,
848	/* 2 */ KEY_2,
849	/* 3 */ KEY_3,
850	/* 4 */ KEY_4,
851	/* 5 */ KEY_5,
852	/* 6 */ KEY_6,
853	/* 7 */ KEY_7,
854	/* 8 */ KEY_8,
855	/* 9 */ KEY_9,
856	/* 10 */ KEY_0,
857	/* 11 */ KEY_Minus,
858	/* 12 */ KEY_Equal,
859	/* 13 */ KEY_BSlash,	/* key in this position only on Amiga */
860	/* 14 */ KEY_NOTUSED,
861	/* 15 */ KEY_KP_0,
862	/* 16 */ KEY_Q,
863	/* 17 */ KEY_W,
864	/* 18 */ KEY_E,
865	/* 19 */ KEY_R,
866	/* 20 */ KEY_T,
867	/* 21 */ KEY_Y,
868	/* 22 */ KEY_U,
869	/* 23 */ KEY_I,
870	/* 24 */ KEY_O,
871	/* 25 */ KEY_P,
872	/* 26 */ KEY_LBrace,
873	/* 27 */ KEY_RBrace,
874	/* 28 */ KEY_NOTUSED,
875	/* 29 */ KEY_KP_1,
876	/* 30 */ KEY_KP_2,
877	/* 31 */ KEY_KP_3,
878	/* 32 */ KEY_A,
879	/* 33 */ KEY_S,
880	/* 34 */ KEY_D,
881	/* 35 */ KEY_F,
882	/* 36 */ KEY_G,
883	/* 37 */ KEY_H,
884	/* 38 */ KEY_J,
885	/* 39 */ KEY_K,
886	/* 40 */ KEY_L,
887	/* 41 */ KEY_SemiColon,
888	/* 42 */ KEY_Quote,
889	/* 43 */ KEY_BSlash,	/* # on international keyboards */
890	/* 44 */ KEY_NOTUSED,
891	/* 45 */ KEY_KP_4,
892	/* 46 */ KEY_KP_5,
893	/* 47 */ KEY_KP_6,
894	/* 48 */ KEY_Less,
895	/* 49 */ KEY_Z,
896	/* 50 */ KEY_X,
897	/* 51 */ KEY_C,
898	/* 52 */ KEY_V,
899	/* 53 */ KEY_B,
900	/* 54 */ KEY_N,
901	/* 55 */ KEY_M,
902	/* 56 */ KEY_Comma,
903	/* 57 */ KEY_Period,
904	/* 58 */ KEY_Slash,
905	/* 59 */ KEY_NOTUSED,
906	/* 60 */ KEY_KP_Decimal,
907	/* 61 */ KEY_KP_7,
908	/* 62 */ KEY_KP_8,
909	/* 63 */ KEY_KP_9,
910	/* 64 */ KEY_Space,
911	/* 65 */ KEY_BackSpace,
912	/* 66 */ KEY_Tab,
913	/* 67 */ KEY_KP_Enter,
914	/* 68 */ KEY_Enter,
915	/* 69 */ KEY_Escape,
916	/* 70 */ KEY_Delete,
917	/* 71 */ KEY_NOTUSED,
918	/* 72 */ KEY_NOTUSED,
919	/* 73 */ KEY_NOTUSED,
920	/* 74 */ KEY_KP_Minus,
921	/* 75 */ KEY_NOTUSED,
922	/* 76 */ KEY_Up,
923	/* 77 */ KEY_Down,
924	/* 78 */ KEY_Right,
925	/* 79 */ KEY_Left,
926	/* 80 */ KEY_F1,
927	/* 81 */ KEY_F2,
928	/* 82 */ KEY_F3,
929	/* 83 */ KEY_F4,
930	/* 84 */ KEY_F5,
931	/* 85 */ KEY_F6,
932	/* 86 */ KEY_F7,
933	/* 87 */ KEY_F8,
934	/* 88 */ KEY_F9,
935	/* 89 */ KEY_F10,
936	/* 90 */ KEY_UNKNOWN,		/* Keypad [ */
937	/* 91 */ KEY_UNKNOWN,		/* Keypad ] */
938	/* 92 */ KEY_KP_Divide,
939	/* 93 */ KEY_KP_Multiply,
940	/* 94 */ KEY_KP_Plus,
941	/* 95 */ KEY_Help,
942	/* 96 */ KEY_ShiftL,
943	/* 97 */ KEY_ShiftR,
944	/* 98 */ KEY_NOTUSED,
945	/* 99 */ KEY_LCtrl,
946	/* 100 */ KEY_Alt,
947	/* 101 */ KEY_AltLang,
948	/* 102 */ KEY_LMeta,
949	/* 103 */ KEY_RMeta
950};
951#define WS_AMIGA_MAP_SIZE (sizeof(wsAmigaMap)/sizeof(*wsAmigaMap))
952
953static
954TransMapRec wsAmiga = {
955    0,
956    WS_AMIGA_MAP_SIZE,
957    wsAmigaMap
958};
959
960/* Map for LK201 keyboards  */
961static CARD8 wsLk201Map[] = {
962	/* 0 */ KEY_F1,
963	/* 1 */ KEY_F2,
964	/* 2 */ KEY_F3,
965	/* 3 */ KEY_F4,
966	/* 4 */ KEY_F5,
967	/* 5 */ KEY_NOTUSED,
968	/* 6 */ KEY_NOTUSED,
969	/* 7 */ KEY_NOTUSED,
970	/* 8 */ KEY_NOTUSED,
971	/* 9 */ KEY_NOTUSED,
972	/* 10 */ KEY_NOTUSED,
973	/* 11 */ KEY_NOTUSED,
974	/* 12 */ KEY_NOTUSED,
975	/* 13 */ KEY_NOTUSED,
976	/* 14 */ KEY_F6,
977	/* 15 */ KEY_F7,
978	/* 16 */ KEY_F8,
979	/* 17 */ KEY_F9,
980	/* 18 */ KEY_F10,
981	/* 19 */ KEY_NOTUSED,
982	/* 20 */ KEY_NOTUSED,
983	/* 21 */ KEY_NOTUSED,
984	/* 22 */ KEY_NOTUSED,
985	/* 23 */ KEY_NOTUSED,
986	/* 24 */ KEY_NOTUSED,
987	/* 25 */ KEY_NOTUSED,
988	/* 26 */ KEY_NOTUSED,
989	/* 27 */ KEY_F11,
990	/* 28 */ KEY_F12,
991	/* 29 */ KEY_F13,
992	/* 30 */ KEY_F14,
993	/* 31 */ KEY_NOTUSED,
994	/* 32 */ KEY_NOTUSED,
995	/* 33 */ KEY_NOTUSED,
996	/* 34 */ KEY_NOTUSED,
997	/* 35 */ KEY_NOTUSED,
998	/* 36 */ KEY_NOTUSED,
999	/* 37 */ KEY_NOTUSED,
1000	/* 38 */ KEY_Help,
1001	/* 39 */ KEY_F16,	/* Do */
1002	/* 40 */ KEY_NOTUSED,
1003	/* 41 */ KEY_NOTUSED,
1004	/* 42 */ KEY_F17,
1005	/* 43 */ KEY_L8,	/* F18 */
1006	/* 44 */ KEY_L9,	/* F19 */
1007	/* 45 */ KEY_L10,	/* F20 */
1008	/* 46 */ KEY_NOTUSED,
1009	/* 47 */ KEY_NOTUSED,
1010	/* 48 */ KEY_NOTUSED,
1011	/* 49 */ KEY_NOTUSED,
1012	/* 50 */ KEY_NOTUSED,
1013	/* 51 */ KEY_NOTUSED,
1014	/* 52 */ KEY_Home,	/* Find */
1015	/* 53 */ KEY_Insert,	/* Insert Here */
1016	/* 54 */ KEY_Delete,	/* Re-move */
1017	/* 55 */ KEY_End,	/* Select */
1018	/* 56 */ KEY_PgUp,	/* Prev-Screen */
1019	/* 57 */ KEY_PgDown,	/* Next-Screen */
1020	/* 58 */ KEY_NOTUSED,
1021	/* 59 */ KEY_NOTUSED,
1022	/* 60 */ KEY_KP_0,
1023	/* 61 */ KEY_NOTUSED,
1024	/* 62 */ KEY_KP_Decimal,
1025	/* 63 */ KEY_KP_Enter,
1026	/* 64 */ KEY_KP_1,
1027	/* 65 */ KEY_KP_2,
1028	/* 66 */ KEY_KP_3,
1029	/* 67 */ KEY_KP_4,
1030	/* 68 */ KEY_KP_5,
1031	/* 69 */ KEY_KP_6,
1032	/* 70 */ KEY_KP_Plus,	/* KP Comma */
1033	/* 71 */ KEY_KP_7,
1034	/* 72 */ KEY_KP_8,
1035	/* 73 */ KEY_KP_9,
1036	/* 74 */ KEY_KP_Minus,
1037	/* 75 */ KEY_L1,	/* PF1 */
1038	/* 76 */ KEY_L2,	/* PF2 */
1039	/* 77 */ KEY_L3,	/* PF3 */
1040	/* 78 */ KEY_L4,	/* PF4 */
1041	/* 79 */ KEY_NOTUSED,
1042	/* 80 */ KEY_NOTUSED,
1043	/* 81 */ KEY_Left,
1044	/* 82 */ KEY_Right,
1045	/* 83 */ KEY_Down,
1046	/* 84 */ KEY_Up,
1047	/* 85 */ KEY_NOTUSED,
1048	/* 86 */ KEY_NOTUSED,
1049	/* 87 */ KEY_NOTUSED,
1050	/* 88 */ KEY_ShiftL,
1051	/* 89 */ KEY_LCtrl,
1052	/* 90 */ KEY_CapsLock,
1053	/* 91 */ KEY_Alt, 	/* Compose */
1054	/* 92 */ KEY_NOTUSED,
1055	/* 93 */ KEY_NOTUSED,
1056	/* 94 */ KEY_NOTUSED,
1057	/* 95 */ KEY_NOTUSED,
1058	/* 96 */ KEY_NOTUSED,
1059	/* 97 */ KEY_NOTUSED,
1060	/* 98 */ KEY_NOTUSED,
1061	/* 99 */ KEY_NOTUSED,
1062	/* 100 */ KEY_NOTUSED,
1063	/* 101 */ KEY_NOTUSED,
1064	/* 102 */ KEY_Delete,
1065	/* 103 */ KEY_Enter,
1066	/* 104 */ KEY_Tab,
1067	/* 105 */ KEY_Escape, /* tilde */
1068	/* 106 */ KEY_1,
1069	/* 107 */ KEY_Q,
1070	/* 108 */ KEY_A,
1071	/* 109 */ KEY_Z,
1072	/* 110 */ KEY_NOTUSED,
1073	/* 111 */ KEY_2,
1074	/* 112 */ KEY_W,
1075	/* 113 */ KEY_S,
1076	/* 114 */ KEY_X,
1077	/* 115 */ KEY_Less,
1078	/* 116 */ KEY_NOTUSED,
1079	/* 117 */ KEY_3,
1080	/* 118 */ KEY_E,
1081	/* 119 */ KEY_D,
1082	/* 120 */ KEY_C,
1083	/* 121 */ KEY_NOTUSED,
1084	/* 122 */ KEY_4,
1085	/* 123 */ KEY_R,
1086	/* 124 */ KEY_F,
1087	/* 125 */ KEY_V,
1088	/* 126 */ KEY_Space,
1089	/* 127 */ KEY_NOTUSED,
1090	/* 128 */ KEY_5,
1091	/* 129 */ KEY_T,
1092	/* 130 */ KEY_G,
1093	/* 131 */ KEY_B,
1094	/* 132 */ KEY_NOTUSED,
1095	/* 133 */ KEY_6,
1096	/* 134 */ KEY_Y,
1097	/* 135 */ KEY_H,
1098	/* 136 */ KEY_N,
1099	/* 137 */ KEY_NOTUSED,
1100	/* 138 */ KEY_7,
1101	/* 139 */ KEY_U,
1102	/* 140 */ KEY_J,
1103	/* 141 */ KEY_M,
1104	/* 142 */ KEY_NOTUSED,
1105	/* 143 */ KEY_8,
1106	/* 144 */ KEY_I,
1107	/* 145 */ KEY_K,
1108	/* 146 */ KEY_Comma,
1109	/* 147 */ KEY_NOTUSED,
1110	/* 148 */ KEY_9,
1111	/* 149 */ KEY_O,
1112	/* 150 */ KEY_L,
1113	/* 151 */ KEY_Period,
1114	/* 152 */ KEY_NOTUSED,
1115	/* 153 */ KEY_0,
1116	/* 154 */ KEY_P,
1117	/* 155 */ KEY_NOTUSED,
1118	/* 156 */ KEY_SemiColon,
1119	/* 157 */ KEY_Slash,
1120	/* 158 */ KEY_NOTUSED,
1121	/* 159 */ KEY_Equal,
1122	/* 160 */ KEY_RBrace,
1123	/* 161 */ KEY_BSlash,
1124	/* 162 */ KEY_NOTUSED,
1125	/* 163 */ KEY_Minus,
1126	/* 164 */ KEY_LBrace,
1127	/* 165 */ KEY_Quote,
1128	/* 166 */ KEY_NOTUSED,
1129	/* 167 */ KEY_NOTUSED,
1130	/* 168 */ KEY_NOTUSED,
1131	/* 169 */ KEY_NOTUSED,
1132	/* 170 */ KEY_NOTUSED,
1133	/* 171 */ KEY_NOTUSED,
1134	/* 172 */ KEY_NOTUSED,
1135	/* 173 */ KEY_NOTUSED,
1136	/* 174 */ KEY_NOTUSED,
1137	/* 175 */ KEY_NOTUSED,
1138	/* 176 */ KEY_NOTUSED,
1139	/* 177 */ KEY_NOTUSED,
1140	/* 178 */ KEY_NOTUSED,
1141	/* 179 */ KEY_NOTUSED,
1142	/* 180 */ KEY_NOTUSED,
1143	/* 181 */ KEY_NOTUSED,
1144	/* 182 */ KEY_NOTUSED,
1145	/* 183 */ KEY_NOTUSED,
1146	/* 184 */ KEY_NOTUSED,
1147	/* 185 */ KEY_NOTUSED,
1148	/* 186 */ KEY_NOTUSED,
1149	/* 187 */ KEY_NOTUSED,
1150	/* 188 */ KEY_NOTUSED,
1151	/* 189 */ KEY_NOTUSED,
1152	/* 190 */ KEY_NOTUSED,
1153	/* 191 */ KEY_NOTUSED,
1154	/* 192 */ KEY_NOTUSED,
1155	/* 193 */ KEY_NOTUSED,
1156	/* 194 */ KEY_NOTUSED,
1157	/* 195 */ KEY_NOTUSED,
1158	/* 196 */ KEY_NOTUSED,
1159	/* 197 */ KEY_NOTUSED,
1160	/* 198 */ KEY_NOTUSED,
1161	/* 199 */ KEY_NOTUSED,
1162	/* 200 */ KEY_NOTUSED,
1163	/* 201 */ KEY_NOTUSED,
1164	/* 202 */ KEY_NOTUSED,
1165	/* 203 */ KEY_NOTUSED,
1166	/* 204 */ KEY_NOTUSED,
1167	/* 205 */ KEY_NOTUSED,
1168	/* 206 */ KEY_NOTUSED,
1169	/* 207 */ KEY_NOTUSED,
1170	/* 208 */ KEY_NOTUSED,
1171	/* 209 */ KEY_NOTUSED,
1172	/* 210 */ KEY_NOTUSED,
1173	/* 211 */ KEY_NOTUSED,
1174	/* 212 */ KEY_NOTUSED,
1175	/* 213 */ KEY_NOTUSED,
1176	/* 214 */ KEY_NOTUSED,
1177	/* 215 */ KEY_NOTUSED,
1178	/* 216 */ KEY_NOTUSED,
1179	/* 217 */ KEY_NOTUSED,
1180	/* 218 */ KEY_NOTUSED,
1181	/* 219 */ KEY_NOTUSED,
1182	/* 220 */ KEY_NOTUSED,
1183	/* 221 */ KEY_NOTUSED,
1184	/* 222 */ KEY_NOTUSED,
1185	/* 223 */ KEY_NOTUSED,
1186	/* 224 */ KEY_NOTUSED,
1187	/* 225 */ KEY_NOTUSED,
1188	/* 226 */ KEY_NOTUSED,
1189	/* 227 */ KEY_NOTUSED,
1190	/* 228 */ KEY_NOTUSED,
1191	/* 229 */ KEY_NOTUSED,
1192	/* 230 */ KEY_NOTUSED,
1193	/* 231 */ KEY_NOTUSED,
1194	/* 232 */ KEY_NOTUSED,
1195	/* 233 */ KEY_NOTUSED,
1196	/* 234 */ KEY_NOTUSED,
1197	/* 235 */ KEY_NOTUSED,
1198	/* 236 */ KEY_NOTUSED,
1199	/* 237 */ KEY_NOTUSED,
1200	/* 238 */ KEY_NOTUSED,
1201	/* 239 */ KEY_NOTUSED,
1202	/* 240 */ KEY_NOTUSED,
1203	/* 241 */ KEY_NOTUSED,
1204	/* 242 */ KEY_NOTUSED,
1205	/* 243 */ KEY_NOTUSED,
1206	/* 244 */ KEY_NOTUSED,
1207	/* 245 */ KEY_NOTUSED,
1208	/* 246 */ KEY_NOTUSED,
1209	/* 247 */ KEY_NOTUSED,
1210	/* 248 */ KEY_NOTUSED,
1211	/* 249 */ KEY_NOTUSED,
1212	/* 250 */ KEY_NOTUSED,
1213	/* 251 */ KEY_NOTUSED,
1214};
1215#define WS_LK201_MAP_SIZE (sizeof(wsLk201Map)/sizeof(*wsLk201Map))
1216
1217static
1218TransMapRec wsLk201 = {
1219    0,
1220    WS_LK201_MAP_SIZE,
1221    wsLk201Map
1222};
1223
1224static CARD8 wsSunMap[] = {
1225	/* 0x00 */ KEY_Help,
1226	/* 0x01 */ KEY_L1,		/* stop */
1227	/* 0x02 */ KEY_AudioLower,	/* BrightnessDown / S-VolumeDown */
1228	/* 0x03 */ KEY_L2,		/* again */
1229	/* 0x04 */ KEY_AudioRaise,	/* BrightnessUp / S-VolumeUp */
1230	/* 0x05 */ KEY_F1,
1231	/* 0x06 */ KEY_F2,
1232	/* 0x07 */ KEY_F10,
1233	/* 0x08 */ KEY_F3,
1234	/* 0x09 */ KEY_F11,
1235	/* 0x0a */ KEY_F4,
1236	/* 0x0b */ KEY_F12,
1237	/* 0x0c */ KEY_F5,
1238	/* 0x0d */ KEY_AltLang,
1239	/* 0x0e */ KEY_F6,
1240	/* 0x0f */ KEY_NOTUSED,
1241	/* 0x10 */ KEY_F7,
1242	/* 0x11 */ KEY_F8,
1243	/* 0x12 */ KEY_F9,
1244	/* 0x13 */ KEY_Alt,
1245	/* 0x14 */ KEY_Up,
1246	/* 0x15 */ KEY_Pause,
1247	/* 0x16 */ KEY_Print,
1248	/* 0x17 */ KEY_ScrollLock,
1249	/* 0x18 */ KEY_Left,
1250	/* 0x19 */ KEY_L3,		/* props */
1251	/* 0x1a */ KEY_L4,		/* undo */
1252	/* 0x1b */ KEY_Down,
1253	/* 0x1c */ KEY_Right,
1254	/* 0x1d */ KEY_Escape,
1255	/* 0x1e */ KEY_1,
1256	/* 0x1f */ KEY_2,
1257	/* 0x20 */ KEY_3,
1258	/* 0x21 */ KEY_4,
1259	/* 0x22 */ KEY_5,
1260	/* 0x23 */ KEY_6,
1261	/* 0x24 */ KEY_7,
1262	/* 0x25 */ KEY_8,
1263	/* 0x26 */ KEY_9,
1264	/* 0x27 */ KEY_0,
1265	/* 0x28 */ KEY_Minus,
1266	/* 0x29 */ KEY_Equal,
1267	/* 0x2a */ KEY_Tilde,
1268	/* 0x2b */ KEY_BackSpace,
1269	/* 0x2c */ KEY_Insert,
1270	/* 0x2d */ KEY_Mute,		/* Audio Mute */
1271	/* 0x2e */ KEY_KP_Divide,
1272	/* 0x2f */ KEY_KP_Multiply,
1273	/* 0x30 */ KEY_Power,
1274	/* 0x31 */ KEY_L5,		/* front */
1275	/* 0x32 */ KEY_KP_Decimal,
1276	/* 0x33 */ KEY_L6,		/* copy */
1277	/* 0x34 */ KEY_Home,
1278	/* 0x35 */ KEY_Tab,
1279	/* 0x36 */ KEY_Q,
1280	/* 0x37 */ KEY_W,
1281	/* 0x38 */ KEY_E,
1282	/* 0x39 */ KEY_R,
1283	/* 0x3a */ KEY_T,
1284	/* 0x3b */ KEY_Y,
1285	/* 0x3c */ KEY_U,
1286	/* 0x3d */ KEY_I,
1287	/* 0x3e */ KEY_O,
1288	/* 0x3f */ KEY_P,
1289	/* 0x40 */ KEY_LBrace,
1290	/* 0x41 */ KEY_RBrace,
1291	/* 0x42 */ KEY_Delete,
1292	/* 0x43 */ KEY_Menu,		/* compose */
1293	/* 0x44 */ KEY_KP_7,
1294	/* 0x45 */ KEY_KP_8,
1295	/* 0x46 */ KEY_KP_9,
1296	/* 0x47 */ KEY_KP_Minus,
1297	/* 0x48 */ KEY_L7,		/* open */
1298	/* 0x49 */ KEY_L8,		/* paste */
1299	/* 0x4a */ KEY_End,
1300	/* 0x4b */ KEY_NOTUSED,
1301	/* 0x4c */ KEY_LCtrl,
1302	/* 0x4d */ KEY_A,
1303	/* 0x4e */ KEY_S,
1304	/* 0x4f */ KEY_D,
1305	/* 0x50 */ KEY_F,
1306	/* 0x51 */ KEY_G,
1307	/* 0x52 */ KEY_H,
1308	/* 0x53 */ KEY_J,
1309	/* 0x54 */ KEY_K,
1310	/* 0x55 */ KEY_L,
1311	/* 0x56 */ KEY_SemiColon,
1312	/* 0x57 */ KEY_Quote,
1313	/* 0x58 */ KEY_BSlash,
1314	/* 0x59 */ KEY_Enter,
1315	/* 0x5a */ KEY_KP_Enter,
1316	/* 0x5b */ KEY_KP_4,
1317	/* 0x5c */ KEY_KP_5,
1318	/* 0x5d */ KEY_KP_6,
1319	/* 0x5e */ KEY_KP_0,
1320	/* 0x5f */ KEY_L9,		/* find */
1321	/* 0x60 */ KEY_PgUp,
1322	/* 0x61 */ KEY_L10,		/* cut */
1323	/* 0x62 */ KEY_NumLock,
1324	/* 0x63 */ KEY_ShiftL,
1325	/* 0x64 */ KEY_Z,
1326	/* 0x65 */ KEY_X,
1327	/* 0x66 */ KEY_C,
1328	/* 0x67 */ KEY_V,
1329	/* 0x68 */ KEY_B,
1330	/* 0x69 */ KEY_N,
1331	/* 0x6a */ KEY_M,
1332	/* 0x6b */ KEY_Comma,
1333	/* 0x6c */ KEY_Period,
1334	/* 0x6d */ KEY_Slash,
1335	/* 0x6e */ KEY_ShiftR,
1336	/* 0x6f */ KEY_NOTUSED,		/* linefeed */
1337	/* 0x70 */ KEY_KP_1,
1338	/* 0x71 */ KEY_KP_2,
1339	/* 0x72 */ KEY_KP_3,
1340	/* 0x73 */ KEY_NOTUSED,
1341	/* 0x74 */ KEY_NOTUSED,
1342	/* 0x75 */ KEY_NOTUSED,
1343	/* 0x76 */ KEY_Help,		/* help */
1344	/* 0x77 */ KEY_CapsLock,
1345	/* 0x78 */ KEY_LMeta,
1346	/* 0x79 */ KEY_Space,
1347	/* 0x7a */ KEY_RMeta,
1348	/* 0x7b */ KEY_PgDown,
1349	/* 0x7c */ KEY_Less,		/* < > on some keyboards */
1350	/* 0x7d */ KEY_KP_Plus,
1351	/* 0x7e */ KEY_NOTUSED,
1352	/* 0x7f */ KEY_NOTUSED
1353};
1354#define WS_SUN_MAP_SIZE (sizeof(wsSunMap)/sizeof(*wsSunMap))
1355
1356static
1357TransMapRec wsSun = {
1358    0,
1359    WS_SUN_MAP_SIZE,
1360    wsSunMap
1361};
1362
1363#endif /* WSCONS_SUPPORT */
1364
1365/*ARGSUSED*/
1366
1367/*
1368 * KbdGetMapping --
1369 *	Get the national keyboard mapping. The keyboard type is set, a new map
1370 *      and the modifiermap is computed.
1371 */
1372
1373void
1374KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap)
1375{
1376  KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
1377  KeySym        *k;
1378  int           i;
1379
1380#ifndef __bsdi__
1381  switch (pKbd->consType) {
1382
1383/*
1384 * XXX wscons has no GIO_KEYMAP
1385 */
1386#if (defined (SYSCONS_SUPPORT) || defined (PCVT_SUPPORT)) && defined(GIO_KEYMAP)
1387  case SYSCONS:
1388  case PCVT:
1389    {
1390      keymap_t keymap;
1391
1392      if (ioctl(pInfo->fd, GIO_KEYMAP, &keymap) != -1) {
1393	for (i = 0; i < keymap.n_keys && i < NUM_KEYCODES; i++)
1394	  if (remap[i]) {
1395	    k = map + (remap[i] << 2);
1396	    k[0] = KD_GET_ENTRY(i,0);           /* non-shifed */
1397	    k[1] = KD_GET_ENTRY(i,1);	      /* shifted */
1398	    k[2] = KD_GET_ENTRY(i,4);	      /* alt */
1399	    k[3] = KD_GET_ENTRY(i,5);	      /* alt - shifted */
1400	    if (k[3] == k[2]) k[3] = NoSymbol;
1401	    if (k[2] == k[1]) k[2] = NoSymbol;
1402	    if (k[1] == k[0]) k[1] = NoSymbol;
1403	    if (k[0] == k[2] && k[1] == k[3])
1404	      k[2] = k[3] = NoSymbol;
1405	  }
1406      }
1407    }
1408    break;
1409#endif /* SYSCONS || PCVT */
1410
1411  }
1412#endif /* !bsdi */
1413
1414  /*
1415   * compute the modifier map
1416   */
1417  for (i = 0; i < MAP_LENGTH; i++)
1418    pModMap[i] = NoSymbol;  /* make sure it is restored */
1419
1420  for (k = map, i = MIN_KEYCODE;
1421       i < (NUM_KEYCODES + MIN_KEYCODE);
1422       i++, k += 4)
1423
1424    switch(*k) {
1425
1426    case XK_Shift_L:
1427    case XK_Shift_R:
1428      pModMap[i] = ShiftMask;
1429      break;
1430
1431    case XK_Control_L:
1432    case XK_Control_R:
1433      pModMap[i] = ControlMask;
1434      break;
1435
1436    case XK_Caps_Lock:
1437      pModMap[i] = LockMask;
1438      break;
1439
1440    case XK_Alt_L:
1441    case XK_Alt_R:
1442      pModMap[i] = AltMask;
1443      break;
1444
1445    case XK_Num_Lock:
1446      pModMap[i] = NumLockMask;
1447      break;
1448
1449    case XK_Scroll_Lock:
1450      pModMap[i] = ScrollLockMask;
1451      break;
1452
1453      /* kana support */
1454    case XK_Kana_Lock:
1455    case XK_Kana_Shift:
1456      pModMap[i] = KanaMask;
1457      break;
1458
1459      /* alternate toggle for multinational support */
1460    case XK_Mode_switch:
1461      pModMap[i] = AltLangMask;
1462      break;
1463
1464    }
1465
1466  pKeySyms->map        = map;
1467  pKeySyms->mapWidth   = GLYPHS_PER_KEY;
1468  pKeySyms->minKeyCode = MIN_KEYCODE;
1469  pKeySyms->maxKeyCode = MAX_KEYCODE;
1470
1471  switch(pKbd->consType) {
1472#ifdef SYSCONS_SUPPORT
1473      case SYSCONS:
1474           if (pKbd->CustomKeycodes)
1475              pKbd->scancodeMap = &sysconsCODE;
1476           else
1477              pKbd->RemapScanCode = ATScancode;
1478           break;
1479#endif
1480#if defined(PCCONS_SUPPORT) || defined (PCVT_SUPPORT)
1481      case PCCONS:
1482      case PCVT:
1483           pKbd->RemapScanCode = ATScancode;
1484	   break;
1485#endif
1486#ifdef WSCONS_SUPPORT
1487      case WSCONS:
1488	if (!pKbd->isConsole) {
1489           switch (pKbd->wsKbdType) {
1490	       case WSKBD_TYPE_PC_XT:
1491	       case WSKBD_TYPE_PC_AT:
1492                    pKbd->scancodeMap = &wsXt;
1493                    break;
1494	       case WSKBD_TYPE_USB:
1495#ifdef WSKBD_TYPE_MAPLE
1496	       case WSKBD_TYPE_MAPLE:
1497#endif
1498                    pKbd->scancodeMap = &wsUsb;
1499                    break;
1500#ifdef WSKBD_TYPE_ADB
1501	       case WSKBD_TYPE_ADB:
1502                    pKbd->scancodeMap = &wsAdb;
1503                    break;
1504#endif
1505#ifdef WSKBD_TYPE_AMIGA
1506	       case WSKBD_TYPE_AMIGA:
1507                    pKbd->scancodeMap = &wsAmiga;
1508                    break;
1509#endif
1510#ifdef WSKBD_TYPE_LK201
1511	       case WSKBD_TYPE_LK201:
1512                    pKbd->scancodeMap = &wsLk201;
1513                    break;
1514#endif
1515#ifdef WSKBD_TYPE_SUN
1516#ifdef WSKBD_TYPE_SUN5
1517	       case WSKBD_TYPE_SUN5:
1518#endif
1519	       case WSKBD_TYPE_SUN:
1520                    pKbd->scancodeMap = &wsSun;
1521                    break;
1522#endif
1523	       default:
1524		    ErrorF("Unknown wskbd type %d\n", pKbd->wsKbdType);
1525           }
1526	} else {
1527           pKbd->RemapScanCode = ATScancode;
1528	}
1529      break;
1530#endif
1531  }
1532  return;
1533}
1534