bsd_KbdMap.c revision 4ddc96cf
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_Escape,	/* 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_BackSpace,
1065	/* 103 */ KEY_Enter,
1066	/* 104 */ KEY_Tab,
1067	/* 105 */ KEY_Tilde, /* 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
1224/* Map for LK401 keyboards  */
1225static CARD8 wsLk401Map[] = {
1226	/* 0 */ KEY_F1,
1227	/* 1 */ KEY_F2,
1228	/* 2 */ KEY_F3,
1229	/* 3 */ KEY_F4,
1230	/* 4 */ KEY_F5,
1231	/* 5 */ KEY_NOTUSED,
1232	/* 6 */ KEY_NOTUSED,
1233	/* 7 */ KEY_NOTUSED,
1234	/* 8 */ KEY_NOTUSED,
1235	/* 9 */ KEY_NOTUSED,
1236	/* 10 */ KEY_NOTUSED,
1237	/* 11 */ KEY_NOTUSED,
1238	/* 12 */ KEY_NOTUSED,
1239	/* 13 */ KEY_NOTUSED,
1240	/* 14 */ KEY_F6,
1241	/* 15 */ KEY_F7,
1242	/* 16 */ KEY_F8,
1243	/* 17 */ KEY_F9,
1244	/* 18 */ KEY_F10,
1245	/* 19 */ KEY_NOTUSED,
1246	/* 20 */ KEY_NOTUSED,
1247	/* 21 */ KEY_NOTUSED,
1248	/* 22 */ KEY_NOTUSED,
1249	/* 23 */ KEY_NOTUSED,
1250	/* 24 */ KEY_NOTUSED,
1251	/* 25 */ KEY_NOTUSED,
1252	/* 26 */ KEY_NOTUSED,
1253	/* 27 */ KEY_Escape,	/* F11 */
1254	/* 28 */ KEY_F12,
1255	/* 29 */ KEY_F13,
1256	/* 30 */ KEY_F14,
1257	/* 31 */ KEY_NOTUSED,
1258	/* 32 */ KEY_NOTUSED,
1259	/* 33 */ KEY_NOTUSED,
1260	/* 34 */ KEY_NOTUSED,
1261	/* 35 */ KEY_NOTUSED,
1262	/* 36 */ KEY_NOTUSED,
1263	/* 37 */ KEY_NOTUSED,
1264	/* 38 */ KEY_Help,
1265	/* 39 */ KEY_F16,	/* Do */
1266	/* 40 */ KEY_NOTUSED,
1267	/* 41 */ KEY_NOTUSED,
1268	/* 42 */ KEY_F17,
1269	/* 43 */ KEY_L8,	/* F18 */
1270	/* 44 */ KEY_L9,	/* F19 */
1271	/* 45 */ KEY_L10,	/* F20 */
1272	/* 46 */ KEY_NOTUSED,
1273	/* 47 */ KEY_NOTUSED,
1274	/* 48 */ KEY_NOTUSED,
1275	/* 49 */ KEY_NOTUSED,
1276	/* 50 */ KEY_NOTUSED,
1277	/* 51 */ KEY_NOTUSED,
1278	/* 52 */ KEY_Home,	/* Find */
1279	/* 53 */ KEY_Insert,	/* Insert Here */
1280	/* 54 */ KEY_Delete,	/* Re-move */
1281	/* 55 */ KEY_End,	/* Select */
1282	/* 56 */ KEY_PgUp,	/* Prev-Screen */
1283	/* 57 */ KEY_PgDown,	/* Next-Screen */
1284	/* 58 */ KEY_NOTUSED,
1285	/* 59 */ KEY_NOTUSED,
1286	/* 60 */ KEY_KP_0,
1287	/* 61 */ KEY_NOTUSED,
1288	/* 62 */ KEY_KP_Decimal,
1289	/* 63 */ KEY_KP_Enter,
1290	/* 64 */ KEY_KP_1,
1291	/* 65 */ KEY_KP_2,
1292	/* 66 */ KEY_KP_3,
1293	/* 67 */ KEY_KP_4,
1294	/* 68 */ KEY_KP_5,
1295	/* 69 */ KEY_KP_6,
1296	/* 70 */ KEY_KP_Plus,	/* KP Comma */
1297	/* 71 */ KEY_KP_7,
1298	/* 72 */ KEY_KP_8,
1299	/* 73 */ KEY_KP_9,
1300	/* 74 */ KEY_KP_Minus,
1301	/* 75 */ KEY_L1,	/* PF1 */
1302	/* 76 */ KEY_L2,	/* PF2 */
1303	/* 77 */ KEY_L3,	/* PF3 */
1304	/* 78 */ KEY_L4,	/* PF4 */
1305	/* 79 */ KEY_NOTUSED,
1306	/* 80 */ KEY_NOTUSED,
1307	/* 81 */ KEY_Left,
1308	/* 82 */ KEY_Right,
1309	/* 83 */ KEY_Down,
1310	/* 84 */ KEY_Up,
1311	/* 85 */ KEY_ShiftR,
1312	/* 86 */ KEY_Alt,
1313	/* 87 */ KEY_RMeta,	/* Compose right */
1314	/* 88 */ KEY_ShiftL,
1315	/* 89 */ KEY_LCtrl,
1316	/* 90 */ KEY_CapsLock,
1317	/* 91 */ KEY_LMeta, 	/* Compose left */
1318	/* 92 */ KEY_AltLang,
1319	/* 93 */ KEY_NOTUSED,
1320	/* 94 */ KEY_NOTUSED,
1321	/* 95 */ KEY_NOTUSED,
1322	/* 96 */ KEY_NOTUSED,
1323	/* 97 */ KEY_NOTUSED,
1324	/* 98 */ KEY_NOTUSED,
1325	/* 99 */ KEY_NOTUSED,
1326	/* 100 */ KEY_NOTUSED,
1327	/* 101 */ KEY_NOTUSED,
1328	/* 102 */ KEY_BackSpace,
1329	/* 103 */ KEY_Enter,
1330	/* 104 */ KEY_Tab,
1331	/* 105 */ KEY_Tilde, /* tilde */
1332	/* 106 */ KEY_1,
1333	/* 107 */ KEY_Q,
1334	/* 108 */ KEY_A,
1335	/* 109 */ KEY_Z,
1336	/* 110 */ KEY_NOTUSED,
1337	/* 111 */ KEY_2,
1338	/* 112 */ KEY_W,
1339	/* 113 */ KEY_S,
1340	/* 114 */ KEY_X,
1341	/* 115 */ KEY_Less,
1342	/* 116 */ KEY_NOTUSED,
1343	/* 117 */ KEY_3,
1344	/* 118 */ KEY_E,
1345	/* 119 */ KEY_D,
1346	/* 120 */ KEY_C,
1347	/* 121 */ KEY_NOTUSED,
1348	/* 122 */ KEY_4,
1349	/* 123 */ KEY_R,
1350	/* 124 */ KEY_F,
1351	/* 125 */ KEY_V,
1352	/* 126 */ KEY_Space,
1353	/* 127 */ KEY_NOTUSED,
1354	/* 128 */ KEY_5,
1355	/* 129 */ KEY_T,
1356	/* 130 */ KEY_G,
1357	/* 131 */ KEY_B,
1358	/* 132 */ KEY_NOTUSED,
1359	/* 133 */ KEY_6,
1360	/* 134 */ KEY_Y,
1361	/* 135 */ KEY_H,
1362	/* 136 */ KEY_N,
1363	/* 137 */ KEY_NOTUSED,
1364	/* 138 */ KEY_7,
1365	/* 139 */ KEY_U,
1366	/* 140 */ KEY_J,
1367	/* 141 */ KEY_M,
1368	/* 142 */ KEY_NOTUSED,
1369	/* 143 */ KEY_8,
1370	/* 144 */ KEY_I,
1371	/* 145 */ KEY_K,
1372	/* 146 */ KEY_Comma,
1373	/* 147 */ KEY_NOTUSED,
1374	/* 148 */ KEY_9,
1375	/* 149 */ KEY_O,
1376	/* 150 */ KEY_L,
1377	/* 151 */ KEY_Period,
1378	/* 152 */ KEY_NOTUSED,
1379	/* 153 */ KEY_0,
1380	/* 154 */ KEY_P,
1381	/* 155 */ KEY_NOTUSED,
1382	/* 156 */ KEY_SemiColon,
1383	/* 157 */ KEY_Slash,
1384	/* 158 */ KEY_NOTUSED,
1385	/* 159 */ KEY_Equal,
1386	/* 160 */ KEY_RBrace,
1387	/* 161 */ KEY_BSlash,
1388	/* 162 */ KEY_NOTUSED,
1389	/* 163 */ KEY_Minus,
1390	/* 164 */ KEY_LBrace,
1391	/* 165 */ KEY_Quote,
1392	/* 166 */ KEY_NOTUSED,
1393	/* 167 */ KEY_NOTUSED,
1394	/* 168 */ KEY_NOTUSED,
1395	/* 169 */ KEY_NOTUSED,
1396	/* 170 */ KEY_NOTUSED,
1397	/* 171 */ KEY_NOTUSED,
1398	/* 172 */ KEY_NOTUSED,
1399	/* 173 */ KEY_NOTUSED,
1400	/* 174 */ KEY_NOTUSED,
1401	/* 175 */ KEY_NOTUSED,
1402	/* 176 */ KEY_NOTUSED,
1403	/* 177 */ KEY_NOTUSED,
1404	/* 178 */ KEY_NOTUSED,
1405	/* 179 */ KEY_NOTUSED,
1406	/* 180 */ KEY_NOTUSED,
1407	/* 181 */ KEY_NOTUSED,
1408	/* 182 */ KEY_NOTUSED,
1409	/* 183 */ KEY_NOTUSED,
1410	/* 184 */ KEY_NOTUSED,
1411	/* 185 */ KEY_NOTUSED,
1412	/* 186 */ KEY_NOTUSED,
1413	/* 187 */ KEY_NOTUSED,
1414	/* 188 */ KEY_NOTUSED,
1415	/* 189 */ KEY_NOTUSED,
1416	/* 190 */ KEY_NOTUSED,
1417	/* 191 */ KEY_NOTUSED,
1418	/* 192 */ KEY_NOTUSED,
1419	/* 193 */ KEY_NOTUSED,
1420	/* 194 */ KEY_NOTUSED,
1421	/* 195 */ KEY_NOTUSED,
1422	/* 196 */ KEY_NOTUSED,
1423	/* 197 */ KEY_NOTUSED,
1424	/* 198 */ KEY_NOTUSED,
1425	/* 199 */ KEY_NOTUSED,
1426	/* 200 */ KEY_NOTUSED,
1427	/* 201 */ KEY_NOTUSED,
1428	/* 202 */ KEY_NOTUSED,
1429	/* 203 */ KEY_NOTUSED,
1430	/* 204 */ KEY_NOTUSED,
1431	/* 205 */ KEY_NOTUSED,
1432	/* 206 */ KEY_NOTUSED,
1433	/* 207 */ KEY_NOTUSED,
1434	/* 208 */ KEY_NOTUSED,
1435	/* 209 */ KEY_NOTUSED,
1436	/* 210 */ KEY_NOTUSED,
1437	/* 211 */ KEY_NOTUSED,
1438	/* 212 */ KEY_NOTUSED,
1439	/* 213 */ KEY_NOTUSED,
1440	/* 214 */ KEY_NOTUSED,
1441	/* 215 */ KEY_NOTUSED,
1442	/* 216 */ KEY_NOTUSED,
1443	/* 217 */ KEY_NOTUSED,
1444	/* 218 */ KEY_NOTUSED,
1445	/* 219 */ KEY_NOTUSED,
1446	/* 220 */ KEY_NOTUSED,
1447	/* 221 */ KEY_NOTUSED,
1448	/* 222 */ KEY_NOTUSED,
1449	/* 223 */ KEY_NOTUSED,
1450	/* 224 */ KEY_NOTUSED,
1451	/* 225 */ KEY_NOTUSED,
1452	/* 226 */ KEY_NOTUSED,
1453	/* 227 */ KEY_NOTUSED,
1454	/* 228 */ KEY_NOTUSED,
1455	/* 229 */ KEY_NOTUSED,
1456	/* 230 */ KEY_NOTUSED,
1457	/* 231 */ KEY_NOTUSED,
1458	/* 232 */ KEY_NOTUSED,
1459	/* 233 */ KEY_NOTUSED,
1460	/* 234 */ KEY_NOTUSED,
1461	/* 235 */ KEY_NOTUSED,
1462	/* 236 */ KEY_NOTUSED,
1463	/* 237 */ KEY_NOTUSED,
1464	/* 238 */ KEY_NOTUSED,
1465	/* 239 */ KEY_NOTUSED,
1466	/* 240 */ KEY_NOTUSED,
1467	/* 241 */ KEY_NOTUSED,
1468	/* 242 */ KEY_NOTUSED,
1469	/* 243 */ KEY_NOTUSED,
1470	/* 244 */ KEY_NOTUSED,
1471	/* 245 */ KEY_NOTUSED,
1472	/* 246 */ KEY_NOTUSED,
1473	/* 247 */ KEY_NOTUSED,
1474	/* 248 */ KEY_NOTUSED,
1475	/* 249 */ KEY_NOTUSED,
1476	/* 250 */ KEY_NOTUSED,
1477	/* 251 */ KEY_NOTUSED,
1478};
1479#define WS_LK401_MAP_SIZE (sizeof(wsLk401Map)/sizeof(*wsLk401Map))
1480
1481static
1482TransMapRec wsLk401 = {
1483    0,
1484    WS_LK401_MAP_SIZE,
1485    wsLk401Map
1486};
1487
1488static CARD8 wsSunMap[] = {
1489	/* 0x00 */ KEY_Help,
1490	/* 0x01 */ KEY_L1,		/* stop */
1491	/* 0x02 */ KEY_AudioLower,	/* BrightnessDown / S-VolumeDown */
1492	/* 0x03 */ KEY_L2,		/* again */
1493	/* 0x04 */ KEY_AudioRaise,	/* BrightnessUp / S-VolumeUp */
1494	/* 0x05 */ KEY_F1,
1495	/* 0x06 */ KEY_F2,
1496	/* 0x07 */ KEY_F10,
1497	/* 0x08 */ KEY_F3,
1498	/* 0x09 */ KEY_F11,
1499	/* 0x0a */ KEY_F4,
1500	/* 0x0b */ KEY_F12,
1501	/* 0x0c */ KEY_F5,
1502	/* 0x0d */ KEY_AltLang,
1503	/* 0x0e */ KEY_F6,
1504	/* 0x0f */ KEY_NOTUSED,
1505	/* 0x10 */ KEY_F7,
1506	/* 0x11 */ KEY_F8,
1507	/* 0x12 */ KEY_F9,
1508	/* 0x13 */ KEY_Alt,
1509	/* 0x14 */ KEY_Up,
1510	/* 0x15 */ KEY_Pause,
1511	/* 0x16 */ KEY_Print,
1512	/* 0x17 */ KEY_ScrollLock,
1513	/* 0x18 */ KEY_Left,
1514	/* 0x19 */ KEY_L3,		/* props */
1515	/* 0x1a */ KEY_L4,		/* undo */
1516	/* 0x1b */ KEY_Down,
1517	/* 0x1c */ KEY_Right,
1518	/* 0x1d */ KEY_Escape,
1519	/* 0x1e */ KEY_1,
1520	/* 0x1f */ KEY_2,
1521	/* 0x20 */ KEY_3,
1522	/* 0x21 */ KEY_4,
1523	/* 0x22 */ KEY_5,
1524	/* 0x23 */ KEY_6,
1525	/* 0x24 */ KEY_7,
1526	/* 0x25 */ KEY_8,
1527	/* 0x26 */ KEY_9,
1528	/* 0x27 */ KEY_0,
1529	/* 0x28 */ KEY_Minus,
1530	/* 0x29 */ KEY_Equal,
1531	/* 0x2a */ KEY_Tilde,
1532	/* 0x2b */ KEY_BackSpace,
1533	/* 0x2c */ KEY_Insert,
1534	/* 0x2d */ KEY_Mute,		/* Audio Mute */
1535	/* 0x2e */ KEY_KP_Divide,
1536	/* 0x2f */ KEY_KP_Multiply,
1537	/* 0x30 */ KEY_Power,
1538	/* 0x31 */ KEY_L5,		/* front */
1539	/* 0x32 */ KEY_KP_Decimal,
1540	/* 0x33 */ KEY_L6,		/* copy */
1541	/* 0x34 */ KEY_Home,
1542	/* 0x35 */ KEY_Tab,
1543	/* 0x36 */ KEY_Q,
1544	/* 0x37 */ KEY_W,
1545	/* 0x38 */ KEY_E,
1546	/* 0x39 */ KEY_R,
1547	/* 0x3a */ KEY_T,
1548	/* 0x3b */ KEY_Y,
1549	/* 0x3c */ KEY_U,
1550	/* 0x3d */ KEY_I,
1551	/* 0x3e */ KEY_O,
1552	/* 0x3f */ KEY_P,
1553	/* 0x40 */ KEY_LBrace,
1554	/* 0x41 */ KEY_RBrace,
1555	/* 0x42 */ KEY_Delete,
1556	/* 0x43 */ KEY_Menu,		/* compose */
1557	/* 0x44 */ KEY_KP_7,
1558	/* 0x45 */ KEY_KP_8,
1559	/* 0x46 */ KEY_KP_9,
1560	/* 0x47 */ KEY_KP_Minus,
1561	/* 0x48 */ KEY_L7,		/* open */
1562	/* 0x49 */ KEY_L8,		/* paste */
1563	/* 0x4a */ KEY_End,
1564	/* 0x4b */ KEY_NOTUSED,
1565	/* 0x4c */ KEY_LCtrl,
1566	/* 0x4d */ KEY_A,
1567	/* 0x4e */ KEY_S,
1568	/* 0x4f */ KEY_D,
1569	/* 0x50 */ KEY_F,
1570	/* 0x51 */ KEY_G,
1571	/* 0x52 */ KEY_H,
1572	/* 0x53 */ KEY_J,
1573	/* 0x54 */ KEY_K,
1574	/* 0x55 */ KEY_L,
1575	/* 0x56 */ KEY_SemiColon,
1576	/* 0x57 */ KEY_Quote,
1577	/* 0x58 */ KEY_BSlash,
1578	/* 0x59 */ KEY_Enter,
1579	/* 0x5a */ KEY_KP_Enter,
1580	/* 0x5b */ KEY_KP_4,
1581	/* 0x5c */ KEY_KP_5,
1582	/* 0x5d */ KEY_KP_6,
1583	/* 0x5e */ KEY_KP_0,
1584	/* 0x5f */ KEY_L9,		/* find */
1585	/* 0x60 */ KEY_PgUp,
1586	/* 0x61 */ KEY_L10,		/* cut */
1587	/* 0x62 */ KEY_NumLock,
1588	/* 0x63 */ KEY_ShiftL,
1589	/* 0x64 */ KEY_Z,
1590	/* 0x65 */ KEY_X,
1591	/* 0x66 */ KEY_C,
1592	/* 0x67 */ KEY_V,
1593	/* 0x68 */ KEY_B,
1594	/* 0x69 */ KEY_N,
1595	/* 0x6a */ KEY_M,
1596	/* 0x6b */ KEY_Comma,
1597	/* 0x6c */ KEY_Period,
1598	/* 0x6d */ KEY_Slash,
1599	/* 0x6e */ KEY_ShiftR,
1600	/* 0x6f */ KEY_NOTUSED,		/* linefeed */
1601	/* 0x70 */ KEY_KP_1,
1602	/* 0x71 */ KEY_KP_2,
1603	/* 0x72 */ KEY_KP_3,
1604	/* 0x73 */ KEY_NOTUSED,
1605	/* 0x74 */ KEY_NOTUSED,
1606	/* 0x75 */ KEY_NOTUSED,
1607	/* 0x76 */ KEY_Help,		/* help */
1608	/* 0x77 */ KEY_CapsLock,
1609	/* 0x78 */ KEY_LMeta,
1610	/* 0x79 */ KEY_Space,
1611	/* 0x7a */ KEY_RMeta,
1612	/* 0x7b */ KEY_PgDown,
1613	/* 0x7c */ KEY_Less,		/* < > on some keyboards */
1614	/* 0x7d */ KEY_KP_Plus,
1615	/* 0x7e */ KEY_NOTUSED,
1616	/* 0x7f */ KEY_NOTUSED
1617};
1618#define WS_SUN_MAP_SIZE (sizeof(wsSunMap)/sizeof(*wsSunMap))
1619
1620static
1621TransMapRec wsSun = {
1622    0,
1623    WS_SUN_MAP_SIZE,
1624    wsSunMap
1625};
1626
1627#endif /* WSCONS_SUPPORT */
1628
1629/*ARGSUSED*/
1630
1631/*
1632 * KbdGetMapping --
1633 *	Get the national keyboard mapping. The keyboard type is set, a new map
1634 *      and the modifiermap is computed.
1635 */
1636
1637void
1638KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap)
1639{
1640  KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
1641  KeySym        *k;
1642  int           i;
1643
1644#ifndef __bsdi__
1645  switch (pKbd->consType) {
1646
1647/*
1648 * XXX wscons has no GIO_KEYMAP
1649 */
1650#if (defined (SYSCONS_SUPPORT) || defined (PCVT_SUPPORT)) && defined(GIO_KEYMAP)
1651  case SYSCONS:
1652  case PCVT:
1653    {
1654      keymap_t keymap;
1655
1656      if (ioctl(pInfo->fd, GIO_KEYMAP, &keymap) != -1) {
1657	for (i = 0; i < keymap.n_keys && i < NUM_KEYCODES; i++)
1658	  if (remap[i]) {
1659	    k = map + (remap[i] << 2);
1660	    k[0] = KD_GET_ENTRY(i,0);           /* non-shifed */
1661	    k[1] = KD_GET_ENTRY(i,1);	      /* shifted */
1662	    k[2] = KD_GET_ENTRY(i,4);	      /* alt */
1663	    k[3] = KD_GET_ENTRY(i,5);	      /* alt - shifted */
1664	    if (k[3] == k[2]) k[3] = NoSymbol;
1665	    if (k[2] == k[1]) k[2] = NoSymbol;
1666	    if (k[1] == k[0]) k[1] = NoSymbol;
1667	    if (k[0] == k[2] && k[1] == k[3])
1668	      k[2] = k[3] = NoSymbol;
1669	  }
1670      }
1671    }
1672    break;
1673#endif /* SYSCONS || PCVT */
1674
1675  }
1676#endif /* !bsdi */
1677
1678  /*
1679   * compute the modifier map
1680   */
1681  for (i = 0; i < MAP_LENGTH; i++)
1682    pModMap[i] = NoSymbol;  /* make sure it is restored */
1683
1684  for (k = map, i = MIN_KEYCODE;
1685       i < (NUM_KEYCODES + MIN_KEYCODE);
1686       i++, k += 4)
1687
1688    switch(*k) {
1689
1690    case XK_Shift_L:
1691    case XK_Shift_R:
1692      pModMap[i] = ShiftMask;
1693      break;
1694
1695    case XK_Control_L:
1696    case XK_Control_R:
1697      pModMap[i] = ControlMask;
1698      break;
1699
1700    case XK_Caps_Lock:
1701      pModMap[i] = LockMask;
1702      break;
1703
1704    case XK_Alt_L:
1705    case XK_Alt_R:
1706      pModMap[i] = AltMask;
1707      break;
1708
1709    case XK_Num_Lock:
1710      pModMap[i] = NumLockMask;
1711      break;
1712
1713    case XK_Scroll_Lock:
1714      pModMap[i] = ScrollLockMask;
1715      break;
1716
1717      /* kana support */
1718    case XK_Kana_Lock:
1719    case XK_Kana_Shift:
1720      pModMap[i] = KanaMask;
1721      break;
1722
1723      /* alternate toggle for multinational support */
1724    case XK_Mode_switch:
1725      pModMap[i] = AltLangMask;
1726      break;
1727
1728    }
1729
1730  pKeySyms->map        = map;
1731  pKeySyms->mapWidth   = GLYPHS_PER_KEY;
1732  pKeySyms->minKeyCode = MIN_KEYCODE;
1733  pKeySyms->maxKeyCode = MAX_KEYCODE;
1734
1735  switch(pKbd->consType) {
1736#ifdef SYSCONS_SUPPORT
1737      case SYSCONS:
1738           if (pKbd->CustomKeycodes)
1739              pKbd->scancodeMap = &sysconsCODE;
1740           else
1741              pKbd->RemapScanCode = ATScancode;
1742           break;
1743#endif
1744#if defined(PCCONS_SUPPORT) || defined (PCVT_SUPPORT)
1745      case PCCONS:
1746      case PCVT:
1747           pKbd->RemapScanCode = ATScancode;
1748	   break;
1749#endif
1750#ifdef WSCONS_SUPPORT
1751      case WSCONS:
1752	if (!pKbd->isConsole) {
1753           switch (pKbd->wsKbdType) {
1754	       case WSKBD_TYPE_PC_XT:
1755	       case WSKBD_TYPE_PC_AT:
1756                    pKbd->scancodeMap = &wsXt;
1757                    break;
1758	       case WSKBD_TYPE_USB:
1759#ifdef WSKBD_TYPE_MAPLE
1760	       case WSKBD_TYPE_MAPLE:
1761#endif
1762                    pKbd->scancodeMap = &wsUsb;
1763                    break;
1764#ifdef WSKBD_TYPE_ADB
1765	       case WSKBD_TYPE_ADB:
1766                    pKbd->scancodeMap = &wsAdb;
1767                    break;
1768#endif
1769#ifdef WSKBD_TYPE_AMIGA
1770	       case WSKBD_TYPE_AMIGA:
1771                    pKbd->scancodeMap = &wsAmiga;
1772                    break;
1773#endif
1774#ifdef WSKBD_TYPE_LK201
1775	       case WSKBD_TYPE_LK201:
1776                    pKbd->scancodeMap = &wsLk201;
1777                    break;
1778#endif
1779#ifdef WSKBD_TYPE_LK401
1780	       case WSKBD_TYPE_LK401:
1781                    pKbd->scancodeMap = &wsLk401;
1782                    break;
1783#endif
1784#ifdef WSKBD_TYPE_SUN
1785#ifdef WSKBD_TYPE_SUN5
1786	       case WSKBD_TYPE_SUN5:
1787#endif
1788	       case WSKBD_TYPE_SUN:
1789                    pKbd->scancodeMap = &wsSun;
1790                    break;
1791#endif
1792	       default:
1793		    ErrorF("Unknown wskbd type %d\n", pKbd->wsKbdType);
1794           }
1795	} else {
1796           pKbd->RemapScanCode = ATScancode;
1797	}
1798      break;
1799#endif
1800  }
1801  return;
1802}
1803