~ubuntu-branches/ubuntu/intrepid/xserver-xgl/intrepid

« back to all changes in this revision

Viewing changes to hw/xfree86/common/xf86KbdBSD.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthew Garrett
  • Date: 2006-02-13 14:21:43 UTC
  • Revision ID: james.westby@ubuntu.com-20060213142143-mad6z9xzem7hzxz9
Tags: upstream-7.0.0
ImportĀ upstreamĀ versionĀ 7.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86KbdBSD.c,v 3.22 2003/10/07 22:00:52 herrb Exp $ */
 
2
/*
 
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
 
6
 *
 
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.
 
16
 *
 
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.
 
24
 */
 
25
/*
 
26
 * Copyright (c) 1994-2002 by The XFree86 Project, Inc.
 
27
 *
 
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:
 
34
 *
 
35
 * The above copyright notice and this permission notice shall be included in
 
36
 * all copies or substantial portions of the Software.
 
37
 *
 
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.
 
45
 *
 
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).
 
50
 */
 
51
 
 
52
/* $XConsortium: xf86KbdBSD.c /main/6 1996/10/23 13:12:27 kaleb $ */
 
53
 
 
54
#ifdef HAVE_XORG_CONFIG_H
 
55
#include <xorg-config.h>
 
56
#endif
 
57
 
 
58
#include <X11/X.h>
 
59
#include <X11/Xmd.h>
 
60
#include "input.h"
 
61
#include "scrnintstr.h"
 
62
 
 
63
#include "compiler.h"
 
64
 
 
65
#include "xf86.h"
 
66
#include "xf86Priv.h"
 
67
#include "xf86_OSlib.h"
 
68
#include "atKeynames.h"
 
69
#include "xf86Keymap.h"
 
70
 
 
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]]
 
74
 
 
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 */
 
92
};
 
93
 
 
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,
 
161
 
 
162
        /* 
 
163
         * special marked entries (256 + x)
 
164
         */
 
165
 
 
166
#if 1
 
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
 
232
#else
 
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
 
298
#endif
 
299
      };
 
300
 
 
301
#ifdef __OpenBSD__
 
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 */
 
321
};
 
322
 
 
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
 
390
      };
 
391
#endif
 
392
#endif /* SYSCONS_SUPPORT || PCVT_SUPPORT */
 
393
/*
 
394
 * LegalModifier --
 
395
 *      determine whether a key is a legal modifier key, i.e send a
 
396
 *      press/release sequence.
 
397
 */
 
398
 
 
399
/*ARGSUSED*/
 
400
Bool
 
401
LegalModifier(key, pDev)
 
402
     unsigned int  key;
 
403
     DevicePtr pDev;
 
404
{
 
405
  return (TRUE);
 
406
}
 
407
 
 
408
/*
 
409
 * xf86KbdGetMapping --
 
410
 *      Get the national keyboard mapping. The keyboard type is set, a new map
 
411
 *      and the modifiermap is computed.
 
412
 */
 
413
 
 
414
void
 
415
xf86KbdGetMapping (pKeySyms, pModMap)
 
416
     KeySymsPtr pKeySyms;
 
417
     CARD8      *pModMap;
 
