bsd_KbdMap.c revision 8e3c6fe8
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 keycode for For Japanese keyboard
350 * Override atKeyname HKTG and BSlash2 code to unique for JP106 keybaord
351 */
352#undef KEY_HKTG
353#define KEY_HKTG	200	/* Japanee 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 keycode for For Korean keyboard
368 * Define Hangul and Hangul_Hanja unique key code
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_NOTUSED,
585	/* 113 */ KEY_NOTUSED,
586	/* 114 */ KEY_NOTUSED,
587	/* 115 */ KEY_NOTUSED,
588	/* 116 */ KEY_NOTUSED,
589	/* 117 */ KEY_NOTUSED,
590	/* 118 */ KEY_NOTUSED,
591	/* 119 */ KEY_NOTUSED,
592	/* 120 */ KEY_NOTUSED,
593	/* 121 */ KEY_NOTUSED,
594	/* 122 */ KEY_NOTUSED,
595	/* 123 */ KEY_NOTUSED,
596	/* 124 */ KEY_NOTUSED,
597	/* 125 */ KEY_NOTUSED,
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 LK201 keyboards  */
845static CARD8 wsLk201Map[] = {
846	/* 0 */ KEY_F1,
847	/* 1 */ KEY_F2,
848	/* 2 */ KEY_F3,
849	/* 3 */ KEY_F4,
850	/* 4 */ KEY_F5,
851	/* 5 */ KEY_NOTUSED,
852	/* 6 */ KEY_NOTUSED,
853	/* 7 */ KEY_NOTUSED,
854	/* 8 */ KEY_NOTUSED,
855	/* 9 */ KEY_NOTUSED,
856	/* 10 */ KEY_NOTUSED,
857	/* 11 */ KEY_NOTUSED,
858	/* 12 */ KEY_NOTUSED,
859	/* 13 */ KEY_NOTUSED,
860	/* 14 */ KEY_F6,
861	/* 15 */ KEY_F7,
862	/* 16 */ KEY_F8,
863	/* 17 */ KEY_F9,
864	/* 18 */ KEY_F10,
865	/* 19 */ KEY_NOTUSED,
866	/* 20 */ KEY_NOTUSED,
867	/* 21 */ KEY_NOTUSED,
868	/* 22 */ KEY_NOTUSED,
869	/* 23 */ KEY_NOTUSED,
870	/* 24 */ KEY_NOTUSED,
871	/* 25 */ KEY_NOTUSED,
872	/* 26 */ KEY_NOTUSED,
873	/* 27 */ KEY_F11,
874	/* 28 */ KEY_F12,
875	/* 29 */ KEY_F13,
876	/* 30 */ KEY_F14,
877	/* 31 */ KEY_NOTUSED,
878	/* 32 */ KEY_NOTUSED,
879	/* 33 */ KEY_NOTUSED,
880	/* 34 */ KEY_NOTUSED,
881	/* 35 */ KEY_NOTUSED,
882	/* 36 */ KEY_NOTUSED,
883	/* 37 */ KEY_NOTUSED,
884	/* 38 */ KEY_Help,
885	/* 39 */ KEY_F16,	/* Do */
886	/* 40 */ KEY_NOTUSED,
887	/* 41 */ KEY_NOTUSED,
888	/* 42 */ KEY_F17,
889	/* 43 */ KEY_L8,	/* F18 */
890	/* 44 */ KEY_L9,	/* F19 */
891	/* 45 */ KEY_L10,	/* F20 */
892	/* 46 */ KEY_NOTUSED,
893	/* 47 */ KEY_NOTUSED,
894	/* 48 */ KEY_NOTUSED,
895	/* 49 */ KEY_NOTUSED,
896	/* 50 */ KEY_NOTUSED,
897	/* 51 */ KEY_NOTUSED,
898	/* 52 */ KEY_Home,	/* Find */
899	/* 53 */ KEY_Insert,	/* Insert Here */
900	/* 54 */ KEY_Delete,	/* Re-move */
901	/* 55 */ KEY_End,	/* Select */
902	/* 56 */ KEY_PgUp,	/* Prev-Screen */
903	/* 57 */ KEY_PgDown,	/* Next-Screen */
904	/* 58 */ KEY_NOTUSED,
905	/* 59 */ KEY_NOTUSED,
906	/* 60 */ KEY_KP_0,
907	/* 61 */ KEY_NOTUSED,
908	/* 62 */ KEY_KP_Decimal,
909	/* 63 */ KEY_KP_Enter,
910	/* 64 */ KEY_KP_1,
911	/* 65 */ KEY_KP_2,
912	/* 66 */ KEY_KP_3,
913	/* 67 */ KEY_KP_4,
914	/* 68 */ KEY_KP_5,
915	/* 69 */ KEY_KP_6,
916	/* 70 */ KEY_KP_Plus,	/* KP Comma */
917	/* 71 */ KEY_KP_7,
918	/* 72 */ KEY_KP_8,
919	/* 73 */ KEY_KP_9,
920	/* 74 */ KEY_KP_Minus,
921	/* 75 */ KEY_L1,	/* PF1 */
922	/* 76 */ KEY_L2,	/* PF2 */
923	/* 77 */ KEY_L3,	/* PF3 */
924	/* 78 */ KEY_L4,	/* PF4 */
925	/* 79 */ KEY_NOTUSED,
926	/* 80 */ KEY_NOTUSED,
927	/* 81 */ KEY_Left,
928	/* 82 */ KEY_Right,
929	/* 83 */ KEY_Down,
930	/* 84 */ KEY_Up,
931	/* 85 */ KEY_NOTUSED,
932	/* 86 */ KEY_NOTUSED,
933	/* 87 */ KEY_NOTUSED,
934	/* 88 */ KEY_ShiftL,
935	/* 89 */ KEY_LCtrl,
936	/* 90 */ KEY_CapsLock,
937	/* 91 */ KEY_Alt, 	/* Compose */
938	/* 92 */ KEY_NOTUSED,
939	/* 93 */ KEY_NOTUSED,
940	/* 94 */ KEY_NOTUSED,
941	/* 95 */ KEY_NOTUSED,
942	/* 96 */ KEY_NOTUSED,
943	/* 97 */ KEY_NOTUSED,
944	/* 98 */ KEY_NOTUSED,
945	/* 99 */ KEY_NOTUSED,
946	/* 100 */ KEY_NOTUSED,
947	/* 101 */ KEY_NOTUSED,
948	/* 102 */ KEY_Delete,
949	/* 103 */ KEY_Enter,
950	/* 104 */ KEY_Tab,
951	/* 105 */ KEY_Escape, /* tilde */
952	/* 106 */ KEY_1,
953	/* 107 */ KEY_Q,
954	/* 108 */ KEY_A,
955	/* 109 */ KEY_Z,
956	/* 110 */ KEY_NOTUSED,
957	/* 111 */ KEY_2,
958	/* 112 */ KEY_W,
959	/* 113 */ KEY_S,
960	/* 114 */ KEY_X,
961	/* 115 */ KEY_Less,
962	/* 116 */ KEY_NOTUSED,
963	/* 117 */ KEY_3,
964	/* 118 */ KEY_E,
965	/* 119 */ KEY_D,
966	/* 120 */ KEY_C,
967	/* 121 */ KEY_NOTUSED,
968	/* 122 */ KEY_4,
969	/* 123 */ KEY_R,
970	/* 124 */ KEY_F,
971	/* 125 */ KEY_V,
972	/* 126 */ KEY_Space,
973	/* 127 */ KEY_NOTUSED,
974	/* 128 */ KEY_5,
975	/* 129 */ KEY_T,
976	/* 130 */ KEY_G,
977	/* 131 */ KEY_B,
978	/* 132 */ KEY_NOTUSED,
979	/* 133 */ KEY_6,
980	/* 134 */ KEY_Y,
981	/* 135 */ KEY_H,
982	/* 136 */ KEY_N,
983	/* 137 */ KEY_NOTUSED,
984	/* 138 */ KEY_7,
985	/* 139 */ KEY_U,
986	/* 140 */ KEY_J,
987	/* 141 */ KEY_M,
988	/* 142 */ KEY_NOTUSED,
989	/* 143 */ KEY_8,
990	/* 144 */ KEY_I,
991	/* 145 */ KEY_K,
992	/* 146 */ KEY_Comma,
993	/* 147 */ KEY_NOTUSED,
994	/* 148 */ KEY_9,
995	/* 149 */ KEY_O,
996	/* 150 */ KEY_L,
997	/* 151 */ KEY_Period,
998	/* 152 */ KEY_NOTUSED,
999	/* 153 */ KEY_0,
1000	/* 154 */ KEY_P,
1001	/* 155 */ KEY_NOTUSED,
1002	/* 156 */ KEY_SemiColon,
1003	/* 157 */ KEY_Slash,
1004	/* 158 */ KEY_NOTUSED,
1005	/* 159 */ KEY_Equal,
1006	/* 160 */ KEY_RBrace,
1007	/* 161 */ KEY_BSlash,
1008	/* 162 */ KEY_NOTUSED,
1009	/* 163 */ KEY_Minus,
1010	/* 164 */ KEY_LBrace,
1011	/* 165 */ KEY_Quote,
1012	/* 166 */ KEY_NOTUSED,
1013	/* 167 */ KEY_NOTUSED,
1014	/* 168 */ KEY_NOTUSED,
1015	/* 169 */ KEY_NOTUSED,
1016	/* 170 */ KEY_NOTUSED,
1017	/* 171 */ KEY_NOTUSED,
1018	/* 172 */ KEY_NOTUSED,
1019	/* 173 */ KEY_NOTUSED,
1020	/* 174 */ KEY_NOTUSED,
1021	/* 175 */ KEY_NOTUSED,
1022	/* 176 */ KEY_NOTUSED,
1023	/* 177 */ KEY_NOTUSED,
1024	/* 178 */ KEY_NOTUSED,
1025	/* 179 */ KEY_NOTUSED,
1026	/* 180 */ KEY_NOTUSED,
1027	/* 181 */ KEY_NOTUSED,
1028	/* 182 */ KEY_NOTUSED,
1029	/* 183 */ KEY_NOTUSED,
1030	/* 184 */ KEY_NOTUSED,
1031	/* 185 */ KEY_NOTUSED,
1032	/* 186 */ KEY_NOTUSED,
1033	/* 187 */ KEY_NOTUSED,
1034	/* 188 */ KEY_NOTUSED,
1035	/* 189 */ KEY_NOTUSED,
1036	/* 190 */ KEY_NOTUSED,
1037	/* 191 */ KEY_NOTUSED,
1038	/* 192 */ KEY_NOTUSED,
1039	/* 193 */ KEY_NOTUSED,
1040	/* 194 */ KEY_NOTUSED,
1041	/* 195 */ KEY_NOTUSED,
1042	/* 196 */ KEY_NOTUSED,
1043	/* 197 */ KEY_NOTUSED,
1044	/* 198 */ KEY_NOTUSED,
1045	/* 199 */ KEY_NOTUSED,
1046	/* 200 */ KEY_NOTUSED,
1047	/* 201 */ KEY_NOTUSED,
1048	/* 202 */ KEY_NOTUSED,
1049	/* 203 */ KEY_NOTUSED,
1050	/* 204 */ KEY_NOTUSED,
1051	/* 205 */ KEY_NOTUSED,
1052	/* 206 */ KEY_NOTUSED,
1053	/* 207 */ KEY_NOTUSED,
1054	/* 208 */ KEY_NOTUSED,
1055	/* 209 */ KEY_NOTUSED,
1056	/* 210 */ KEY_NOTUSED,
1057	/* 211 */ KEY_NOTUSED,
1058	/* 212 */ KEY_NOTUSED,
1059	/* 213 */ KEY_NOTUSED,
1060	/* 214 */ KEY_NOTUSED,
1061	/* 215 */ KEY_NOTUSED,
1062	/* 216 */ KEY_NOTUSED,
1063	/* 217 */ KEY_NOTUSED,
1064	/* 218 */ KEY_NOTUSED,
1065	/* 219 */ KEY_NOTUSED,
1066	/* 220 */ KEY_NOTUSED,
1067	/* 221 */ KEY_NOTUSED,
1068	/* 222 */ KEY_NOTUSED,
1069	/* 223 */ KEY_NOTUSED,
1070	/* 224 */ KEY_NOTUSED,
1071	/* 225 */ KEY_NOTUSED,
1072	/* 226 */ KEY_NOTUSED,
1073	/* 227 */ KEY_NOTUSED,
1074	/* 228 */ KEY_NOTUSED,
1075	/* 229 */ KEY_NOTUSED,
1076	/* 230 */ KEY_NOTUSED,
1077	/* 231 */ KEY_NOTUSED,
1078	/* 232 */ KEY_NOTUSED,
1079	/* 233 */ KEY_NOTUSED,
1080	/* 234 */ KEY_NOTUSED,
1081	/* 235 */ KEY_NOTUSED,
1082	/* 236 */ KEY_NOTUSED,
1083	/* 237 */ KEY_NOTUSED,
1084	/* 238 */ KEY_NOTUSED,
1085	/* 239 */ KEY_NOTUSED,
1086	/* 240 */ KEY_NOTUSED,
1087	/* 241 */ KEY_NOTUSED,
1088	/* 242 */ KEY_NOTUSED,
1089	/* 243 */ KEY_NOTUSED,
1090	/* 244 */ KEY_NOTUSED,
1091	/* 245 */ KEY_NOTUSED,
1092	/* 246 */ KEY_NOTUSED,
1093	/* 247 */ KEY_NOTUSED,
1094	/* 248 */ KEY_NOTUSED,
1095	/* 249 */ KEY_NOTUSED,
1096	/* 250 */ KEY_NOTUSED,
1097	/* 251 */ KEY_NOTUSED,
1098};
1099#define WS_LK201_MAP_SIZE (sizeof(wsLk201Map)/sizeof(*wsLk201Map))
1100
1101static
1102TransMapRec wsLk201 = {
1103    0,
1104    WS_LK201_MAP_SIZE,
1105    wsLk201Map
1106};
1107
1108static CARD8 wsSunMap[] = {
1109	/* 0x00 */ KEY_Help,
1110	/* 0x01 */ KEY_L1,		/* stop */
1111	/* 0x02 */ KEY_AudioLower,	/* BrightnessDown / S-VolumeDown */
1112	/* 0x03 */ KEY_L2,		/* again */
1113	/* 0x04 */ KEY_AudioRaise,	/* BridgtnessUp / S-VolumeUp */
1114	/* 0x05 */ KEY_F1,
1115	/* 0x06 */ KEY_F2,
1116	/* 0x07 */ KEY_F10,
1117	/* 0x08 */ KEY_F3,
1118	/* 0x09 */ KEY_F11,
1119	/* 0x0a */ KEY_F4,
1120	/* 0x0b */ KEY_F12,
1121	/* 0x0c */ KEY_F5,
1122	/* 0x0d */ KEY_AltLang,
1123	/* 0x0e */ KEY_F6,
1124	/* 0x0f */ KEY_NOTUSED,
1125	/* 0x10 */ KEY_F7,
1126	/* 0x11 */ KEY_F8,
1127	/* 0x12 */ KEY_F9,
1128	/* 0x13 */ KEY_Alt,
1129	/* 0x14 */ KEY_Up,
1130	/* 0x15 */ KEY_Pause,
1131	/* 0x16 */ KEY_Print,
1132	/* 0x17 */ KEY_ScrollLock,
1133	/* 0x18 */ KEY_Left,
1134	/* 0x19 */ KEY_L3,		/* props */
1135	/* 0x1a */ KEY_L4,		/* undo */
1136	/* 0x1b */ KEY_Down,
1137	/* 0x1c */ KEY_Right,
1138	/* 0x1d */ KEY_Escape,
1139	/* 0x1e */ KEY_1,
1140	/* 0x1f */ KEY_2,
1141	/* 0x20 */ KEY_3,
1142	/* 0x21 */ KEY_4,
1143	/* 0x22 */ KEY_5,
1144	/* 0x23 */ KEY_6,
1145	/* 0x24 */ KEY_7,
1146	/* 0x25 */ KEY_8,
1147	/* 0x26 */ KEY_9,
1148	/* 0x27 */ KEY_0,
1149	/* 0x28 */ KEY_Minus,
1150	/* 0x29 */ KEY_Equal,
1151	/* 0x2a */ KEY_Tilde,
1152	/* 0x2b */ KEY_BackSpace,
1153	/* 0x2c */ KEY_Insert,
1154	/* 0x2d */ KEY_Mute,		/* Audio Mute */
1155	/* 0x2e */ KEY_KP_Divide,
1156	/* 0x2f */ KEY_KP_Multiply,
1157	/* 0x30 */ KEY_Power,
1158	/* 0x31 */ KEY_L5,		/* front */
1159	/* 0x32 */ KEY_KP_Decimal,
1160	/* 0x33 */ KEY_L6,		/* copy */
1161	/* 0x34 */ KEY_Home,
1162	/* 0x35 */ KEY_Tab,
1163	/* 0x36 */ KEY_Q,
1164	/* 0x37 */ KEY_W,
1165	/* 0x38 */ KEY_E,
1166	/* 0x39 */ KEY_R,
1167	/* 0x3a */ KEY_T,
1168	/* 0x3b */ KEY_Y,
1169	/* 0x3c */ KEY_U,
1170	/* 0x3d */ KEY_I,
1171	/* 0x3e */ KEY_O,
1172	/* 0x3f */ KEY_P,
1173	/* 0x40 */ KEY_LBrace,
1174	/* 0x41 */ KEY_RBrace,
1175	/* 0x42 */ KEY_Delete,
1176	/* 0x43 */ KEY_Menu,		/* compose */
1177	/* 0x44 */ KEY_KP_7,
1178	/* 0x45 */ KEY_KP_8,
1179	/* 0x46 */ KEY_KP_9,
1180	/* 0x47 */ KEY_KP_Minus,
1181	/* 0x48 */ KEY_L7,		/* open */
1182	/* 0x49 */ KEY_L8,		/* paste */
1183	/* 0x4a */ KEY_End,
1184	/* 0x4b */ KEY_NOTUSED,
1185	/* 0x4c */ KEY_LCtrl,
1186	/* 0x4d */ KEY_A,
1187	/* 0x4e */ KEY_S,
1188	/* 0x4f */ KEY_D,
1189	/* 0x50 */ KEY_F,
1190	/* 0x51 */ KEY_G,
1191	/* 0x52 */ KEY_H,
1192	/* 0x53 */ KEY_J,
1193	/* 0x54 */ KEY_K,
1194	/* 0x55 */ KEY_L,
1195	/* 0x56 */ KEY_SemiColon,
1196	/* 0x57 */ KEY_Quote,
1197	/* 0x58 */ KEY_BSlash,
1198	/* 0x59 */ KEY_Enter,
1199	/* 0x5a */ KEY_KP_Enter,
1200	/* 0x5b */ KEY_KP_4,
1201	/* 0x5c */ KEY_KP_5,
1202	/* 0x5d */ KEY_KP_6,
1203	/* 0x5e */ KEY_KP_0,
1204	/* 0x5f */ KEY_L9,		/* find */
1205	/* 0x60 */ KEY_PgUp,
1206	/* 0x61 */ KEY_L10,		/* cut */
1207	/* 0x62 */ KEY_NumLock,
1208	/* 0x63 */ KEY_ShiftL,
1209	/* 0x64 */ KEY_Z,
1210	/* 0x65 */ KEY_X,
1211	/* 0x66 */ KEY_C,
1212	/* 0x67 */ KEY_V,
1213	/* 0x68 */ KEY_B,
1214	/* 0x69 */ KEY_N,
1215	/* 0x6a */ KEY_M,
1216	/* 0x6b */ KEY_Comma,
1217	/* 0x6c */ KEY_Period,
1218	/* 0x6d */ KEY_Slash,
1219	/* 0x6e */ KEY_ShiftR,
1220	/* 0x6f */ KEY_NOTUSED,		/* linefeed */
1221	/* 0x70 */ KEY_KP_1,
1222	/* 0x71 */ KEY_KP_2,
1223	/* 0x72 */ KEY_KP_3,
1224	/* 0x73 */ KEY_NOTUSED,
1225	/* 0x74 */ KEY_NOTUSED,
1226	/* 0x75 */ KEY_NOTUSED,
1227	/* 0x76 */ KEY_Help,		/* help */
1228	/* 0x77 */ KEY_CapsLock,
1229	/* 0x78 */ KEY_LMeta,
1230	/* 0x79 */ KEY_Space,
1231	/* 0x7a */ KEY_RMeta,
1232	/* 0x7b */ KEY_PgDown,
1233	/* 0x7c */ KEY_Less,		/* < > on some keyboards */
1234	/* 0x7d */ KEY_KP_Plus,
1235	/* 0x7e */ KEY_NOTUSED,
1236	/* 0x7f */ KEY_NOTUSED
1237};
1238#define WS_SUN_MAP_SIZE (sizeof(wsSunMap)/sizeof(*wsSunMap))
1239
1240static
1241TransMapRec wsSun = {
1242    0,
1243    WS_SUN_MAP_SIZE,
1244    wsSunMap
1245};
1246
1247#endif /* WSCONS_SUPPORT */
1248
1249/*ARGSUSED*/
1250
1251/*
1252 * KbdGetMapping --
1253 *	Get the national keyboard mapping. The keyboard type is set, a new map
1254 *      and the modifiermap is computed.
1255 */
1256
1257void
1258KbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap)
1259{
1260  KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
1261  KeySym        *k;
1262  int           i;
1263
1264#ifndef __bsdi__
1265  switch (pKbd->consType) {
1266
1267/*
1268 * XXX wscons has no GIO_KEYMAP
1269 */
1270#if (defined (SYSCONS_SUPPORT) || defined (PCVT_SUPPORT)) && defined(GIO_KEYMAP)
1271  case SYSCONS:
1272  case PCVT:
1273    {
1274      keymap_t keymap;
1275
1276      if (ioctl(pInfo->fd, GIO_KEYMAP, &keymap) != -1) {
1277	for (i = 0; i < keymap.n_keys && i < NUM_KEYCODES; i++)
1278	  if (remap[i]) {
1279	    k = map + (remap[i] << 2);
1280	    k[0] = KD_GET_ENTRY(i,0);           /* non-shifed */
1281	    k[1] = KD_GET_ENTRY(i,1);	      /* shifted */
1282	    k[2] = KD_GET_ENTRY(i,4);	      /* alt */
1283	    k[3] = KD_GET_ENTRY(i,5);	      /* alt - shifted */
1284	    if (k[3] == k[2]) k[3] = NoSymbol;
1285	    if (k[2] == k[1]) k[2] = NoSymbol;
1286	    if (k[1] == k[0]) k[1] = NoSymbol;
1287	    if (k[0] == k[2] && k[1] == k[3])
1288	      k[2] = k[3] = NoSymbol;
1289	  }
1290      }
1291    }
1292    break;
1293#endif /* SYSCONS || PCVT */
1294
1295  }
1296#endif /* !bsdi */
1297
1298  /*
1299   * compute the modifier map
1300   */
1301  for (i = 0; i < MAP_LENGTH; i++)
1302    pModMap[i] = NoSymbol;  /* make sure it is restored */
1303
1304  for (k = map, i = MIN_KEYCODE;
1305       i < (NUM_KEYCODES + MIN_KEYCODE);
1306       i++, k += 4)
1307
1308    switch(*k) {
1309
1310    case XK_Shift_L:
1311    case XK_Shift_R:
1312      pModMap[i] = ShiftMask;
1313      break;
1314
1315    case XK_Control_L:
1316    case XK_Control_R:
1317      pModMap[i] = ControlMask;
1318      break;
1319
1320    case XK_Caps_Lock:
1321      pModMap[i] = LockMask;
1322      break;
1323
1324    case XK_Alt_L:
1325    case XK_Alt_R:
1326      pModMap[i] = AltMask;
1327      break;
1328
1329    case XK_Num_Lock:
1330      pModMap[i] = NumLockMask;
1331      break;
1332
1333    case XK_Scroll_Lock:
1334      pModMap[i] = ScrollLockMask;
1335      break;
1336
1337      /* kana support */
1338    case XK_Kana_Lock:
1339    case XK_Kana_Shift:
1340      pModMap[i] = KanaMask;
1341      break;
1342
1343      /* alternate toggle for multinational support */
1344    case XK_Mode_switch:
1345      pModMap[i] = AltLangMask;
1346      break;
1347
1348    }
1349
1350  pKeySyms->map        = map;
1351  pKeySyms->mapWidth   = GLYPHS_PER_KEY;
1352  pKeySyms->minKeyCode = MIN_KEYCODE;
1353  pKeySyms->maxKeyCode = MAX_KEYCODE;
1354
1355  switch(pKbd->consType) {
1356#ifdef SYSCONS_SUPPORT
1357      case SYSCONS:
1358           if (pKbd->CustomKeycodes)
1359              pKbd->scancodeMap = &sysconsCODE;
1360           else
1361              pKbd->RemapScanCode = ATScancode;
1362           break;
1363#endif
1364#if defined(PCCONS_SUPPORT) || defined (PCVT_SUPPORT)
1365      case PCCONS:
1366      case PCVT:
1367           pKbd->RemapScanCode = ATScancode;
1368	   break;
1369#endif
1370#ifdef WSCONS_SUPPORT
1371      case WSCONS:
1372	if (!pKbd->isConsole) {
1373           switch (pKbd->wsKbdType) {
1374	       case WSKBD_TYPE_PC_XT:
1375	       case WSKBD_TYPE_PC_AT:
1376                    pKbd->scancodeMap = &wsXt;
1377                    break;
1378	       case WSKBD_TYPE_USB:
1379#ifdef WSKBD_TYPE_MAPLE
1380	       case WSKBD_TYPE_MAPLE:
1381#endif
1382                    pKbd->scancodeMap = &wsUsb;
1383                    break;
1384#ifdef WSKBD_TYPE_ADB
1385	       case WSKBD_TYPE_ADB:
1386                    pKbd->scancodeMap = &wsAdb;
1387                    break;
1388#endif
1389#ifdef WSKBD_TYPE_LK201
1390	       case WSKBD_TYPE_LK201:
1391                    pKbd->scancodeMap = &wsLk201;
1392                    break;
1393#endif
1394#ifdef WSKBD_TYPE_SUN
1395#ifdef WSKBD_TYPE_SUN5
1396	       case WSKBD_TYPE_SUN5:
1397#endif
1398	       case WSKBD_TYPE_SUN:
1399                    pKbd->scancodeMap = &wsSun;
1400                    break;
1401#endif
1402	       default:
1403		    ErrorF("Unknown wskbd type %d\n", pKbd->wsKbdType);
1404           }
1405	} else {
1406           pKbd->RemapScanCode = ATScancode;
1407	}
1408      break;
1409#endif
1410  }
1411  return;
1412}
1413