bsd_KbdMap.c revision 51aca463
1ee3138f1Smrg/*
2ee3138f1Smrg * Slightly modified xf86KbdBSD.c which is
3ee3138f1Smrg *
4ee3138f1Smrg * Derived from xf86Kbd.c by S_ren Schmidt (sos@login.dkuug.dk)
5ee3138f1Smrg * which is Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
6ee3138f1Smrg * and from xf86KbdCODrv.c by Holger Veit
7ee3138f1Smrg */
8ee3138f1Smrg
9ee3138f1Smrg#ifdef HAVE_CONFIG_H
10ee3138f1Smrg#include "config.h"
11ee3138f1Smrg#endif
12ee3138f1Smrg
13632d17a8Smrg#include <xorg-server.h>
14ee3138f1Smrg#include <X11/X.h>
15ee3138f1Smrg#include <X11/Xmd.h>
16ee3138f1Smrg#include "input.h"
17ee3138f1Smrg#include "scrnintstr.h"
18ee3138f1Smrg
19ee3138f1Smrg#include "compiler.h"
20ee3138f1Smrg
21ee3138f1Smrg#include "xf86.h"
22ee3138f1Smrg#include "xf86Priv.h"
23ee3138f1Smrg#include "xf86_OSlib.h"
24ee3138f1Smrg#include "xf86Xinput.h"
25ee3138f1Smrg#include "xf86OSKbd.h"
26ee3138f1Smrg#include "atKeynames.h"
27ee3138f1Smrg#include "xf86Keymap.h"
28ee3138f1Smrg#include "bsd_kbd.h"
29ee3138f1Smrg
30ee3138f1Smrg#if (defined(SYSCONS_SUPPORT) || defined(PCVT_SUPPORT)) && defined(GIO_KEYMAP)
31ee3138f1Smrg#define KD_GET_ENTRY(i,n) \
32ee3138f1Smrg  eascii_to_x[((keymap.key[i].spcl << (n+1)) & 0x100) + keymap.key[i].map[n]]
33ee3138f1Smrg
34ee3138f1Smrgstatic unsigned char remap[NUM_KEYCODES] = {
35ee3138f1Smrg     0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,   /* 0x00 - 0x07 */
36ee3138f1Smrg  0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,   /* 0x08 - 0x0f */
37ee3138f1Smrg  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,   /* 0x10 - 0x17 */
38ee3138f1Smrg  0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,   /* 0x18 - 0x1f */
39ee3138f1Smrg  0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,   /* 0x20 - 0x27 */
40ee3138f1Smrg  0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,   /* 0x28 - 0x2f */
41ee3138f1Smrg  0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,    0,   /* 0x30 - 0x37 */
42ee3138f1Smrg  0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,   /* 0x38 - 0x3f */
43ee3138f1Smrg  0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,    0,   /* 0x40 - 0x47 */
44ee3138f1Smrg     0,    0,    0,    0,    0,    0,    0,    0,   /* 0x48 - 0x4f */
45ee3138f1Smrg     0,    0,    0,    0,    0,    0, 0x56, 0x57,   /* 0x50 - 0x57 */
46ee3138f1Smrg  0x58,    0,    0,    0,    0,    0,    0,    0,   /* 0x58 - 0x5f */
47ee3138f1Smrg     0,    0,    0,    0,    0,    0,    0,    0,   /* 0x60 - 0x67 */
48ee3138f1Smrg     0,    0,    0,    0,    0,    0,    0,    0,   /* 0x68 - 0x6f */
49ee3138f1Smrg     0,    0, 0x69, 0x65,    0,    0,    0,    0,   /* 0x70 - 0x77 */
50ee3138f1Smrg     0,    0,    0,    0,    0,    0,    0,    0,   /* 0x78 - 0x7f */
51ee3138f1Smrg};
52ee3138f1Smrg
53ee3138f1Smrg/* This table assumes the ibm code page 437 coding for characters
54ee3138f1Smrg * > 0x80. They are returned in this form by PCVT */
55ee3138f1Smrgstatic KeySym eascii_to_x[512] = {
56ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
57ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
58ee3138f1Smrg	XK_BackSpace,	XK_Tab,		XK_Linefeed,	NoSymbol,
59ee3138f1Smrg	NoSymbol,	XK_Return,	NoSymbol,	NoSymbol,
60ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
61ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
62ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	XK_Escape,
63ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
64ee3138f1Smrg	XK_space,	XK_exclam,	XK_quotedbl,	XK_numbersign,
65ee3138f1Smrg	XK_dollar,	XK_percent,	XK_ampersand,	XK_apostrophe,
66ee3138f1Smrg	XK_parenleft,	XK_parenright,	XK_asterisk,	XK_plus,
67ee3138f1Smrg	XK_comma,	XK_minus,	XK_period,	XK_slash,
68ee3138f1Smrg	XK_0,		XK_1,		XK_2,		XK_3,
69ee3138f1Smrg	XK_4,		XK_5,		XK_6,		XK_7,
70ee3138f1Smrg	XK_8,		XK_9,		XK_colon,	XK_semicolon,
71ee3138f1Smrg	XK_less,	XK_equal,	XK_greater,	XK_question,
72ee3138f1Smrg	XK_at,		XK_A,		XK_B,		XK_C,
73ee3138f1Smrg	XK_D,		XK_E,		XK_F,		XK_G,
74ee3138f1Smrg	XK_H,		XK_I,		XK_J,		XK_K,
75ee3138f1Smrg	XK_L,		XK_M,		XK_N,		XK_O,
76ee3138f1Smrg	XK_P,		XK_Q,		XK_R,		XK_S,
77ee3138f1Smrg	XK_T,		XK_U,		XK_V,		XK_W,
78ee3138f1Smrg	XK_X,		XK_Y,		XK_Z,		XK_bracketleft,
79ee3138f1Smrg	XK_backslash,	XK_bracketright,XK_asciicircum,	XK_underscore,
80ee3138f1Smrg	XK_grave,	XK_a,		XK_b,		XK_c,
81ee3138f1Smrg	XK_d,		XK_e,		XK_f,		XK_g,
82ee3138f1Smrg	XK_h,		XK_i,		XK_j,		XK_k,
83ee3138f1Smrg	XK_l,		XK_m,		XK_n,		XK_o,
84ee3138f1Smrg	XK_p,		XK_q,		XK_r,		XK_s,
85ee3138f1Smrg	XK_t,		XK_u,		XK_v,		XK_w,
86ee3138f1Smrg	XK_x,		XK_y,		XK_z,		XK_braceleft,
87ee3138f1Smrg	XK_bar,		XK_braceright,	XK_asciitilde,	XK_Delete,
88ee3138f1Smrg	XK_Ccedilla,	XK_udiaeresis,	XK_eacute,	XK_acircumflex,
89ee3138f1Smrg	XK_adiaeresis,	XK_agrave,	XK_aring,	XK_ccedilla,
90ee3138f1Smrg	XK_ecircumflex,	XK_ediaeresis,	XK_egrave,	XK_idiaeresis,
91ee3138f1Smrg	XK_icircumflex,	XK_igrave,	XK_Adiaeresis,	XK_Aring,
92ee3138f1Smrg	XK_Eacute,	XK_ae,		XK_AE,		XK_ocircumflex,
93ee3138f1Smrg	XK_odiaeresis,	XK_ograve,	XK_ucircumflex,	XK_ugrave,
94ee3138f1Smrg	XK_ydiaeresis,	XK_Odiaeresis,	XK_Udiaeresis,	XK_cent,
95ee3138f1Smrg	XK_sterling,	XK_yen,		XK_paragraph,	XK_section,
96ee3138f1Smrg	XK_aacute,	XK_iacute,	XK_oacute,	XK_uacute,
97ee3138f1Smrg	XK_ntilde,	XK_Ntilde,	XK_ordfeminine,	XK_masculine,
98ee3138f1Smrg	XK_questiondown,XK_hyphen,	XK_notsign,	XK_onehalf,
99ee3138f1Smrg	XK_onequarter,	XK_exclamdown,	XK_guillemotleft,XK_guillemotright,
100ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
101ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
102ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
103ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
104ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
105ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
106ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
107ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
108ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
109ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
110ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
111ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
112ee3138f1Smrg	XK_Greek_alpha,	XK_ssharp,	XK_Greek_GAMMA,	XK_Greek_pi,
113ee3138f1Smrg	XK_Greek_SIGMA,	XK_Greek_sigma,	XK_mu,	        XK_Greek_tau,
114ee3138f1Smrg	XK_Greek_PHI,	XK_Greek_THETA,	XK_Greek_OMEGA,	XK_Greek_delta,
115ee3138f1Smrg	XK_infinity,	XK_Ooblique,	XK_Greek_epsilon, XK_intersection,
116ee3138f1Smrg	XK_identical,	XK_plusminus,	XK_greaterthanequal, XK_lessthanequal,
117ee3138f1Smrg	XK_topintegral,	XK_botintegral,	XK_division,	XK_similarequal,
118ee3138f1Smrg	XK_degree,	NoSymbol,	NoSymbol,	XK_radical,
119ee3138f1Smrg	XK_Greek_eta,	XK_twosuperior,	XK_periodcentered, NoSymbol,
120ee3138f1Smrg
121ee3138f1Smrg	/*
122ee3138f1Smrg	 * special marked entries (256 + x)
123ee3138f1Smrg	 */
124ee3138f1Smrg
125ee3138f1Smrg	/* This has been checked against what syscons actually does */
126ee3138f1Smrg	NoSymbol,	NoSymbol,	XK_Shift_L,	XK_Shift_R,
127ee3138f1Smrg	XK_Caps_Lock,	XK_Num_Lock,	XK_Scroll_Lock,	XK_Alt_L,
128ee3138f1Smrg	XK_ISO_Left_Tab,XK_Control_L,	NoSymbol,	NoSymbol,
129ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
130ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
131ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
132ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	XK_F1,
133ee3138f1Smrg	XK_F2,		XK_F3,		XK_F4,		XK_F5,
134ee3138f1Smrg	XK_F6,		XK_F7,		XK_F8,		XK_F9,
135ee3138f1Smrg	XK_F10,		XK_F11,		XK_F12,		NoSymbol,
136ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
137ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
138ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
139ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
140ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
141ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
142ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
143ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
144ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
145ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
146ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
147ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
148ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
149ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
150ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
151ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
152ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
153ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
154ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
155ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
156ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
157ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
158ee3138f1Smrg	XK_Control_R,	XK_Alt_R,	NoSymbol,	NoSymbol,
159ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
160ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
161ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
162ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
163ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
164ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
165ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
166ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
167ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
168ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
169ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
170ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
171ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
172ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
173ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
174ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
175ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
176ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
177ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
178ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
179ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
180ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
181ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
182ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
183ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
184ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
185ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
186ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
187ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
188ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
189ee3138f1Smrg	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol
190ee3138f1Smrg};
191ee3138f1Smrg
192ee3138f1Smrg#ifdef SYSCONS_SUPPORT
193ee3138f1Smrgstatic
194ee3138f1Smrgunsigned char sysconsCODEMap[] = {
195ee3138f1Smrg	KEY_KP_Enter,	KEY_RCtrl,	KEY_KP_Divide,	KEY_Print,
196ee3138f1Smrg	KEY_AltLang,	KEY_KP_7,	KEY_KP_8,	KEY_KP_9,
197ee3138f1Smrg	KEY_KP_4,	KEY_KP_6,	KEY_KP_1,	KEY_KP_2,
198ee3138f1Smrg	KEY_KP_3,	KEY_KP_0,	KEY_KP_Decimal,	KEY_Pause,
199ee3138f1Smrg	KEY_LMeta,	KEY_RMeta,	KEY_Menu,	KEY_Break
200ee3138f1Smrg};
201ee3138f1Smrgstatic
202ee3138f1SmrgTransMapRec sysconsCODE = {
203ee3138f1Smrg    0x59,
204ee3138f1Smrg    0x6d,
205ee3138f1Smrg    sysconsCODEMap
206ee3138f1Smrg};
207ee3138f1Smrg#endif
208ee3138f1Smrg#endif /* SYSCONS_SUPPORT || PCVT_SUPPORT */
209ee3138f1Smrg
210ee3138f1Smrg#ifdef WSCONS_SUPPORT
211ee3138f1Smrg
212ee3138f1Smrgstatic CARD8 wsUsbMap[] = {
213ee3138f1Smrg	/* 0 */ KEY_NOTUSED,
214ee3138f1Smrg	/* 1 */ KEY_NOTUSED,
215ee3138f1Smrg	/* 2 */ KEY_NOTUSED,
216ee3138f1Smrg	/* 3 */ KEY_NOTUSED,
217ee3138f1Smrg	/* 4 */ KEY_A,
218ee3138f1Smrg	/* 5 */ KEY_B,
219ee3138f1Smrg	/* 6 */ KEY_C,
220ee3138f1Smrg	/* 7 */ KEY_D,
221ee3138f1Smrg	/* 8 */ KEY_E,
222ee3138f1Smrg	/* 9 */ KEY_F,
223ee3138f1Smrg	/* 10 */ KEY_G,
224ee3138f1Smrg	/* 11 */ KEY_H,
225ee3138f1Smrg	/* 12 */ KEY_I,
226ee3138f1Smrg	/* 13 */ KEY_J,
227ee3138f1Smrg	/* 14 */ KEY_K,
228ee3138f1Smrg	/* 15 */ KEY_L,
229ee3138f1Smrg	/* 16 */ KEY_M,
230ee3138f1Smrg	/* 17 */ KEY_N,
231ee3138f1Smrg	/* 18 */ KEY_O,
232ee3138f1Smrg	/* 19 */ KEY_P,
233ee3138f1Smrg	/* 20 */ KEY_Q,
234ee3138f1Smrg	/* 21 */ KEY_R,
235ee3138f1Smrg	/* 22 */ KEY_S,
236ee3138f1Smrg	/* 23 */ KEY_T,
237ee3138f1Smrg	/* 24 */ KEY_U,
238ee3138f1Smrg	/* 25 */ KEY_V,
239ee3138f1Smrg	/* 26 */ KEY_W,
240ee3138f1Smrg	/* 27 */ KEY_X,
241ee3138f1Smrg	/* 28 */ KEY_Y,
242ee3138f1Smrg	/* 29 */ KEY_Z,
243ee3138f1Smrg	/* 30 */ KEY_1,		/* 1 !*/
244ee3138f1Smrg	/* 31 */ KEY_2,		/* 2 @ */
245ee3138f1Smrg	/* 32 */ KEY_3,		/* 3 # */
246ee3138f1Smrg	/* 33 */ KEY_4,		/* 4 $ */
247ee3138f1Smrg	/* 34 */ KEY_5,		/* 5 % */
248ee3138f1Smrg	/* 35 */ KEY_6,		/* 6 ^ */
249ee3138f1Smrg	/* 36 */ KEY_7,		/* 7 & */
250ee3138f1Smrg	/* 37 */ KEY_8,		/* 8 * */
251ee3138f1Smrg	/* 38 */ KEY_9,		/* 9 ( */
252ee3138f1Smrg	/* 39 */ KEY_0,		/* 0 ) */
253ee3138f1Smrg	/* 40 */ KEY_Enter,	/* Return  */
254ee3138f1Smrg	/* 41 */ KEY_Escape,	/* Escape */
255ee3138f1Smrg	/* 42 */ KEY_BackSpace,	/* Backspace Delete */
256ee3138f1Smrg	/* 43 */ KEY_Tab,	/* Tab */
257ee3138f1Smrg	/* 44 */ KEY_Space,	/* Space */
258ee3138f1Smrg	/* 45 */ KEY_Minus,	/* - _ */
259ee3138f1Smrg	/* 46 */ KEY_Equal,	/* = + */
260ee3138f1Smrg	/* 47 */ KEY_LBrace,	/* [ { */
261ee3138f1Smrg	/* 48 */ KEY_RBrace,	/* ] } */
262ee3138f1Smrg	/* 49 */ KEY_BSlash,	/* \ | */
26351aca463Smartin	/* this was KEY_BSlash2 which seems bogus */
26451aca463Smartin	/* 50 */ KEY_BSlash,    /* \ _ # ~ on some keyboards */
265ee3138f1Smrg	/* 51 */ KEY_SemiColon,	/* ; : */
266ee3138f1Smrg	/* 52 */ KEY_Quote,	/* ' " */
267ee3138f1Smrg	/* 53 */ KEY_Tilde,	/* ` ~ */
268ee3138f1Smrg	/* 54 */ KEY_Comma,	/* , <  */
269ee3138f1Smrg	/* 55 */ KEY_Period,	/* . > */
270ee3138f1Smrg	/* 56 */ KEY_Slash,	/* / ? */
271ee3138f1Smrg	/* 57 */ KEY_CapsLock,	/* Caps Lock */
272ee3138f1Smrg	/* 58 */ KEY_F1,		/* F1 */
273ee3138f1Smrg	/* 59 */ KEY_F2,		/* F2 */
274ee3138f1Smrg	/* 60 */ KEY_F3,		/* F3 */
275ee3138f1Smrg	/* 61 */ KEY_F4,		/* F4 */
276ee3138f1Smrg	/* 62 */ KEY_F5,		/* F5 */
277ee3138f1Smrg	/* 63 */ KEY_F6,		/* F6 */
278ee3138f1Smrg	/* 64 */ KEY_F7,		/* F7 */
279ee3138f1Smrg	/* 65 */ KEY_F8,		/* F8 */
280ee3138f1Smrg	/* 66 */ KEY_F9,		/* F9 */
281ee3138f1Smrg	/* 67 */ KEY_F10,	/* F10 */
282ee3138f1Smrg	/* 68 */ KEY_F11,	/* F11 */
283ee3138f1Smrg	/* 69 */ KEY_F12,	/* F12 */
284ee3138f1Smrg	/* 70 */ KEY_Print,	/* PrintScrn SysReq */
285ee3138f1Smrg	/* 71 */ KEY_ScrollLock,	/* Scroll Lock */
286ee3138f1Smrg	/* 72 */ KEY_Pause,	/* Pause Break */
287ee3138f1Smrg	/* 73 */ KEY_Insert,	/* Insert XXX  Help on some Mac Keyboards */
288ee3138f1Smrg	/* 74 */ KEY_Home,	/* Home */
289ee3138f1Smrg	/* 75 */ KEY_PgUp,	/* Page Up */
290ee3138f1Smrg	/* 76 */ KEY_Delete,	/* Delete */
291ee3138f1Smrg	/* 77 */ KEY_End,	/* End */
292ee3138f1Smrg	/* 78 */ KEY_PgDown,	/* Page Down */
293ee3138f1Smrg	/* 79 */ KEY_Right,	/* Right Arrow */
294ee3138f1Smrg	/* 80 */ KEY_Left,	/* Left Arrow */
295ee3138f1Smrg	/* 81 */ KEY_Down,	/* Down Arrow */
296ee3138f1Smrg	/* 82 */ KEY_Up,		/* Up Arrow */
297ee3138f1Smrg	/* 83 */ KEY_NumLock,	/* Num Lock */
298ee3138f1Smrg	/* 84 */ KEY_KP_Divide,	/* Keypad / */
299ee3138f1Smrg	/* 85 */ KEY_KP_Multiply, /* Keypad * */
300ee3138f1Smrg	/* 86 */ KEY_KP_Minus,	/* Keypad - */
301ee3138f1Smrg	/* 87 */ KEY_KP_Plus,	/* Keypad + */
302ee3138f1Smrg	/* 88 */ KEY_KP_Enter,	/* Keypad Enter */
303ee3138f1Smrg	/* 89 */ KEY_KP_1,	/* Keypad 1 End */
304ee3138f1Smrg	/* 90 */ KEY_KP_2,	/* Keypad 2 Down */
305ee3138f1Smrg	/* 91 */ KEY_KP_3,	/* Keypad 3 Pg Down */
306ee3138f1Smrg	/* 92 */ KEY_KP_4,	/* Keypad 4 Left  */
307ee3138f1Smrg	/* 93 */ KEY_KP_5,	/* Keypad 5 */
308ee3138f1Smrg	/* 94 */ KEY_KP_6,	/* Keypad 6 */
309ee3138f1Smrg	/* 95 */ KEY_KP_7,	/* Keypad 7 Home */
310ee3138f1Smrg	/* 96 */ KEY_KP_8,	/* Keypad 8 Up */
311ee3138f1Smrg	/* 97 */ KEY_KP_9,	/* KEypad 9 Pg Up */
312ee3138f1Smrg	/* 98 */ KEY_KP_0,	/* Keypad 0 Ins */
313ee3138f1Smrg	/* 99 */ KEY_KP_Decimal,	/* Keypad . Del */
314ee3138f1Smrg	/* 100 */ KEY_Less,	/* < > on some keyboards */
315ee3138f1Smrg	/* 101 */ KEY_Menu,	/* Menu */
316713cff54Smacallan	/* 102 */ KEY_Power,	/* sleep key on Sun USB */
317ee3138f1Smrg	/* 103 */ KEY_KP_Equal, /* Keypad = on Mac keyboards */
318713cff54Smacallan	/* 104 */ KEY_F13,
319713cff54Smacallan	/* 105 */ KEY_F14,
320713cff54Smacallan	/* 106 */ KEY_F15,
321713cff54Smacallan	/* 107 */ KEY_F16,
322ee3138f1Smrg	/* 108 */ KEY_NOTUSED,
323713cff54Smacallan	/* 109 */ KEY_Power,
324ee3138f1Smrg	/* 110 */ KEY_NOTUSED,
325ee3138f1Smrg	/* 111 */ KEY_NOTUSED,
326ee3138f1Smrg	/* 112 */ KEY_NOTUSED,
327ee3138f1Smrg	/* 113 */ KEY_NOTUSED,
328ee3138f1Smrg	/* 114 */ KEY_NOTUSED,
329ee3138f1Smrg	/* 115 */ KEY_NOTUSED,
330713cff54Smacallan	/* 116 */ KEY_L7,
331713cff54Smacallan	/* 117 */ KEY_Help,
332713cff54Smacallan	/* 118 */ KEY_L3,
333713cff54Smacallan	/* 119 */ KEY_L5,
334713cff54Smacallan	/* 120 */ KEY_L1,
335713cff54Smacallan	/* 121 */ KEY_L2,
336713cff54Smacallan	/* 122 */ KEY_L4,
337713cff54Smacallan	/* 123 */ KEY_L10,
338713cff54Smacallan	/* 124 */ KEY_L6,
339713cff54Smacallan	/* 125 */ KEY_L8,
340713cff54Smacallan	/* 126 */ KEY_L9,
341713cff54Smacallan	/* 127 */ KEY_Mute,
342713cff54Smacallan	/* 128 */ KEY_AudioRaise,
343713cff54Smacallan	/* 129 */ KEY_AudioLower,
344ee3138f1Smrg	/* 130 */ KEY_NOTUSED,
345ee3138f1Smrg	/* 131 */ KEY_NOTUSED,
346ee3138f1Smrg	/* 132 */ KEY_NOTUSED,
347ee3138f1Smrg	/* 133 */ KEY_NOTUSED,
348ee3138f1Smrg	/* 134 */ KEY_NOTUSED,
349ee3138f1Smrg	/* 135 */ KEY_NOTUSED,
350ee3138f1Smrg	/* 136 */ KEY_NOTUSED,
351ee3138f1Smrg	/* 137 */ KEY_NOTUSED,
352ee3138f1Smrg	/* 138 */ KEY_NOTUSED,
353ee3138f1Smrg	/* 139 */ KEY_NOTUSED,
354ee3138f1Smrg	/* 140 */ KEY_NOTUSED,
355ee3138f1Smrg	/* 141 */ KEY_NOTUSED,
356ee3138f1Smrg	/* 142 */ KEY_NOTUSED,
357ee3138f1Smrg	/* 143 */ KEY_NOTUSED,
358ee3138f1Smrg	/* 144 */ KEY_NOTUSED,
359ee3138f1Smrg	/* 145 */ KEY_NOTUSED,
360ee3138f1Smrg	/* 146 */ KEY_NOTUSED,
361ee3138f1Smrg	/* 147 */ KEY_NOTUSED,
362ee3138f1Smrg	/* 148 */ KEY_NOTUSED,
363ee3138f1Smrg	/* 149 */ KEY_NOTUSED,
364ee3138f1Smrg	/* 150 */ KEY_NOTUSED,
365ee3138f1Smrg	/* 151 */ KEY_NOTUSED,
366ee3138f1Smrg	/* 152 */ KEY_NOTUSED,
367ee3138f1Smrg	/* 153 */ KEY_NOTUSED,
368ee3138f1Smrg	/* 154 */ KEY_NOTUSED,
369ee3138f1Smrg	/* 155 */ KEY_NOTUSED,
370ee3138f1Smrg	/* 156 */ KEY_NOTUSED,
371ee3138f1Smrg	/* 157 */ KEY_NOTUSED,
372ee3138f1Smrg	/* 158 */ KEY_NOTUSED,
373ee3138f1Smrg	/* 159 */ KEY_NOTUSED,
374ee3138f1Smrg	/* 160 */ KEY_NOTUSED,
375ee3138f1Smrg	/* 161 */ KEY_NOTUSED,
376ee3138f1Smrg	/* 162 */ KEY_NOTUSED,
377ee3138f1Smrg	/* 163 */ KEY_NOTUSED,
378ee3138f1Smrg	/* 164 */ KEY_NOTUSED,
379ee3138f1Smrg	/* 165 */ KEY_NOTUSED,
380ee3138f1Smrg	/* 166 */ KEY_NOTUSED,
381ee3138f1Smrg	/* 167 */ KEY_NOTUSED,
382ee3138f1Smrg	/* 168 */ KEY_NOTUSED,
383ee3138f1Smrg	/* 169 */ KEY_NOTUSED,
384ee3138f1Smrg	/* 170 */ KEY_NOTUSED,
385ee3138f1Smrg	/* 171 */ KEY_NOTUSED,
386ee3138f1Smrg	/* 172 */ KEY_NOTUSED,
387ee3138f1Smrg	/* 173 */ KEY_NOTUSED,
388ee3138f1Smrg	/* 174 */ KEY_NOTUSED,
389ee3138f1Smrg	/* 175 */ KEY_NOTUSED,
390ee3138f1Smrg	/* 176 */ KEY_NOTUSED,
391ee3138f1Smrg	/* 177 */ KEY_NOTUSED,
392ee3138f1Smrg	/* 178 */ KEY_NOTUSED,
393ee3138f1Smrg	/* 179 */ KEY_NOTUSED,
394ee3138f1Smrg	/* 180 */ KEY_NOTUSED,
395ee3138f1Smrg	/* 181 */ KEY_NOTUSED,
396ee3138f1Smrg	/* 182 */ KEY_NOTUSED,
397ee3138f1Smrg	/* 183 */ KEY_NOTUSED,
398ee3138f1Smrg	/* 184 */ KEY_NOTUSED,
399ee3138f1Smrg	/* 185 */ KEY_NOTUSED,
400ee3138f1Smrg	/* 186 */ KEY_NOTUSED,
401ee3138f1Smrg	/* 187 */ KEY_NOTUSED,
402ee3138f1Smrg	/* 188 */ KEY_NOTUSED,
403ee3138f1Smrg	/* 189 */ KEY_NOTUSED,
404ee3138f1Smrg	/* 190 */ KEY_NOTUSED,
405ee3138f1Smrg	/* 191 */ KEY_NOTUSED,
406ee3138f1Smrg	/* 192 */ KEY_NOTUSED,
407ee3138f1Smrg	/* 193 */ KEY_NOTUSED,
408ee3138f1Smrg	/* 194 */ KEY_NOTUSED,
409ee3138f1Smrg	/* 195 */ KEY_NOTUSED,
410ee3138f1Smrg	/* 196 */ KEY_NOTUSED,
411ee3138f1Smrg	/* 197 */ KEY_NOTUSED,
412ee3138f1Smrg	/* 198 */ KEY_NOTUSED,
413ee3138f1Smrg	/* 199 */ KEY_NOTUSED,
414ee3138f1Smrg	/* 200 */ KEY_NOTUSED,
415ee3138f1Smrg	/* 201 */ KEY_NOTUSED,
416ee3138f1Smrg	/* 202 */ KEY_NOTUSED,
417ee3138f1Smrg	/* 203 */ KEY_NOTUSED,
418ee3138f1Smrg	/* 204 */ KEY_NOTUSED,
419ee3138f1Smrg	/* 205 */ KEY_NOTUSED,
420ee3138f1Smrg	/* 206 */ KEY_NOTUSED,
421ee3138f1Smrg	/* 207 */ KEY_NOTUSED,
422ee3138f1Smrg	/* 208 */ KEY_NOTUSED,
423ee3138f1Smrg	/* 209 */ KEY_NOTUSED,
424ee3138f1Smrg	/* 210 */ KEY_NOTUSED,
425ee3138f1Smrg	/* 211 */ KEY_NOTUSED,
426ee3138f1Smrg	/* 212 */ KEY_NOTUSED,
427ee3138f1Smrg	/* 213 */ KEY_NOTUSED,
428ee3138f1Smrg	/* 214 */ KEY_NOTUSED,
429ee3138f1Smrg	/* 215 */ KEY_NOTUSED,
430ee3138f1Smrg	/* 216 */ KEY_NOTUSED,
431ee3138f1Smrg	/* 217 */ KEY_NOTUSED,
432ee3138f1Smrg	/* 218 */ KEY_NOTUSED,
433ee3138f1Smrg	/* 219 */ KEY_NOTUSED,
434ee3138f1Smrg	/* 220 */ KEY_NOTUSED,
435ee3138f1Smrg	/* 221 */ KEY_NOTUSED,
436ee3138f1Smrg	/* 222 */ KEY_NOTUSED,
437ee3138f1Smrg	/* 223 */ KEY_NOTUSED,
438ee3138f1Smrg	/* 224 */ KEY_LCtrl,	/* Left Control */
439ee3138f1Smrg	/* 225 */ KEY_ShiftL,	/* Left Shift */
440ee3138f1Smrg	/* 226 */ KEY_Alt,	/* Left Alt */
441ee3138f1Smrg	/* 227 */ KEY_LMeta,	/* Left Meta */
442ee3138f1Smrg	/* 228 */ KEY_RCtrl,	/* Right Control */
443ee3138f1Smrg	/* 229 */ KEY_ShiftR,	/* Right Shift */
444ee3138f1Smrg	/* 230 */ KEY_AltLang,	/* Right Alt, AKA AltGr */
445ee3138f1Smrg	/* 231 */ KEY_LMeta,	/* Right Meta XXX */
446ee3138f1Smrg};
447ee3138f1Smrg#define WS_USB_MAP_SIZE (sizeof(wsUsbMap)/sizeof(unsigned char))
448ee3138f1Smrg
449ee3138f1Smrgstatic
450ee3138f1SmrgTransMapRec wsUsb = {
451ee3138f1Smrg    0,
452ee3138f1Smrg    WS_USB_MAP_SIZE,
453ee3138f1Smrg    wsUsbMap
454ee3138f1Smrg};
455ee3138f1Smrg
456ac15d2bcSmacallanstatic CARD8 wsXtMap[] = {
457ac15d2bcSmacallan	/* 0 */ KEY_NOTUSED,
458ac15d2bcSmacallan	/* 1 */ KEY_Escape,
459ac15d2bcSmacallan	/* 2 */ KEY_1,
460ac15d2bcSmacallan	/* 3 */ KEY_2,
461ac15d2bcSmacallan	/* 4 */ KEY_3,
462ac15d2bcSmacallan	/* 5 */ KEY_4,
463ac15d2bcSmacallan	/* 6 */ KEY_5,
464ac15d2bcSmacallan	/* 7 */ KEY_6,
465ac15d2bcSmacallan	/* 8 */ KEY_7,
466ac15d2bcSmacallan	/* 9 */ KEY_8,
467ac15d2bcSmacallan	/* 10 */ KEY_9,
468ac15d2bcSmacallan	/* 11 */ KEY_0,
469ac15d2bcSmacallan	/* 12 */ KEY_Minus,
470ac15d2bcSmacallan	/* 13 */ KEY_Equal,
471ac15d2bcSmacallan	/* 14 */ KEY_BackSpace,
472ac15d2bcSmacallan	/* 15 */ KEY_Tab,
473ac15d2bcSmacallan	/* 16 */ KEY_Q,
474ac15d2bcSmacallan	/* 17 */ KEY_W,
475ac15d2bcSmacallan	/* 18 */ KEY_E,
476ac15d2bcSmacallan	/* 19 */ KEY_R,
477ac15d2bcSmacallan	/* 20 */ KEY_T,
478ac15d2bcSmacallan	/* 21 */ KEY_Y,
479ac15d2bcSmacallan	/* 22 */ KEY_U,
480ac15d2bcSmacallan	/* 23 */ KEY_I,
481ac15d2bcSmacallan	/* 24 */ KEY_O,
482ac15d2bcSmacallan	/* 25 */ KEY_P,
483ac15d2bcSmacallan	/* 26 */ KEY_LBrace,
484ac15d2bcSmacallan	/* 27 */ KEY_RBrace,
485ac15d2bcSmacallan	/* 28 */ KEY_Enter,
486ac15d2bcSmacallan	/* 29 */ KEY_LCtrl,
487ac15d2bcSmacallan	/* 30 */ KEY_A,
488ac15d2bcSmacallan	/* 31 */ KEY_S,
489ac15d2bcSmacallan	/* 32 */ KEY_D,
490ac15d2bcSmacallan	/* 33 */ KEY_F,
491ac15d2bcSmacallan	/* 34 */ KEY_G,
492ac15d2bcSmacallan	/* 35 */ KEY_H,
493ac15d2bcSmacallan	/* 36 */ KEY_J,
494ac15d2bcSmacallan	/* 37 */ KEY_K,
495ac15d2bcSmacallan	/* 38 */ KEY_L,
496ac15d2bcSmacallan	/* 39 */ KEY_SemiColon,
497ac15d2bcSmacallan	/* 40 */ KEY_Quote,
498ac15d2bcSmacallan	/* 41 */ KEY_Tilde,
499ac15d2bcSmacallan	/* 42 */ KEY_ShiftL,
500ac15d2bcSmacallan	/* 43 */ KEY_BSlash,
501ac15d2bcSmacallan	/* 44 */ KEY_Z,
502ac15d2bcSmacallan	/* 45 */ KEY_X,
503ac15d2bcSmacallan	/* 46 */ KEY_C,
504ac15d2bcSmacallan	/* 47 */ KEY_V,
505ac15d2bcSmacallan	/* 48 */ KEY_B,
506ac15d2bcSmacallan	/* 49 */ KEY_N,
507ac15d2bcSmacallan	/* 50 */ KEY_M,
508ac15d2bcSmacallan	/* 51 */ KEY_Comma,
509ac15d2bcSmacallan	/* 52 */ KEY_Period,
510ac15d2bcSmacallan	/* 53 */ KEY_Slash,
511ac15d2bcSmacallan	/* 54 */ KEY_ShiftR,
512ac15d2bcSmacallan	/* 55 */ KEY_KP_Multiply,
513ac15d2bcSmacallan	/* 56 */ KEY_Alt,
514ac15d2bcSmacallan	/* 57 */ KEY_Space,
515ac15d2bcSmacallan	/* 58 */ KEY_CapsLock,
516ac15d2bcSmacallan	/* 59 */ KEY_F1,
517ac15d2bcSmacallan	/* 60 */ KEY_F2,
518ac15d2bcSmacallan	/* 61 */ KEY_F3,
519ac15d2bcSmacallan	/* 62 */ KEY_F4,
520ac15d2bcSmacallan	/* 63 */ KEY_F5,
521ac15d2bcSmacallan	/* 64 */ KEY_F6,
522ac15d2bcSmacallan	/* 65 */ KEY_F7,
523ac15d2bcSmacallan	/* 66 */ KEY_F8,
524ac15d2bcSmacallan	/* 67 */ KEY_F9,
525ac15d2bcSmacallan	/* 68 */ KEY_F10,
526ac15d2bcSmacallan	/* 69 */ KEY_NumLock,
527ac15d2bcSmacallan	/* 70 */ KEY_ScrollLock,
528ac15d2bcSmacallan	/* 71 */ KEY_KP_7,
529ac15d2bcSmacallan	/* 72 */ KEY_KP_8,
530ac15d2bcSmacallan	/* 73 */ KEY_KP_9,
531ac15d2bcSmacallan	/* 74 */ KEY_KP_Minus,
532ac15d2bcSmacallan	/* 75 */ KEY_KP_4,
533ac15d2bcSmacallan	/* 76 */ KEY_KP_5,
534ac15d2bcSmacallan	/* 77 */ KEY_KP_6,
535ac15d2bcSmacallan	/* 78 */ KEY_KP_Plus,
536ac15d2bcSmacallan	/* 79 */ KEY_KP_1,
537ac15d2bcSmacallan	/* 80 */ KEY_KP_2,
538ac15d2bcSmacallan	/* 81 */ KEY_KP_3,
539ac15d2bcSmacallan	/* 82 */ KEY_KP_0,
540ac15d2bcSmacallan	/* 83 */ KEY_KP_Decimal,
541ac15d2bcSmacallan	/* 84 */ KEY_NOTUSED,
542ac15d2bcSmacallan	/* 85 */ KEY_NOTUSED,
543ac15d2bcSmacallan	/* 86 */ KEY_Less,	/* backslash on uk, < on german */
544ac15d2bcSmacallan	/* 87 */ KEY_F11,
545ac15d2bcSmacallan	/* 88 */ KEY_F12,
546ac15d2bcSmacallan	/* 89 */ KEY_NOTUSED,
547ac15d2bcSmacallan	/* 90 */ KEY_NOTUSED,
548ac15d2bcSmacallan	/* 91 */ KEY_NOTUSED,
549ac15d2bcSmacallan	/* 92 */ KEY_NOTUSED,
550ac15d2bcSmacallan	/* 93 */ KEY_NOTUSED,
551ac15d2bcSmacallan	/* 94 */ KEY_NOTUSED,
552ac15d2bcSmacallan	/* 95 */ KEY_NOTUSED,
553ac15d2bcSmacallan	/* 96 */ KEY_NOTUSED,
554ac15d2bcSmacallan	/* 97 */ KEY_NOTUSED,
555ac15d2bcSmacallan	/* 98 */ KEY_NOTUSED,
556ac15d2bcSmacallan	/* 99 */ KEY_NOTUSED,
557ac15d2bcSmacallan	/* 100 */ KEY_NOTUSED,
558ac15d2bcSmacallan	/* 101 */ KEY_NOTUSED,
559ac15d2bcSmacallan	/* 102 */ KEY_NOTUSED,
560ac15d2bcSmacallan	/* 103 */ KEY_NOTUSED,
561ac15d2bcSmacallan	/* 104 */ KEY_NOTUSED,
562ac15d2bcSmacallan	/* 105 */ KEY_NOTUSED,
563ac15d2bcSmacallan	/* 106 */ KEY_NOTUSED,
564ac15d2bcSmacallan	/* 107 */ KEY_NOTUSED,
565ac15d2bcSmacallan	/* 108 */ KEY_NOTUSED,
566ac15d2bcSmacallan	/* 109 */ KEY_NOTUSED,
567ac15d2bcSmacallan	/* 110 */ KEY_NOTUSED,
568ac15d2bcSmacallan	/* 111 */ KEY_NOTUSED,
569ac15d2bcSmacallan	/* 112 */ KEY_NOTUSED,
570ac15d2bcSmacallan	/* 113 */ KEY_NOTUSED,
571ac15d2bcSmacallan	/* 114 */ KEY_NOTUSED,
572ac15d2bcSmacallan	/* 115 */ KEY_NOTUSED,
573ac15d2bcSmacallan	/* 116 */ KEY_NOTUSED,
574ac15d2bcSmacallan	/* 117 */ KEY_NOTUSED,
575ac15d2bcSmacallan	/* 118 */ KEY_NOTUSED,
576ac15d2bcSmacallan	/* 119 */ KEY_NOTUSED,
577ac15d2bcSmacallan	/* 120 */ KEY_NOTUSED,
578ac15d2bcSmacallan	/* 121 */ KEY_NOTUSED,
579ac15d2bcSmacallan	/* 122 */ KEY_NOTUSED,
580ac15d2bcSmacallan	/* 123 */ KEY_NOTUSED,
581ac15d2bcSmacallan	/* 124 */ KEY_NOTUSED,
582ac15d2bcSmacallan	/* 125 */ KEY_NOTUSED,
583ac15d2bcSmacallan	/* 126 */ KEY_NOTUSED,
584ac15d2bcSmacallan	/* 127 */ KEY_Pause,
585ac15d2bcSmacallan	/* 128 */ KEY_NOTUSED,
586ac15d2bcSmacallan	/* 129 */ KEY_NOTUSED,
587ac15d2bcSmacallan	/* 130 */ KEY_NOTUSED,
588ac15d2bcSmacallan	/* 131 */ KEY_NOTUSED,
589ac15d2bcSmacallan	/* 132 */ KEY_NOTUSED,
590ac15d2bcSmacallan	/* 133 */ KEY_NOTUSED,
591ac15d2bcSmacallan	/* 134 */ KEY_NOTUSED,
592ac15d2bcSmacallan	/* 135 */ KEY_NOTUSED,
593ac15d2bcSmacallan	/* 136 */ KEY_NOTUSED,
594ac15d2bcSmacallan	/* 137 */ KEY_NOTUSED,
595ac15d2bcSmacallan	/* 138 */ KEY_NOTUSED,
596ac15d2bcSmacallan	/* 139 */ KEY_NOTUSED,
597ac15d2bcSmacallan	/* 140 */ KEY_NOTUSED,
598ac15d2bcSmacallan	/* 141 */ KEY_NOTUSED,
599ac15d2bcSmacallan	/* 142 */ KEY_NOTUSED,
600ac15d2bcSmacallan	/* 143 */ KEY_NOTUSED,
601ac15d2bcSmacallan	/* 144 */ KEY_NOTUSED,
602ac15d2bcSmacallan	/* 145 */ KEY_NOTUSED,
603ac15d2bcSmacallan	/* 146 */ KEY_NOTUSED,
604ac15d2bcSmacallan	/* 147 */ KEY_NOTUSED,
605ac15d2bcSmacallan	/* 148 */ KEY_NOTUSED,
606ac15d2bcSmacallan	/* 149 */ KEY_NOTUSED,
607ac15d2bcSmacallan	/* 150 */ KEY_NOTUSED,
608ac15d2bcSmacallan	/* 151 */ KEY_NOTUSED,
609ac15d2bcSmacallan	/* 152 */ KEY_NOTUSED,
610ac15d2bcSmacallan	/* 153 */ KEY_NOTUSED,
611ac15d2bcSmacallan	/* 154 */ KEY_NOTUSED,
612ac15d2bcSmacallan	/* 155 */ KEY_NOTUSED,
613ac15d2bcSmacallan	/* 156 */ KEY_KP_Enter,
614ac15d2bcSmacallan	/* 157 */ KEY_RCtrl,
615ac15d2bcSmacallan	/* 158 */ KEY_NOTUSED,
616ac15d2bcSmacallan	/* 159 */ KEY_NOTUSED,
617ac15d2bcSmacallan	/* 160 */ KEY_Mute,
618ac15d2bcSmacallan	/* 161 */ KEY_NOTUSED,
619ac15d2bcSmacallan	/* 162 */ KEY_NOTUSED,
620ac15d2bcSmacallan	/* 163 */ KEY_NOTUSED,
621ac15d2bcSmacallan	/* 164 */ KEY_NOTUSED,
622ac15d2bcSmacallan	/* 165 */ KEY_NOTUSED,
623ac15d2bcSmacallan	/* 166 */ KEY_NOTUSED,
624ac15d2bcSmacallan	/* 167 */ KEY_NOTUSED,
625ac15d2bcSmacallan	/* 168 */ KEY_NOTUSED,
626ac15d2bcSmacallan	/* 169 */ KEY_NOTUSED,
627ac15d2bcSmacallan	/* 170 */ KEY_Print,
628ac15d2bcSmacallan	/* 171 */ KEY_NOTUSED,
629ac15d2bcSmacallan	/* 172 */ KEY_NOTUSED,
630ac15d2bcSmacallan	/* 173 */ KEY_NOTUSED,
631ac15d2bcSmacallan	/* 174 */ KEY_AudioLower,
632ac15d2bcSmacallan	/* 175 */ KEY_AudioRaise,
633ac15d2bcSmacallan	/* 176 */ KEY_NOTUSED,
634ac15d2bcSmacallan	/* 177 */ KEY_NOTUSED,
635ac15d2bcSmacallan	/* 178 */ KEY_NOTUSED,
636ac15d2bcSmacallan	/* 179 */ KEY_NOTUSED,
637ac15d2bcSmacallan	/* 180 */ KEY_NOTUSED,
638ac15d2bcSmacallan	/* 181 */ KEY_KP_Divide,
639ac15d2bcSmacallan	/* 182 */ KEY_NOTUSED,
640ac15d2bcSmacallan	/* 183 */ KEY_Print,
641ac15d2bcSmacallan	/* 184 */ KEY_AltLang,
642ac15d2bcSmacallan	/* 185 */ KEY_NOTUSED,
643ac15d2bcSmacallan	/* 186 */ KEY_NOTUSED,
644ac15d2bcSmacallan	/* 187 */ KEY_NOTUSED,
645ac15d2bcSmacallan	/* 188 */ KEY_NOTUSED,
646ac15d2bcSmacallan	/* 189 */ KEY_NOTUSED,
647ac15d2bcSmacallan	/* 190 */ KEY_NOTUSED,
648ac15d2bcSmacallan	/* 191 */ KEY_NOTUSED,
649ac15d2bcSmacallan	/* 192 */ KEY_NOTUSED,
650ac15d2bcSmacallan	/* 193 */ KEY_NOTUSED,
651ac15d2bcSmacallan	/* 194 */ KEY_NOTUSED,
652ac15d2bcSmacallan	/* 195 */ KEY_NOTUSED,
653ac15d2bcSmacallan	/* 196 */ KEY_NOTUSED,
654ac15d2bcSmacallan	/* 197 */ KEY_NOTUSED,
655ac15d2bcSmacallan	/* 198 */ KEY_NOTUSED,
656ac15d2bcSmacallan	/* 199 */ KEY_Home,
657ac15d2bcSmacallan	/* 200 */ KEY_Up,
658ac15d2bcSmacallan	/* 201 */ KEY_PgUp,
659ac15d2bcSmacallan	/* 202 */ KEY_NOTUSED,
660ac15d2bcSmacallan	/* 203 */ KEY_Left,
661ac15d2bcSmacallan	/* 204 */ KEY_NOTUSED,
662ac15d2bcSmacallan	/* 205 */ KEY_Right,
663ac15d2bcSmacallan	/* 206 */ KEY_NOTUSED,
664ac15d2bcSmacallan	/* 207 */ KEY_End,
665ac15d2bcSmacallan	/* 208 */ KEY_Down,
666ac15d2bcSmacallan	/* 209 */ KEY_PgDown,
667ac15d2bcSmacallan	/* 210 */ KEY_Insert,
668ac15d2bcSmacallan	/* 211 */ KEY_Delete,
669ac15d2bcSmacallan	/* 212 */ KEY_NOTUSED,
670ac15d2bcSmacallan	/* 213 */ KEY_NOTUSED,
671ac15d2bcSmacallan	/* 214 */ KEY_NOTUSED,
672ac15d2bcSmacallan	/* 215 */ KEY_NOTUSED,
673ac15d2bcSmacallan	/* 216 */ KEY_NOTUSED,
674ac15d2bcSmacallan	/* 217 */ KEY_NOTUSED,
675ac15d2bcSmacallan	/* 218 */ KEY_NOTUSED,
676ac15d2bcSmacallan	/* 219 */ KEY_LMeta,
677ac15d2bcSmacallan	/* 220 */ KEY_RMeta,
678ac15d2bcSmacallan	/* 221 */ KEY_Menu,
679ac15d2bcSmacallan};
680ac15d2bcSmacallan#define WS_XT_MAP_SIZE (sizeof(wsXtMap)/sizeof(unsigned char))
681ac15d2bcSmacallan
682ac15d2bcSmacallanstatic
683ac15d2bcSmacallanTransMapRec wsXt = {
684ac15d2bcSmacallan    0,
685ac15d2bcSmacallan    WS_XT_MAP_SIZE,
686ac15d2bcSmacallan    wsXtMap
687ac15d2bcSmacallan};
688ac15d2bcSmacallan
689ee3138f1Smrg/* Map for adb keyboards  */
690ee3138f1Smrgstatic CARD8 wsAdbMap[] = {
691ee3138f1Smrg	/* 0 */ KEY_A,
692ee3138f1Smrg	/* 1 */ KEY_S,
693ee3138f1Smrg	/* 2 */ KEY_D,
694ee3138f1Smrg	/* 3 */ KEY_F,
695ee3138f1Smrg	/* 4 */ KEY_H,
696ee3138f1Smrg	/* 5 */ KEY_G,
697ee3138f1Smrg	/* 6 */ KEY_Z,
698ee3138f1Smrg	/* 7 */ KEY_X,
699ee3138f1Smrg	/* 8 */ KEY_C,
700ee3138f1Smrg	/* 9 */ KEY_V,
701ee3138f1Smrg	/* 10 */ KEY_UNKNOWN,	/* @ # on french keyboards */
702ee3138f1Smrg	/* 11 */ KEY_B,
703ee3138f1Smrg	/* 12 */ KEY_Q,
704ee3138f1Smrg	/* 13 */ KEY_W,
705ee3138f1Smrg	/* 14 */ KEY_E,
706ee3138f1Smrg	/* 15 */ KEY_R,
707ee3138f1Smrg	/* 16 */ KEY_Y,
708ee3138f1Smrg	/* 17 */ KEY_T,
709ee3138f1Smrg	/* 18 */ KEY_1,
710ee3138f1Smrg	/* 19 */ KEY_2,
711ee3138f1Smrg	/* 20 */ KEY_3,
712ee3138f1Smrg	/* 21 */ KEY_4,
713ee3138f1Smrg	/* 22 */ KEY_6,
714ee3138f1Smrg	/* 23 */ KEY_5,
715ee3138f1Smrg	/* 24 */ KEY_Equal,
716ee3138f1Smrg	/* 25 */ KEY_9,
717ee3138f1Smrg	/* 26 */ KEY_7,
718ee3138f1Smrg	/* 27 */ KEY_Minus,
719ee3138f1Smrg	/* 28 */ KEY_8,
720ee3138f1Smrg	/* 29 */ KEY_0,
721ee3138f1Smrg	/* 30 */ KEY_RBrace,
722ee3138f1Smrg	/* 31 */ KEY_O,
723ee3138f1Smrg	/* 32 */ KEY_U,
724ee3138f1Smrg	/* 33 */ KEY_LBrace,
725ee3138f1Smrg	/* 34 */ KEY_I,
726ee3138f1Smrg	/* 35 */ KEY_P,
727ee3138f1Smrg	/* 36 */ KEY_Enter,
728ee3138f1Smrg	/* 37 */ KEY_L,
729ee3138f1Smrg	/* 38 */ KEY_J,
730ee3138f1Smrg	/* 39 */ KEY_Quote,
731ee3138f1Smrg	/* 40 */ KEY_K,
732ee3138f1Smrg	/* 41 */ KEY_SemiColon,
733ee3138f1Smrg	/* 42 */ KEY_BSlash,
734ee3138f1Smrg	/* 43 */ KEY_Comma,
735ee3138f1Smrg	/* 44 */ KEY_Slash,
736ee3138f1Smrg	/* 45 */ KEY_N,
737ee3138f1Smrg	/* 46 */ KEY_M,
738ee3138f1Smrg	/* 47 */ KEY_Period,
739ee3138f1Smrg	/* 48 */ KEY_Tab,
740ee3138f1Smrg	/* 49 */ KEY_Space,
741ee3138f1Smrg	/* 50 */ KEY_Tilde,
742ac15d2bcSmacallan	/* 51 */ KEY_BackSpace,
743ee3138f1Smrg	/* 52 */ KEY_AltLang,
744ee3138f1Smrg	/* 53 */ KEY_Escape,
745ee3138f1Smrg	/* 54 */ KEY_LCtrl,
746ac15d2bcSmacallan	/* 55 */ KEY_LMeta,
747ee3138f1Smrg	/* 56 */ KEY_ShiftL,
748ee3138f1Smrg	/* 57 */ KEY_CapsLock,
749ac15d2bcSmacallan	/* 58 */ KEY_Alt,
750ee3138f1Smrg	/* 59 */ KEY_Left,
751ee3138f1Smrg	/* 60 */ KEY_Right,
752ee3138f1Smrg	/* 61 */ KEY_Down,
753ee3138f1Smrg	/* 62 */ KEY_Up,
754ee3138f1Smrg	/* 63 */ KEY_UNKNOWN,	/* Fn */
755ee3138f1Smrg	/* 64 */ KEY_NOTUSED,
756ee3138f1Smrg	/* 65 */ KEY_KP_Decimal,
757ee3138f1Smrg	/* 66 */ KEY_NOTUSED,
758ee3138f1Smrg	/* 67 */ KEY_KP_Multiply,
759ee3138f1Smrg	/* 68 */ KEY_NOTUSED,
760ee3138f1Smrg	/* 69 */ KEY_KP_Plus,
761ee3138f1Smrg	/* 70 */ KEY_NOTUSED,
762ac15d2bcSmacallan	/* 71 */ KEY_NumLock,	/* Clear */
763ee3138f1Smrg	/* 72 */ KEY_NOTUSED,
764ee3138f1Smrg	/* 73 */ KEY_NOTUSED,
765ee3138f1Smrg	/* 74 */ KEY_NOTUSED,
766ee3138f1Smrg	/* 75 */ KEY_KP_Divide,
767ee3138f1Smrg	/* 76 */ KEY_KP_Enter,
768ee3138f1Smrg	/* 77 */ KEY_NOTUSED,
769ee3138f1Smrg	/* 78 */ KEY_KP_Minus,
770ee3138f1Smrg	/* 79 */ KEY_NOTUSED,
771ee3138f1Smrg	/* 80 */ KEY_NOTUSED,
772ee3138f1Smrg	/* 81 */ KEY_KP_Equal,	/* Keypad = */
773ee3138f1Smrg	/* 82 */ KEY_KP_0,
774ee3138f1Smrg	/* 83 */ KEY_KP_1,
775ee3138f1Smrg	/* 84 */ KEY_KP_2,
776ee3138f1Smrg	/* 85 */ KEY_KP_3,
777ee3138f1Smrg	/* 86 */ KEY_KP_4,
778ee3138f1Smrg	/* 87 */ KEY_KP_5,
779ee3138f1Smrg	/* 88 */ KEY_KP_6,
780ee3138f1Smrg	/* 89 */ KEY_KP_7,
781ee3138f1Smrg	/* 90 */ KEY_NOTUSED,
782ee3138f1Smrg	/* 91 */ KEY_KP_8,
783ee3138f1Smrg	/* 92 */ KEY_KP_9,
784ee3138f1Smrg	/* 93 */ KEY_NOTUSED,
785ee3138f1Smrg	/* 94 */ KEY_NOTUSED,
786ac15d2bcSmacallan	/* 95 */ KEY_KP_Decimal,	/* Keypad ,  */
787ee3138f1Smrg	/* 96 */ KEY_F5,
788ee3138f1Smrg	/* 97 */ KEY_F6,
789ee3138f1Smrg	/* 98 */ KEY_F7,
790ee3138f1Smrg	/* 99 */ KEY_F3,
791ee3138f1Smrg	/* 100 */ KEY_F8,
792ee3138f1Smrg	/* 101 */ KEY_F9,
793ee3138f1Smrg	/* 102 */ KEY_NOTUSED,
794ee3138f1Smrg	/* 103 */ KEY_F11,
795ee3138f1Smrg	/* 104 */ KEY_NOTUSED,
796ac15d2bcSmacallan	/* 105 */ KEY_Print,
797ee3138f1Smrg	/* 106 */ KEY_KP_Enter,
798ac15d2bcSmacallan	/* 107 */ KEY_ScrollLock,
799ee3138f1Smrg	/* 108 */ KEY_NOTUSED,
800ee3138f1Smrg	/* 109 */ KEY_F10,
801ee3138f1Smrg	/* 110 */ KEY_NOTUSED,
802ee3138f1Smrg	/* 111 */ KEY_F12,
803ee3138f1Smrg	/* 112 */ KEY_NOTUSED,
804ac15d2bcSmacallan	/* 113 */ KEY_Pause,
805ac15d2bcSmacallan	/* 114 */ KEY_Insert,
806ee3138f1Smrg	/* 115 */ KEY_Home,
807ee3138f1Smrg	/* 116 */ KEY_PgUp,
808ac15d2bcSmacallan	/* 117 */ KEY_Delete,
809ee3138f1Smrg	/* 118 */ KEY_F4,
810ee3138f1Smrg	/* 119 */ KEY_End,
811ee3138f1Smrg	/* 120 */ KEY_F2,
812ee3138f1Smrg	/* 121 */ KEY_PgDown,
813ac15d2bcSmacallan	/* 122 */ KEY_F1,
814ac15d2bcSmacallan	/* 123 */ KEY_NOTUSED,
815ac15d2bcSmacallan	/* 124 */ KEY_NOTUSED,
816ac15d2bcSmacallan	/* 125 */ KEY_NOTUSED,
817ac15d2bcSmacallan	/* 126 */ KEY_NOTUSED,
818ac15d2bcSmacallan	/* 127 */ KEY_Power
819ee3138f1Smrg};
820ee3138f1Smrg#define WS_ADB_MAP_SIZE (sizeof(wsAdbMap)/sizeof(unsigned char))
821ee3138f1Smrg
822ee3138f1Smrgstatic
823ee3138f1SmrgTransMapRec wsAdb = {
824ee3138f1Smrg    0,
825ee3138f1Smrg    WS_ADB_MAP_SIZE,
826ee3138f1Smrg    wsAdbMap
827ee3138f1Smrg};
828ee3138f1Smrg
829ee3138f1Smrgstatic CARD8 wsSunMap[] = {
830ee3138f1Smrg	/* 0x00 */ KEY_Help,
831ee3138f1Smrg	/* 0x01 */ KEY_L1,		/* stop */
832ee3138f1Smrg	/* 0x02 */ KEY_AudioLower,	/* BrightnessDown / S-VolumeDown */
833ee3138f1Smrg	/* 0x03 */ KEY_L2,		/* again */
834ee3138f1Smrg	/* 0x04 */ KEY_AudioRaise,	/* BridgtnessUp / S-VolumeUp */
835ee3138f1Smrg	/* 0x05 */ KEY_F1,
836ee3138f1Smrg	/* 0x06 */ KEY_F2,
837ee3138f1Smrg	/* 0x07 */ KEY_F10,
838ee3138f1Smrg	/* 0x08 */ KEY_F3,
839ee3138f1Smrg	/* 0x09 */ KEY_F11,
840ee3138f1Smrg	/* 0x0a */ KEY_F4,
841ee3138f1Smrg	/* 0x0b */ KEY_F12,
842ee3138f1Smrg	/* 0x0c */ KEY_F5,
843ee3138f1Smrg	/* 0x0d */ KEY_AltLang,
844ee3138f1Smrg	/* 0x0e */ KEY_F6,
845ee3138f1Smrg	/* 0x0f */ KEY_NOTUSED,
846ee3138f1Smrg	/* 0x10 */ KEY_F7,
847ee3138f1Smrg	/* 0x11 */ KEY_F8,
848ee3138f1Smrg	/* 0x12 */ KEY_F9,
849ee3138f1Smrg	/* 0x13 */ KEY_Alt,
850ee3138f1Smrg	/* 0x14 */ KEY_Up,
851ee3138f1Smrg	/* 0x15 */ KEY_Pause,
852ee3138f1Smrg	/* 0x16 */ KEY_Print,
853ee3138f1Smrg	/* 0x17 */ KEY_ScrollLock,
854ee3138f1Smrg	/* 0x18 */ KEY_Left,
855ee3138f1Smrg	/* 0x19 */ KEY_L3,		/* props */
856ee3138f1Smrg	/* 0x1a */ KEY_L4,		/* undo */
857ee3138f1Smrg	/* 0x1b */ KEY_Down,
858ee3138f1Smrg	/* 0x1c */ KEY_Right,
859ee3138f1Smrg	/* 0x1d */ KEY_Escape,
860ee3138f1Smrg	/* 0x1e */ KEY_1,
861ee3138f1Smrg	/* 0x1f */ KEY_2,
862ee3138f1Smrg	/* 0x20 */ KEY_3,
863ee3138f1Smrg	/* 0x21 */ KEY_4,
864ee3138f1Smrg	/* 0x22 */ KEY_5,
865ee3138f1Smrg	/* 0x23 */ KEY_6,
866ee3138f1Smrg	/* 0x24 */ KEY_7,
867ee3138f1Smrg	/* 0x25 */ KEY_8,
868ee3138f1Smrg	/* 0x26 */ KEY_9,
869ee3138f1Smrg	/* 0x27 */ KEY_0,
870ee3138f1Smrg	/* 0x28 */ KEY_Minus,
871ee3138f1Smrg	/* 0x29 */ KEY_Equal,
872ee3138f1Smrg	/* 0x2a */ KEY_Tilde,
873ee3138f1Smrg	/* 0x2b */ KEY_BackSpace,
874ee3138f1Smrg	/* 0x2c */ KEY_Insert,
875ee3138f1Smrg	/* 0x2d */ KEY_Mute,		/* Audio Mute */
876ee3138f1Smrg	/* 0x2e */ KEY_KP_Divide,
877ee3138f1Smrg	/* 0x2f */ KEY_KP_Multiply,
878ac15d2bcSmacallan	/* 0x30 */ KEY_Power,
879ee3138f1Smrg	/* 0x31 */ KEY_L5,		/* front */
880ee3138f1Smrg	/* 0x32 */ KEY_KP_Decimal,
881ee3138f1Smrg	/* 0x33 */ KEY_L6,		/* copy */
882ee3138f1Smrg	/* 0x34 */ KEY_Home,
883ee3138f1Smrg	/* 0x35 */ KEY_Tab,
884ee3138f1Smrg	/* 0x36 */ KEY_Q,
885ee3138f1Smrg	/* 0x37 */ KEY_W,
886ee3138f1Smrg	/* 0x38 */ KEY_E,
887ee3138f1Smrg	/* 0x39 */ KEY_R,
888ee3138f1Smrg	/* 0x3a */ KEY_T,
889ee3138f1Smrg	/* 0x3b */ KEY_Y,
890ee3138f1Smrg	/* 0x3c */ KEY_U,
891ee3138f1Smrg	/* 0x3d */ KEY_I,
892ee3138f1Smrg	/* 0x3e */ KEY_O,
893ee3138f1Smrg	/* 0x3f */ KEY_P,
894ee3138f1Smrg	/* 0x40 */ KEY_LBrace,
895ee3138f1Smrg	/* 0x41 */ KEY_RBrace,
896ee3138f1Smrg	/* 0x42 */ KEY_Delete,
897ee3138f1Smrg	/* 0x43 */ KEY_Menu,		/* compose */
898ee3138f1Smrg	/* 0x44 */ KEY_KP_7,
899ee3138f1Smrg	/* 0x45 */ KEY_KP_8,
900ee3138f1Smrg	/* 0x46 */ KEY_KP_9,
901ee3138f1Smrg	/* 0x47 */ KEY_KP_Minus,
902ee3138f1Smrg	/* 0x48 */ KEY_L7,		/* open */
903ee3138f1Smrg	/* 0x49 */ KEY_L8,		/* paste */
904ee3138f1Smrg	/* 0x4a */ KEY_End,
905ee3138f1Smrg	/* 0x4b */ KEY_NOTUSED,
906ee3138f1Smrg	/* 0x4c */ KEY_LCtrl,
907ee3138f1Smrg	/* 0x4d */ KEY_A,
908ee3138f1Smrg	/* 0x4e */ KEY_S,
909ee3138f1Smrg	/* 0x4f */ KEY_D,
910ee3138f1Smrg	/* 0x50 */ KEY_F,
911ee3138f1Smrg	/* 0x51 */ KEY_G,
912ee3138f1Smrg	/* 0x52 */ KEY_H,
913ee3138f1Smrg	/* 0x53 */ KEY_J,
914ee3138f1Smrg	/* 0x54 */ KEY_K,
915ee3138f1Smrg	/* 0x55 */ KEY_L,
916ee3138f1Smrg	/* 0x56 */ KEY_SemiColon,
917ee3138f1Smrg	/* 0x57 */ KEY_Quote,
918ee3138f1Smrg	/* 0x58 */ KEY_BSlash,
919ee3138f1Smrg	/* 0x59 */ KEY_Enter,
920ee3138f1Smrg	/* 0x5a */ KEY_KP_Enter,
921ee3138f1Smrg	/* 0x5b */ KEY_KP_4,
922ee3138f1Smrg	/* 0x5c */ KEY_KP_5,
923ee3138f1Smrg	/* 0x5d */ KEY_KP_6,
924ee3138f1Smrg	/* 0x5e */ KEY_KP_0,
925ee3138f1Smrg	/* 0x5f */ KEY_L9,		/* find */
926ee3138f1Smrg	/* 0x60 */ KEY_PgUp,
927ee3138f1Smrg	/* 0x61 */ KEY_L10,		/* cut */
928ee3138f1Smrg	/* 0x62 */ KEY_NumLock,
929ee3138f1Smrg	/* 0x63 */ KEY_ShiftL,
930ee3138f1Smrg	/* 0x64 */ KEY_Z,
931ee3138f1Smrg	/* 0x65 */ KEY_X,
932ee3138f1Smrg	/* 0x66 */ KEY_C,
933ee3138f1Smrg	/* 0x67 */ KEY_V,
934ee3138f1Smrg	/* 0x68 */ KEY_B,
935ee3138f1Smrg	/* 0x69 */ KEY_N,
936ee3138f1Smrg	/* 0x6a */ KEY_M,
937ee3138f1Smrg	/* 0x6b */ KEY_Comma,
938ee3138f1Smrg	/* 0x6c */ KEY_Period,
939ee3138f1Smrg	/* 0x6d */ KEY_Slash,
940ee3138f1Smrg	/* 0x6e */ KEY_ShiftR,
941ee3138f1Smrg	/* 0x6f */ KEY_NOTUSED,		/* linefeed */
942ee3138f1Smrg	/* 0x70 */ KEY_KP_1,
943ee3138f1Smrg	/* 0x71 */ KEY_KP_2,
944ee3138f1Smrg	/* 0x72 */ KEY_KP_3,
945ee3138f1Smrg	/* 0x73 */ KEY_NOTUSED,
946ee3138f1Smrg	/* 0x74 */ KEY_NOTUSED,
947ee3138f1Smrg	/* 0x75 */ KEY_NOTUSED,
948ac15d2bcSmacallan	/* 0x76 */ KEY_Help,		/* help */
949ee3138f1Smrg	/* 0x77 */ KEY_CapsLock,
950ee3138f1Smrg	/* 0x78 */ KEY_LMeta,
951ee3138f1Smrg	/* 0x79 */ KEY_Space,
952ee3138f1Smrg	/* 0x7a */ KEY_RMeta,
953ee3138f1Smrg	/* 0x7b */ KEY_PgDown,
954ee3138f1Smrg	/* 0x7c */ KEY_Less,		/* < > on some keyboards */
955ee3138f1Smrg	/* 0x7d */ KEY_KP_Plus,
956ee3138f1Smrg	/* 0x7e */ KEY_NOTUSED,
957ee3138f1Smrg	/* 0x7f */ KEY_NOTUSED
958ee3138f1Smrg};
959ee3138f1Smrg#define WS_SUN_MAP_SIZE (sizeof(wsSunMap)/sizeof(unsigned char))
960ee3138f1Smrg
961ee3138f1Smrgstatic
962ee3138f1SmrgTransMapRec wsSun = {
963ee3138f1Smrg    0,
964ee3138f1Smrg    WS_SUN_MAP_SIZE,
965ee3138f1Smrg    wsSunMap
966ee3138f1Smrg};
967ee3138f1Smrg
968ee3138f1Smrg#endif /* WSCONS_SUPPORT */
969ee3138f1Smrg
970ee3138f1Smrg/*ARGSUSED*/
971ee3138f1Smrg
972ee3138f1Smrg/*
973ee3138f1Smrg * KbdGetMapping --
974ee3138f1Smrg *	Get the national keyboard mapping. The keyboard type is set, a new map
975ee3138f1Smrg *      and the modifiermap is computed.
976ee3138f1Smrg */
977ee3138f1Smrg
978ee3138f1Smrgvoid
979ee3138f1SmrgKbdGetMapping (InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap)
980ee3138f1Smrg{
981ee3138f1Smrg  KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
982ee3138f1Smrg  KeySym        *k;
983ee3138f1Smrg  int           i;
984ee3138f1Smrg
985ee3138f1Smrg#ifndef __bsdi__
986ee3138f1Smrg  switch (pKbd->consType) {
987ee3138f1Smrg
988ee3138f1Smrg/*
989ee3138f1Smrg * XXX wscons has no GIO_KEYMAP
990ee3138f1Smrg */
991ee3138f1Smrg#if (defined (SYSCONS_SUPPORT) || defined (PCVT_SUPPORT)) && defined(GIO_KEYMAP)
992ee3138f1Smrg  case SYSCONS:
993ee3138f1Smrg  case PCVT:
994ee3138f1Smrg    {
995ee3138f1Smrg      keymap_t keymap;
996ee3138f1Smrg
997ee3138f1Smrg      if (ioctl(pInfo->fd, GIO_KEYMAP, &keymap) != -1) {
998ee3138f1Smrg	for (i = 0; i < keymap.n_keys && i < NUM_KEYCODES; i++)
999ee3138f1Smrg	  if (remap[i]) {
1000ee3138f1Smrg	    k = map + (remap[i] << 2);
1001ee3138f1Smrg	    k[0] = KD_GET_ENTRY(i,0);           /* non-shifed */
1002ee3138f1Smrg	    k[1] = KD_GET_ENTRY(i,1);	      /* shifted */
1003ee3138f1Smrg	    k[2] = KD_GET_ENTRY(i,4);	      /* alt */
1004ee3138f1Smrg	    k[3] = KD_GET_ENTRY(i,5);	      /* alt - shifted */
1005ee3138f1Smrg	    if (k[3] == k[2]) k[3] = NoSymbol;
1006ee3138f1Smrg	    if (k[2] == k[1]) k[2] = NoSymbol;
1007ee3138f1Smrg	    if (k[1] == k[0]) k[1] = NoSymbol;
1008ee3138f1Smrg	    if (k[0] == k[2] && k[1] == k[3])
1009ee3138f1Smrg	      k[2] = k[3] = NoSymbol;
1010ee3138f1Smrg	  }
1011ee3138f1Smrg      }
1012ee3138f1Smrg    }
1013ee3138f1Smrg    break;
1014ee3138f1Smrg#endif /* SYSCONS || PCVT */
1015ee3138f1Smrg
1016ee3138f1Smrg  }
1017ee3138f1Smrg#endif /* !bsdi */
1018ee3138f1Smrg
1019ee3138f1Smrg  /*
1020ee3138f1Smrg   * compute the modifier map
1021ee3138f1Smrg   */
1022ee3138f1Smrg  for (i = 0; i < MAP_LENGTH; i++)
1023ee3138f1Smrg    pModMap[i] = NoSymbol;  /* make sure it is restored */
1024ee3138f1Smrg
1025ee3138f1Smrg  for (k = map, i = MIN_KEYCODE;
1026ee3138f1Smrg       i < (NUM_KEYCODES + MIN_KEYCODE);
1027ee3138f1Smrg       i++, k += 4)
1028ee3138f1Smrg
1029ee3138f1Smrg    switch(*k) {
1030ee3138f1Smrg
1031ee3138f1Smrg    case XK_Shift_L:
1032ee3138f1Smrg    case XK_Shift_R:
1033ee3138f1Smrg      pModMap[i] = ShiftMask;
1034ee3138f1Smrg      break;
1035ee3138f1Smrg
1036ee3138f1Smrg    case XK_Control_L:
1037ee3138f1Smrg    case XK_Control_R:
1038ee3138f1Smrg      pModMap[i] = ControlMask;
1039ee3138f1Smrg      break;
1040ee3138f1Smrg
1041ee3138f1Smrg    case XK_Caps_Lock:
1042ee3138f1Smrg      pModMap[i] = LockMask;
1043ee3138f1Smrg      break;
1044ee3138f1Smrg
1045ee3138f1Smrg    case XK_Alt_L:
1046ee3138f1Smrg    case XK_Alt_R:
1047ee3138f1Smrg      pModMap[i] = AltMask;
1048ee3138f1Smrg      break;
1049ee3138f1Smrg
1050ee3138f1Smrg    case XK_Num_Lock:
1051ee3138f1Smrg      pModMap[i] = NumLockMask;
1052ee3138f1Smrg      break;
1053ee3138f1Smrg
1054ee3138f1Smrg    case XK_Scroll_Lock:
1055ee3138f1Smrg      pModMap[i] = ScrollLockMask;
1056ee3138f1Smrg      break;
1057ee3138f1Smrg
1058ee3138f1Smrg      /* kana support */
1059ee3138f1Smrg    case XK_Kana_Lock:
1060ee3138f1Smrg    case XK_Kana_Shift:
1061ee3138f1Smrg      pModMap[i] = KanaMask;
1062ee3138f1Smrg      break;
1063ee3138f1Smrg
1064ee3138f1Smrg      /* alternate toggle for multinational support */
1065ee3138f1Smrg    case XK_Mode_switch:
1066ee3138f1Smrg      pModMap[i] = AltLangMask;
1067ee3138f1Smrg      break;
1068ee3138f1Smrg
1069ee3138f1Smrg    }
1070ee3138f1Smrg
1071ee3138f1Smrg  pKeySyms->map        = map;
1072ee3138f1Smrg  pKeySyms->mapWidth   = GLYPHS_PER_KEY;
1073ee3138f1Smrg  pKeySyms->minKeyCode = MIN_KEYCODE;
1074ee3138f1Smrg  pKeySyms->maxKeyCode = MAX_KEYCODE;
1075ee3138f1Smrg
1076ee3138f1Smrg  switch(pKbd->consType) {
1077ee3138f1Smrg#ifdef SYSCONS_SUPPORT
1078ee3138f1Smrg      case SYSCONS:
1079ee3138f1Smrg           if (pKbd->CustomKeycodes)
1080ee3138f1Smrg              pKbd->scancodeMap = &sysconsCODE;
1081ee3138f1Smrg           else
1082ee3138f1Smrg              pKbd->RemapScanCode = ATScancode;
1083ee3138f1Smrg           break;
1084ee3138f1Smrg#endif
1085ee3138f1Smrg#if defined(PCCONS_SUPPORT) || defined (PCVT_SUPPORT)
1086ee3138f1Smrg      case PCCONS:
1087ee3138f1Smrg      case PCVT:
1088ee3138f1Smrg           pKbd->RemapScanCode = ATScancode;
1089ee3138f1Smrg	   break;
1090ee3138f1Smrg#endif
1091ee3138f1Smrg#ifdef WSCONS_SUPPORT
1092ee3138f1Smrg      case WSCONS:
1093ee3138f1Smrg	if (!pKbd->isConsole) {
1094ee3138f1Smrg           switch (pKbd->wsKbdType) {
1095ee3138f1Smrg	       case WSKBD_TYPE_PC_XT:
1096ee3138f1Smrg	       case WSKBD_TYPE_PC_AT:
1097ac15d2bcSmacallan                    pKbd->scancodeMap = &wsXt;
1098ee3138f1Smrg                    break;
1099ee3138f1Smrg	       case WSKBD_TYPE_USB:
110065174c50Stsutsui#ifdef WSKBD_TYPE_MAPLE
110165174c50Stsutsui	       case WSKBD_TYPE_MAPLE:
110265174c50Stsutsui#endif
1103ee3138f1Smrg                    pKbd->scancodeMap = &wsUsb;
1104ee3138f1Smrg                    break;
1105ee3138f1Smrg#ifdef WSKBD_TYPE_ADB
1106ee3138f1Smrg	       case WSKBD_TYPE_ADB:
1107ee3138f1Smrg                    pKbd->scancodeMap = &wsAdb;
1108ee3138f1Smrg                    break;
1109ee3138f1Smrg#endif
1110ee3138f1Smrg#ifdef WSKBD_TYPE_SUN
1111ee3138f1Smrg#ifdef WSKBD_TYPE_SUN5
1112ee3138f1Smrg	       case WSKBD_TYPE_SUN5:
1113ee3138f1Smrg#endif
1114ee3138f1Smrg	       case WSKBD_TYPE_SUN:
1115ee3138f1Smrg                    pKbd->scancodeMap = &wsSun;
1116ee3138f1Smrg                    break;
1117ee3138f1Smrg#endif
1118ee3138f1Smrg	       default:
1119ee3138f1Smrg		    ErrorF("Unknown wskbd type %d\n", pKbd->wsKbdType);
1120ee3138f1Smrg           }
1121ee3138f1Smrg	} else {
1122ee3138f1Smrg           pKbd->RemapScanCode = ATScancode;
1123ee3138f1Smrg	}
1124ee3138f1Smrg      break;
1125ee3138f1Smrg#endif
1126ee3138f1Smrg  }
1127ee3138f1Smrg  return;
1128ee3138f1Smrg}
1129