418
{
 
419
  KeySym        *k;
 
420
  int           i;
 
421
 
 
422
#ifndef __bsdi__
 
423
  switch (xf86Info.consType) {
 
424
 
 
425
#ifdef PCCONS_SUPPORT
 
426
  case PCCONS:
 
427
#if defined(__OpenBSD__)
 
428
    /*
 
429
     * on OpenBSD, the pccons keymap is programmable, too
 
430
     */
 
431
    {
 
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) {
 
438
            case KB_ASCII:
 
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]];
 
444
              break;
 
445
            case KB_SCROLL:
 
446
              k[0] = XK_Scroll_Lock;
 
447
              goto special;
 
448
            case KB_NUM:
 
449
              k[0] = XK_Num_Lock;
 
450
              goto special;
 
451
            case KB_CAPS:
 
452
              k[0] = XK_Caps_Lock;
 
453
              goto special;
 
454
            case KB_SHIFT:
 
455
              switch (keymap[i].unshift[0]) {
 
456
              case 1:
 
457
                /* left shift */
 
458
                k[0] = XK_Shift_L;
 
459
                break;
 
460
              case 2:
 
461
                /* right shift */
 
462
                k[0] = XK_Shift_R;
 
463
                break;
 
464
              default:
 
465
                k[0] = NoSymbol;
 
466
              }
 
467
              goto special;
 
468
            case KB_CTL:
 
469
              k[0] = XK_Control_L;
 
470
              goto special;
 
471
            case KB_ALT:
 
472
              k[0] = XK_Alt_L;
 
473
              goto special;
 
474
            case KB_FUNC:
 
475
              switch (keymap[i].unshift[2]) {
 
476
              case 'M':
 
477
                k[0] = XK_F1;
 
478
                break;
 
479
              case 'N':
 
480
                k[0] = XK_F2;
 
481
                break;
 
482
              case 'O':
 
483
                k[0] = XK_F3;
 
484
                break;
 
485
              case 'P':
 
486
                k[0] = XK_F4;
 
487
                break;
 
488
              case 'Q':
 
489
                k[0] = XK_F5;
 
490
                break;
 
491
              case 'R':
 
492
                k[0] = XK_F6;
 
493
                break;
 
494
              case 'S':
 
495
                k[0] = XK_F7;
 
496
                break;
 
497
              case 'T':
 
498
                k[0] = XK_F8;
 
499
                break;
 
500
              case 'U':
 
501
                k[0] = XK_F9;
 
502
                break;
 
503
              case 'V':
 
504
                k[0] = XK_F10;
 
505
                break;
 
506
              case 'W':
 
507
                k[0] = XK_F11;
 
508
                break;
 
509
              case 'X':
 
510
                k[0] = XK_F12;
 
511
                break;
 
512
              default:
 
513
                k[0] = NoSymbol;
 
514
                break;
 
515
              }
 
516
              goto special;
 
517
            default:
 
518
              k[0] = NoSymbol;
 
519
            special:
 
520
              k[1] = k[2] = k[3] = NoSymbol;
 
521
            }
 
522
          }
 
523
      } else {
 
524
        ErrorF("Can't read pccons keymap\n");
 
525
      }
 
526
    }
 
527
#endif /* __OpenBSD__ */
 
528
  break;
 
529
#endif
 
530
 
 
531
/*
 
532
 * XXX wscons has no GIO_KEYMAP
 
533
 */
 
534
#if (defined (SYSCONS_SUPPORT) || defined (PCVT_SUPPORT)) && defined(GIO_KEYMAP)
 
535
  case SYSCONS:
 
536
  case PCVT:
 
537
    {
 
538
      keymap_t keymap;
 
539
    
 
540
      if (ioctl(xf86Info.consoleFd, GIO_KEYMAP, &keymap) != -1) {
 
541
        for (i = 0; i < keymap.n_keys && i < NUM_KEYCODES; i++)
 
542
          if (remap[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;
 
553
          }
 
554
      }
 
555
    }
 
556
    break;
 
557
#endif /* SYSCONS || PCVT */
 
558
    
 
559
  } 
 
560
#endif /* !bsdi */
 
561
 
 
562
  /*
 
563
   * compute the modifier map
 
564
   */
 
565
  for (i = 0; i < MAP_LENGTH; i++)
 
566
    pModMap[i] = NoSymbol;  /* make sure it is restored */
 
567
  
 
568
  for (k = map, i = MIN_KEYCODE;
 
569
       i < (NUM_KEYCODES + MIN_KEYCODE);
 
570
       i++, k += 4)
 
571
    
 
572
    switch(*k) {
 
573
      
 
574
    case XK_Shift_L:
 
575
    case XK_Shift_R:
 
576
      pModMap[i] = ShiftMask;
 
577
      break;
 
578
      
 
579
    case XK_Control_L:
 
580
    case XK_Control_R:
 
581
      pModMap[i] = ControlMask;
 
582
      break;
 
583
      
 
584
    case XK_Caps_Lock:
 
585
      pModMap[i] = LockMask;
 
586
      break;
 
587
      
 
588
    case XK_Alt_L:
 
589
    case XK_Alt_R:
 
590
      pModMap[i] = AltMask;
 
591
      break;
 
592
      
 
593
    case XK_Num_Lock:
 
594
      pModMap[i] = NumLockMask;
 
595
      break;
 
596
 
 
597
    case XK_Scroll_Lock:
 
598
      pModMap[i] = ScrollLockMask;
 
599
      break;
 
600
 
 
601
      /* kana support */
 
602
    case XK_Kana_Lock:
 
603
    case XK_Kana_Shift:
 
604
      pModMap[i] = KanaMask;
 
605
      break;
 
606
 
 
607
      /* alternate toggle for multinational support */
 
608
    case XK_Mode_switch:
 
609
      pModMap[i] = AltLangMask;
 
610
      break;
 
611
 
 
612
    }
 
