1
/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86KbdBSD.c,v 3.22 2003/10/07 22:00:52 herrb Exp $ */
3
* Derived from xf86Kbd.c by S_ren Schmidt (sos@login.dkuug.dk)
4
* which is Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
5
* and from xf86KbdCODrv.c by Holger Veit
7
* Permission to use, copy, modify, distribute, and sell this software and its
8
* documentation for any purpose is hereby granted without fee, provided that
9
* the above copyright notice appear in all copies and that both that
10
* copyright notice and this permission notice appear in supporting
11
* documentation, and that the name of Thomas Roell not be used in
12
* advertising or publicity pertaining to distribution of the software without
13
* specific, written prior permission. Thomas Roell makes no representations
14
* about the suitability of this software for any purpose. It is provided
15
* "as is" without express or implied warranty.
17
* THOMAS ROELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
18
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
19
* EVENT SHALL THOMAS ROELL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
20
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
22
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
23
* PERFORMANCE OF THIS SOFTWARE.
26
* Copyright (c) 1994-2002 by The XFree86 Project, Inc.
28
* Permission is hereby granted, free of charge, to any person obtaining a
29
* copy of this software and associated documentation files (the "Software"),
30
* to deal in the Software without restriction, including without limitation
31
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
32
* and/or sell copies of the Software, and to permit persons to whom the
33
* Software is furnished to do so, subject to the following conditions:
35
* The above copyright notice and this permission notice shall be included in
36
* all copies or substantial portions of the Software.
38
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
39
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
40
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
41
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
42
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
43
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
44
* OTHER DEALINGS IN THE SOFTWARE.
46
* Except as contained in this notice, the name of the copyright holder(s)
47
* and author(s) shall not be used in advertising or otherwise to promote
48
* the sale, use or other dealings in this Software without prior written
49
* authorization from the copyright holder(s) and author(s).
52
/* $XConsortium: xf86KbdBSD.c /main/6 1996/10/23 13:12:27 kaleb $ */
54
#ifdef HAVE_XORG_CONFIG_H
55
#include <xorg-config.h>
61
#include "scrnintstr.h"
67
#include "xf86_OSlib.h"
68
#include "atKeynames.h"
69
#include "xf86Keymap.h"
71
#if (defined(SYSCONS_SUPPORT) || defined(PCVT_SUPPORT)) && defined(GIO_KEYMAP)
72
#define KD_GET_ENTRY(i,n) \
73
eascii_to_x[((keymap.key[i].spcl << (n+1)) & 0x100) + keymap.key[i].map[n]]
75
static unsigned char remap[NUM_KEYCODES] = {
76
0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00 - 0x07 */
77
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08 - 0x0f */
78
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10 - 0x17 */
79
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18 - 0x1f */
80
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20 - 0x27 */
81
0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28 - 0x2f */
82
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0, /* 0x30 - 0x37 */
83
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38 - 0x3f */
84
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0, /* 0x40 - 0x47 */
85
0, 0, 0, 0, 0, 0, 0, 0, /* 0x48 - 0x4f */
86
0, 0, 0, 0, 0, 0, 0x56, 0x57, /* 0x50 - 0x57 */
87
0x58, 0, 0, 0, 0, 0, 0, 0, /* 0x58 - 0x5f */
88
0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 - 0x67 */
89
0, 0, 0, 0, 0, 0, 0, 0, /* 0x68 - 0x6f */
90
0, 0, 0x69, 0x65, 0, 0, 0, 0, /* 0x70 - 0x77 */
91
0, 0, 0, 0, 0, 0, 0, 0, /* 0x78 - 0x7f */
94
/* This table assumes the ibm code page 437 coding for characters
95
* > 0x80. They are returned in this form by PCVT */
96
static KeySym eascii_to_x[512] = {
97
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
98
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
99
XK_BackSpace, XK_Tab, XK_Linefeed, NoSymbol,
100
NoSymbol, XK_Return, NoSymbol, NoSymbol,
101
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
102
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
103
NoSymbol, NoSymbol, NoSymbol, XK_Escape,
104
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
105
XK_space, XK_exclam, XK_quotedbl, XK_numbersign,
106
XK_dollar, XK_percent, XK_ampersand, XK_apostrophe,
107
XK_parenleft, XK_parenright, XK_asterisk, XK_plus,
108
XK_comma, XK_minus, XK_period, XK_slash,
109
XK_0, XK_1, XK_2, XK_3,
110
XK_4, XK_5, XK_6, XK_7,
111
XK_8, XK_9, XK_colon, XK_semicolon,
112
XK_less, XK_equal, XK_greater, XK_question,
113
XK_at, XK_A, XK_B, XK_C,
114
XK_D, XK_E, XK_F, XK_G,
115
XK_H, XK_I, XK_J, XK_K,
116
XK_L, XK_M, XK_N, XK_O,
117
XK_P, XK_Q, XK_R, XK_S,
118
XK_T, XK_U, XK_V, XK_W,
119
XK_X, XK_Y, XK_Z, XK_bracketleft,
120
XK_backslash, XK_bracketright,XK_asciicircum, XK_underscore,
121
XK_grave, XK_a, XK_b, XK_c,
122
XK_d, XK_e, XK_f, XK_g,
123
XK_h, XK_i, XK_j, XK_k,
124
XK_l, XK_m, XK_n, XK_o,
125
XK_p, XK_q, XK_r, XK_s,
126
XK_t, XK_u, XK_v, XK_w,
127
XK_x, XK_y, XK_z, XK_braceleft,
128
XK_bar, XK_braceright, XK_asciitilde, XK_Delete,
129
XK_Ccedilla, XK_udiaeresis, XK_eacute, XK_acircumflex,
130
XK_adiaeresis, XK_agrave, XK_aring, XK_ccedilla,
131
XK_ecircumflex, XK_ediaeresis, XK_egrave, XK_idiaeresis,
132
XK_icircumflex, XK_igrave, XK_Adiaeresis, XK_Aring,
133
XK_Eacute, XK_ae, XK_AE, XK_ocircumflex,
134
XK_odiaeresis, XK_ograve, XK_ucircumflex, XK_ugrave,
135
XK_ydiaeresis, XK_Odiaeresis, XK_Udiaeresis, XK_cent,
136
XK_sterling, XK_yen, XK_paragraph, XK_section,
137
XK_aacute, XK_iacute, XK_oacute, XK_uacute,
138
XK_ntilde, XK_Ntilde, XK_ordfeminine, XK_masculine,
139
XK_questiondown,XK_hyphen, XK_notsign, XK_onehalf,
140
XK_onequarter, XK_exclamdown, XK_guillemotleft,XK_guillemotright,
141
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
142
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
143
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
144
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
145
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
146
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
147
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
148
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
149
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
150
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
151
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
152
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
153
XK_Greek_alpha, XK_ssharp, XK_Greek_GAMMA, XK_Greek_pi,
154
XK_Greek_SIGMA, XK_Greek_sigma, XK_mu, XK_Greek_tau,
155
XK_Greek_PHI, XK_Greek_THETA, XK_Greek_OMEGA, XK_Greek_delta,
156
XK_infinity, XK_Ooblique, XK_Greek_epsilon, XK_intersection,
157
XK_identical, XK_plusminus, XK_greaterthanequal, XK_lessthanequal,
158
XK_topintegral, XK_botintegral, XK_division, XK_similarequal,
159
XK_degree, NoSymbol, NoSymbol, XK_radical,
160
XK_Greek_eta, XK_twosuperior, XK_periodcentered, NoSymbol,
163
* special marked entries (256 + x)
167
/* This has been checked against what syscons actually does */
168
NoSymbol, NoSymbol, XK_Shift_L, XK_Shift_R,
169
XK_Caps_Lock, XK_Num_Lock, XK_Scroll_Lock, XK_Alt_L,
170
XK_ISO_Left_Tab,XK_Control_L, NoSymbol, NoSymbol,
171
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
172
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
173
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
174
NoSymbol, NoSymbol, NoSymbol, XK_F1,
175
XK_F2, XK_F3, XK_F4, XK_F5,
176
XK_F6, XK_F7, XK_F8, XK_F9,
177
XK_F10, XK_F11, XK_F12, NoSymbol,
178
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
179
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
180
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
181
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
182
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
183
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
184
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
185
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
186
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
187
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
188
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
189
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
190
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
191
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
192
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
193
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
194
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
195
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
196
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
197
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
198
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
199
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
200
XK_Control_R, XK_Alt_R, NoSymbol, NoSymbol,
201
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
202
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
203
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
204
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
205
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
206
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
207
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
208
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
209
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
210
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
211
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
212
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
213
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
214
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
215
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
216
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
217
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
218
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
219
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
220
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
221
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
222
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
223
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
224
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
225
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
226
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
227
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
228
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
229
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
230
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
231
NoSymbol, NoSymbol, NoSymbol, NoSymbol
233
/* The old table, supposedly for pcvt. */
234
NoSymbol, NoSymbol, XK_Shift_L, XK_Shift_R,
235
XK_Caps_Lock, XK_Num_Lock, XK_Scroll_Lock, XK_Alt_L,
236
NoSymbol, XK_Control_L, XK_Alt_L, XK_Alt_R,
237
XK_Control_L, XK_Control_R, NoSymbol, NoSymbol,
238
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
239
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
240
NoSymbol, NoSymbol, NoSymbol, XK_F1,
241
XK_F2, XK_F3, XK_F4, XK_F5,
242
XK_F6, XK_F7, XK_F8, XK_F9,
243
XK_F10, XK_F11, XK_F12, NoSymbol,
244
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
245
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
246
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
247
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
248
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
249
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
250
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
251
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
252
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
253
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
254
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
255
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
256
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
257
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
258
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
259
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
260
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
261
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
262
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
263
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
264
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
265
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
266
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
267
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
268
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
269
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
270
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
271
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
272
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
273
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
274
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
275
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
276
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
277
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
278
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
279
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
280
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
281
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
282
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
283
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
284
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
285
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
286
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
287
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
288
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
289
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
290
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
291
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
292
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
293
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
294
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
295
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
296
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
297
NoSymbol, NoSymbol, NoSymbol, NoSymbol
302
/* don't mark AltR and CtrlR for remapping, since they
303
* cannot be remapped by pccons */
304
static unsigned char pccons_remap[128] = {
305
0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00 - 0x07 */
306
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08 - 0x0f */
307
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10 - 0x17 */
308
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18 - 0x1f */
309
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20 - 0x27 */
310
0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28 - 0x2f */
311
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0, /* 0x30 - 0x37 */
312
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38 - 0x3f */
313
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0, /* 0x40 - 0x47 */
314
0, 0, 0, 0, 0, 0, 0, 0, /* 0x48 - 0x4f */
315
0, 0, 0, 0, 0, 0, 0x56, 0x57, /* 0x50 - 0x57 */
316
0x58, 0, 0, 0, 0, 0, 0, 0, /* 0x58 - 0x5f */
317
0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 - 0x67 */
318
0, 0, 0, 0, 0, 0, 0, 0, /* 0x68 - 0x6f */
319
0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 - 0x77 */
320
0, 0, 0, 0, 0, 0, 0, 0, /* 0x78 - 0x7f */
323
/* This table assumes an iso8859_1 encoding for the characters
324
* > 80, as returned by pccons */
325
static KeySym latin1_to_x[256] = {
326
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
327
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
328
XK_BackSpace, XK_Tab, XK_Linefeed, NoSymbol,
329
NoSymbol, XK_Return, NoSymbol, NoSymbol,
330
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
331
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
332
NoSymbol, NoSymbol, NoSymbol, XK_Escape,
333
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
334
XK_space, XK_exclam, XK_quotedbl, XK_numbersign,
335
XK_dollar, XK_percent, XK_ampersand, XK_apostrophe,
336
XK_parenleft, XK_parenright, XK_asterisk, XK_plus,
337
XK_comma, XK_minus, XK_period, XK_slash,
338
XK_0, XK_1, XK_2, XK_3,
339
XK_4, XK_5, XK_6, XK_7,
340
XK_8, XK_9, XK_colon, XK_semicolon,
341
XK_less, XK_equal, XK_greater, XK_question,
342
XK_at, XK_A, XK_B, XK_C,
343
XK_D, XK_E, XK_F, XK_G,
344
XK_H, XK_I, XK_J, XK_K,
345
XK_L, XK_M, XK_N, XK_O,
346
XK_P, XK_Q, XK_R, XK_S,
347
XK_T, XK_U, XK_V, XK_W,
348
XK_X, XK_Y, XK_Z, XK_bracketleft,
349
XK_backslash, XK_bracketright,XK_asciicircum, XK_underscore,
350
XK_grave, XK_a, XK_b, XK_c,
351
XK_d, XK_e, XK_f, XK_g,
352
XK_h, XK_i, XK_j, XK_k,
353
XK_l, XK_m, XK_n, XK_o,
354
XK_p, XK_q, XK_r, XK_s,
355
XK_t, XK_u, XK_v, XK_w,
356
XK_x, XK_y, XK_z, XK_braceleft,
357
XK_bar, XK_braceright, XK_asciitilde, XK_Delete,
358
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
359
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
360
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
361
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
362
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
363
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
364
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
365
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
366
XK_nobreakspace,XK_exclamdown, XK_cent, XK_sterling,
367
XK_currency, XK_yen, XK_brokenbar, XK_section,
368
XK_diaeresis, XK_copyright, XK_ordfeminine, XK_guillemotleft,
369
XK_notsign, XK_hyphen, XK_registered, XK_macron,
370
XK_degree, XK_plusminus, XK_twosuperior, XK_threesuperior,
371
XK_acute, XK_mu, XK_paragraph, XK_periodcentered,
372
XK_cedilla, XK_onesuperior, XK_masculine, XK_guillemotright,
373
XK_onequarter, XK_onehalf, XK_threequarters,XK_questiondown,
374
XK_Agrave, XK_Aacute, XK_Acircumflex, XK_Atilde,
375
XK_Adiaeresis, XK_Aring, XK_AE, XK_Ccedilla,
376
XK_Egrave, XK_Eacute, XK_Ecircumflex, XK_Ediaeresis,
377
XK_Igrave, XK_Iacute, XK_Icircumflex, XK_Idiaeresis,
378
XK_ETH, XK_Ntilde, XK_Ograve, XK_Oacute,
379
XK_Ocircumflex, XK_Otilde, XK_Odiaeresis, XK_multiply,
380
XK_Ooblique, XK_Ugrave, XK_Uacute, XK_Ucircumflex,
381
XK_Udiaeresis, XK_Yacute, XK_THORN, XK_ssharp,
382
XK_agrave, XK_aacute, XK_acircumflex, XK_atilde,
383
XK_adiaeresis, XK_aring, XK_ae, XK_ccedilla,
384
XK_egrave, XK_eacute, XK_ecircumflex, XK_ediaeresis,
385
XK_igrave, XK_iacute, XK_icircumflex, XK_idiaeresis,
386
XK_eth, XK_ntilde, XK_ograve, XK_oacute,
387
XK_ocircumflex, XK_otilde, XK_odiaeresis, XK_division,
388
XK_oslash, XK_ugrave, XK_uacute, XK_ucircumflex,
389
XK_udiaeresis, XK_yacute, XK_thorn, XK_ydiaeresis
392
#endif /* SYSCONS_SUPPORT || PCVT_SUPPORT */
395
* determine whether a key is a legal modifier key, i.e send a
396
* press/release sequence.
401
LegalModifier(key, pDev)
409
* xf86KbdGetMapping --
410
* Get the national keyboard mapping. The keyboard type is set, a new map
411
* and the modifiermap is computed.
415
xf86KbdGetMapping (pKeySyms, pModMap)
423
switch (xf86Info.consType) {
425
#ifdef PCCONS_SUPPORT
427
#if defined(__OpenBSD__)
429
* on OpenBSD, the pccons keymap is programmable, too
432
pccons_keymap_t keymap[KB_NUM_KEYS];
433
if (ioctl(xf86Info.consoleFd, CONSOLE_GET_KEYMAP, &keymap) != -1) {
434
for (i = 0; i < KB_NUM_KEYS; i++)
435
if (pccons_remap[i]) {
436
k = map + (pccons_remap[i] << 2);
437
switch (keymap[i].type) {
439
/* For ASCII keys, there is only one char in the keymap */
440
k[0] = latin1_to_x[(unsigned char)keymap[i].unshift[0]];
441
k[1] = latin1_to_x[(unsigned char)keymap[i].shift[0]];
442
k[2] = latin1_to_x[(unsigned char)keymap[i].altgr[0]];
443
k[3] = latin1_to_x[(unsigned char)keymap[i].shift_altgr[0]];
446
k[0] = XK_Scroll_Lock;
455
switch (keymap[i].unshift[0]) {
475
switch (keymap[i].unshift[2]) {
520
k[1] = k[2] = k[3] = NoSymbol;
524
ErrorF("Can't read pccons keymap\n");
527
#endif /* __OpenBSD__ */
532
* XXX wscons has no GIO_KEYMAP
534
#if (defined (SYSCONS_SUPPORT) || defined (PCVT_SUPPORT)) && defined(GIO_KEYMAP)
540
if (ioctl(xf86Info.consoleFd, GIO_KEYMAP, &keymap) != -1) {
541
for (i = 0; i < keymap.n_keys && i < NUM_KEYCODES; i++)
543
k = map + (remap[i] << 2);
544
k[0] = KD_GET_ENTRY(i,0); /* non-shifed */
545
k[1] = KD_GET_ENTRY(i,1); /* shifted */
546
k[2] = KD_GET_ENTRY(i,4); /* alt */
547
k[3] = KD_GET_ENTRY(i,5); /* alt - shifted */
548
if (k[3] == k[2]) k[3] = NoSymbol;
549
if (k[2] == k[1]) k[2] = NoSymbol;
550
if (k[1] == k[0]) k[1] = NoSymbol;
551
if (k[0] == k[2] && k[1] == k[3])
552
k[2] = k[3] = NoSymbol;
557
#endif /* SYSCONS || PCVT */
563
* compute the modifier map
565
for (i = 0; i < MAP_LENGTH; i++)
566
pModMap[i] = NoSymbol; /* make sure it is restored */
568
for (k = map, i = MIN_KEYCODE;
569
i < (NUM_KEYCODES + MIN_KEYCODE);
576
pModMap[i] = ShiftMask;
581
pModMap[i] = ControlMask;
585
pModMap[i] = LockMask;
590
pModMap[i] = AltMask;
594
pModMap[i] = NumLockMask;
598
pModMap[i] = ScrollLockMask;
604
pModMap[i] = KanaMask;
607
/* alternate toggle for multinational support */
609
pModMap[i] = AltLangMask;
614
xf86Info.kbdType = 0;
617
pKeySyms->mapWidth = GLYPHS_PER_KEY;
618
pKeySyms->minKeyCode = MIN_KEYCODE;
619
pKeySyms->maxKeyCode = MAX_KEYCODE;
623
#ifdef WSCONS_SUPPORT
624
#include "atKeynames.h"
626
static CARD8 wsUsbMap[] = {
657
/* 30 */ KEY_1, /* 1 !*/
658
/* 31 */ KEY_2, /* 2 @ */
659
/* 32 */ KEY_3, /* 3 # */
660
/* 33 */ KEY_4, /* 4 $ */
661
/* 34 */ KEY_5, /* 5 % */
662
/* 35 */ KEY_6, /* 6 ^ */
663
/* 36 */ KEY_7, /* 7 & */
664
/* 37 */ KEY_8, /* 8 * */
665
/* 38 */ KEY_9, /* 9 ( */
666
/* 39 */ KEY_0, /* 0 ) */
667
/* 40 */ KEY_Enter, /* Return */
668
/* 41 */ KEY_Escape, /* Escape */
669
/* 42 */ KEY_BackSpace, /* Backspace Delete */
670
/* 43 */ KEY_Tab, /* Tab */
671
/* 44 */ KEY_Space, /* Space */
672
/* 45 */ KEY_Minus, /* - _ */
673
/* 46 */ KEY_Equal, /* = + */
674
/* 47 */ KEY_LBrace, /* [ { */
675
/* 48 */ KEY_RBrace, /* ] } */
676
/* 49 */ KEY_BSlash, /* \ | */
677
/* 50 */ KEY_BSlash2, /* \ _ # ~ on some keyboards */
678
/* 51 */ KEY_SemiColon, /* ; : */
679
/* 52 */ KEY_Quote, /* ' " */
680
/* 53 */ KEY_Tilde, /* ` ~ */
681
/* 54 */ KEY_Comma, /* , < */
682
/* 55 */ KEY_Period, /* . > */
683
/* 56 */ KEY_Slash, /* / ? */
684
/* 57 */ KEY_CapsLock, /* Caps Lock */
685
/* 58 */ KEY_F1, /* F1 */
686
/* 59 */ KEY_F2, /* F2 */
687
/* 60 */ KEY_F3, /* F3 */
688
/* 61 */ KEY_F4, /* F4 */
689
/* 62 */ KEY_F5, /* F5 */
690
/* 63 */ KEY_F6, /* F6 */
691
/* 64 */ KEY_F7, /* F7 */
692
/* 65 */ KEY_F8, /* F8 */
693
/* 66 */ KEY_F9, /* F9 */
694
/* 67 */ KEY_F10, /* F10 */
695
/* 68 */ KEY_F11, /* F11 */
696
/* 69 */ KEY_F12, /* F12 */
697
/* 70 */ KEY_Print, /* PrintScrn SysReq */
698
/* 71 */ KEY_ScrollLock, /* Scroll Lock */
699
/* 72 */ KEY_Pause, /* Pause Break */
700
/* 73 */ KEY_Insert, /* Insert XXX Help on some Mac Keyboards */
701
/* 74 */ KEY_Home, /* Home */
702
/* 75 */ KEY_PgUp, /* Page Up */
703
/* 76 */ KEY_Delete, /* Delete */
704
/* 77 */ KEY_End, /* End */
705
/* 78 */ KEY_PgDown, /* Page Down */
706
/* 79 */ KEY_Right, /* Right Arrow */
707
/* 80 */ KEY_Left, /* Left Arrow */
708
/* 81 */ KEY_Down, /* Down Arrow */
709
/* 82 */ KEY_Up, /* Up Arrow */
710
/* 83 */ KEY_NumLock, /* Num Lock */
711
/* 84 */ KEY_KP_Divide, /* Keypad / */
712
/* 85 */ KEY_KP_Multiply, /* Keypad * */
713
/* 86 */ KEY_KP_Minus, /* Keypad - */
714
/* 87 */ KEY_KP_Plus, /* Keypad + */
715
/* 88 */ KEY_KP_Enter, /* Keypad Enter */
716
/* 89 */ KEY_KP_1, /* Keypad 1 End */
717
/* 90 */ KEY_KP_2, /* Keypad 2 Down */
718
/* 91 */ KEY_KP_3, /* Keypad 3 Pg Down */
719
/* 92 */ KEY_KP_4, /* Keypad 4 Left */
720
/* 93 */ KEY_KP_5, /* Keypad 5 */
721
/* 94 */ KEY_KP_6, /* Keypad 6 */
722
/* 95 */ KEY_KP_7, /* Keypad 7 Home */
723
/* 96 */ KEY_KP_8, /* Keypad 8 Up */
724
/* 97 */ KEY_KP_9, /* KEypad 9 Pg Up */
725
/* 98 */ KEY_KP_0, /* Keypad 0 Ins */
726
/* 99 */ KEY_KP_Decimal, /* Keypad . Del */
727
/* 100 */ KEY_Less, /* < > on some keyboards */
728
/* 101 */ KEY_Menu, /* Menu */
729
/* 102 */ KEY_NOTUSED,
730
/* 103 */ KEY_KP_Equal, /* Keypad = on Mac keyboards */
731
/* 104 */ KEY_NOTUSED,
732
/* 105 */ KEY_NOTUSED,
733
/* 106 */ KEY_NOTUSED,
734
/* 107 */ KEY_NOTUSED,
735
/* 108 */ KEY_NOTUSED,
736
/* 109 */ KEY_NOTUSED,
737
/* 110 */ KEY_NOTUSED,
738
/* 111 */ KEY_NOTUSED,
739
/* 112 */ KEY_NOTUSED,
740
/* 113 */ KEY_NOTUSED,
741
/* 114 */ KEY_NOTUSED,
742
/* 115 */ KEY_NOTUSED,
743
/* 116 */ KEY_NOTUSED,
744
/* 117 */ KEY_NOTUSED,
745
/* 118 */ KEY_NOTUSED,
746
/* 119 */ KEY_NOTUSED,
747
/* 120 */ KEY_NOTUSED,
748
/* 121 */ KEY_NOTUSED,
749
/* 122 */ KEY_NOTUSED,
750
/* 123 */ KEY_NOTUSED,
751
/* 124 */ KEY_NOTUSED,
752
/* 125 */ KEY_NOTUSED,
753
/* 126 */ KEY_NOTUSED,
754
/* 127 */ KEY_NOTUSED,
755
/* 128 */ KEY_NOTUSED,
756
/* 129 */ KEY_NOTUSED,
757
/* 130 */ KEY_NOTUSED,
758
/* 131 */ KEY_NOTUSED,
759
/* 132 */ KEY_NOTUSED,
760
/* 133 */ KEY_NOTUSED,
761
/* 134 */ KEY_NOTUSED,
762
/* 135 */ KEY_NOTUSED,
763
/* 136 */ KEY_NOTUSED,
764
/* 137 */ KEY_NOTUSED,
765
/* 138 */ KEY_NOTUSED,
766
/* 139 */ KEY_NOTUSED,
767
/* 140 */ KEY_NOTUSED,
768
/* 141 */ KEY_NOTUSED,
769
/* 142 */ KEY_NOTUSED,
770
/* 143 */ KEY_NOTUSED,
771
/* 144 */ KEY_NOTUSED,
772
/* 145 */ KEY_NOTUSED,
773
/* 146 */ KEY_NOTUSED,
774
/* 147 */ KEY_NOTUSED,
775
/* 148 */ KEY_NOTUSED,
776
/* 149 */ KEY_NOTUSED,
777
/* 150 */ KEY_NOTUSED,
778
/* 151 */ KEY_NOTUSED,
779
/* 152 */ KEY_NOTUSED,
780
/* 153 */ KEY_NOTUSED,
781
/* 154 */ KEY_NOTUSED,
782
/* 155 */ KEY_NOTUSED,
783
/* 156 */ KEY_NOTUSED,
784
/* 157 */ KEY_NOTUSED,
785
/* 158 */ KEY_NOTUSED,
786
/* 159 */ KEY_NOTUSED,
787
/* 160 */ KEY_NOTUSED,
788
/* 161 */ KEY_NOTUSED,
789
/* 162 */ KEY_NOTUSED,
790
/* 163 */ KEY_NOTUSED,
791
/* 164 */ KEY_NOTUSED,
792
/* 165 */ KEY_NOTUSED,
793
/* 166 */ KEY_NOTUSED,
794
/* 167 */ KEY_NOTUSED,
795
/* 168 */ KEY_NOTUSED,
796
/* 169 */ KEY_NOTUSED,
797
/* 170 */ KEY_NOTUSED,
798
/* 171 */ KEY_NOTUSED,
799
/* 172 */ KEY_NOTUSED,
800
/* 173 */ KEY_NOTUSED,
801
/* 174 */ KEY_NOTUSED,
802
/* 175 */ KEY_NOTUSED,
803
/* 176 */ KEY_NOTUSED,
804
/* 177 */ KEY_NOTUSED,
805
/* 178 */ KEY_NOTUSED,
806
/* 179 */ KEY_NOTUSED,
807
/* 180 */ KEY_NOTUSED,
808
/* 181 */ KEY_NOTUSED,
809
/* 182 */ KEY_NOTUSED,
810
/* 183 */ KEY_NOTUSED,
811
/* 184 */ KEY_NOTUSED,
812
/* 185 */ KEY_NOTUSED,
813
/* 186 */ KEY_NOTUSED,
814
/* 187 */ KEY_NOTUSED,
815
/* 188 */ KEY_NOTUSED,
816
/* 189 */ KEY_NOTUSED,
817
/* 190 */ KEY_NOTUSED,
818
/* 191 */ KEY_NOTUSED,
819
/* 192 */ KEY_NOTUSED,
820
/* 193 */ KEY_NOTUSED,
821
/* 194 */ KEY_NOTUSED,
822
/* 195 */ KEY_NOTUSED,
823
/* 196 */ KEY_NOTUSED,
824
/* 197 */ KEY_NOTUSED,
825
/* 198 */ KEY_NOTUSED,
826
/* 199 */ KEY_NOTUSED,
827
/* 200 */ KEY_NOTUSED,
828
/* 201 */ KEY_NOTUSED,
829
/* 202 */ KEY_NOTUSED,
830
/* 203 */ KEY_NOTUSED,
831
/* 204 */ KEY_NOTUSED,
832
/* 205 */ KEY_NOTUSED,
833
/* 206 */ KEY_NOTUSED,
834
/* 207 */ KEY_NOTUSED,
835
/* 208 */ KEY_NOTUSED,
836
/* 209 */ KEY_NOTUSED,
837
/* 210 */ KEY_NOTUSED,
838
/* 211 */ KEY_NOTUSED,
839
/* 212 */ KEY_NOTUSED,
840
/* 213 */ KEY_NOTUSED,
841
/* 214 */ KEY_NOTUSED,
842
/* 215 */ KEY_NOTUSED,
843
/* 216 */ KEY_NOTUSED,
844
/* 217 */ KEY_NOTUSED,
845
/* 218 */ KEY_NOTUSED,
846
/* 219 */ KEY_NOTUSED,
847
/* 220 */ KEY_NOTUSED,
848
/* 221 */ KEY_NOTUSED,
849
/* 222 */ KEY_NOTUSED,
850
/* 223 */ KEY_NOTUSED,
851
/* 224 */ KEY_LCtrl, /* Left Control */
852
/* 225 */ KEY_ShiftL, /* Left Shift */
853
/* 226 */ KEY_Alt, /* Left Alt */
854
/* 227 */ KEY_LMeta, /* Left Meta */
855
/* 228 */ KEY_RCtrl, /* Right Control */
856
/* 229 */ KEY_ShiftR, /* Right Shift */
857
/* 230 */ KEY_AltLang, /* Right Alt, AKA AltGr */
858
/* 231 */ KEY_LMeta, /* Right Meta XXX */
861
#define WS_USB_MAP_SIZE (sizeof(wsUsbMap)/sizeof(unsigned char))
863
/* Map for adb keyboards */
864
static CARD8 wsAdbMap[] = {
875
/* 10 */ KEY_UNKNOWN, /* @ # on french keyboards */
906
/* 41 */ KEY_SemiColon,
917
/* 52 */ KEY_AltLang,
922
/* 57 */ KEY_CapsLock,
928
/* 63 */ KEY_UNKNOWN, /* Fn */
929
/* 64 */ KEY_NOTUSED,
930
/* 65 */ KEY_KP_Decimal,
931
/* 66 */ KEY_NOTUSED,
932
/* 67 */ KEY_KP_Multiply,
933
/* 68 */ KEY_NOTUSED,
934
/* 69 */ KEY_KP_Plus,
935
/* 70 */ KEY_NOTUSED,
936
/* 71 */ KEY_UNKNOWN, /* Clear */
937
/* 72 */ KEY_NOTUSED,
938
/* 73 */ KEY_NOTUSED,
939
/* 74 */ KEY_NOTUSED,
940
/* 75 */ KEY_KP_Divide,
941
/* 76 */ KEY_KP_Enter,
942
/* 77 */ KEY_NOTUSED,
943
/* 78 */ KEY_KP_Minus,
944
/* 79 */ KEY_NOTUSED,
945
/* 80 */ KEY_NOTUSED,
946
/* 81 */ KEY_KP_Equal, /* Keypad = */
955
/* 90 */ KEY_NOTUSED,
958
/* 93 */ KEY_NOTUSED,
959
/* 94 */ KEY_NOTUSED,
960
/* 95 */ KEY_UNKNOWN, /* Keypad , */
967
/* 102 */ KEY_NOTUSED,
969
/* 104 */ KEY_NOTUSED,
970
/* 105 */ KEY_NOTUSED,
971
/* 106 */ KEY_KP_Enter,
972
/* 107 */ KEY_NOTUSED,
973
/* 108 */ KEY_NOTUSED,
975
/* 110 */ KEY_NOTUSED,
977
/* 112 */ KEY_NOTUSED,
978
/* 113 */ KEY_NOTUSED,
979
/* 114 */ KEY_NOTUSED,
982
/* 117 */ KEY_NOTUSED,
986
/* 121 */ KEY_PgDown,
988
/* 123 */ KEY_NOTUSED,
989
/* 124 */ KEY_NOTUSED,
990
/* 125 */ KEY_NOTUSED,
991
/* 126 */ KEY_NOTUSED,
992
/* 127 */ KEY_NOTUSED,
993
/* 128 */ KEY_NOTUSED,
994
/* 129 */ KEY_NOTUSED,
995
/* 130 */ KEY_NOTUSED,
996
/* 131 */ KEY_NOTUSED,
997
/* 132 */ KEY_NOTUSED,
998
/* 133 */ KEY_NOTUSED,
999
/* 134 */ KEY_NOTUSED,
1000
/* 135 */ KEY_NOTUSED,
1001
/* 136 */ KEY_NOTUSED,
1002
/* 137 */ KEY_NOTUSED,
1003
/* 138 */ KEY_NOTUSED,
1004
/* 139 */ KEY_NOTUSED,
1005
/* 140 */ KEY_NOTUSED,
1006
/* 141 */ KEY_NOTUSED,
1007
/* 142 */ KEY_NOTUSED,
1008
/* 143 */ KEY_NOTUSED,
1009
/* 144 */ KEY_NOTUSED,
1010
/* 145 */ KEY_NOTUSED,
1011
/* 146 */ KEY_NOTUSED,
1012
/* 147 */ KEY_NOTUSED,
1013
/* 148 */ KEY_NOTUSED,
1014
/* 149 */ KEY_NOTUSED,
1015
/* 150 */ KEY_NOTUSED,
1016
/* 151 */ KEY_NOTUSED,
1017
/* 152 */ KEY_NOTUSED,
1018
/* 153 */ KEY_NOTUSED,
1019
/* 154 */ KEY_NOTUSED,
1020
/* 155 */ KEY_NOTUSED,
1021
/* 156 */ KEY_NOTUSED,
1022
/* 157 */ KEY_NOTUSED,
1023
/* 158 */ KEY_NOTUSED,
1024
/* 159 */ KEY_NOTUSED,
1025
/* 160 */ KEY_NOTUSED,
1026
/* 161 */ KEY_NOTUSED,
1027
/* 162 */ KEY_NOTUSED,
1028
/* 163 */ KEY_NOTUSED,
1029
/* 164 */ KEY_NOTUSED,
1030
/* 165 */ KEY_NOTUSED,
1031
/* 166 */ KEY_NOTUSED,
1032
/* 167 */ KEY_NOTUSED,
1033
/* 168 */ KEY_NOTUSED,
1034
/* 169 */ KEY_NOTUSED,
1035
/* 170 */ KEY_NOTUSED,
1036
/* 171 */ KEY_NOTUSED,
1037
/* 172 */ KEY_NOTUSED,
1038
/* 173 */ KEY_NOTUSED,
1039
/* 174 */ KEY_NOTUSED,
1040
/* 175 */ KEY_NOTUSED,
1041
/* 176 */ KEY_NOTUSED,
1042
/* 177 */ KEY_NOTUSED,
1043
/* 178 */ KEY_NOTUSED,
1044
/* 179 */ KEY_NOTUSED,
1045
/* 180 */ KEY_NOTUSED,
1046
/* 181 */ KEY_NOTUSED,
1047
/* 182 */ KEY_NOTUSED,
1048
/* 183 */ KEY_NOTUSED,
1049
/* 184 */ KEY_NOTUSED,
1050
/* 185 */ KEY_NOTUSED,
1051
/* 186 */ KEY_NOTUSED,
1052
/* 187 */ KEY_NOTUSED,
1053
/* 188 */ KEY_NOTUSED,
1054
/* 189 */ KEY_NOTUSED,
1055
/* 190 */ KEY_NOTUSED,
1056
/* 191 */ KEY_NOTUSED,
1057
/* 192 */ KEY_NOTUSED,
1058
/* 193 */ KEY_NOTUSED,
1059
/* 194 */ KEY_NOTUSED,
1060
/* 195 */ KEY_NOTUSED,
1061
/* 196 */ KEY_NOTUSED,
1062
/* 197 */ KEY_NOTUSED,
1063
/* 198 */ KEY_NOTUSED,
1064
/* 199 */ KEY_NOTUSED,
1065
/* 200 */ KEY_NOTUSED,
1066
/* 201 */ KEY_NOTUSED,
1067
/* 202 */ KEY_NOTUSED,
1068
/* 203 */ KEY_NOTUSED,
1069
/* 204 */ KEY_NOTUSED,
1070
/* 205 */ KEY_NOTUSED,
1071
/* 206 */ KEY_NOTUSED,
1072
/* 207 */ KEY_NOTUSED,
1073
/* 208 */ KEY_NOTUSED,
1074
/* 209 */ KEY_NOTUSED,
1075
/* 210 */ KEY_NOTUSED,
1076
/* 211 */ KEY_NOTUSED,
1077
/* 212 */ KEY_NOTUSED,
1078
/* 213 */ KEY_NOTUSED,
1079
/* 214 */ KEY_NOTUSED,
1080
/* 215 */ KEY_NOTUSED,
1081
/* 216 */ KEY_NOTUSED,
1082
/* 217 */ KEY_NOTUSED,
1083
/* 218 */ KEY_NOTUSED,
1084
/* 219 */ KEY_NOTUSED,
1085
/* 220 */ KEY_NOTUSED,
1086
/* 221 */ KEY_NOTUSED,
1087
/* 222 */ KEY_NOTUSED,
1088
/* 223 */ KEY_NOTUSED,
1091
#define WS_ADB_MAP_SIZE (sizeof(wsAdbMap)/sizeof(unsigned char))
1093
static CARD8 wsSunMap[] = {
1094
/* 0x00 */ KEY_NOTUSED,
1095
/* 0x01 */ KEY_NOTUSED, /* stop */
1096
/* 0x02 */ KEY_NOTUSED, /* BrightnessDown / S-VolumeDown */
1097
/* 0x03 */ KEY_NOTUSED, /* again */
1098
/* 0x04 */ KEY_NOTUSED, /* BridgtnessUp / S-VolumeUp */
1107
/* 0x0d */ KEY_AltLang,
1109
/* 0x0f */ KEY_NOTUSED,
1115
/* 0x15 */ KEY_Pause,
1116
/* 0x16 */ KEY_Print,
1117
/* 0x17 */ KEY_NOTUSED, /* props */
1118
/* 0x18 */ KEY_Left,
1119
/* 0x19 */ KEY_ScrollLock,
1120
/* 0x1a */ KEY_NOTUSED, /* undo */
1121
/* 0x1b */ KEY_Down,
1122
/* 0x1c */ KEY_Right,
1123
/* 0x1d */ KEY_Escape,
1134
/* 0x28 */ KEY_Minus,
1135
/* 0x29 */ KEY_Equal,
1136
/* 0x2a */ KEY_Tilde,
1137
/* 0x2b */ KEY_BackSpace,
1138
/* 0x2c */ KEY_Insert,
1139
/* 0x2d */ KEY_KP_Equal,
1140
/* 0x2e */ KEY_KP_Divide,
1141
/* 0x2f */ KEY_KP_Multiply,
1142
/* 0x30 */ KEY_NOTUSED,
1143
/* 0x31 */ KEY_NOTUSED, /* front */
1144
/* 0x32 */ KEY_KP_Decimal,
1145
/* 0x33 */ KEY_NOTUSED, /* copy */
1146
/* 0x34 */ KEY_Home,
1158
/* 0x40 */ KEY_LBrace,
1159
/* 0x41 */ KEY_RBrace,
1160
/* 0x42 */ KEY_Delete,
1161
/* 0x43 */ KEY_NOTUSED, /* compose */
1162
/* 0x44 */ KEY_KP_7,
1163
/* 0x45 */ KEY_KP_8,
1164
/* 0x46 */ KEY_KP_9,
1165
/* 0x47 */ KEY_KP_Minus,
1166
/* 0x48 */ KEY_NOTUSED, /* open */
1167
/* 0x49 */ KEY_NOTUSED, /* paste */
1169
/* 0x4b */ KEY_NOTUSED,
1170
/* 0x4c */ KEY_LCtrl,
1180
/* 0x56 */ KEY_SemiColon,
1181
/* 0x57 */ KEY_Quote,
1182
/* 0x58 */ KEY_BSlash,
1183
/* 0x59 */ KEY_Enter,
1184
/* 0x5a */ KEY_KP_Enter,
1185
/* 0x5b */ KEY_KP_4,
1186
/* 0x5c */ KEY_KP_5,
1187
/* 0x5d */ KEY_KP_6,
1188
/* 0x5e */ KEY_KP_0,
1189
/* 0x5f */ KEY_NOTUSED, /* find */
1190
/* 0x60 */ KEY_PgUp,
1191
/* 0x61 */ KEY_NOTUSED, /* cut */
1192
/* 0x62 */ KEY_NumLock,
1193
/* 0x63 */ KEY_ShiftL,
1201
/* 0x6b */ KEY_Comma,
1202
/* 0x6c */ KEY_Period,
1203
/* 0x6d */ KEY_Slash,
1204
/* 0x6e */ KEY_ShiftR,
1205
/* 0x6f */ KEY_NOTUSED, /* linefeed */
1206
/* 0x70 */ KEY_KP_1,
1207
/* 0x71 */ KEY_KP_2,
1208
/* 0x72 */ KEY_KP_3,
1209
/* 0x73 */ KEY_NOTUSED,
1210
/* 0x74 */ KEY_NOTUSED,
1211
/* 0x75 */ KEY_NOTUSED,
1212
/* 0x76 */ KEY_NOTUSED, /* help */
1213
/* 0x77 */ KEY_CapsLock,
1214
/* 0x78 */ KEY_LMeta,
1215
/* 0x79 */ KEY_Space,
1216
/* 0x7a */ KEY_RMeta,
1217
/* 0x7b */ KEY_PgDown,
1218
/* 0x7c */ KEY_NOTUSED,
1219
/* 0x7d */ KEY_KP_Plus,
1220
/* 0x7e */ KEY_NOTUSED,
1221
/* 0x7f */ KEY_NOTUSED
1224
#define WS_SUN_MAP_SIZE (sizeof(wsSunMap)/sizeof(unsigned char))
1227
* Translate raw wskbd keyboard event values to XFree86 standard keycodes
1228
* (based on the AT keyboard scan codes using the tables above
1231
WSKbdToKeycode(int keycode)
1233
switch (xf86Info.wsKbdType) {
1234
case WSKBD_TYPE_PC_XT:
1235
case WSKBD_TYPE_PC_AT:
1236
/* No translation needed */
1238
case WSKBD_TYPE_USB:
1239
if (keycode < 0 || keycode >= WS_USB_MAP_SIZE)
1242
return wsUsbMap[keycode];
1243
#ifdef WSKBD_TYPE_ADB
1244
case WSKBD_TYPE_ADB:
1245
if (keycode < 0 || keycode >= WS_ADB_MAP_SIZE)
1248
return wsAdbMap[keycode];
1250
#ifdef WSKBD_TYPE_SUN
1251
case WSKBD_TYPE_SUN:
1252
#ifdef WSKBD_TYPE_SUN5
1253
case WSKBD_TYPE_SUN5:
1255
if (keycode < 0 || keycode >= WS_SUN_MAP_SIZE)
1258
return wsSunMap[keycode];
1261
ErrorF("Unknown wskbd type %d\n", xf86Info.wsKbdType);
1266
#endif /* WSCONS_SUPPORT */