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