613
  
 
614
  xf86Info.kbdType = 0;
 
615
 
 
616
  pKeySyms->map        = map;
 
617
  pKeySyms->mapWidth   = GLYPHS_PER_KEY;
 
618
  pKeySyms->minKeyCode = MIN_KEYCODE;
 
619
  pKeySyms->maxKeyCode = MAX_KEYCODE; 
 
620
 
 
621
}
 
622
 
 
623
#ifdef WSCONS_SUPPORT
 
624
#include "atKeynames.h"
 
625
 
 
626
static CARD8 wsUsbMap[] = {
 
627
        /* 0 */ KEY_NOTUSED,
 
628
        /* 1 */ KEY_NOTUSED,
 
629
        /* 2 */ KEY_NOTUSED,
 
630
        /* 3 */ KEY_NOTUSED,
 
631
        /* 4 */ KEY_A,          
 
632
        /* 5 */ KEY_B,
 
633
        /* 6 */ KEY_C,
 
634
        /* 7 */ KEY_D,
 
635
        /* 8 */ KEY_E,
 
636
        /* 9 */ KEY_F,
 
637
        /* 10 */ KEY_G,
 
638
        /* 11 */ KEY_H,
 
639
        /* 12 */ KEY_I,
 
640
        /* 13 */ KEY_J,
 
641
        /* 14 */ KEY_K,
 
642
        /* 15 */ KEY_L,
 
643
        /* 16 */ KEY_M,
 
644
        /* 17 */ KEY_N,
 
645
        /* 18 */ KEY_O,
 
646
        /* 19 */ KEY_P,
 
647
        /* 20 */ KEY_Q,
 
648
        /* 21 */ KEY_R,
 
649
        /* 22 */ KEY_S,
 
650
        /* 23 */ KEY_T,
 
651
        /* 24 */ KEY_U,
 
652
        /* 25 */ KEY_V,
 
653
        /* 26 */ KEY_W,
 
654
        /* 27 */ KEY_X,
 
655
        /* 28 */ KEY_Y,
 
656
        /* 29 */ KEY_Z,
 
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 */
 
859
};
 
860
 
 
861
#define WS_USB_MAP_SIZE (sizeof(wsUsbMap)/sizeof(unsigned char))
 
862
 
 
863
/* Map for adb keyboards  */
 
