1 /*
2  * Copyright (c) 2002-2008 LWJGL Project
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  *   notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  *   notice, this list of conditions and the following disclaimer in the
14  *   documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of 'LWJGL' nor the names of
17  *   its contributors may be used to endorse or promote products derived
18  *   from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 package org.lwjgl.opengl;
33 
34 /**
35  * @author elias_naur
36  */
37 
38 import org.lwjgl.input.Keyboard;
39 
40 final class LinuxKeycodes {
41 	public static final int XK_Kanji                         = 0xff21;
42 
43 	public static final int XK_ISO_Left_Tab                  = 0xfe20;
44 
45 	public static final int XK_dead_grave                    = 0xfe50;
46 	public static final int XK_dead_acute                    = 0xfe51;
47 	public static final int XK_dead_circumflex               = 0xfe52;
48 	public static final int XK_dead_tilde                    = 0xfe53;
49 	public static final int XK_dead_macron                   = 0xfe54;
50 	public static final int XK_dead_breve                    = 0xfe55;
51 	public static final int XK_dead_abovedot                 = 0xfe56;
52 	public static final int XK_dead_diaeresis                = 0xfe57;
53 	public static final int XK_dead_abovering                = 0xfe58;
54 	public static final int XK_dead_doubleacute              = 0xfe59;
55 	public static final int XK_dead_caron                    = 0xfe5a;
56 	public static final int XK_dead_cedilla                  = 0xfe5b;
57 	public static final int XK_dead_ogonek                   = 0xfe5c;
58 	public static final int XK_dead_iota                     = 0xfe5d;
59 	public static final int XK_dead_voiced_sound             = 0xfe5e;
60 	public static final int XK_dead_semivoiced_sound         = 0xfe5f;
61 	public static final int XK_dead_belowdot                 = 0xfe60;
62 	public static final int XK_dead_hook                     = 0xfe61;
63 	public static final int XK_dead_horn                     = 0xfe62;
64 
65 	public static final int XK_BackSpace                     = 0xff08;
66 	public static final int XK_Tab                           = 0xff09;
67 	public static final int XK_Linefeed                      = 0xff0a;
68 	public static final int XK_Clear                         = 0xff0b;
69 	public static final int XK_Return                        = 0xff0d;
70 	public static final int XK_Pause                         = 0xff13;
71 	public static final int XK_Scroll_Lock                   = 0xff14;
72 	public static final int XK_Sys_Req                       = 0xff15;
73 	public static final int XK_Escape                        = 0xff1b;
74 	public static final int XK_Delete                        = 0xffff;
75 
76 	public static final int XK_Home                          = 0xff50;
77 	public static final int XK_Left                          = 0xff51;
78 	public static final int XK_Up                            = 0xff52;
79 	public static final int XK_Right                         = 0xff53;
80 	public static final int XK_Down                          = 0xff54;
81 	public static final int XK_Prior                         = 0xff55;
82 	public static final int XK_Page_Up                       = 0xff55;
83 	public static final int XK_Next                          = 0xff56;
84 	public static final int XK_Page_Down                     = 0xff56;
85 	public static final int XK_End                           = 0xff57;
86 	public static final int XK_Begin                         = 0xff58;
87 
88 
89 /* Misc functions */
90 
91 	public static final int XK_Select                        = 0xff60;
92 	public static final int XK_Print                         = 0xff61;
93 	public static final int XK_Execute                       = 0xff62;
94 	public static final int XK_Insert                        = 0xff63;
95 	public static final int XK_Undo                          = 0xff65;
96 	public static final int XK_Redo                          = 0xff66;
97 	public static final int XK_Menu                          = 0xff67;
98 	public static final int XK_Find                          = 0xff68;
99 	public static final int XK_Cancel                        = 0xff69;
100 	public static final int XK_Help                          = 0xff6a;
101 	public static final int XK_Break                         = 0xff6b;
102 	public static final int XK_Mode_switch                   = 0xff7e;
103 	public static final int XK_script_switch                 = 0xff7e;
104 	public static final int XK_Num_Lock                      = 0xff7f;
105 
106 /* Keypad functions, keypad numbers cleverly chosen to map to ASCII */
107 
108 	public static final int XK_KP_Space                      = 0xff80;
109 	public static final int XK_KP_Tab                        = 0xff89;
110 	public static final int XK_KP_Enter                      = 0xff8d;
111 	public static final int XK_KP_F1                         = 0xff91;
112 	public static final int XK_KP_F2                         = 0xff92;
113 	public static final int XK_KP_F3                         = 0xff93;
114 	public static final int XK_KP_F4                         = 0xff94;
115 	public static final int XK_KP_Home                       = 0xff95;
116 	public static final int XK_KP_Left                       = 0xff96;
117 	public static final int XK_KP_Up                         = 0xff97;
118 	public static final int XK_KP_Right                      = 0xff98;
119 	public static final int XK_KP_Down                       = 0xff99;
120 	public static final int XK_KP_Prior                      = 0xff9a;
121 	public static final int XK_KP_Page_Up                    = 0xff9a;
122 	public static final int XK_KP_Next                       = 0xff9b;
123 	public static final int XK_KP_Page_Down                  = 0xff9b;
124 	public static final int XK_KP_End                        = 0xff9c;
125 	public static final int XK_KP_Begin                      = 0xff9d;
126 	public static final int XK_KP_Insert                     = 0xff9e;
127 	public static final int XK_KP_Delete                     = 0xff9f;
128 	public static final int XK_KP_Equal                      = 0xffbd;
129 	public static final int XK_KP_Multiply                   = 0xffaa;
130 	public static final int XK_KP_Add                        = 0xffab;
131 	public static final int XK_KP_Separator                  = 0xffac;
132 	public static final int XK_KP_Subtract                   = 0xffad;
133 	public static final int XK_KP_Decimal                    = 0xffae;
134 	public static final int XK_KP_Divide                     = 0xffaf;
135 
136 	public static final int XK_KP_0                          = 0xffb0;
137 	public static final int XK_KP_1                          = 0xffb1;
138 	public static final int XK_KP_2                          = 0xffb2;
139 	public static final int XK_KP_3                          = 0xffb3;
140 	public static final int XK_KP_4                          = 0xffb4;
141 	public static final int XK_KP_5                          = 0xffb5;
142 	public static final int XK_KP_6                          = 0xffb6;
143 	public static final int XK_KP_7                          = 0xffb7;
144 	public static final int XK_KP_8                          = 0xffb8;
145 	public static final int XK_KP_9                          = 0xffb9;
146 
147 
148 
149 /*
150  * Auxilliary functions; note the duplicate definitions for left and right
151  * function keys;  Sun keyboards and a few other manufactures have such
152  * function key groups on the left and/or right sides of the keyboard.
153  * We've not found a keyboard with more than 35 function keys total.
154  */
155 
156 	public static final int XK_F1                            = 0xffbe;
157 	public static final int XK_F2                            = 0xffbf;
158 	public static final int XK_F3                            = 0xffc0;
159 	public static final int XK_F4                            = 0xffc1;
160 	public static final int XK_F5                            = 0xffc2;
161 	public static final int XK_F6                            = 0xffc3;
162 	public static final int XK_F7                            = 0xffc4;
163 	public static final int XK_F8                            = 0xffc5;
164 	public static final int XK_F9                            = 0xffc6;
165 	public static final int XK_F10                           = 0xffc7;
166 	public static final int XK_F11                           = 0xffc8;
167 	public static final int XK_L1                            = 0xffc8;
168 	public static final int XK_F12                           = 0xffc9;
169 	public static final int XK_L2                            = 0xffc9;
170 	public static final int XK_F13                           = 0xffca;
171 	public static final int XK_L3                            = 0xffca;
172 	public static final int XK_F14                           = 0xffcb;
173 	public static final int XK_L4                            = 0xffcb;
174 	public static final int XK_F15                           = 0xffcc;
175 	public static final int XK_L5                            = 0xffcc;
176 	public static final int XK_F16                           = 0xffcd;
177 	public static final int XK_L6                            = 0xffcd;
178 	public static final int XK_F17                           = 0xffce;
179 	public static final int XK_L7                            = 0xffce;
180 	public static final int XK_F18                           = 0xffcf;
181 	public static final int XK_L8                            = 0xffcf;
182 	public static final int XK_F19                           = 0xffd0;
183 	public static final int XK_L9                            = 0xffd0;
184 	public static final int XK_F20                           = 0xffd1;
185 	public static final int XK_L10                           = 0xffd1;
186 	public static final int XK_F21                           = 0xffd2;
187 	public static final int XK_R1                            = 0xffd2;
188 	public static final int XK_F22                           = 0xffd3;
189 	public static final int XK_R2                            = 0xffd3;
190 	public static final int XK_F23                           = 0xffd4;
191 	public static final int XK_R3                            = 0xffd4;
192 	public static final int XK_F24                           = 0xffd5;
193 	public static final int XK_R4                            = 0xffd5;
194 	public static final int XK_F25                           = 0xffd6;
195 	public static final int XK_R5                            = 0xffd6;
196 	public static final int XK_F26                           = 0xffd7;
197 	public static final int XK_R6                            = 0xffd7;
198 	public static final int XK_F27                           = 0xffd8;
199 	public static final int XK_R7                            = 0xffd8;
200 	public static final int XK_F28                           = 0xffd9;
201 	public static final int XK_R8                            = 0xffd9;
202 	public static final int XK_F29                           = 0xffda;
203 	public static final int XK_R9                            = 0xffda;
204 	public static final int XK_F30                           = 0xffdb;
205 	public static final int XK_R10                           = 0xffdb;
206 	public static final int XK_F31                           = 0xffdc;
207 	public static final int XK_R11                           = 0xffdc;
208 	public static final int XK_F32                           = 0xffdd;
209 	public static final int XK_R12                           = 0xffdd;
210 	public static final int XK_F33                           = 0xffde;
211 	public static final int XK_R13                           = 0xffde;
212 	public static final int XK_F34                           = 0xffdf;
213 	public static final int XK_R14                           = 0xffdf;
214 	public static final int XK_F35                           = 0xffe0;
215 	public static final int XK_R15                           = 0xffe0;
216 
217 /* Modifiers */
218 
219 	public static final int XK_Shift_L                       = 0xffe1;
220 	public static final int XK_Shift_R                       = 0xffe2;
221 	public static final int XK_Control_L                     = 0xffe3;
222 	public static final int XK_Control_R                     = 0xffe4;
223 	public static final int XK_Caps_Lock                     = 0xffe5;
224 	public static final int XK_Shift_Lock                    = 0xffe6;
225 
226 	public static final int XK_Meta_L                        = 0xffe7;
227 	public static final int XK_Meta_R                        = 0xffe8;
228 	public static final int XK_Alt_L                         = 0xffe9;
229 	public static final int XK_Alt_R                         = 0xffea;
230 	public static final int XK_Super_L                       = 0xffeb;
231 	public static final int XK_Super_R                       = 0xffec;
232 	public static final int XK_Hyper_L                       = 0xffed;
233 	public static final int XK_Hyper_R                       = 0xffee;
234 	public static final int XK_space                         = 0x0020;
235 	public static final int XK_exclam                        = 0x0021;
236 	public static final int XK_quotedbl                      = 0x0022;
237 	public static final int XK_numbersign                    = 0x0023;
238 	public static final int XK_dollar                        = 0x0024;
239 	public static final int XK_percent                       = 0x0025;
240 	public static final int XK_ampersand                     = 0x0026;
241 	public static final int XK_apostrophe                    = 0x0027;
242 	public static final int XK_quoteright                    = 0x0027;
243 	public static final int XK_parenleft                     = 0x0028;
244 	public static final int XK_parenright                    = 0x0029;
245 	public static final int XK_asterisk                      = 0x002a;
246 	public static final int XK_plus                          = 0x002b;
247 	public static final int XK_comma                         = 0x002c;
248 	public static final int XK_minus                         = 0x002d;
249 	public static final int XK_period                        = 0x002e;
250 	public static final int XK_slash                         = 0x002f;
251 
252 	public static final int XK_0                             = 0x0030;
253 	public static final int XK_1                             = 0x0031;
254 	public static final int XK_2                             = 0x0032;
255 	public static final int XK_3                             = 0x0033;
256 	public static final int XK_4                             = 0x0034;
257 	public static final int XK_5                             = 0x0035;
258 	public static final int XK_6                             = 0x0036;
259 	public static final int XK_7                             = 0x0037;
260 	public static final int XK_8                             = 0x0038;
261 	public static final int XK_9                             = 0x0039;
262 	public static final int XK_colon                         = 0x003a;
263 	public static final int XK_semicolon                     = 0x003b;
264 	public static final int XK_less                          = 0x003c;
265 	public static final int XK_equal                         = 0x003d;
266 	public static final int XK_greater                       = 0x003e;
267 	public static final int XK_question                      = 0x003f;
268 	public static final int XK_at                            = 0x0040;
269 	public static final int XK_A                             = 0x0041;
270 	public static final int XK_B                             = 0x0042;
271 	public static final int XK_C                             = 0x0043;
272 	public static final int XK_D                             = 0x0044;
273 	public static final int XK_E                             = 0x0045;
274 	public static final int XK_F                             = 0x0046;
275 	public static final int XK_G                             = 0x0047;
276 	public static final int XK_H                             = 0x0048;
277 	public static final int XK_I                             = 0x0049;
278 	public static final int XK_J                             = 0x004a;
279 	public static final int XK_K                             = 0x004b;
280 	public static final int XK_L                             = 0x004c;
281 	public static final int XK_M                             = 0x004d;
282 	public static final int XK_N                             = 0x004e;
283 	public static final int XK_O                             = 0x004f;
284 	public static final int XK_P                             = 0x0050;
285 	public static final int XK_Q                             = 0x0051;
286 	public static final int XK_R                             = 0x0052;
287 	public static final int XK_S                             = 0x0053;
288 	public static final int XK_T                             = 0x0054;
289 	public static final int XK_U                             = 0x0055;
290 	public static final int XK_V                             = 0x0056;
291 	public static final int XK_W                             = 0x0057;
292 	public static final int XK_X                             = 0x0058;
293 	public static final int XK_Y                             = 0x0059;
294 	public static final int XK_Z                             = 0x005a;
295 	public static final int XK_bracketleft                   = 0x005b;
296 	public static final int XK_backslash                     = 0x005c;
297 	public static final int XK_bracketright                  = 0x005d;
298 	public static final int XK_asciicircum                   = 0x005e;
299 	public static final int XK_underscore                    = 0x005f;
300 	public static final int XK_grave                         = 0x0060;
301 	public static final int XK_quoteleft                     = 0x0060;
302 	public static final int XK_a                             = 0x0061;
303 	public static final int XK_b                             = 0x0062;
304 	public static final int XK_c                             = 0x0063;
305 	public static final int XK_d                             = 0x0064;
306 	public static final int XK_e                             = 0x0065;
307 	public static final int XK_f                             = 0x0066;
308 	public static final int XK_g                             = 0x0067;
309 	public static final int XK_h                             = 0x0068;
310 	public static final int XK_i                             = 0x0069;
311 	public static final int XK_j                             = 0x006a;
312 	public static final int XK_k                             = 0x006b;
313 	public static final int XK_l                             = 0x006c;
314 	public static final int XK_m                             = 0x006d;
315 	public static final int XK_n                             = 0x006e;
316 	public static final int XK_o                             = 0x006f;
317 	public static final int XK_p                             = 0x0070;
318 	public static final int XK_q                             = 0x0071;
319 	public static final int XK_r                             = 0x0072;
320 	public static final int XK_s                             = 0x0073;
321 	public static final int XK_t                             = 0x0074;
322 	public static final int XK_u                             = 0x0075;
323 	public static final int XK_v                             = 0x0076;
324 	public static final int XK_w                             = 0x0077;
325 	public static final int XK_x                             = 0x0078;
326 	public static final int XK_y                             = 0x0079;
327 	public static final int XK_z                             = 0x007a;
328 	public static final int XK_braceleft                     = 0x007b;
329 	public static final int XK_bar                           = 0x007c;
330 	public static final int XK_braceright                    = 0x007d;
331 	public static final int XK_asciitilde                    = 0x007e;
332 
333 	public static final int XK_nobreakspace                  = 0x00a0;
334 	public static final int XK_exclamdown                    = 0x00a1;
335 	public static final int XK_cent                          = 0x00a2;
336 	public static final int XK_sterling                      = 0x00a3;
337 	public static final int XK_currency                      = 0x00a4;
338 	public static final int XK_yen                           = 0x00a5;
339 	public static final int XK_brokenbar                     = 0x00a6;
340 	public static final int XK_section                       = 0x00a7;
341 	public static final int XK_diaeresis                     = 0x00a8;
342 	public static final int XK_copyright                     = 0x00a9;
343 	public static final int XK_ordfeminine                   = 0x00aa;
344 	public static final int XK_guillemotleft                 = 0x00ab;
345 	public static final int XK_notsign                       = 0x00ac;
346 	public static final int XK_hyphen                        = 0x00ad;
347 	public static final int XK_registered                    = 0x00ae;
348 	public static final int XK_macron                        = 0x00af;
349 	public static final int XK_degree                        = 0x00b0;
350 	public static final int XK_plusminus                     = 0x00b1;
351 	public static final int XK_twosuperior                   = 0x00b2;
352 	public static final int XK_threesuperior                 = 0x00b3;
353 	public static final int XK_acute                         = 0x00b4;
354 	public static final int XK_mu                            = 0x00b5;
355 	public static final int XK_paragraph                     = 0x00b6;
356 	public static final int XK_periodcentered                = 0x00b7;
357 	public static final int XK_cedilla                       = 0x00b8;
358 	public static final int XK_onesuperior                   = 0x00b9;
359 	public static final int XK_masculine                     = 0x00ba;
360 	public static final int XK_guillemotright                = 0x00bb;
361 	public static final int XK_onequarter                    = 0x00bc;
362 	public static final int XK_onehalf                       = 0x00bd;
363 	public static final int XK_threequarters                 = 0x00be;
364 	public static final int XK_questiondown                  = 0x00bf;
365 	public static final int XK_Agrave                        = 0x00c0;
366 	public static final int XK_Aacute                        = 0x00c1;
367 	public static final int XK_Acircumflex                   = 0x00c2;
368 	public static final int XK_Atilde                        = 0x00c3;
369 	public static final int XK_Adiaeresis                    = 0x00c4;
370 	public static final int XK_Aring                         = 0x00c5;
371 	public static final int XK_AE                            = 0x00c6;
372 	public static final int XK_Ccedilla                      = 0x00c7;
373 	public static final int XK_Egrave                        = 0x00c8;
374 	public static final int XK_Eacute                        = 0x00c9;
375 	public static final int XK_Ecircumflex                   = 0x00ca;
376 	public static final int XK_Ediaeresis                    = 0x00cb;
377 	public static final int XK_Igrave                        = 0x00cc;
378 	public static final int XK_Iacute                        = 0x00cd;
379 	public static final int XK_Icircumflex                   = 0x00ce;
380 	public static final int XK_Idiaeresis                    = 0x00cf;
381 	public static final int XK_ETH                           = 0x00d0;
382 	public static final int XK_Eth                           = 0x00d0;
383 	public static final int XK_Ntilde                        = 0x00d1;
384 	public static final int XK_Ograve                        = 0x00d2;
385 	public static final int XK_Oacute                        = 0x00d3;
386 	public static final int XK_Ocircumflex                   = 0x00d4;
387 	public static final int XK_Otilde                        = 0x00d5;
388 	public static final int XK_Odiaeresis                    = 0x00d6;
389 	public static final int XK_multiply                      = 0x00d7;
390 	public static final int XK_Oslash                        = 0x00d8;
391 	public static final int XK_Ooblique                      = 0x00d8;
392 	public static final int XK_Ugrave                        = 0x00d9;
393 	public static final int XK_Uacute                        = 0x00da;
394 	public static final int XK_Ucircumflex                   = 0x00db;
395 	public static final int XK_Udiaeresis                    = 0x00dc;
396 	public static final int XK_Yacute                        = 0x00dd;
397 	public static final int XK_THORN                         = 0x00de;
398 	public static final int XK_Thorn                         = 0x00de;
399 	public static final int XK_ssharp                        = 0x00df;
400 	public static final int XK_agrave                        = 0x00e0;
401 	public static final int XK_aacute                        = 0x00e1;
402 	public static final int XK_acircumflex                   = 0x00e2;
403 	public static final int XK_atilde                        = 0x00e3;
404 	public static final int XK_adiaeresis                    = 0x00e4;
405 	public static final int XK_aring                         = 0x00e5;
406 	public static final int XK_ae                            = 0x00e6;
407 	public static final int XK_ccedilla                      = 0x00e7;
408 	public static final int XK_egrave                        = 0x00e8;
409 	public static final int XK_eacute                        = 0x00e9;
410 	public static final int XK_ecircumflex                   = 0x00ea;
411 	public static final int XK_ediaeresis                    = 0x00eb;
412 	public static final int XK_igrave                        = 0x00ec;
413 	public static final int XK_iacute                        = 0x00ed;
414 	public static final int XK_icircumflex                   = 0x00ee;
415 	public static final int XK_idiaeresis                    = 0x00ef;
416 	public static final int XK_eth                           = 0x00f0;
417 	public static final int XK_ntilde                        = 0x00f1;
418 	public static final int XK_ograve                        = 0x00f2;
419 	public static final int XK_oacute                        = 0x00f3;
420 	public static final int XK_ocircumflex                   = 0x00f4;
421 	public static final int XK_otilde                        = 0x00f5;
422 	public static final int XK_odiaeresis                    = 0x00f6;
423 	public static final int XK_division                      = 0x00f7;
424 	public static final int XK_oslash                        = 0x00f8;
425 	public static final int XK_ooblique                      = 0x00f8;
426 	public static final int XK_ugrave                        = 0x00f9;
427 	public static final int XK_uacute                        = 0x00fa;
428 	public static final int XK_ucircumflex                   = 0x00fb;
429 	public static final int XK_udiaeresis                    = 0x00fc;
430 	public static final int XK_yacute                        = 0x00fd;
431 	public static final int XK_thorn                         = 0x00fe;
432 	public static final int XK_ydiaeresis                    = 0x00ff;
433 
434 	public static final int XK_ISO_Level3_Shift              = 0xfe03;
435 
mapKeySymToLWJGLKeyCode(long keysym)436 	public static int mapKeySymToLWJGLKeyCode(long keysym) {
437 		switch ((int)keysym) {
438 			case XK_BackSpace:
439 				return Keyboard.KEY_BACK;
440 			case XK_ISO_Left_Tab:
441 			case XK_Tab:
442 				return Keyboard.KEY_TAB;
443 			case XK_Return:
444 				return Keyboard.KEY_RETURN;
445 			case XK_Pause:
446 				return Keyboard.KEY_PAUSE;
447 			case XK_Scroll_Lock:
448 				return Keyboard.KEY_SCROLL;
449 			case XK_Sys_Req:
450 				return Keyboard.KEY_SYSRQ;
451 			case XK_Escape:
452 				return Keyboard.KEY_ESCAPE;
453 			case XK_Delete:
454 				return Keyboard.KEY_DELETE;
455 
456 				/* Japanese keyboard support */
457 
458 			case XK_Kanji:
459 				return Keyboard.KEY_KANJI;
460 
461 				/* Cursor control & motion */
462 
463 			case XK_Home:
464 				return Keyboard.KEY_HOME;
465 			case XK_Left:
466 				return Keyboard.KEY_LEFT;
467 			case XK_Up:
468 				return Keyboard.KEY_UP;
469 			case XK_Right:
470 				return Keyboard.KEY_RIGHT;
471 			case XK_Down:
472 				return Keyboard.KEY_DOWN;
473 			case XK_Page_Up:
474 				return Keyboard.KEY_PRIOR;
475 			case XK_Page_Down:
476 				return Keyboard.KEY_NEXT;
477 			case XK_End:
478 				return Keyboard.KEY_END;
479 
480 
481 				/* Misc Functions */
482 
483 			case XK_Break:
484 				return Keyboard.KEY_PAUSE;
485 			case XK_Insert:
486 				return Keyboard.KEY_INSERT;
487 			case XK_Num_Lock:
488 				return Keyboard.KEY_NUMLOCK;
489 
490 				/* Keypad Functions, keypad numbers cleverly chosen to map to ascii */
491 
492 			case XK_KP_Space:
493 				return Keyboard.KEY_SPACE;
494 			case XK_KP_Tab:
495 				return Keyboard.KEY_TAB;
496 			case XK_KP_Enter:
497 				return Keyboard.KEY_NUMPADENTER;
498 			case XK_KP_F1:
499 				return Keyboard.KEY_F1;
500 			case XK_KP_F2:
501 				return Keyboard.KEY_F2;
502 			case XK_KP_F3:
503 				return Keyboard.KEY_F3;
504 			case XK_KP_F4:
505 				return Keyboard.KEY_F4;
506 			case XK_KP_Home:
507 				return Keyboard.KEY_HOME;
508 			case XK_KP_Left:
509 				return Keyboard.KEY_LEFT;
510 			case XK_KP_Up:
511 				return Keyboard.KEY_UP;
512 			case XK_KP_Right:
513 				return Keyboard.KEY_RIGHT;
514 			case XK_KP_Down:
515 				return Keyboard.KEY_DOWN;
516 			case XK_KP_Page_Up:
517 				return Keyboard.KEY_PRIOR;
518 			case XK_KP_Page_Down:
519 				return Keyboard.KEY_NEXT;
520 			case XK_KP_End:
521 				return Keyboard.KEY_END;
522 			case XK_KP_Insert:
523 				return Keyboard.KEY_INSERT;
524 			case XK_KP_Delete:
525 				return Keyboard.KEY_DELETE;
526 			case XK_KP_Equal:
527 				return Keyboard.KEY_NUMPADEQUALS;
528 			case XK_KP_Multiply:
529 				return Keyboard.KEY_MULTIPLY;
530 			case XK_KP_Add:
531 				return Keyboard.KEY_ADD;
532 			case XK_KP_Subtract:
533 				return Keyboard.KEY_SUBTRACT;
534 			case XK_KP_Decimal:
535 				return Keyboard.KEY_DECIMAL;
536 			case XK_KP_Divide:
537 				return Keyboard.KEY_DIVIDE;
538 
539 			case XK_KP_0:
540 				return Keyboard.KEY_NUMPAD0;
541 			case XK_KP_1:
542 				return Keyboard.KEY_NUMPAD1;
543 			case XK_KP_2:
544 				return Keyboard.KEY_NUMPAD2;
545 			case XK_KP_3:
546 				return Keyboard.KEY_NUMPAD3;
547 			case XK_KP_4:
548 				return Keyboard.KEY_NUMPAD4;
549 			case XK_KP_5:
550 				return Keyboard.KEY_NUMPAD5;
551 			case XK_KP_6:
552 				return Keyboard.KEY_NUMPAD6;
553 			case XK_KP_7:
554 				return Keyboard.KEY_NUMPAD7;
555 			case XK_KP_8:
556 				return Keyboard.KEY_NUMPAD8;
557 			case XK_KP_9:
558 				return Keyboard.KEY_NUMPAD9;
559 
560 				/*
561 				 * Auxilliary Functions; note the duplicate definitions for left and right
562 				 * function keys;  Sun keyboards and a few other manufactures have such
563 				 * function key groups on the left and/or right sides of the keyboard.
564 				 * We've not found a keyboard with more than 35 function keys total.
565 				 */
566 
567 			case XK_F1:
568 				return Keyboard.KEY_F1;
569 			case XK_F2:
570 				return Keyboard.KEY_F2;
571 			case XK_F3:
572 				return Keyboard.KEY_F3;
573 			case XK_F4:
574 				return Keyboard.KEY_F4;
575 			case XK_F5:
576 				return Keyboard.KEY_F5;
577 			case XK_F6:
578 				return Keyboard.KEY_F6;
579 			case XK_F7:
580 				return Keyboard.KEY_F7;
581 			case XK_F8:
582 				return Keyboard.KEY_F8;
583 			case XK_F9:
584 				return Keyboard.KEY_F9;
585 			case XK_F10:
586 				return Keyboard.KEY_F10;
587 			case XK_F11:
588 				return Keyboard.KEY_F11;
589 			case XK_F12:
590 				return Keyboard.KEY_F12;
591 			case XK_F13:
592 				return Keyboard.KEY_F13;
593 			case XK_F14:
594 				return Keyboard.KEY_F14;
595 			case XK_F15:
596 				return Keyboard.KEY_F15;
597 
598 				/* Modifiers */
599 
600 			case XK_Shift_L:
601 				return Keyboard.KEY_LSHIFT;
602 			case XK_Shift_R:
603 				return Keyboard.KEY_RSHIFT;
604 			case XK_Control_L:
605 				return Keyboard.KEY_LCONTROL;
606 			case XK_Control_R:
607 				return Keyboard.KEY_RCONTROL;
608 			case XK_Caps_Lock:
609 				return Keyboard.KEY_CAPITAL;
610 
611 			case XK_Meta_L:
612 				return Keyboard.KEY_LMENU;
613 			case XK_ISO_Level3_Shift:
614 			case XK_Meta_R:
615 				return Keyboard.KEY_RMENU;
616 			case XK_Alt_L:
617 				return Keyboard.KEY_LMENU;
618 			case XK_Alt_R:
619 				return Keyboard.KEY_RMENU;
620 
621 			case XK_dead_grave:
622 				return Keyboard.KEY_GRAVE;
623 			case XK_dead_circumflex:
624 				return Keyboard.KEY_CIRCUMFLEX;
625 
626 				/*
627 				 *  Latin 1
628 				 *  Byte 3 = 0
629 				 */
630 			case XK_space:
631 				return Keyboard.KEY_SPACE;
632 			case XK_apostrophe:
633 				return Keyboard.KEY_APOSTROPHE;
634 			case XK_comma:
635 				return Keyboard.KEY_COMMA;
636 			case XK_minus:
637 				return Keyboard.KEY_MINUS;
638 			case XK_period:
639 				return Keyboard.KEY_PERIOD;
640 			case XK_slash:
641 				return Keyboard.KEY_SLASH;
642 			case XK_0:
643 				return Keyboard.KEY_0;
644 			case XK_1:
645 				return Keyboard.KEY_1;
646 			case XK_2:
647 				return Keyboard.KEY_2;
648 			case XK_3:
649 				return Keyboard.KEY_3;
650 			case XK_4:
651 				return Keyboard.KEY_4;
652 			case XK_5:
653 				return Keyboard.KEY_5;
654 			case XK_6:
655 				return Keyboard.KEY_6;
656 			case XK_7:
657 				return Keyboard.KEY_7;
658 			case XK_8:
659 				return Keyboard.KEY_8;
660 			case XK_9:
661 				return Keyboard.KEY_9;
662 			case XK_colon:
663 				return Keyboard.KEY_COLON;
664 			case XK_semicolon:
665 				return Keyboard.KEY_SEMICOLON;
666 			case XK_equal:
667 				return Keyboard.KEY_EQUALS;
668 			case XK_at:
669 				return Keyboard.KEY_AT;
670 			case XK_bracketleft:
671 				return Keyboard.KEY_LBRACKET;
672 			case XK_bracketright:
673 				return Keyboard.KEY_RBRACKET;
674 			case XK_asciicircum:
675 				return Keyboard.KEY_CIRCUMFLEX;
676 			case XK_underscore:
677 				return Keyboard.KEY_UNDERLINE;
678 			case XK_grave:
679 				return Keyboard.KEY_GRAVE;
680 			case XK_a:
681 			case XK_A:
682 				return Keyboard.KEY_A;
683 			case XK_b:
684 			case XK_B:
685 				return Keyboard.KEY_B;
686 			case XK_c:
687 			case XK_C:
688 				return Keyboard.KEY_C;
689 			case XK_d:
690 			case XK_D:
691 				return Keyboard.KEY_D;
692 			case XK_e:
693 			case XK_E:
694 				return Keyboard.KEY_E;
695 			case XK_f:
696 			case XK_F:
697 				return Keyboard.KEY_F;
698 			case XK_g:
699 			case XK_G:
700 				return Keyboard.KEY_G;
701 			case XK_h:
702 			case XK_H:
703 				return Keyboard.KEY_H;
704 			case XK_i:
705 			case XK_I:
706 				return Keyboard.KEY_I;
707 			case XK_j:
708 			case XK_J:
709 				return Keyboard.KEY_J;
710 			case XK_k:
711 			case XK_K:
712 				return Keyboard.KEY_K;
713 			case XK_l:
714 			case XK_L:
715 				return Keyboard.KEY_L;
716 			case XK_m:
717 			case XK_M:
718 				return Keyboard.KEY_M;
719 			case XK_n:
720 			case XK_N:
721 				return Keyboard.KEY_N;
722 			case XK_o:
723 			case XK_O:
724 				return Keyboard.KEY_O;
725 			case XK_p:
726 			case XK_P:
727 				return Keyboard.KEY_P;
728 			case XK_q:
729 			case XK_Q:
730 				return Keyboard.KEY_Q;
731 			case XK_r:
732 			case XK_R:
733 				return Keyboard.KEY_R;
734 			case XK_s:
735 			case XK_S:
736 				return Keyboard.KEY_S;
737 			case XK_t:
738 			case XK_T:
739 				return Keyboard.KEY_T;
740 			case XK_u:
741 			case XK_U:
742 				return Keyboard.KEY_U;
743 			case XK_v:
744 			case XK_V:
745 				return Keyboard.KEY_V;
746 			case XK_w:
747 			case XK_W:
748 				return Keyboard.KEY_W;
749 			case XK_x:
750 			case XK_X:
751 				return Keyboard.KEY_X;
752 			case XK_y:
753 			case XK_Y:
754 				return Keyboard.KEY_Y;
755 			case XK_z:
756 			case XK_Z:
757 				return Keyboard.KEY_Z;
758 			default:
759 				return Keyboard.KEY_NONE;
760 		}
761 	}
762 
763 }
764