864
static CARD8 wsAdbMap[] = {
 
865
        /* 0 */ KEY_A,
 
866
        /* 1 */ KEY_S,
 
867
        /* 2 */ KEY_D,
 
868
        /* 3 */ KEY_F,
 
869
        /* 4 */ KEY_H,
 
870
        /* 5 */ KEY_G,
 
871
        /* 6 */ KEY_Z,
 
872
        /* 7 */ KEY_X,
 
873
        /* 8 */ KEY_C,
 
874
        /* 9 */ KEY_V,
 
875
        /* 10 */ KEY_UNKNOWN,   /* @ # on french keyboards */
 
876
        /* 11 */ KEY_B,
 
877
        /* 12 */ KEY_Q,
 
878
        /* 13 */ KEY_W,
 
879
        /* 14 */ KEY_E,
 
880
        /* 15 */ KEY_R,
 
881
        /* 16 */ KEY_Y,
 
882
        /* 17 */ KEY_T,
 
883
        /* 18 */ KEY_1,
 
884
        /* 19 */ KEY_2,
 
885
        /* 20 */ KEY_3,
 
886
        /* 21 */ KEY_4,
 
887
        /* 22 */ KEY_6,
 
888
        /* 23 */ KEY_5,
 
889
        /* 24 */ KEY_Equal,
 
890
        /* 25 */ KEY_9,
 
891
        /* 26 */ KEY_7,
 
892
        /* 27 */ KEY_Minus,
 
893
        /* 28 */ KEY_8,
 
894
        /* 29 */ KEY_0,
 
895
        /* 30 */ KEY_RBrace,
 
896
        /* 31 */ KEY_O,
 
897
        /* 32 */ KEY_U,
 
898
        /* 33 */ KEY_LBrace,
 
899
        /* 34 */ KEY_I,
 
900
        /* 35 */ KEY_P,
 
901
        /* 36 */ KEY_Enter,
 
902
        /* 37 */ KEY_L,
 
903
        /* 38 */ KEY_J,
 
904
        /* 39 */ KEY_Quote,
 
905
        /* 40 */ KEY_K,
 
906
        /* 41 */ KEY_SemiColon,
 
907
        /* 42 */ KEY_BSlash,
 
908
        /* 43 */ KEY_Comma,
 
909
        /* 44 */ KEY_Slash,
 
910
        /* 45 */ KEY_N,
 
911
        /* 46 */ KEY_M,
 
912
        /* 47 */ KEY_Period,
 
913
        /* 48 */ KEY_Tab,
 
914
        /* 49 */ KEY_Space,
 
915
        /* 50 */ KEY_Tilde,
 
916
        /* 51 */ KEY_Delete,
 
917
        /* 52 */ KEY_AltLang,
 
918
        /* 53 */ KEY_Escape,
 
919
        /* 54 */ KEY_LCtrl,
 
920
        /* 55 */ KEY_Alt,
 
921
        /* 56 */ KEY_ShiftL,
 
922
        /* 57 */ KEY_CapsLock,
 
923
        /* 58 */ KEY_LMeta,
 
924
        /* 59 */ KEY_Left,
 
925
        /* 60 */ KEY_Right,
 
926
        /* 61 */ KEY_Down,
 
927
        /* 62 */ KEY_Up,
 
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 = */
 
947
        /* 82 */ KEY_KP_0,
 
948
        /* 83 */ KEY_KP_1,
 
949
        /* 84 */ KEY_KP_2,
 
950
        /* 85 */ KEY_KP_3,
 
951
        /* 86 */ KEY_KP_4,
 
952
        /* 87 */ KEY_KP_5,
 
953
        /* 88 */ KEY_KP_6,
 
954
        /* 89 */ KEY_KP_7,
 
955
        /* 90 */ KEY_NOTUSED,
 
956
        /* 91 */ KEY_KP_8,
 
957
        /* 92 */ KEY_KP_9,
 
958
        /* 93 */ KEY_NOTUSED,
 
959
        /* 94 */ KEY_NOTUSED,
 
960
        /* 95 */ KEY_UNKNOWN,   /* Keypad ,  */
 
961
        /* 96 */ KEY_F5,
 
962
        /* 97 */ KEY_F6,
 
963
        /* 98 */ KEY_F7,
 
964
        /* 99 */ KEY_F3,
 
965
        /* 100 */ KEY_F8,
 
966
        /* 101 */ KEY_F9,
 
967
        /* 102 */ KEY_NOTUSED,
 
968
        /* 103 */ KEY_F11,
 
969
        /* 104 */ KEY_NOTUSED,
 
970
        /* 105 */ KEY_NOTUSED,
 
971
        /* 106 */ KEY_KP_Enter,
 
972
        /* 107 */ KEY_NOTUSED,
 
973
        /* 108 */ KEY_NOTUSED,
 
974
        /* 109 */ KEY_F10,
 
975
        /* 110 */ KEY_NOTUSED,
 
976
        /* 111 */ KEY_F12,
 
977
        /* 112 */ KEY_NOTUSED,
 
978
        /* 113 */ KEY_NOTUSED,
 
979
        /* 114 */ KEY_NOTUSED,
 
980
        /* 115 */ KEY_Home,
 
981
        /* 116 */ KEY_PgUp,
 
982
        /* 117 */ KEY_NOTUSED,
 
983
        /* 118 */ KEY_F4,
 
984
        /* 119 */ KEY_End,
 
985
        /* 120 */ KEY_F2,
 
986
        /* 121 */ KEY_PgDown,
 
987
        /* 122 */ KEY_F1,
 
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,
 
1089
};
 
1090
 
 
1091
#define WS_ADB_MAP_SIZE (sizeof(wsAdbMap)/sizeof(unsigned char))
 
1092
 
 
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 */
 
1099
        /* 0x05 */ KEY_F1,
 
1100
        /* 0x06 */ KEY_F2,
 
1101
        /* 0x07 */ KEY_F10,
 
1102
        /* 0x08 */ KEY_F3,
 
1103
        /* 0x09 */ KEY_F11,
 
1104
        /* 0x0a */ KEY_F4,
 
1105
        /* 0x0b */ KEY_F12,
 
1106
        /* 0x0c */ KEY_F5,
 
1107
        /* 0x0d */ KEY_AltLang,
 
1108
        /* 0x0e */ KEY_F6,
 
1109
        /* 0x0f */ KEY_NOTUSED,
 
1110
        /* 0x10 */ KEY_F7,
 
1111
        /* 0x11 */ KEY_F8,
 
1112
        /* 0x12 */ KEY_F9,
 
1113
        /* 0x13 */ KEY_Alt,
 
1114
        /* 0x14 */ KEY_Up,
 
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,
 
1124
        /* 0x1e */ KEY_1,
 
1125
        /* 0x1f */ KEY_2,
 
1126
        /* 0x20 */ KEY_3,
 
1127
        /* 0x21 */ KEY_4,
 
1128
        /* 0x22 */ KEY_5,
 
1129
        /* 0x23 */ KEY_6,
 
1130
        /* 0x24 */ KEY_7,
 
1131
        /* 0x25 */ KEY_8,
 
1132
        /* 0x26 */ KEY_9,
 
1133
        /* 0x27 */ KEY_0,
 
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,
 
1147
        /* 0x35 */ KEY_Tab,
 
1148
        /* 0x36 */ KEY_Q,
 
1149
        /* 0x37 */ KEY_W,
 
1150
        /* 0x38 */ KEY_E,
 
1151
        /* 0x39 */ KEY_R,
 
1152
        /* 0x3a */ KEY_T,
 
1153
        /* 0x3b */ KEY_Y,
 
1154
        /* 0x3c */ KEY_U,
 
1155
        /* 0x3d */ KEY_I,
 
1156
        /* 0x3e */ KEY_O,
 
1157
        /* 0x3f */ KEY_P,
 
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 */
 
1168
        /* 0x4a */ KEY_End,
 
1169
        /* 0x4b */ KEY_NOTUSED,
 
1170
        /* 0x4c */ KEY_LCtrl,
 
1171
        /* 0x4d */ KEY_A,
 
1172
        /* 0x4e */ KEY_S,
 
1173
        /* 0x4f */ KEY_D,
 
1174
        /* 0x50 */ KEY_F,
 
1175
        /* 0x51 */ KEY_G,
 
1176
        /* 0x52 */ KEY_H,
 
1177
        /* 0x53 */ KEY_J,
 
1178
        /* 0x54 */ KEY_K,
 
1179
        /* 0x55 */ KEY_L,
 
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,
 
1194
        /* 0x64 */ KEY_Z,
 
1195
        /* 0x65 */ KEY_X,
 
1196
        /* 0x66 */ KEY_C,
 
1197
        /* 0x67 */ KEY_V,
 
1198
        /* 0x68 */ KEY_B,
 
1199
        /* 0x69 */ KEY_N,
 
1200
        /* 0x6a */ KEY_M,
 
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
 
1222
};
 
1223
 
 
1224
#define WS_SUN_MAP_SIZE (sizeof(wsSunMap)/sizeof(unsigned char))
 
1225
 
 
1226
/*
 
1227
 * Translate raw wskbd keyboard event values to XFree86 standard keycodes
 
1228
 * (based on the AT keyboard scan codes using the tables above
 
1229
 */
 
1230
int 
 
1231
WSKbdToKeycode(int keycode)
 
1232
{
 
1233
        switch (xf86Info.wsKbdType) {
 
1234
        case WSKBD_TYPE_PC_XT:
 
1235
        case WSKBD_TYPE_PC_AT:
 
1236
                /* No translation needed */
 
1237
                return keycode;
 
1238
        case WSKBD_TYPE_USB:
 
1239
                if (keycode < 0 || keycode >= WS_USB_MAP_SIZE) 
 
1240
                        return KEY_UNKNOWN;
 
1241
                else 
 
1242
                        return wsUsbMap[keycode];
 
1243
#ifdef WSKBD_TYPE_ADB
 
1244
        case WSKBD_TYPE_ADB:
 
1245
                if (keycode < 0 || keycode >= WS_ADB_MAP_SIZE) 
 
1246
                        return KEY_UNKNOWN;
 
1247
                else 
 
1248
                        return wsAdbMap[keycode];
 
1249
#endif
 
1250
#ifdef WSKBD_TYPE_SUN
 
1251
        case WSKBD_TYPE_SUN:
 
1252
#ifdef WSKBD_TYPE_SUN5
 
1253
        case WSKBD_TYPE_SUN5:
 
1254
#endif
 
1255
                if (keycode < 0 || keycode >= WS_SUN_MAP_SIZE)
 
1256
                        return KEY_UNKNOWN;
 
1257
                else
 
1258
                        return wsSunMap[keycode];
 
1259
#endif
 
1260
        default:
 
1261
                ErrorF("Unknown wskbd type %d\n", xf86Info.wsKbdType);
 
1262
                return KEY_UNKNOWN;
 
1263
        }
 
1264
}
 
1265
 
 
1266
#endif /* WSCONS_SUPPORT */