1/*
2 * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26/*
27 * yan:
28 * This table looks like C header because
29 * (1) I use actual headers to make it;
30 * (2) syntax is nicely highlighted in my editor.
31 * Processed will be all lines started with 0x; 0x0000-started lines will
32 * be skipped though.
33 * Also java code will be copied to a resulting file.
34 *
35 * 0x0000 unicode means here either there's no equivalent to a keysym
36 * or we just skip it from the table for now because i.e. we'll never use
37 * the conversion in our workflow.
38 *
39 */
40
41tojava /*
42tojava  * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
43tojava  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44tojava  *
45tojava  * This code is free software; you can redistribute it and/or modify it
46tojava  * under the terms of the GNU General Public License version 2 only, as
47tojava  * published by the Free Software Foundation.  Oracle designates this
48tojava  * particular file as subject to the "Classpath" exception as provided
49tojava  * by Oracle in the LICENSE file that accompanied this code.
50tojava  *
51tojava  * This code is distributed in the hope that it will be useful, but WITHOUT
52tojava  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
53tojava  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
54tojava  * version 2 for more details (a copy is included in the LICENSE file that
55tojava  * accompanied this code).
56tojava  *
57tojava  * You should have received a copy of the GNU General Public License version
58tojava  * 2 along with this work; if not, write to the Free Software Foundation,
59tojava  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
60tojava  *
61tojava  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
62tojava  * or visit www.oracle.com if you need additional information or have any
63tojava  * questions.
64tojava  */
65tojava
66tojava package sun.awt.X11;
67tojava import java.util.Hashtable;
68tojava import jdk.internal.misc.Unsafe;
69tojava
70tojava import sun.util.logging.PlatformLogger;
71tojava
72tojava public class XKeysym {
73tojava
74tojava     public static void main( String args[] ) {
75tojava        System.out.println( "Cyrillc zhe:"+convertKeysym(0x06d6, 0));
76tojava        System.out.println( "Arabic sheen:"+convertKeysym(0x05d4, 0));
77tojava        System.out.println( "Latin a breve:"+convertKeysym(0x01e3, 0));
78tojava        System.out.println( "Latin f:"+convertKeysym(0x066, 0));
79tojava        System.out.println( "Backspace:"+Integer.toHexString(convertKeysym(0xff08, 0)));
80tojava        System.out.println( "Ctrl+f:"+Integer.toHexString(convertKeysym(0x066, XConstants.ControlMask)));
81tojava     }
82tojava
83tojava     private XKeysym() {}
84tojava
85tojava     static class Keysym2JavaKeycode  {
86tojava         int jkeycode;
87tojava         int keyLocation;
88tojava         int getJavaKeycode() {
89tojava             return jkeycode;
90tojava         }
91tojava         int getKeyLocation() {
92tojava             return keyLocation;
93tojava         }
94tojava         Keysym2JavaKeycode(int jk, int loc) {
95tojava             jkeycode = jk;
96tojava             keyLocation = loc;
97tojava         }
98tojava     };
99tojava     private static Unsafe unsafe = XlibWrapper.unsafe;
100tojava     static Hashtable<Long, Keysym2JavaKeycode>  keysym2JavaKeycodeHash = new Hashtable<Long, Keysym2JavaKeycode>();
101tojava     static Hashtable<Long, Character> keysym2UCSHash = new Hashtable<Long, Character>();
102tojava     static Hashtable<Long, Long> uppercaseHash = new Hashtable<Long, Long>();
103tojava     // TODO: or not to do: add reverse lookup javakeycode2keysym,
104tojava     // for robot only it seems to me. After that, we can remove lookup table
105tojava     // from XWindow.c altogether.
106tojava     // Another use for reverse lookup: query keyboard state, for some keys.
107tojava     static Hashtable<Integer, Long> javaKeycode2KeysymHash = new Hashtable<Integer, Long>();
108tojava     static long keysym_lowercase = unsafe.allocateMemory(Native.getLongSize());
109tojava     static long keysym_uppercase = unsafe.allocateMemory(Native.getLongSize());
110tojava     static Keysym2JavaKeycode kanaLock = new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_KANA_LOCK,
111tojava                                                                 java.awt.event.KeyEvent.KEY_LOCATION_STANDARD);
112tojava     private static PlatformLogger keyEventLog = PlatformLogger.getLogger("sun.awt.X11.kye.XKeysym");
113tojava     public static char convertKeysym( long ks, int state ) {
114tojava
115tojava         /* First check for Latin-1 characters (1:1 mapping) */
116tojava         if ((ks >= 0x0020 && ks <= 0x007e) ||
117tojava             (ks >= 0x00a0 && ks <= 0x00ff)) {
118tojava             if( (state & XConstants.ControlMask) != 0 ) {
119tojava                 if ((ks >= 'A' && ks <= ']') || (ks == '_') ||
120tojava                     (ks >= 'a' && ks <='z')) {
121tojava                     ks &= 0x1F;
122tojava                 }
123tojava             }
124tojava             return (char)ks;
125tojava         }
126tojava
127tojava         /* XXX: Also check for directly encoded 24-bit UCS characters:
128tojava          */
129tojava         if ((ks & 0xff000000) == 0x01000000)
130tojava           return (char)(ks & 0x00ffffff);
131tojava
132tojava         Character ch = keysym2UCSHash.get(ks);
133tojava         return ch == null ? (char)0 : ch.charValue();
134tojava     }
135tojava     static long xkeycode2keysym_noxkb(XKeyEvent ev, int ndx) {
136tojava         XToolkit.awtLock();
137tojava         try {
138tojava             return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx);
139tojava         } finally {
140tojava             XToolkit.awtUnlock();
141tojava         }
142tojava     }
143tojava     static long xkeycode2keysym_xkb(XKeyEvent ev, int ndx) {
144tojava         XToolkit.awtLock();
145tojava         try {
146tojava             int mods = ev.get_state();
147tojava             if ((ndx == 0) && ((mods & XConstants.ShiftMask) != 0)) {
148tojava                 // I don't know all possible meanings of 'ndx' in case of XKB
149tojava                 // and don't want to speculate. But this particular case
150tojava                 // clearly means that caller needs a so called primary keysym.
151tojava                 mods ^= XConstants.ShiftMask;
152tojava             }
153tojava             long kbdDesc = XToolkit.getXKBKbdDesc();
154tojava             if( kbdDesc != 0 ) {
155tojava                 XlibWrapper.XkbTranslateKeyCode(kbdDesc, ev.get_keycode(),
156tojava                        mods, XlibWrapper.iarg1, XlibWrapper.larg3);
157tojava             }else{
158tojava                 // xkb resources already gone
159tojava                 keyEventLog.fine("Thread race: Toolkit shutdown before the end of a key event processing.");
160tojava                 return 0;
161tojava             }
162tojava             //XXX unconsumed modifiers?
163tojava             return Native.getLong(XlibWrapper.larg3);
164tojava         } finally {
165tojava             XToolkit.awtUnlock();
166tojava         }
167tojava     }
168tojava     static long xkeycode2keysym(XKeyEvent ev, int ndx) {
169tojava         XToolkit.awtLock();
170tojava         try {
171tojava             if (XToolkit.canUseXKBCalls()) {
172tojava                 return xkeycode2keysym_xkb(ev, ndx);
173tojava             }else{
174tojava                 return xkeycode2keysym_noxkb(ev, ndx);
175tojava             }
176tojava         } finally {
177tojava             XToolkit.awtUnlock();
178tojava         }
179tojava     }
180tojava     static long xkeycode2primary_keysym(XKeyEvent ev) {
181tojava         return xkeycode2keysym(ev, 0);
182tojava     }
183tojava     public static boolean isKPEvent( XKeyEvent ev )
184tojava     {
185tojava         // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event.
186tojava         // Otherwise, it is [1].
187tojava         int ndx = XToolkit.isXsunKPBehavior() &&
188tojava                   ! XToolkit.isXKBenabled() ? 2 : 1;
189tojava         // Even if XKB is enabled, we have another problem: some symbol tables (e.g. cz) force
190tojava         // a regular comma instead of KP_comma for a decimal separator. Result is,
191tojava         // bugs like 6454041. So, we will try for keypadness  a keysym with ndx==0 as well.
192tojava         XToolkit.awtLock();
193tojava         try {
194tojava             return (XlibWrapper.IsKeypadKey(
195tojava                 XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx ) ) ||
196tojava                    XlibWrapper.IsKeypadKey(
197tojava                 XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), 0 ) ));
198tojava         } finally {
199tojava             XToolkit.awtUnlock();
200tojava         }
201tojava     }
202tojava     /**
203tojava         Return uppercase keysym correspondent to a given keysym.
204tojava         If input keysym does not belong to any lower/uppercase pair, return -1.
205tojava     */
206tojava     public static long getUppercaseAlphabetic( long keysym ) {
207tojava         long lc = -1;
208tojava         long uc = -1;
209tojava         Long stored =  uppercaseHash.get(keysym);
210tojava         if (stored != null ) {
211tojava             return stored.longValue();
212tojava         }
213tojava         XToolkit.awtLock();
214tojava         try {
215tojava             XlibWrapper.XConvertCase(keysym, keysym_lowercase, keysym_uppercase);
216tojava             lc = Native.getLong(keysym_lowercase);
217tojava             uc = Native.getLong(keysym_uppercase);
218tojava             if (lc == uc) {
219tojava                 //not applicable
220tojava                 uc = -1;
221tojava             }
222tojava             uppercaseHash.put(keysym, uc);
223tojava         } finally {
224tojava             XToolkit.awtUnlock();
225tojava         }
226tojava         return uc;
227tojava     }
228tojava     /**
229tojava         Get a keypad keysym derived from a keycode.
230tojava         I do not check if this is a keypad event, I just presume it.
231tojava     */
232tojava     private static long getKeypadKeysym( XKeyEvent ev ) {
233tojava         int ndx = 0;
234tojava         long keysym = XConstants.NoSymbol;
235tojava         if( XToolkit.isXsunKPBehavior() &&
236tojava             ! XToolkit.isXKBenabled() ) {
237tojava             if( (ev.get_state() & XConstants.ShiftMask) != 0 ) { // shift modifier is on
238tojava                 ndx = 3;
239tojava                 keysym = xkeycode2keysym(ev, ndx);
240tojava             } else {
241tojava                 ndx = 2;
242tojava                 keysym = xkeycode2keysym(ev, ndx);
243tojava             }
244tojava         } else {
245tojava             if( (ev.get_state() & XConstants.ShiftMask) != 0 || // shift modifier is on
246tojava                 ((ev.get_state() & XConstants.LockMask) != 0 && // lock modifier is on
247tojava                  (XToolkit.modLockIsShiftLock != 0)) ) {     // it is interpreted as ShiftLock
248tojava                 ndx = 0;
249tojava                 keysym = xkeycode2keysym(ev, ndx);
250tojava             } else {
251tojava                 ndx = 1;
252tojava                 keysym = xkeycode2keysym(ev, ndx);
253tojava             }
254tojava         }
255tojava         return keysym;
256tojava     }
257tojava
258tojava     /**
259tojava         Return java.awt.KeyEvent constant meaning (Java) keycode, derived from X keysym.
260tojava         Some keysyms maps to more than one keycode, these would require extra processing.
261tojava     */
262tojava     static Keysym2JavaKeycode getJavaKeycode( long keysym ) {
263tojava         if(keysym == XKeySymConstants.XK_Mode_switch){
264tojava            /* XK_Mode_switch on solaris maps either to VK_ALT_GRAPH (default) or VK_KANA_LOCK */
265tojava            if( XToolkit.isKanaKeyboard() ) {
266tojava                return kanaLock;
267tojava            }
268tojava         }else if(keysym == XKeySymConstants.XK_L1){
269tojava            /* if it is Sun keyboard, trick hash to return VK_STOP else VK_F11 (default) */
270tojava            if( XToolkit.isSunKeyboard() ) {
271tojava                keysym = XKeySymConstants.SunXK_Stop;
272tojava            }
273tojava         }else if(keysym == XKeySymConstants.XK_L2) {
274tojava            /* if it is Sun keyboard, trick hash to return VK_AGAIN else VK_F12 (default) */
275tojava            if( XToolkit.isSunKeyboard() ) {
276tojava                keysym = XKeySymConstants.SunXK_Again;
277tojava            }
278tojava         }
279tojava
280tojava         return  keysym2JavaKeycodeHash.get( keysym );
281tojava     }
282tojava     /**
283tojava         Return java.awt.KeyEvent constant meaning (Java) keycode, derived from X Window KeyEvent.
284tojava         Algorithm is, extract via XKeycodeToKeysym  a proper keysym according to Xlib spec rules and
285tojava         err exceptions, then search a java keycode in a table.
286tojava     */
287tojava     static Keysym2JavaKeycode getJavaKeycode( XKeyEvent ev ) {
288tojava         // get from keysym2JavaKeycodeHash.
289tojava         long keysym = XConstants.NoSymbol;
290tojava         int ndx = 0;
291tojava         if( (ev.get_state() & XToolkit.numLockMask) != 0 &&
292tojava              isKPEvent(ev)) {
293tojava             keysym = getKeypadKeysym( ev );
294tojava         } else {
295tojava             // we only need primary-layer keysym to derive a java keycode.
296tojava             ndx = 0;
297tojava             keysym = xkeycode2keysym(ev, ndx);
298tojava         }
299tojava
300tojava         Keysym2JavaKeycode jkc = getJavaKeycode( keysym );
301tojava         return jkc;
302tojava     }
303tojava     static int getJavaKeycodeOnly( XKeyEvent ev ) {
304tojava         Keysym2JavaKeycode jkc = getJavaKeycode( ev );
305tojava         return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode();
306tojava     }
307tojava     /**
308tojava      * Return an integer java keycode apprx as it was before extending keycodes range.
309tojava      * This call would ignore for instance XKB and process whatever is on the bottom
310tojava      * of keysym stack. Result will not depend on actual locale, will differ between
311tojava      * dual/multiple keyboard setup systems (e.g. English+Russian vs French+Russian)
312tojava      * but will be someway compatible with old releases.
313tojava      */
314tojava     static int getLegacyJavaKeycodeOnly( XKeyEvent ev ) {
315tojava         long keysym = XConstants.NoSymbol;
316tojava         int ndx = 0;
317tojava         if( (ev.get_state() & XToolkit.numLockMask) != 0 &&
318tojava              isKPEvent(ev)) {
319tojava             keysym = getKeypadKeysym( ev );
320tojava         } else {
321tojava             // we only need primary-layer keysym to derive a java keycode.
322tojava             ndx = 0;
323tojava             keysym = xkeycode2keysym_noxkb(ev, ndx);
324tojava         }
325tojava         Keysym2JavaKeycode jkc = getJavaKeycode( keysym );
326tojava         return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode();
327tojava     }
328tojava     static long javaKeycode2Keysym( int jkey ) {
329tojava         Long ks = javaKeycode2KeysymHash.get( jkey );
330tojava         return  (ks == null ? 0 : ks.longValue());
331tojava     }
332tojava     /**
333tojava         Return keysym derived from a keycode and modifiers.
334tojava         Usually an input method does this. However non-system input methods (e.g. Java IMs) do not.
335tojava         For rules, see "Xlib - C Language X Interface",
336tojava                         MIT X Consortium Standard
337tojava                         X Version 11, Release 6
338tojava                         Ch. 12.7
339tojava         XXX TODO: or maybe not to do: process Mode Lock and therefore
340tojava         not only 0-th and 1-st but 2-nd and 3-rd keysyms for a keystroke.
341tojava     */
342tojava     static long getKeysym( XKeyEvent ev ) {
343tojava         long keysym = XConstants.NoSymbol;
344tojava         long uppercaseKeysym = XConstants.NoSymbol;
345tojava         int  ndx = 0;
346tojava         boolean getUppercase = false;
347tojava         if ((ev.get_state() & XToolkit.numLockMask) != 0 &&
348tojava              isKPEvent(ev)) {
349tojava             keysym = getKeypadKeysym( ev );
350tojava         } else {
351tojava             // XXX: at this point, anything in keysym[23] is ignored.
352tojava             //
353tojava             // Shift & Lock are off ===> ndx = 0;
354tojava             // Shift off & Lock on & Lock is CapsLock ===> ndx = 0;
355tojava             //       if keysym[ndx] is lowecase alphabetic, then corresp. uppercase used.
356tojava             // Shift on & Lock on & Lock is CapsLock ===> ndx == 1;
357tojava             //       if keysym[ndx] is lowecase alphabetic, then corresp. uppercase used.
358tojava             // Shift on || (Lock on & Lock is ShiftLock) ===> ndx = 1.
359tojava             if ((ev.get_state() & XConstants.ShiftMask) == 0) {     // shift is off
360tojava                 if ((ev.get_state() & XConstants.LockMask) == 0 ) {  // lock is off
361tojava                     ndx = 0;
362tojava                     getUppercase = false;
363tojava                 } else if ((ev.get_state() & XConstants.LockMask) != 0 && // lock is on
364tojava                      (XToolkit.modLockIsShiftLock == 0)) { // lock is capslock
365tojava                     ndx = 0;
366tojava                     getUppercase = true;
367tojava                 } else if ((ev.get_state() & XConstants.LockMask) != 0 && // lock is on
368tojava                      (XToolkit.modLockIsShiftLock != 0)) { // lock is shift lock
369tojava                     ndx = 1;
370tojava                     getUppercase = false;
371tojava                 }
372tojava             } else { // shift on
373tojava                 if ((ev.get_state() & XConstants.LockMask) != 0 && // lock is on
374tojava                      (XToolkit.modLockIsShiftLock == 0)) { // lock is capslock
375tojava                     ndx = 1;
376tojava                     getUppercase = true;
377tojava                 } else {
378tojava                     ndx = 1;
379tojava                     getUppercase = false;
380tojava                 }
381tojava             }
382tojava             keysym = xkeycode2keysym(ev, ndx);
383tojava             if (getUppercase && (uppercaseKeysym =  getUppercaseAlphabetic( keysym )) != -1) {
384tojava                 keysym = uppercaseKeysym;
385tojava             }
386tojava         }
387tojava         return keysym;
388tojava     }
389tojava
390tojava     static {
391
392/***********************************************************
393Copyright 1987, 1994, 1998  The Open Group
394
395Permission to use, copy, modify, distribute, and sell this software and its
396documentation for any purpose is hereby granted without fee, provided that
397the above copyright notice appear in all copies and that both that
398copyright notice and this permission notice appear in supporting
399documentation.
400
401The above copyright notice and this permission notice shall be included
402in all copies or substantial portions of the Software.
403
404THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
405OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
406MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
407IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
408OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
409ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
410OTHER DEALINGS IN THE SOFTWARE.
411
412Except as contained in this notice, the name of The Open Group shall
413not be used in advertising or otherwise to promote the sale, use or
414other dealings in this Software without prior written authorization
415from The Open Group.
416
417
418Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts
419
420                        All Rights Reserved
421
422Permission to use, copy, modify, and distribute this software and its
423documentation for any purpose and without fee is hereby granted,
424provided that the above copyright notice appear in all copies and that
425both that copyright notice and this permission notice appear in
426supporting documentation, and that the name of Digital not be
427used in advertising or publicity pertaining to distribution of the
428software without specific, written prior permission.
429
430DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
431ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
432DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
433ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
434WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
435ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
436SOFTWARE.
437
438******************************************************************/
439
440/*
441 * TTY Functions, cleverly chosen to map to ascii, for convenience of
442 * programming, but could have been arbitrary (at the cost of lookup
443 * tables in client code.
444 */
445
4460x0008 #define XK_BackSpace        0xFF08    /* back space, back char */
4470x0009 #define XK_Tab            0xFF09
4480x000a #define XK_Linefeed        0xFF0A    /* Linefeed, LF */
4490x000b #define XK_Clear        0xFF0B
450/*XXX map to 0a instead of 0d - why? for some good reason I hope */
4510x000a #define XK_Return        0xFF0D    /* Return, enter */
4520x0000 #define XK_Pause        0xFF13    /* Pause, hold */
4530x0000 #define XK_Scroll_Lock        0xFF14
4540x0000 #define XK_Sys_Req        0xFF15
4550x001B #define XK_Escape        0xFF1B
4560x007F #define XK_Delete        0xFFFF    /* Delete, rubout */
457
458
459
460/* International & multi-key character composition */
461
4620x0000 #define XK_Multi_key        0xFF20  /* Multi-key character compose */
4630x0000 #define XK_Codeinput        0xFF37
4640x0000 #define XK_SingleCandidate    0xFF3C
4650x0000 #define XK_MultipleCandidate    0xFF3D
4660x0000 #define XK_PreviousCandidate    0xFF3E
467
468/* Japanese keyboard support */
469
4700x0000 #define XK_Kanji        0xFF21    /* Kanji, Kanji convert */
4710x0000 #define XK_Muhenkan        0xFF22  /* Cancel Conversion */
4720x0000 #define XK_Henkan_Mode        0xFF23  /* Start/Stop Conversion */
4730x0000 #define XK_Henkan        0xFF23  /* Alias for Henkan_Mode */
4740x0000 #define XK_Romaji        0xFF24  /* to Romaji */
4750x0000 #define XK_Hiragana        0xFF25  /* to Hiragana */
4760x0000 #define XK_Katakana        0xFF26  /* to Katakana */
4770x0000 #define XK_Hiragana_Katakana    0xFF27  /* Hiragana/Katakana toggle */
4780x0000 #define XK_Zenkaku        0xFF28  /* to Zenkaku */
4790x0000 #define XK_Hankaku        0xFF29  /* to Hankaku */
4800x0000 #define XK_Zenkaku_Hankaku    0xFF2A  /* Zenkaku/Hankaku toggle */
4810x0000 #define XK_Touroku        0xFF2B  /* Add to Dictionary */
4820x0000 #define XK_Massyo        0xFF2C  /* Delete from Dictionary */
4830x0000 #define XK_Kana_Lock        0xFF2D  /* Kana Lock */
4840x0000 #define XK_Kana_Shift        0xFF2E  /* Kana Shift */
4850x0000 #define XK_Eisu_Shift        0xFF2F  /* Alphanumeric Shift */
4860x0000 #define XK_Eisu_toggle        0xFF30  /* Alphanumeric toggle */
4870x0000 #define XK_Kanji_Bangou        0xFF37  /* Codeinput */
4880x0000 #define XK_Zen_Koho        0xFF3D    /* Multiple/All Candidate(s) */
4890x0000 #define XK_Mae_Koho        0xFF3E    /* Previous Candidate */
490
491/* Cursor control & motion */
492
4930x0000 #define XK_Home            0xFF50
4940x0000 #define XK_Left            0xFF51    /* Move left, left arrow */
4950x0000 #define XK_Up            0xFF52    /* Move up, up arrow */
4960x0000 #define XK_Right        0xFF53    /* Move right, right arrow */
4970x0000 #define XK_Down            0xFF54    /* Move down, down arrow */
4980x0000 #define XK_Prior        0xFF55    /* Prior, previous */
4990x0000 #define XK_Page_Up        0xFF55
5000x0000 #define XK_Next            0xFF56    /* Next */
5010x0000 #define XK_Page_Down        0xFF56
5020x0000 #define XK_End            0xFF57    /* EOL */
5030x0000 #define XK_Begin        0xFF58    /* BOL */
504
505
506/* Misc Functions */
507
5080x0000 #define XK_Select        0xFF60    /* Select, mark */
5090x0000 #define XK_Print        0xFF61
5100x0000 #define XK_Execute        0xFF62    /* Execute, run, do */
5110x0000 #define XK_Insert        0xFF63    /* Insert, insert here */
5120x0000 #define XK_Undo            0xFF65    /* Undo, oops */
5130x0000 #define XK_Redo            0xFF66    /* redo, again */
5140x0000 #define XK_Menu            0xFF67
5150x0000 #define XK_Find            0xFF68    /* Find, search */
5160x0000 #define XK_Cancel        0xFF69    /* Cancel, stop, abort, exit */
5170x0000 #define XK_Help            0xFF6A    /* Help */
5180x0000 #define XK_Break        0xFF6B
5190x0000 #define XK_Mode_switch        0xFF7E    /* Character set switch */
5200x0000 #define XK_script_switch        0xFF7E  /* Alias for mode_switch */
5210x0000 #define XK_Num_Lock        0xFF7F
522
523/* Keypad Functions, keypad numbers cleverly chosen to map to ascii */
524
5250x0020 #define XK_KP_Space        0xFF80    /* space */
5260x0009 #define XK_KP_Tab        0xFF89
5270x000A #define XK_KP_Enter        0xFF8D    /* enter: note that it is again 0A */
5280x0000 #define XK_KP_F1        0xFF91    /* PF1, KP_A, ... */
5290x0000 #define XK_KP_F2        0xFF92
5300x0000 #define XK_KP_F3        0xFF93
5310x0000 #define XK_KP_F4        0xFF94
5320x0000 #define XK_KP_Home        0xFF95
5330x0000 #define XK_KP_Left        0xFF96
5340x0000 #define XK_KP_Up        0xFF97
5350x0000 #define XK_KP_Right        0xFF98
5360x0000 #define XK_KP_Down        0xFF99
5370x0000 #define XK_KP_Prior        0xFF9A
5380x0000 #define XK_KP_Page_Up        0xFF9A
5390x0000 #define XK_KP_Next        0xFF9B
5400x0000 #define XK_KP_Page_Down        0xFF9B
5410x0000 #define XK_KP_End        0xFF9C
5420x0000 #define XK_KP_Begin        0xFF9D
5430x0000 #define XK_KP_Insert        0xFF9E
5440x007F #define XK_KP_Delete        0xFF9F
5450x003d #define XK_KP_Equal        0xFFBD    /* equals */
5460x002a #define XK_KP_Multiply        0xFFAA
5470x002b #define XK_KP_Add        0xFFAB
5480x002c #define XK_KP_Separator        0xFFAC    /* separator, often comma */
5490x002d #define XK_KP_Subtract        0xFFAD
5500x002e #define XK_KP_Decimal        0xFFAE
5510x002f #define XK_KP_Divide        0xFFAF
552
5530x0030 #define XK_KP_0            0xFFB0
5540x0031 #define XK_KP_1            0xFFB1
5550x0032 #define XK_KP_2            0xFFB2
5560x0033 #define XK_KP_3            0xFFB3
5570x0034 #define XK_KP_4            0xFFB4
5580x0035 #define XK_KP_5            0xFFB5
5590x0036 #define XK_KP_6            0xFFB6
5600x0037 #define XK_KP_7            0xFFB7
5610x0038 #define XK_KP_8            0xFFB8
5620x0039 #define XK_KP_9            0xFFB9
563
564
565
566/*
567 * Auxilliary Functions; note the duplicate definitions for left and right
568 * function keys;  Sun keyboards and a few other manufactures have such
569 * function key groups on the left and/or right sides of the keyboard.
570 * We've not found a keyboard with more than 35 function keys total.
571 */
572
5730x0000 #define XK_F1            0xFFBE
5740x0000 #define XK_F2            0xFFBF
5750x0000 #define XK_F3            0xFFC0
5760x0000 #define XK_F4            0xFFC1
5770x0000 #define XK_F5            0xFFC2
5780x0000 #define XK_F6            0xFFC3
5790x0000 #define XK_F7            0xFFC4
5800x0000 #define XK_F8            0xFFC5
5810x0000 #define XK_F9            0xFFC6
5820x0000 #define XK_F10            0xFFC7
5830x0000 #define XK_F11            0xFFC8
5840x0000 #define XK_L1            0xFFC8
5850x0000 #define XK_F12            0xFFC9
5860x0000 #define XK_L2            0xFFC9
5870x0000 #define XK_F13            0xFFCA
5880x0000 #define XK_L3            0xFFCA
5890x0000 #define XK_F14            0xFFCB
5900x0000 #define XK_L4            0xFFCB
5910x0000 #define XK_F15            0xFFCC
5920x0000 #define XK_L5            0xFFCC
5930x0000 #define XK_F16            0xFFCD
5940x0000 #define XK_L6            0xFFCD
5950x0000 #define XK_F17            0xFFCE
5960x0000 #define XK_L7            0xFFCE
5970x0000 #define XK_F18            0xFFCF
5980x0000 #define XK_L8            0xFFCF
5990x0000 #define XK_F19            0xFFD0
6000x0000 #define XK_L9            0xFFD0
6010x0000 #define XK_F20            0xFFD1
6020x0000 #define XK_L10            0xFFD1
6030x0000 #define XK_F21            0xFFD2
6040x0000 #define XK_R1            0xFFD2
6050x0000 #define XK_F22            0xFFD3
6060x0000 #define XK_R2            0xFFD3
6070x0000 #define XK_F23            0xFFD4
6080x0000 #define XK_R3            0xFFD4
6090x0000 #define XK_F24            0xFFD5
6100x0000 #define XK_R4            0xFFD5
6110x0000 #define XK_F25            0xFFD6
6120x0000 #define XK_R5            0xFFD6
6130x0000 #define XK_F26            0xFFD7
6140x0000 #define XK_R6            0xFFD7
6150x0000 #define XK_F27            0xFFD8
6160x0000 #define XK_R7            0xFFD8
6170x0000 #define XK_F28            0xFFD9
6180x0000 #define XK_R8            0xFFD9
6190x0000 #define XK_F29            0xFFDA
6200x0000 #define XK_R9            0xFFDA
6210x0000 #define XK_F30            0xFFDB
6220x0000 #define XK_R10            0xFFDB
6230x0000 #define XK_F31            0xFFDC
6240x0000 #define XK_R11            0xFFDC
6250x0000 #define XK_F32            0xFFDD
6260x0000 #define XK_R12            0xFFDD
6270x0000 #define XK_F33            0xFFDE
6280x0000 #define XK_R13            0xFFDE
6290x0000 #define XK_F34            0xFFDF
6300x0000 #define XK_R14            0xFFDF
6310x0000 #define XK_F35            0xFFE0
6320x0000 #define XK_R15            0xFFE0
633
634/* Modifiers */
635
6360x0000 #define XK_Shift_L        0xFFE1    /* Left shift */
6370x0000 #define XK_Shift_R        0xFFE2    /* Right shift */
6380x0000 #define XK_Control_L        0xFFE3    /* Left control */
6390x0000 #define XK_Control_R        0xFFE4    /* Right control */
6400x0000 #define XK_Caps_Lock        0xFFE5    /* Caps lock */
6410x0000 #define XK_Shift_Lock        0xFFE6    /* Shift lock */
642
6430x0000 #define XK_Meta_L        0xFFE7    /* Left meta */
6440x0000 #define XK_Meta_R        0xFFE8    /* Right meta */
6450x0000 #define XK_Alt_L        0xFFE9    /* Left alt */
6460x0000 #define XK_Alt_R        0xFFEA    /* Right alt */
6470x0000 #define XK_Super_L        0xFFEB    /* Left super */
6480x0000 #define XK_Super_R        0xFFEC    /* Right super */
6490x0000 #define XK_Hyper_L        0xFFED    /* Left hyper */
6500x0000 #define XK_Hyper_R        0xFFEE    /* Right hyper */
651#endif /* XK_MISCELLANY */
652
653/*
654 * ISO 9995 Function and Modifier Keys
655 * Byte 3 = 0xFE
656 */
657
658#ifdef XK_XKB_KEYS
6590x0000 #define    XK_ISO_Lock                    0xFE01
6600x0000 #define    XK_ISO_Level2_Latch                0xFE02
6610x0000 #define    XK_ISO_Level3_Shift                0xFE03
6620x0000 #define    XK_ISO_Level3_Latch                0xFE04
6630x0000 #define    XK_ISO_Level3_Lock                0xFE05
6640x0000 #define    XK_ISO_Group_Shift        0xFF7E    /* Alias for mode_switch */
6650x0000 #define    XK_ISO_Group_Latch                0xFE06
6660x0000 #define    XK_ISO_Group_Lock                0xFE07
6670x0000 #define    XK_ISO_Next_Group                0xFE08
6680x0000 #define    XK_ISO_Next_Group_Lock                0xFE09
6690x0000 #define    XK_ISO_Prev_Group                0xFE0A
6700x0000 #define    XK_ISO_Prev_Group_Lock                0xFE0B
6710x0000 #define    XK_ISO_First_Group                0xFE0C
6720x0000 #define    XK_ISO_First_Group_Lock                0xFE0D
6730x0000 #define    XK_ISO_Last_Group                0xFE0E
6740x0000 #define    XK_ISO_Last_Group_Lock                0xFE0F
675
6760x0009 #define    XK_ISO_Left_Tab                    0xFE20
6770x0000 #define    XK_ISO_Move_Line_Up                0xFE21
6780x0000 #define    XK_ISO_Move_Line_Down                0xFE22
6790x0000 #define    XK_ISO_Partial_Line_Up                0xFE23
6800x0000 #define    XK_ISO_Partial_Line_Down            0xFE24
6810x0000 #define    XK_ISO_Partial_Space_Left            0xFE25
6820x0000 #define    XK_ISO_Partial_Space_Right            0xFE26
6830x0000 #define    XK_ISO_Set_Margin_Left                0xFE27
6840x0000 #define    XK_ISO_Set_Margin_Right                0xFE28
6850x0000 #define    XK_ISO_Release_Margin_Left            0xFE29
6860x0000 #define    XK_ISO_Release_Margin_Right            0xFE2A
6870x0000 #define    XK_ISO_Release_Both_Margins            0xFE2B
6880x0000 #define    XK_ISO_Fast_Cursor_Left                0xFE2C
6890x0000 #define    XK_ISO_Fast_Cursor_Right            0xFE2D
6900x0000 #define    XK_ISO_Fast_Cursor_Up                0xFE2E
6910x0000 #define    XK_ISO_Fast_Cursor_Down                0xFE2F
6920x0000 #define    XK_ISO_Continuous_Underline            0xFE30
6930x0000 #define    XK_ISO_Discontinuous_Underline            0xFE31
6940x0000 #define    XK_ISO_Emphasize                0xFE32
6950x0000 #define    XK_ISO_Center_Object                0xFE33
6960x0000 #define    XK_ISO_Enter                    0xFE34
697
6980x02CB #define    XK_dead_grave                    0xFE50
6990x02CA #define    XK_dead_acute                    0xFE51
7000x02C6 #define    XK_dead_circumflex                0xFE52
7010x02DC #define    XK_dead_tilde                    0xFE53
7020x02C9 #define    XK_dead_macron                    0xFE54
7030x02D8 #define    XK_dead_breve                    0xFE55
7040x02D9 #define    XK_dead_abovedot                0xFE56
7050x00A8 #define    XK_dead_diaeresis                0xFE57
7060x02DA #define    XK_dead_abovering                0xFE58
7070x02DD #define    XK_dead_doubleacute                0xFE59
7080x02C7 #define    XK_dead_caron                    0xFE5A
7090x00B8 #define    XK_dead_cedilla                    0xFE5B
7100x02DB #define    XK_dead_ogonek                    0xFE5C
7110x0269 #define    XK_dead_iota                    0xFE5D
7120x3099 #define    XK_dead_voiced_sound                0xFE5E
7130x309A #define    XK_dead_semivoiced_sound            0xFE5F
7140x0323 #define    XK_dead_belowdot                0xFE60
7150x0321 #define XK_dead_hook                    0xFE61
7160x031B #define XK_dead_horn                    0xFE62
717
7180x0000 #define    XK_First_Virtual_Screen                0xFED0
7190x0000 #define    XK_Prev_Virtual_Screen                0xFED1
7200x0000 #define    XK_Next_Virtual_Screen                0xFED2
7210x0000 #define    XK_Last_Virtual_Screen                0xFED4
7220x0000 #define    XK_Terminate_Server                0xFED5
723
7240x0000 #define    XK_AccessX_Enable                0xFE70
7250x0000 #define    XK_AccessX_Feedback_Enable            0xFE71
7260x0000 #define    XK_RepeatKeys_Enable                0xFE72
7270x0000 #define    XK_SlowKeys_Enable                0xFE73
7280x0000 #define    XK_BounceKeys_Enable                0xFE74
7290x0000 #define    XK_StickyKeys_Enable                0xFE75
7300x0000 #define    XK_MouseKeys_Enable                0xFE76
7310x0000 #define    XK_MouseKeys_Accel_Enable            0xFE77
7320x0000 #define    XK_Overlay1_Enable                0xFE78
7330x0000 #define    XK_Overlay2_Enable                0xFE79
7340x0000 #define    XK_AudibleBell_Enable                0xFE7A
735
7360x0000 #define    XK_Pointer_Left                    0xFEE0
7370x0000 #define    XK_Pointer_Right                0xFEE1
7380x0000 #define    XK_Pointer_Up                    0xFEE2
7390x0000 #define    XK_Pointer_Down                    0xFEE3
7400x0000 #define    XK_Pointer_UpLeft                0xFEE4
7410x0000 #define    XK_Pointer_UpRight                0xFEE5
7420x0000 #define    XK_Pointer_DownLeft                0xFEE6
7430x0000 #define    XK_Pointer_DownRight                0xFEE7
7440x0000 #define    XK_Pointer_Button_Dflt                0xFEE8
7450x0000 #define    XK_Pointer_Button1                0xFEE9
7460x0000 #define    XK_Pointer_Button2                0xFEEA
7470x0000 #define    XK_Pointer_Button3                0xFEEB
7480x0000 #define    XK_Pointer_Button4                0xFEEC
7490x0000 #define    XK_Pointer_Button5                0xFEED
7500x0000 #define    XK_Pointer_DblClick_Dflt            0xFEEE
7510x0000 #define    XK_Pointer_DblClick1                0xFEEF
7520x0000 #define    XK_Pointer_DblClick2                0xFEF0
7530x0000 #define    XK_Pointer_DblClick3                0xFEF1
7540x0000 #define    XK_Pointer_DblClick4                0xFEF2
7550x0000 #define    XK_Pointer_DblClick5                0xFEF3
7560x0000 #define    XK_Pointer_Drag_Dflt                0xFEF4
7570x0000 #define    XK_Pointer_Drag1                0xFEF5
7580x0000 #define    XK_Pointer_Drag2                0xFEF6
7590x0000 #define    XK_Pointer_Drag3                0xFEF7
7600x0000 #define    XK_Pointer_Drag4                0xFEF8
7610x0000 #define    XK_Pointer_Drag5                0xFEFD
762
7630x0000 #define    XK_Pointer_EnableKeys                0xFEF9
7640x0000 #define    XK_Pointer_Accelerate                0xFEFA
7650x0000 #define    XK_Pointer_DfltBtnNext                0xFEFB
7660x0000 #define    XK_Pointer_DfltBtnPrev                0xFEFC
767
768#endif
769
770/*
771 * 3270 Terminal Keys
772 * Byte 3 = 0xFD
773 */
774
775#ifdef XK_3270
7760x0000 #define XK_3270_Duplicate      0xFD01
7770x0000 #define XK_3270_FieldMark      0xFD02
7780x0000 #define XK_3270_Right2         0xFD03
7790x0000 #define XK_3270_Left2          0xFD04
7800x0000 #define XK_3270_BackTab        0xFD05
7810x0000 #define XK_3270_EraseEOF       0xFD06
7820x0000 #define XK_3270_EraseInput     0xFD07
7830x0000 #define XK_3270_Reset          0xFD08
7840x0000 #define XK_3270_Quit           0xFD09
7850x0000 #define XK_3270_PA1            0xFD0A
7860x0000 #define XK_3270_PA2            0xFD0B
7870x0000 #define XK_3270_PA3            0xFD0C
7880x0000 #define XK_3270_Test           0xFD0D
7890x0000 #define XK_3270_Attn           0xFD0E
7900x0000 #define XK_3270_CursorBlink    0xFD0F
7910x0000 #define XK_3270_AltCursor      0xFD10
7920x0000 #define XK_3270_KeyClick       0xFD11
7930x0000 #define XK_3270_Jump           0xFD12
7940x0000 #define XK_3270_Ident          0xFD13
7950x0000 #define XK_3270_Rule           0xFD14
7960x0000 #define XK_3270_Copy           0xFD15
7970x0000 #define XK_3270_Play           0xFD16
7980x0000 #define XK_3270_Setup          0xFD17
7990x0000 #define XK_3270_Record         0xFD18
8000x0000 #define XK_3270_ChangeScreen   0xFD19
8010x0000 #define XK_3270_DeleteWord     0xFD1A
8020x0000 #define XK_3270_ExSelect       0xFD1B
8030x0000 #define XK_3270_CursorSelect   0xFD1C
8040x0000 #define XK_3270_PrintScreen    0xFD1D
8050x0000 #define XK_3270_Enter          0xFD1E
806#endif
807
808/*
809 *  Latin 1
810 *  Byte 3 = 0
811 */
812// yan: skip Latin1 as it is mapped to Unicode 1:1
813#ifdef XK_LATIN1
8140x0000 #define XK_space               0x020
8150x0000 #define XK_exclam              0x021
8160x0000 #define XK_quotedbl            0x022
8170x0000 #define XK_numbersign          0x023
8180x0000 #define XK_dollar              0x024
8190x0000 #define XK_percent             0x025
8200x0000 #define XK_ampersand           0x026
8210x0000 #define XK_apostrophe          0x027
8220x0000 #define XK_quoteright          0x027    /* deprecated */
8230x0000 #define XK_parenleft           0x028
8240x0000 #define XK_parenright          0x029
8250x0000 #define XK_asterisk            0x02a
8260x0000 #define XK_plus                0x02b
8270x0000 #define XK_comma               0x02c
8280x0000 #define XK_minus               0x02d
8290x0000 #define XK_period              0x02e
8300x0000 #define XK_slash               0x02f
8310x0000 #define XK_0                   0x030
8320x0000 #define XK_1                   0x031
8330x0000 #define XK_2                   0x032
8340x0000 #define XK_3                   0x033
8350x0000 #define XK_4                   0x034
8360x0000 #define XK_5                   0x035
8370x0000 #define XK_6                   0x036
8380x0000 #define XK_7                   0x037
8390x0000 #define XK_8                   0x038
8400x0000 #define XK_9                   0x039
8410x0000 #define XK_colon               0x03a
8420x0000 #define XK_semicolon           0x03b
8430x0000 #define XK_less                0x03c
8440x0000 #define XK_equal               0x03d
8450x0000 #define XK_greater             0x03e
8460x0000 #define XK_question            0x03f
8470x0000 #define XK_at                  0x040
8480x0000 #define XK_A                   0x041
8490x0000 #define XK_B                   0x042
8500x0000 #define XK_C                   0x043
8510x0000 #define XK_D                   0x044
8520x0000 #define XK_E                   0x045
8530x0000 #define XK_F                   0x046
8540x0000 #define XK_G                   0x047
8550x0000 #define XK_H                   0x048
8560x0000 #define XK_I                   0x049
8570x0000 #define XK_J                   0x04a
8580x0000 #define XK_K                   0x04b
8590x0000 #define XK_L                   0x04c
8600x0000 #define XK_M                   0x04d
8610x0000 #define XK_N                   0x04e
8620x0000 #define XK_O                   0x04f
8630x0000 #define XK_P                   0x050
8640x0000 #define XK_Q                   0x051
8650x0000 #define XK_R                   0x052
8660x0000 #define XK_S                   0x053
8670x0000 #define XK_T                   0x054
8680x0000 #define XK_U                   0x055
8690x0000 #define XK_V                   0x056
8700x0000 #define XK_W                   0x057
8710x0000 #define XK_X                   0x058
8720x0000 #define XK_Y                   0x059
8730x0000 #define XK_Z                   0x05a
8740x0000 #define XK_bracketleft         0x05b
8750x0000 #define XK_backslash           0x05c
8760x0000 #define XK_bracketright        0x05d
8770x0000 #define XK_asciicircum         0x05e
8780x0000 #define XK_underscore          0x05f
8790x0000 #define XK_grave               0x060
8800x0000 #define XK_quoteleft           0x060    /* deprecated */
8810x0000 #define XK_a                   0x061
8820x0000 #define XK_b                   0x062
8830x0000 #define XK_c                   0x063
8840x0000 #define XK_d                   0x064
8850x0000 #define XK_e                   0x065
8860x0000 #define XK_f                   0x066
8870x0000 #define XK_g                   0x067
8880x0000 #define XK_h                   0x068
8890x0000 #define XK_i                   0x069
8900x0000 #define XK_j                   0x06a
8910x0000 #define XK_k                   0x06b
8920x0000 #define XK_l                   0x06c
8930x0000 #define XK_m                   0x06d
8940x0000 #define XK_n                   0x06e
8950x0000 #define XK_o                   0x06f
8960x0000 #define XK_p                   0x070
8970x0000 #define XK_q                   0x071
8980x0000 #define XK_r                   0x072
8990x0000 #define XK_s                   0x073
9000x0000 #define XK_t                   0x074
9010x0000 #define XK_u                   0x075
9020x0000 #define XK_v                   0x076
9030x0000 #define XK_w                   0x077
9040x0000 #define XK_x                   0x078
9050x0000 #define XK_y                   0x079
9060x0000 #define XK_z                   0x07a
9070x0000 #define XK_braceleft           0x07b
9080x0000 #define XK_bar                 0x07c
9090x0000 #define XK_braceright          0x07d
9100x0000 #define XK_asciitilde          0x07e
911
9120x0000 #define XK_nobreakspace        0x0a0
9130x0000 #define XK_exclamdown          0x0a1
9140x0000 #define XK_cent                   0x0a2
9150x0000 #define XK_sterling            0x0a3
9160x0000 #define XK_currency            0x0a4
9170x0000 #define XK_yen                 0x0a5
9180x0000 #define XK_brokenbar           0x0a6
9190x0000 #define XK_section             0x0a7
9200x0000 #define XK_diaeresis           0x0a8
9210x0000 #define XK_copyright           0x0a9
9220x0000 #define XK_ordfeminine         0x0aa
9230x0000 #define XK_guillemotleft       0x0ab    /* left angle quotation mark */
9240x0000 #define XK_notsign             0x0ac
9250x0000 #define XK_hyphen              0x0ad
9260x0000 #define XK_registered          0x0ae
9270x0000 #define XK_macron              0x0af
9280x0000 #define XK_degree              0x0b0
9290x0000 #define XK_plusminus           0x0b1
9300x0000 #define XK_twosuperior         0x0b2
9310x0000 #define XK_threesuperior       0x0b3
9320x0000 #define XK_acute               0x0b4
9330x0000 #define XK_mu                  0x0b5
9340x0000 #define XK_paragraph           0x0b6
9350x0000 #define XK_periodcentered      0x0b7
9360x0000 #define XK_cedilla             0x0b8
9370x0000 #define XK_onesuperior         0x0b9
9380x0000 #define XK_masculine           0x0ba
9390x0000 #define XK_guillemotright      0x0bb    /* right angle quotation mark */
9400x0000 #define XK_onequarter          0x0bc
9410x0000 #define XK_onehalf             0x0bd
9420x0000 #define XK_threequarters       0x0be
9430x0000 #define XK_questiondown        0x0bf
9440x0000 #define XK_Agrave              0x0c0
9450x0000 #define XK_Aacute              0x0c1
9460x0000 #define XK_Acircumflex         0x0c2
9470x0000 #define XK_Atilde              0x0c3
9480x0000 #define XK_Adiaeresis          0x0c4
9490x0000 #define XK_Aring               0x0c5
9500x0000 #define XK_AE                  0x0c6
9510x0000 #define XK_Ccedilla            0x0c7
9520x0000 #define XK_Egrave              0x0c8
9530x0000 #define XK_Eacute              0x0c9
9540x0000 #define XK_Ecircumflex         0x0ca
9550x0000 #define XK_Ediaeresis          0x0cb
9560x0000 #define XK_Igrave              0x0cc
9570x0000 #define XK_Iacute              0x0cd
9580x0000 #define XK_Icircumflex         0x0ce
9590x0000 #define XK_Idiaeresis          0x0cf
9600x0000 #define XK_ETH                 0x0d0
9610x0000 #define XK_Eth                 0x0d0    /* deprecated */
9620x0000 #define XK_Ntilde              0x0d1
9630x0000 #define XK_Ograve              0x0d2
9640x0000 #define XK_Oacute              0x0d3
9650x0000 #define XK_Ocircumflex         0x0d4
9660x0000 #define XK_Otilde              0x0d5
9670x0000 #define XK_Odiaeresis          0x0d6
9680x0000 #define XK_multiply            0x0d7
9690x0000 #define XK_Ooblique            0x0d8
9700x0000 #define XK_Ugrave              0x0d9
9710x0000 #define XK_Uacute              0x0da
9720x0000 #define XK_Ucircumflex         0x0db
9730x0000 #define XK_Udiaeresis          0x0dc
9740x0000 #define XK_Yacute              0x0dd
9750x0000 #define XK_THORN               0x0de
9760x0000 #define XK_Thorn               0x0de    /* deprecated */
9770x0000 #define XK_ssharp              0x0df
9780x0000 #define XK_agrave              0x0e0
9790x0000 #define XK_aacute              0x0e1
9800x0000 #define XK_acircumflex         0x0e2
9810x0000 #define XK_atilde              0x0e3
9820x0000 #define XK_adiaeresis          0x0e4
9830x0000 #define XK_aring               0x0e5
9840x0000 #define XK_ae                  0x0e6
9850x0000 #define XK_ccedilla            0x0e7
9860x0000 #define XK_egrave              0x0e8
9870x0000 #define XK_eacute              0x0e9
9880x0000 #define XK_ecircumflex         0x0ea
9890x0000 #define XK_ediaeresis          0x0eb
9900x0000 #define XK_igrave              0x0ec
9910x0000 #define XK_iacute              0x0ed
9920x0000 #define XK_icircumflex         0x0ee
9930x0000 #define XK_idiaeresis          0x0ef
9940x0000 #define XK_eth                 0x0f0
9950x0000 #define XK_ntilde              0x0f1
9960x0000 #define XK_ograve              0x0f2
9970x0000 #define XK_oacute              0x0f3
9980x0000 #define XK_ocircumflex         0x0f4
9990x0000 #define XK_otilde              0x0f5
10000x0000 #define XK_odiaeresis          0x0f6
10010x0000 #define XK_division            0x0f7
10020x0000 #define XK_oslash              0x0f8
10030x0000 #define XK_ugrave              0x0f9
10040x0000 #define XK_uacute              0x0fa
10050x0000 #define XK_ucircumflex         0x0fb
10060x0000 #define XK_udiaeresis          0x0fc
10070x0000 #define XK_yacute              0x0fd
10080x0000 #define XK_thorn               0x0fe
10090x0000 #define XK_ydiaeresis          0x0ff
1010#endif /* XK_LATIN1 */
1011
1012/*
1013 *   Latin 2
1014 *   Byte 3 = 1
1015 */
1016
1017#ifdef XK_LATIN2
10180x0104 #define XK_Aogonek             0x1a1
10190x02d8 #define XK_breve               0x1a2
10200x0141 #define XK_Lstroke             0x1a3
10210x013d #define XK_Lcaron              0x1a5
10220x015a #define XK_Sacute              0x1a6
10230x0160 #define XK_Scaron              0x1a9
10240x015e #define XK_Scedilla            0x1aa
10250x0164 #define XK_Tcaron              0x1ab
10260x0179 #define XK_Zacute              0x1ac
10270x017d #define XK_Zcaron              0x1ae
10280x017b #define XK_Zabovedot           0x1af
10290x0105 #define XK_aogonek             0x1b1
10300x02db #define XK_ogonek              0x1b2
10310x0142 #define XK_lstroke             0x1b3
10320x013e #define XK_lcaron              0x1b5
10330x015b #define XK_sacute              0x1b6
10340x02c7 #define XK_caron               0x1b7
10350x0161 #define XK_scaron              0x1b9
10360x015f #define XK_scedilla            0x1ba
10370x0165 #define XK_tcaron              0x1bb
10380x017a #define XK_zacute              0x1bc
10390x02dd #define XK_doubleacute         0x1bd
10400x017e #define XK_zcaron              0x1be
10410x017c #define XK_zabovedot           0x1bf
10420x0154 #define XK_Racute              0x1c0
10430x0102 #define XK_Abreve              0x1c3
10440x0139 #define XK_Lacute              0x1c5
10450x0106 #define XK_Cacute              0x1c6
10460x010c #define XK_Ccaron              0x1c8
10470x0118 #define XK_Eogonek             0x1ca
10480x011a #define XK_Ecaron              0x1cc
10490x010e #define XK_Dcaron              0x1cf
10500x0110 #define XK_Dstroke             0x1d0
10510x0143 #define XK_Nacute              0x1d1
10520x0147 #define XK_Ncaron              0x1d2
10530x0150 #define XK_Odoubleacute        0x1d5
10540x0158 #define XK_Rcaron              0x1d8
10550x016e #define XK_Uring               0x1d9
10560x0170 #define XK_Udoubleacute        0x1db
10570x0162 #define XK_Tcedilla            0x1de
10580x0155 #define XK_racute              0x1e0
10590x0103 #define XK_abreve              0x1e3
10600x013a #define XK_lacute              0x1e5
10610x0107 #define XK_cacute              0x1e6
10620x010d #define XK_ccaron              0x1e8
10630x0119 #define XK_eogonek             0x1ea
10640x011b #define XK_ecaron              0x1ec
10650x010f #define XK_dcaron              0x1ef
10660x0111 #define XK_dstroke             0x1f0
10670x0144 #define XK_nacute              0x1f1
10680x0148 #define XK_ncaron              0x1f2
10690x0151 #define XK_odoubleacute        0x1f5
10700x0171 #define XK_udoubleacute        0x1fb
10710x0159 #define XK_rcaron              0x1f8
10720x016f #define XK_uring               0x1f9
10730x0163 #define XK_tcedilla            0x1fe
10740x02d9 #define XK_abovedot            0x1ff
1075#endif /* XK_LATIN2 */
1076
1077/*
1078 *   Latin 3
1079 *   Byte 3 = 2
1080 */
1081
1082#ifdef XK_LATIN3
10830x0126 #define XK_Hstroke             0x2a1
10840x0124 #define XK_Hcircumflex         0x2a6
10850x0130 #define XK_Iabovedot           0x2a9
10860x011e #define XK_Gbreve              0x2ab
10870x0134 #define XK_Jcircumflex         0x2ac
10880x0127 #define XK_hstroke             0x2b1
10890x0125 #define XK_hcircumflex         0x2b6
10900x0131 #define XK_idotless            0x2b9
10910x011f #define XK_gbreve              0x2bb
10920x0135 #define XK_jcircumflex         0x2bc
10930x010a #define XK_Cabovedot           0x2c5
10940x0108 #define XK_Ccircumflex         0x2c6
10950x0120 #define XK_Gabovedot           0x2d5
10960x011c #define XK_Gcircumflex         0x2d8
10970x016c #define XK_Ubreve              0x2dd
10980x015c #define XK_Scircumflex         0x2de
10990x010b #define XK_cabovedot           0x2e5
11000x0109 #define XK_ccircumflex         0x2e6
11010x0121 #define XK_gabovedot           0x2f5
11020x011d #define XK_gcircumflex         0x2f8
11030x016d #define XK_ubreve              0x2fd
11040x015d #define XK_scircumflex         0x2fe
1105#endif /* XK_LATIN3 */
1106
1107
1108/*
1109 *   Latin 4
1110 *   Byte 3 = 3
1111 */
1112
1113#ifdef XK_LATIN4
11140x0138 #define XK_kra                 0x3a2
11150x0000 #define XK_kappa               0x3a2    /* deprecated */
11160x0156 #define XK_Rcedilla            0x3a3
11170x0128 #define XK_Itilde              0x3a5
11180x013b #define XK_Lcedilla            0x3a6
11190x0112 #define XK_Emacron             0x3aa
11200x0122 #define XK_Gcedilla            0x3ab
11210x0166 #define XK_Tslash              0x3ac
11220x0157 #define XK_rcedilla            0x3b3
11230x0129 #define XK_itilde              0x3b5
11240x013c #define XK_lcedilla            0x3b6
11250x0113 #define XK_emacron             0x3ba
11260x0123 #define XK_gcedilla            0x3bb
11270x0167 #define XK_tslash              0x3bc
11280x014a #define XK_ENG                 0x3bd
11290x014b #define XK_eng                 0x3bf
11300x0100 #define XK_Amacron             0x3c0
11310x012e #define XK_Iogonek             0x3c7
11320x0116 #define XK_Eabovedot           0x3cc
11330x012a #define XK_Imacron             0x3cf
11340x0145 #define XK_Ncedilla            0x3d1
11350x014c #define XK_Omacron             0x3d2
11360x0136 #define XK_Kcedilla            0x3d3
11370x0172 #define XK_Uogonek             0x3d9
11380x0168 #define XK_Utilde              0x3dd
11390x016a #define XK_Umacron             0x3de
11400x0101 #define XK_amacron             0x3e0
11410x012f #define XK_iogonek             0x3e7
11420x0117 #define XK_eabovedot           0x3ec
11430x012b #define XK_imacron             0x3ef
11440x0146 #define XK_ncedilla            0x3f1
11450x014d #define XK_omacron             0x3f2
11460x0137 #define XK_kcedilla            0x3f3
11470x0173 #define XK_uogonek             0x3f9
11480x0169 #define XK_utilde              0x3fd
11490x016b #define XK_umacron             0x3fe
1150#endif /* XK_LATIN4 */
1151
1152/*
1153 * Latin-8
1154 * Byte 3 = 18
1155 */
1156#ifdef XK_LATIN8
11570x1e02 #define XK_Babovedot           0x12a1
11580x1e03 #define XK_babovedot           0x12a2
11590x1e0a #define XK_Dabovedot           0x12a6
11600x1e80 #define XK_Wgrave              0x12a8
11610x1e82 #define XK_Wacute              0x12aa
11620x1e0b #define XK_dabovedot           0x12ab
11630x1ef2 #define XK_Ygrave              0x12ac
11640x1e1e #define XK_Fabovedot           0x12b0
11650x1e1f #define XK_fabovedot           0x12b1
11660x1e40 #define XK_Mabovedot           0x12b4
11670x1e41 #define XK_mabovedot           0x12b5
11680x1e56 #define XK_Pabovedot           0x12b7
11690x1e81 #define XK_wgrave              0x12b8
11700x1e57 #define XK_pabovedot           0x12b9
11710x1e83 #define XK_wacute              0x12ba
11720x1e60 #define XK_Sabovedot           0x12bb
11730x1ef3 #define XK_ygrave              0x12bc
11740x1e84 #define XK_Wdiaeresis          0x12bd
11750x1e85 #define XK_wdiaeresis          0x12be
11760x1e61 #define XK_sabovedot           0x12bf
11770x017 4#define XK_Wcircumflex         0x12d0
11780x1e6a #define XK_Tabovedot           0x12d7
11790x0176 #define XK_Ycircumflex         0x12de
11800x0175 #define XK_wcircumflex         0x12f0
11810x1e6b #define XK_tabovedot           0x12f7
11820x0177 #define XK_ycircumflex         0x12fe
1183#endif /* XK_LATIN8 */
1184
1185/*
1186 * Latin-9 (a.k.a. Latin-0)
1187 * Byte 3 = 19
1188 */
1189
1190#ifdef XK_LATIN9
11910x0152 #define XK_OE                  0x13bc
11920x0153 #define XK_oe                  0x13bd
11930x0178 #define XK_Ydiaeresis          0x13be
1194#endif /* XK_LATIN9 */
1195
1196/*
1197 * Katakana
1198 * Byte 3 = 4
1199 */
1200
1201#ifdef XK_KATAKANA
12020x203e #define XK_overline                       0x47e
12030x3002 #define XK_kana_fullstop                               0x4a1
12040x300c #define XK_kana_openingbracket                         0x4a2
12050x300d #define XK_kana_closingbracket                         0x4a3
12060x3001 #define XK_kana_comma                                  0x4a4
12070x30fb #define XK_kana_conjunctive                            0x4a5
12080x0000 #define XK_kana_middledot                              0x4a5  /* deprecated */
12090x30f2 #define XK_kana_WO                                     0x4a6
12100x30a1 #define XK_kana_a                                      0x4a7
12110x30a3 #define XK_kana_i                                      0x4a8
12120x30a5 #define XK_kana_u                                      0x4a9
12130x30a7 #define XK_kana_e                                      0x4aa
12140x30a9 #define XK_kana_o                                      0x4ab
12150x30e3 #define XK_kana_ya                                     0x4ac
12160x30e5 #define XK_kana_yu                                     0x4ad
12170x30e7 #define XK_kana_yo                                     0x4ae
12180x30c3 #define XK_kana_tsu                                    0x4af
12190x0000 #define XK_kana_tu                                     0x4af  /* deprecated */
12200x30fc #define XK_prolongedsound                              0x4b0
12210x30a2 #define XK_kana_A                                      0x4b1
12220x30a4 #define XK_kana_I                                      0x4b2
12230x30a6 #define XK_kana_U                                      0x4b3
12240x30a8 #define XK_kana_E                                      0x4b4
12250x30aa #define XK_kana_O                                      0x4b5
12260x30ab #define XK_kana_KA                                     0x4b6
12270x30ad #define XK_kana_KI                                     0x4b7
12280x30af #define XK_kana_KU                                     0x4b8
12290x30b1 #define XK_kana_KE                                     0x4b9
12300x30b3 #define XK_kana_KO                                     0x4ba
12310x30b5 #define XK_kana_SA                                     0x4bb
12320x30b7 #define XK_kana_SHI                                    0x4bc
12330x30b9 #define XK_kana_SU                                     0x4bd
12340x30bb #define XK_kana_SE                                     0x4be
12350x30bd #define XK_kana_SO                                     0x4bf
12360x30bf #define XK_kana_TA                                     0x4c0
12370x30c1 #define XK_kana_CHI                                    0x4c1
12380x0000 #define XK_kana_TI                                     0x4c1  /* deprecated */
12390x30c4 #define XK_kana_TSU                                    0x4c2
12400x0000 #define XK_kana_TU                                     0x4c2  /* deprecated */
12410x30c6 #define XK_kana_TE                                     0x4c3
12420x30c8 #define XK_kana_TO                                     0x4c4
12430x30ca #define XK_kana_NA                                     0x4c5
12440x30cb #define XK_kana_NI                                     0x4c6
12450x30cc #define XK_kana_NU                                     0x4c7
12460x30cd #define XK_kana_NE                                     0x4c8
12470x30ce #define XK_kana_NO                                     0x4c9
12480x30cf #define XK_kana_HA                                     0x4ca
12490x30d2 #define XK_kana_HI                                     0x4cb
12500x30d5 #define XK_kana_FU                                     0x4cc
12510x0000 #define XK_kana_HU                                     0x4cc  /* deprecated */
12520x30d8 #define XK_kana_HE                                     0x4cd
12530x30db #define XK_kana_HO                                     0x4ce
12540x30de #define XK_kana_MA                                     0x4cf
12550x30df #define XK_kana_MI                                     0x4d0
12560x30e0 #define XK_kana_MU                                     0x4d1
12570x30e1 #define XK_kana_ME                                     0x4d2
12580x30e2 #define XK_kana_MO                                     0x4d3
12590x30e4 #define XK_kana_YA                                     0x4d4
12600x30e6 #define XK_kana_YU                                     0x4d5
12610x30e8 #define XK_kana_YO                                     0x4d6
12620x30e9 #define XK_kana_RA                                     0x4d7
12630x30ea #define XK_kana_RI                                     0x4d8
12640x30eb #define XK_kana_RU                                     0x4d9
12650x30ec #define XK_kana_RE                                     0x4da
12660x30ed #define XK_kana_RO                                     0x4db
12670x30ef #define XK_kana_WA                                     0x4dc
12680x30f3 #define XK_kana_N                                      0x4dd
12690x309b #define XK_voicedsound                                 0x4de
12700x309c #define XK_semivoicedsound                             0x4df
12710x0000 #define XK_kana_switch          0xFF7E  /* Alias for mode_switch */
1272#endif /* XK_KATAKANA */
1273
1274/*
1275 *  Arabic
1276 *  Byte 3 = 5
1277 */
1278
1279#ifdef XK_ARABIC
12800x0670 #define XK_Farsi_0                                     0x590
12810x06f1 #define XK_Farsi_1                                     0x591
12820x06f2 #define XK_Farsi_2                                     0x592
12830x06f3 #define XK_Farsi_3                                     0x593
12840x06f4 #define XK_Farsi_4                                     0x594
12850x06f5 #define XK_Farsi_5                                     0x595
12860x06f6 #define XK_Farsi_6                                     0x596
12870x06f7 #define XK_Farsi_7                                     0x597
12880x06f8 #define XK_Farsi_8                                     0x598
12890x06f9 #define XK_Farsi_9                                     0x599
12900x066a #define XK_Arabic_percent                              0x5a5
12910x0670 #define XK_Arabic_superscript_alef                     0x5a6
12920x0679 #define XK_Arabic_tteh                                 0x5a7
12930x067e #define XK_Arabic_peh                                  0x5a8
12940x0686 #define XK_Arabic_tcheh                                0x5a9
12950x0688 #define XK_Arabic_ddal                                 0x5aa
12960x0691 #define XK_Arabic_rreh                                 0x5ab
12970x060c #define XK_Arabic_comma                                0x5ac
12980x06d4 #define XK_Arabic_fullstop                             0x5ae
12990x0660 #define XK_Arabic_0                                    0x5b0
13000x0661 #define XK_Arabic_1                                    0x5b1
13010x0662 #define XK_Arabic_2                                    0x5b2
13020x0663 #define XK_Arabic_3                                    0x5b3
13030x0664 #define XK_Arabic_4                                    0x5b4
13040x0665 #define XK_Arabic_5                                    0x5b5
13050x0666 #define XK_Arabic_6                                    0x5b6
13060x0667 #define XK_Arabic_7                                    0x5b7
13070x0668 #define XK_Arabic_8                                    0x5b8
13080x0669 #define XK_Arabic_9                                    0x5b9
13090x061b #define XK_Arabic_semicolon                            0x5bb
13100x061f #define XK_Arabic_question_mark                        0x5bf
13110x0621 #define XK_Arabic_hamza                                0x5c1
13120x0622 #define XK_Arabic_maddaonalef                          0x5c2
13130x0623 #define XK_Arabic_hamzaonalef                          0x5c3
13140x0624 #define XK_Arabic_hamzaonwaw                           0x5c4
13150x0625 #define XK_Arabic_hamzaunderalef                       0x5c5
13160x0626 #define XK_Arabic_hamzaonyeh                           0x5c6
13170x0627 #define XK_Arabic_alef                                 0x5c7
13180x0628 #define XK_Arabic_beh                                  0x5c8
13190x0629 #define XK_Arabic_tehmarbuta                           0x5c9
13200x062a #define XK_Arabic_teh                                  0x5ca
13210x062b #define XK_Arabic_theh                                 0x5cb
13220x062c #define XK_Arabic_jeem                                 0x5cc
13230x062d #define XK_Arabic_hah                                  0x5cd
13240x062e #define XK_Arabic_khah                                 0x5ce
13250x062f #define XK_Arabic_dal                                  0x5cf
13260x0630 #define XK_Arabic_thal                                 0x5d0
13270x0631 #define XK_Arabic_ra                                   0x5d1
13280x0632 #define XK_Arabic_zain                                 0x5d2
13290x0633 #define XK_Arabic_seen                                 0x5d3
13300x0634 #define XK_Arabic_sheen                                0x5d4
13310x0635 #define XK_Arabic_sad                                  0x5d5
13320x0636 #define XK_Arabic_dad                                  0x5d6
13330x0637 #define XK_Arabic_tah                                  0x5d7
13340x0638 #define XK_Arabic_zah                                  0x5d8
13350x0639 #define XK_Arabic_ain                                  0x5d9
13360x063a #define XK_Arabic_ghain                                0x5da
13370x0640 #define XK_Arabic_tatweel                              0x5e0
13380x0641 #define XK_Arabic_feh                                  0x5e1
13390x0642 #define XK_Arabic_qaf                                  0x5e2
13400x0643 #define XK_Arabic_kaf                                  0x5e3
13410x0644 #define XK_Arabic_lam                                  0x5e4
13420x0645 #define XK_Arabic_meem                                 0x5e5
13430x0646 #define XK_Arabic_noon                                 0x5e6
13440x0647 #define XK_Arabic_ha                                   0x5e7
13450x0000 #define XK_Arabic_heh                                  0x5e7  /* deprecated */
13460x0648 #define XK_Arabic_waw                                  0x5e8
13470x0649 #define XK_Arabic_alefmaksura                          0x5e9
13480x064a #define XK_Arabic_yeh                                  0x5ea
13490x064b #define XK_Arabic_fathatan                             0x5eb
13500x064c #define XK_Arabic_dammatan                             0x5ec
13510x064d #define XK_Arabic_kasratan                             0x5ed
13520x064e #define XK_Arabic_fatha                                0x5ee
13530x064f #define XK_Arabic_damma                                0x5ef
13540x0650 #define XK_Arabic_kasra                                0x5f0
13550x0651 #define XK_Arabic_shadda                               0x5f1
13560x0652 #define XK_Arabic_sukun                                0x5f2
13570x0653 #define XK_Arabic_madda_above                          0x5f3
13580x0654 #define XK_Arabic_hamza_above                          0x5f4
13590x0655 #define XK_Arabic_hamza_below                          0x5f5
13600x0698 #define XK_Arabic_jeh                                  0x5f6
13610x06a4 #define XK_Arabic_veh                                  0x5f7
13620x06a9 #define XK_Arabic_keheh                                0x5f8
13630x06af #define XK_Arabic_gaf                                  0x5f9
13640x06ba #define XK_Arabic_noon_ghunna                          0x5fa
13650x06be #define XK_Arabic_heh_doachashmee                      0x5fb
13660x06cc #define XK_Farsi_yeh                                   0x5fc
13670x06d2 #define XK_Arabic_yeh_baree                            0x5fd
13680x06c1 #define XK_Arabic_heh_goal                             0x5fe
13690x0000 #define XK_Arabic_switch        0xFF7E  /* Alias for mode_switch */
1370#endif /* XK_ARABIC */
1371
1372/*
1373 * Cyrillic
1374 * Byte 3 = 6
1375 */
1376#ifdef XK_CYRILLIC
13770x0492 #define XK_Cyrillic_GHE_bar                               0x680
13780x0493 #define XK_Cyrillic_ghe_bar                               0x690
13790x0496 #define XK_Cyrillic_ZHE_descender                       0x681
13800x0497 #define XK_Cyrillic_zhe_descender                       0x691
13810x049a #define XK_Cyrillic_KA_descender                   0x682
13820x049b #define XK_Cyrillic_ka_descender                       0x692
13830x049c #define XK_Cyrillic_KA_vertstroke                   0x683
13840x049d #define XK_Cyrillic_ka_vertstroke                   0x693
13850x04a2 #define XK_Cyrillic_EN_descender                   0x684
13860x04a3 #define XK_Cyrillic_en_descender                   0x694
13870x04ae #define XK_Cyrillic_U_straight                       0x685
13880x04af #define XK_Cyrillic_u_straight                       0x695
13890x04b0 #define XK_Cyrillic_U_straight_bar                   0x686
13900x04b1 #define XK_Cyrillic_u_straight_bar                   0x696
13910x04b2 #define XK_Cyrillic_HA_descender                       0x687
13920x04b3 #define XK_Cyrillic_ha_descender                       0x697
13930x04b6 #define XK_Cyrillic_CHE_descender                       0x688
13940x04b7 #define XK_Cyrillic_che_descender                       0x698
13950x04b8 #define XK_Cyrillic_CHE_vertstroke                       0x689
13960x04b9 #define XK_Cyrillic_che_vertstroke                       0x699
13970x04ba #define XK_Cyrillic_SHHA                               0x68a
13980x04bb #define XK_Cyrillic_shha                               0x69a
1399
14000x04d8 #define XK_Cyrillic_SCHWA                               0x68c
14010x04d9 #define XK_Cyrillic_schwa                               0x69c
14020x04e2 #define XK_Cyrillic_I_macron                           0x68d
14030x04e3 #define XK_Cyrillic_i_macron                           0x69d
14040x04e8 #define XK_Cyrillic_O_bar                               0x68e
14050x04e9 #define XK_Cyrillic_o_bar                               0x69e
14060x04ee #define XK_Cyrillic_U_macron                           0x68f
14070x04ef #define XK_Cyrillic_u_macron                           0x69f
1408
14090x0452 #define XK_Serbian_dje                                 0x6a1
14100x0453 #define XK_Macedonia_gje                               0x6a2
14110x0451 #define XK_Cyrillic_io                                 0x6a3
14120x0454 #define XK_Ukrainian_ie                                0x6a4
14130x0000 #define XK_Ukranian_je                                 0x6a4  /* deprecated */
14140x0455 #define XK_Macedonia_dse                               0x6a5
14150x0456 #define XK_Ukrainian_i                                 0x6a6
14160x0000 #define XK_Ukranian_i                                  0x6a6  /* deprecated */
14170x0457 #define XK_Ukrainian_yi                                0x6a7
14180x0000 #define XK_Ukranian_yi                                 0x6a7  /* deprecated */
14190x0458 #define XK_Cyrillic_je                                 0x6a8
14200x0000 #define XK_Serbian_je                                  0x6a8  /* deprecated */
14210x0459 #define XK_Cyrillic_lje                                0x6a9
14220x0000 #define XK_Serbian_lje                                 0x6a9  /* deprecated */
14230x045a #define XK_Cyrillic_nje                                0x6aa
14240x0000 #define XK_Serbian_nje                                 0x6aa  /* deprecated */
14250x045b #define XK_Serbian_tshe                                0x6ab
14260x045c #define XK_Macedonia_kje                               0x6ac
14270x0491 #define XK_Ukrainian_ghe_with_upturn                   0x6ad
14280x045e #define XK_Byelorussian_shortu                         0x6ae
14290x045f #define XK_Cyrillic_dzhe                               0x6af
14300x0000 #define XK_Serbian_dze                                 0x6af  /* deprecated */
14310x2116 #define XK_numerosign                                  0x6b0
14320x0402 #define XK_Serbian_DJE                                 0x6b1
14330x0403 #define XK_Macedonia_GJE                               0x6b2
14340x0401 #define XK_Cyrillic_IO                                 0x6b3
14350x0404 #define XK_Ukrainian_IE                                0x6b4
14360x0000 #define XK_Ukranian_JE                                 0x6b4  /* deprecated */
14370x0405 #define XK_Macedonia_DSE                               0x6b5
14380x0406 #define XK_Ukrainian_I                                 0x6b6
14390x0000 #define XK_Ukranian_I                                  0x6b6  /* deprecated */
14400x0407 #define XK_Ukrainian_YI                                0x6b7
14410x0000 #define XK_Ukranian_YI                                 0x6b7  /* deprecated */
14420x0408 #define XK_Cyrillic_JE                                 0x6b8
14430x0000 #define XK_Serbian_JE                                  0x6b8  /* deprecated */
14440x0409 #define XK_Cyrillic_LJE                                0x6b9
14450x0000 #define XK_Serbian_LJE                                 0x6b9  /* deprecated */
14460x040a #define XK_Cyrillic_NJE                                0x6ba
14470x0000 #define XK_Serbian_NJE                                 0x6ba  /* deprecated */
14480x040b #define XK_Serbian_TSHE                                0x6bb
14490x040c #define XK_Macedonia_KJE                               0x6bc
14500x0490 #define XK_Ukrainian_GHE_WITH_UPTURN                   0x6bd
14510x040e #define XK_Byelorussian_SHORTU                         0x6be
14520x040f #define XK_Cyrillic_DZHE                               0x6bf
14530x0000 #define XK_Serbian_DZE                                 0x6bf  /* deprecated */
14540x044e #define XK_Cyrillic_yu                                 0x6c0
14550x0430 #define XK_Cyrillic_a                                  0x6c1
14560x0431 #define XK_Cyrillic_be                                 0x6c2
14570x0446 #define XK_Cyrillic_tse                                0x6c3
14580x0434 #define XK_Cyrillic_de                                 0x6c4
14590x0435 #define XK_Cyrillic_ie                                 0x6c5
14600x0444 #define XK_Cyrillic_ef                                 0x6c6
14610x0433 #define XK_Cyrillic_ghe                                0x6c7
14620x0445 #define XK_Cyrillic_ha                                 0x6c8
14630x0438 #define XK_Cyrillic_i                                  0x6c9
14640x0439 #define XK_Cyrillic_shorti                             0x6ca
14650x043a #define XK_Cyrillic_ka                                 0x6cb
14660x043b #define XK_Cyrillic_el                                 0x6cc
14670x043c #define XK_Cyrillic_em                                 0x6cd
14680x043d #define XK_Cyrillic_en                                 0x6ce
14690x043e #define XK_Cyrillic_o                                  0x6cf
14700x043f #define XK_Cyrillic_pe                                 0x6d0
14710x044f #define XK_Cyrillic_ya                                 0x6d1
14720x0440 #define XK_Cyrillic_er                                 0x6d2
14730x0441 #define XK_Cyrillic_es                                 0x6d3
14740x0442 #define XK_Cyrillic_te                                 0x6d4
14750x0443 #define XK_Cyrillic_u                                  0x6d5
14760x0436 #define XK_Cyrillic_zhe                                0x6d6
14770x0432 #define XK_Cyrillic_ve                                 0x6d7
14780x044c #define XK_Cyrillic_softsign                           0x6d8
14790x044b #define XK_Cyrillic_yeru                               0x6d9
14800x0437 #define XK_Cyrillic_ze                                 0x6da
14810x0448 #define XK_Cyrillic_sha                                0x6db
14820x044d #define XK_Cyrillic_e                                  0x6dc
14830x0449 #define XK_Cyrillic_shcha                              0x6dd
14840x0447 #define XK_Cyrillic_che                                0x6de
14850x044a #define XK_Cyrillic_hardsign                           0x6df
14860x042e #define XK_Cyrillic_YU                                 0x6e0
14870x0410 #define XK_Cyrillic_A                                  0x6e1
14880x0411 #define XK_Cyrillic_BE                                 0x6e2
14890x0426 #define XK_Cyrillic_TSE                                0x6e3
14900x0414 #define XK_Cyrillic_DE                                 0x6e4
14910x0415 #define XK_Cyrillic_IE                                 0x6e5
14920x0424 #define XK_Cyrillic_EF                                 0x6e6
14930x0413 #define XK_Cyrillic_GHE                                0x6e7
14940x0425 #define XK_Cyrillic_HA                                 0x6e8
14950x0418 #define XK_Cyrillic_I                                  0x6e9
14960x0419 #define XK_Cyrillic_SHORTI                             0x6ea
14970x041a #define XK_Cyrillic_KA                                 0x6eb
14980x041b #define XK_Cyrillic_EL                                 0x6ec
14990x041c #define XK_Cyrillic_EM                                 0x6ed
15000x041d #define XK_Cyrillic_EN                                 0x6ee
15010x041e #define XK_Cyrillic_O                                  0x6ef
15020x041f #define XK_Cyrillic_PE                                 0x6f0
15030x042f #define XK_Cyrillic_YA                                 0x6f1
15040x0420 #define XK_Cyrillic_ER                                 0x6f2
15050x0421 #define XK_Cyrillic_ES                                 0x6f3
15060x0422 #define XK_Cyrillic_TE                                 0x6f4
15070x0423 #define XK_Cyrillic_U                                  0x6f5
15080x0416 #define XK_Cyrillic_ZHE                                0x6f6
15090x0412 #define XK_Cyrillic_VE                                 0x6f7
15100x042c #define XK_Cyrillic_SOFTSIGN                           0x6f8
15110x042b #define XK_Cyrillic_YERU                               0x6f9
15120x0417 #define XK_Cyrillic_ZE                                 0x6fa
15130x0428 #define XK_Cyrillic_SHA                                0x6fb
15140x042d #define XK_Cyrillic_E                                  0x6fc
15150x0429 #define XK_Cyrillic_SHCHA                              0x6fd
15160x0427 #define XK_Cyrillic_CHE                                0x6fe
15170x042a #define XK_Cyrillic_HARDSIGN                           0x6ff
1518#endif /* XK_CYRILLIC */
1519
1520/*
1521 * Greek
1522 * Byte 3 = 7
1523 */
1524
1525#ifdef XK_GREEK
15260x0386 #define XK_Greek_ALPHAaccent                           0x7a1
15270x0388 #define XK_Greek_EPSILONaccent                         0x7a2
15280x0389 #define XK_Greek_ETAaccent                             0x7a3
15290x038a #define XK_Greek_IOTAaccent                            0x7a4
15300x03aa #define XK_Greek_IOTAdieresis                          0x7a5
15310x0000 #define XK_Greek_IOTAdiaeresis         XK_Greek_IOTAdieresis /* old typo */
15320x038c #define XK_Greek_OMICRONaccent                         0x7a7
15330x038e #define XK_Greek_UPSILONaccent                         0x7a8
15340x03ab  #define XK_Greek_UPSILONdieresis                       0x7a9
15350x038f #define XK_Greek_OMEGAaccent                           0x7ab
15360x0385 #define XK_Greek_accentdieresis                        0x7ae
15370x2015 #define XK_Greek_horizbar                              0x7af
15380x03ac #define XK_Greek_alphaaccent                           0x7b1
15390x03ad #define XK_Greek_epsilonaccent                         0x7b2
15400x03ae #define XK_Greek_etaaccent                             0x7b3
15410x03af #define XK_Greek_iotaaccent                            0x7b4
15420x03ca #define XK_Greek_iotadieresis                          0x7b5
15430x0390 #define XK_Greek_iotaaccentdieresis                    0x7b6
15440x03cc #define XK_Greek_omicronaccent                         0x7b7
15450x03cd #define XK_Greek_upsilonaccent                         0x7b8
15460x03cb #define XK_Greek_upsilondieresis                       0x7b9
15470x03b0 #define XK_Greek_upsilonaccentdieresis                 0x7ba
15480x03ce #define XK_Greek_omegaaccent                           0x7bb
15490x0391 #define XK_Greek_ALPHA                                 0x7c1
15500x0392 #define XK_Greek_BETA                                  0x7c2
15510x0393 #define XK_Greek_GAMMA                                 0x7c3
15520x0394 #define XK_Greek_DELTA                                 0x7c4
15530x0395 #define XK_Greek_EPSILON                               0x7c5
15540x0396 #define XK_Greek_ZETA                                  0x7c6
15550x0397 #define XK_Greek_ETA                                   0x7c7
15560x0398 #define XK_Greek_THETA                                 0x7c8
15570x0399 #define XK_Greek_IOTA                                  0x7c9
15580x039a #define XK_Greek_KAPPA                                 0x7ca
15590x0000 #define XK_Greek_LAMDA                                 0x7cb
15600x039b #define XK_Greek_LAMBDA                                0x7cb
15610x039c #define XK_Greek_MU                                    0x7cc
15620x039d #define XK_Greek_NU                                    0x7cd
15630x039e #define XK_Greek_XI                                    0x7ce
15640x039f #define XK_Greek_OMICRON                               0x7cf
15650x03a0 #define XK_Greek_PI                                    0x7d0
15660x03a1 #define XK_Greek_RHO                                   0x7d1
15670x03a3 #define XK_Greek_SIGMA                                 0x7d2
15680x03a4 #define XK_Greek_TAU                                   0x7d4
15690x03a5 #define XK_Greek_UPSILON                               0x7d5
15700x03a6 #define XK_Greek_PHI                                   0x7d6
15710x03a7 #define XK_Greek_CHI                                   0x7d7
15720x03a8 #define XK_Greek_PSI                                   0x7d8
15730x03a9 #define XK_Greek_OMEGA                                 0x7d9
15740x03b1 #define XK_Greek_alpha                                 0x7e1
15750x03b2 #define XK_Greek_beta                                  0x7e2
15760x03b3 #define XK_Greek_gamma                                 0x7e3
15770x03b4 #define XK_Greek_delta                                 0x7e4
15780x03b5 #define XK_Greek_epsilon                               0x7e5
15790x03b6 #define XK_Greek_zeta                                  0x7e6
15800x03b7 #define XK_Greek_eta                                   0x7e7
15810x03b8 #define XK_Greek_theta                                 0x7e8
15820x03b9 #define XK_Greek_iota                                  0x7e9
15830x03ba #define XK_Greek_kappa                                 0x7ea
15840x0000 #define XK_Greek_lamda                                 0x7eb
15850x03bb #define XK_Greek_lambda                                0x7eb
15860x03bc #define XK_Greek_mu                                    0x7ec
15870x03bd #define XK_Greek_nu                                    0x7ed
15880x03be #define XK_Greek_xi                                    0x7ee
15890x03bf #define XK_Greek_omicron                               0x7ef
15900x03c0 #define XK_Greek_pi                                    0x7f0
15910x03c1 #define XK_Greek_rho                                   0x7f1
15920x03c3 #define XK_Greek_sigma                                 0x7f2
15930x03c2 #define XK_Greek_finalsmallsigma                       0x7f3
15940x03c4 #define XK_Greek_tau                                   0x7f4
15950x03c5 #define XK_Greek_upsilon                               0x7f5
15960x03c6 #define XK_Greek_phi                                   0x7f6
15970x03c7 #define XK_Greek_chi                                   0x7f7
15980x03c8 #define XK_Greek_psi                                   0x7f8
15990x03c9 #define XK_Greek_omega                                 0x7f9
16000x0000 #define XK_Greek_switch         0xFF7E  /* Alias for mode_switch */
1601#endif /* XK_GREEK */
1602
1603/*
1604 * Technical
1605 * Byte 3 = 8
1606 */
1607
1608#ifdef XK_TECHNICAL
16090x23b7 #define XK_leftradical                                 0x8a1
16100x250c #define XK_topleftradical                              0x8a2
16110x2500 #define XK_horizconnector                              0x8a3
16120x2320 #define XK_topintegral                                 0x8a4
16130x2321 #define XK_botintegral                                 0x8a5
16140x2502 #define XK_vertconnector                               0x8a6
16150x23a1 #define XK_topleftsqbracket                            0x8a7
16160x23a3 #define XK_botleftsqbracket                            0x8a8
16170x23a4 #define XK_toprightsqbracket                           0x8a9
16180x23a6 #define XK_botrightsqbracket                           0x8aa
16190x239b #define XK_topleftparens                               0x8ab
16200x239d #define XK_botleftparens                               0x8ac
16210x239e #define XK_toprightparens                              0x8ad
16220x23a0 #define XK_botrightparens                              0x8ae
16230x23a8 #define XK_leftmiddlecurlybrace                        0x8af
16240x23ac #define XK_rightmiddlecurlybrace                       0x8b0
16250x0000 #define XK_topleftsummation                            0x8b1
16260x0000 #define XK_botleftsummation                            0x8b2
16270x0000 #define XK_topvertsummationconnector                   0x8b3
16280x0000 #define XK_botvertsummationconnector                   0x8b4
16290x0000 #define XK_toprightsummation                           0x8b5
16300x0000 #define XK_botrightsummation                           0x8b6
16310x0000 #define XK_rightmiddlesummation                        0x8b7
16320x2264 #define XK_lessthanequal                               0x8bc
16330x2260 #define XK_notequal                                    0x8bd
16340x2265 #define XK_greaterthanequal                            0x8be
16350x222b #define XK_integral                                    0x8bf
16360x2234 #define XK_therefore                                   0x8c0
16370x221d #define XK_variation                                   0x8c1
16380x221e #define XK_infinity                                    0x8c2
16390x2207 #define XK_nabla                                       0x8c5
16400x223c #define XK_approximate                                 0x8c8
16410x2243 #define XK_similarequal                                0x8c9
16420x2104 #define XK_ifonlyif                                    0x8cd
16430x21d2 #define XK_implies                                     0x8ce
16440x2261 #define XK_identical                                   0x8cf
16450x221a #define XK_radical                                     0x8d6
16460x2282 #define XK_includedin                                  0x8da
16470x2283 #define XK_includes                                    0x8db
16480x2229 #define XK_intersection                                0x8dc
16490x222a #define XK_union                                       0x8dd
16500x2227 #define XK_logicaland                                  0x8de
16510x2228 #define XK_logicalor                                   0x8df
16520x2202 #define XK_partialderivative                           0x8ef
16530x0192 #define XK_function                                    0x8f6
16540x2190 #define XK_leftarrow                                   0x8fb
16550x2191 #define XK_uparrow                                     0x8fc
16560x2192 #define XK_rightarrow                                  0x8fd
16570x2193 #define XK_downarrow                                   0x8fe
1658#endif /* XK_TECHNICAL */
1659
1660/*
1661 *  Special
1662 *  Byte 3 = 9
1663 */
1664
1665#ifdef XK_SPECIAL
16660x0000 #define XK_blank                                       0x9df
16670x25c6 #define XK_soliddiamond                                0x9e0
16680x2592 #define XK_checkerboard                                0x9e1
16690x2409 #define XK_ht                                          0x9e2
16700x240c #define XK_ff                                          0x9e3
16710x240d #define XK_cr                                          0x9e4
16720x240a #define XK_lf                                          0x9e5
16730x2424 #define XK_nl                                          0x9e8
16740x240b #define XK_vt                                          0x9e9
16750x2518 #define XK_lowrightcorner                              0x9ea
16760x2510 #define XK_uprightcorner                               0x9eb
16770x250c #define XK_upleftcorner                                0x9ec
16780x2514 #define XK_lowleftcorner                               0x9ed
16790x253c #define XK_crossinglines                               0x9ee
16800x23ba #define XK_horizlinescan1                              0x9ef
16810x23bb #define XK_horizlinescan3                              0x9f0
16820x2500 #define XK_horizlinescan5                              0x9f1
16830x23bc #define XK_horizlinescan7                              0x9f2
16840x23bd #define XK_horizlinescan9                              0x9f3
16850x251c #define XK_leftt                                       0x9f4
16860x2524 #define XK_rightt                                      0x9f5
16870x2534 #define XK_bott                                        0x9f6
16880x252c #define XK_topt                                        0x9f7
16890x2502 #define XK_vertbar                                     0x9f8
1690#endif /* XK_SPECIAL */
1691
1692/*
1693 *  Publishing
1694 *  Byte 3 = a
1695 */
1696
1697#ifdef XK_PUBLISHING
16980x2003 #define XK_emspace                                     0xaa1
16990x2002 #define XK_enspace                                     0xaa2
17000x2004 #define XK_em3space                                    0xaa3
17010x2005 #define XK_em4space                                    0xaa4
17020x2007 #define XK_digitspace                                  0xaa5
17030x2008 #define XK_punctspace                                  0xaa6
17040x2009 #define XK_thinspace                                   0xaa7
17050x200a #define XK_hairspace                                   0xaa8
17060x2014 #define XK_emdash                                      0xaa9
17070x2013 #define XK_endash                                      0xaaa
17080x2423 #define XK_signifblank                                 0xaac
17090x2026 #define XK_ellipsis                                    0xaae
17100x2025 #define XK_doubbaselinedot                             0xaaf
17110x2153 #define XK_onethird                                    0xab0
17120x2154 #define XK_twothirds                                   0xab1
17130x2155 #define XK_onefifth                                    0xab2
17140x2156 #define XK_twofifths                                   0xab3
17150x2157 #define XK_threefifths                                 0xab4
17160x2158 #define XK_fourfifths                                  0xab5
17170x2159 #define XK_onesixth                                    0xab6
17180x215a #define XK_fivesixths                                  0xab7
17190x2105 #define XK_careof                                      0xab8
17200x2012 #define XK_figdash                                     0xabb
17210x27e8 #define XK_leftanglebracket                            0xabc
17220x002e #define XK_decimalpoint                                0xabd
17230x27e9 #define XK_rightanglebracket                           0xabe
17240x0000 #define XK_marker                                      0xabf
17250x215b #define XK_oneeighth                                   0xac3
17260x215c #define XK_threeeighths                                0xac4
17270x215d #define XK_fiveeighths                                 0xac5
17280x215e #define XK_seveneighths                                0xac6
17290x2122 #define XK_trademark                                   0xac9
17300x2613 #define XK_signaturemark                               0xaca
17310x0000 #define XK_trademarkincircle                           0xacb
17320x25c1 #define XK_leftopentriangle                            0xacc
17330x25b7 #define XK_rightopentriangle                           0xacd
17340x25cb #define XK_emopencircle                                0xace
17350x25af #define XK_emopenrectangle                             0xacf
17360x2018 #define XK_leftsinglequotemark                         0xad0
17370x2019 #define XK_rightsinglequotemark                        0xad1
17380x201c #define XK_leftdoublequotemark                         0xad2
17390x201d #define XK_rightdoublequotemark                        0xad3
17400x211e #define XK_prescription                                0xad4
17410x2032 #define XK_minutes                                     0xad6
17420x2033 #define XK_seconds                                     0xad7
17430x271d #define XK_latincross                                  0xad9
17440x0000 #define XK_hexagram                                    0xada
17450x25ac #define XK_filledrectbullet                            0xadb
17460x25c0 #define XK_filledlefttribullet                         0xadc
17470x25b6 #define XK_filledrighttribullet                        0xadd
17480x25cf #define XK_emfilledcircle                              0xade
17490x25ae #define XK_emfilledrect                                0xadf
17500x25e6 #define XK_enopencircbullet                            0xae0
17510x25ab #define XK_enopensquarebullet                          0xae1
17520x25ad #define XK_openrectbullet                              0xae2
17530x25b3 #define XK_opentribulletup                             0xae3
17540x25bd #define XK_opentribulletdown                           0xae4
17550x2606 #define XK_openstar                                    0xae5
17560x2022 #define XK_enfilledcircbullet                          0xae6
17570x25aa #define XK_enfilledsqbullet                            0xae7
17580x25b2 #define XK_filledtribulletup                           0xae8
17590x25bc #define XK_filledtribulletdown                         0xae9
17600x261c #define XK_leftpointer                                 0xaea
17610x261e #define XK_rightpointer                                0xaeb
17620x2663 #define XK_club                                        0xaec
17630x2666 #define XK_diamond                                     0xaed
17640x2665 #define XK_heart                                       0xaee
17650x2720 #define XK_maltesecross                                0xaf0
17660x2020 #define XK_dagger                                      0xaf1
17670x2021 #define XK_doubledagger                                0xaf2
17680x2713 #define XK_checkmark                                   0xaf3
17690x2717 #define XK_ballotcross                                 0xaf4
17700x266f #define XK_musicalsharp                                0xaf5
17710x266d #define XK_musicalflat                                 0xaf6
17720x2642 #define XK_malesymbol                                  0xaf7
17730x2640 #define XK_femalesymbol                                0xaf8
17740x260e #define XK_telephone                                   0xaf9
17750x2315 #define XK_telephonerecorder                           0xafa
17760x2117 #define XK_phonographcopyright                         0xafb
17770x2038 #define XK_caret                                       0xafc
17780x201a #define XK_singlelowquotemark                          0xafd
17790x201e #define XK_doublelowquotemark                          0xafe
17800x0000 #define XK_cursor                                      0xaff
1781#endif /* XK_PUBLISHING */
1782
1783/*
1784 *  APL
1785 *  Byte 3 = b
1786 */
1787
1788#ifdef XK_APL
17890x003c #define XK_leftcaret                                   0xba3
17900x003e #define XK_rightcaret                                  0xba6
17910x2228 #define XK_downcaret                                   0xba8
17920x2227 #define XK_upcaret                                     0xba9
17930x00af #define XK_overbar                                     0xbc0
17940x22a5 #define XK_downtack                                    0xbc2
17950x2229 #define XK_upshoe                                      0xbc3
17960x230a #define XK_downstile                                   0xbc4
17970x005f #define XK_underbar                                    0xbc6
17980x2218 #define XK_jot                                         0xbca
17990x2395 #define XK_quad                                        0xbcc
18000x22a4 #define XK_uptack                                      0xbce
18010x25cb #define XK_circle                                      0xbcf
18020x2308 #define XK_upstile                                     0xbd3
18030x222a #define XK_downshoe                                    0xbd6
18040x2283 #define XK_rightshoe                                   0xbd8
18050x2282 #define XK_leftshoe                                    0xbda
18060x22a2 #define XK_lefttack                                    0xbdc
18070x22a3 #define XK_righttack                                   0xbfc
1808#endif /* XK_APL */
1809
1810/*
1811 * Hebrew
1812 * Byte 3 = c
1813 */
1814
1815#ifdef XK_HEBREW
18160x2017 #define XK_hebrew_doublelowline                        0xcdf
18170x05d0 #define XK_hebrew_aleph                                0xce0
18180x05d1 #define XK_hebrew_bet                                  0xce1
18190x0000 #define XK_hebrew_beth                                 0xce1  /* deprecated */
18200x05d2 #define XK_hebrew_gimel                                0xce2
18210x0000 #define XK_hebrew_gimmel                               0xce2  /* deprecated */
18220x05d3 #define XK_hebrew_dalet                                0xce3
18230x0000 #define XK_hebrew_daleth                               0xce3  /* deprecated */
18240x05d4 #define XK_hebrew_he                                   0xce4
18250x05d5 #define XK_hebrew_waw                                  0xce5
18260x05d6 #define XK_hebrew_zain                                 0xce6
18270x0000 #define XK_hebrew_zayin                                0xce6  /* deprecated */
18280x05d7 #define XK_hebrew_chet                                 0xce7
18290x0000 #define XK_hebrew_het                                  0xce7  /* deprecated */
18300x05d8 #define XK_hebrew_tet                                  0xce8
18310x0000 #define XK_hebrew_teth                                 0xce8  /* deprecated */
18320x05d9 #define XK_hebrew_yod                                  0xce9
18330x05da #define XK_hebrew_finalkaph                            0xcea
18340x05db #define XK_hebrew_kaph                                 0xceb
18350x05dc #define XK_hebrew_lamed                                0xcec
18360x05dd #define XK_hebrew_finalmem                             0xced
18370x05de #define XK_hebrew_mem                                  0xcee
18380x05df #define XK_hebrew_finalnun                             0xcef
18390x05e0 #define XK_hebrew_nun                                  0xcf0
18400x05e1 #define XK_hebrew_samech                               0xcf1
18410x0000 #define XK_hebrew_samekh                               0xcf1  /* deprecated */
18420x05e2 #define XK_hebrew_ayin                                 0xcf2
18430x05e3 #define XK_hebrew_finalpe                              0xcf3
18440x05e4 #define XK_hebrew_pe                                   0xcf4
18450x05e5 #define XK_hebrew_finalzade                            0xcf5
18460x0000 #define XK_hebrew_finalzadi                            0xcf5  /* deprecated */
18470x05e6 #define XK_hebrew_zade                                 0xcf6
18480x0000 #define XK_hebrew_zadi                                 0xcf6  /* deprecated */
18490x05e7 #define XK_hebrew_qoph                                 0xcf7
18500x0000 #define XK_hebrew_kuf                                  0xcf7  /* deprecated */
18510x05e8 #define XK_hebrew_resh                                 0xcf8
18520x05e9 #define XK_hebrew_shin                                 0xcf9
18530x05ea #define XK_hebrew_taw                                  0xcfa
18540x0000 #define XK_hebrew_taf                                  0xcfa  /* deprecated */
18550x0000 #define XK_Hebrew_switch        0xFF7E  /* Alias for mode_switch */
1856#endif /* XK_HEBREW */
1857
1858/*
1859 * Thai
1860 * Byte 3 = d
1861 */
1862
1863#ifdef XK_THAI
18640x0e01 #define XK_Thai_kokai                    0xda1
18650x0e02 #define XK_Thai_khokhai                    0xda2
18660x0e03 #define XK_Thai_khokhuat                0xda3
18670x0e04 #define XK_Thai_khokhwai                0xda4
18680x0e05 #define XK_Thai_khokhon                    0xda5
18690x0e06 #define XK_Thai_khorakhang                    0xda6
18700x0e07 #define XK_Thai_ngongu                    0xda7
18710x0e08 #define XK_Thai_chochan                    0xda8
18720x0e09 #define XK_Thai_choching                0xda9
18730x0e0a #define XK_Thai_chochang                0xdaa
18740x0e0b #define XK_Thai_soso                    0xdab
18750x0e0c #define XK_Thai_chochoe                    0xdac
18760x0e0d #define XK_Thai_yoying                    0xdad
18770x0e0e #define XK_Thai_dochada                    0xdae
18780x0e0f #define XK_Thai_topatak                    0xdaf
18790x0e10 #define XK_Thai_thothan                    0xdb0
18800x0e11 #define XK_Thai_thonangmontho                    0xdb1
18810x0e12 #define XK_Thai_thophuthao                    0xdb2
18820x0e13 #define XK_Thai_nonen                    0xdb3
18830x0e14 #define XK_Thai_dodek                    0xdb4
18840x0e15 #define XK_Thai_totao                    0xdb5
18850x0e16 #define XK_Thai_thothung                0xdb6
18860x0e17 #define XK_Thai_thothahan                0xdb7
18870x0e18 #define XK_Thai_thothong                 0xdb8
18880x0e19 #define XK_Thai_nonu                    0xdb9
18890x0e1a #define XK_Thai_bobaimai                0xdba
18900x0e1b #define XK_Thai_popla                    0xdbb
18910x0e1c #define XK_Thai_phophung                0xdbc
18920x0e1d #define XK_Thai_fofa                    0xdbd
18930x0e1e #define XK_Thai_phophan                    0xdbe
18940x0e1f #define XK_Thai_fofan                    0xdbf
18950x0e20 #define XK_Thai_phosamphao                    0xdc0
18960x0e21 #define XK_Thai_moma                    0xdc1
18970x0e22 #define XK_Thai_yoyak                    0xdc2
18980x0e23 #define XK_Thai_rorua                    0xdc3
18990x0e24 #define XK_Thai_ru                    0xdc4
19000x0e25 #define XK_Thai_loling                    0xdc5
19010x0e26 #define XK_Thai_lu                    0xdc6
19020x0e27 #define XK_Thai_wowaen                    0xdc7
19030x0e28 #define XK_Thai_sosala                    0xdc8
19040x0e29 #define XK_Thai_sorusi                    0xdc9
19050x0e2a #define XK_Thai_sosua                    0xdca
19060x0e2b #define XK_Thai_hohip                    0xdcb
19070x0e2c #define XK_Thai_lochula                    0xdcc
19080x0e2d #define XK_Thai_oang                    0xdcd
19090x0e2e #define XK_Thai_honokhuk                0xdce
19100x0e2f #define XK_Thai_paiyannoi                0xdcf
19110x0e30 #define XK_Thai_saraa                    0xdd0
19120x0e31 #define XK_Thai_maihanakat                0xdd1
19130x0e32 #define XK_Thai_saraaa                    0xdd2
19140x0e33 #define XK_Thai_saraam                    0xdd3
19150x0e34 #define XK_Thai_sarai                    0xdd4
19160x0e35 #define XK_Thai_saraii                    0xdd5
19170x0e36 #define XK_Thai_saraue                    0xdd6
19180x0e37 #define XK_Thai_sarauee                    0xdd7
19190x0e38 #define XK_Thai_sarau                    0xdd8
19200x0e39 #define XK_Thai_sarauu                    0xdd9
19210x0e3a #define XK_Thai_phinthu                    0xdda
19220x0000 #define XK_Thai_maihanakat_maitho               0xdde
19230x0e3f #define XK_Thai_baht                    0xddf
19240x0e40 #define XK_Thai_sarae                    0xde0
19250x0e41 #define XK_Thai_saraae                    0xde1
19260x0e42 #define XK_Thai_sarao                    0xde2
19270x0e43 #define XK_Thai_saraaimaimuan                0xde3
19280x0e44 #define XK_Thai_saraaimaimalai                0xde4
19290x0e45 #define XK_Thai_lakkhangyao                0xde5
19300x0e46 #define XK_Thai_maiyamok                0xde6
19310x0e47 #define XK_Thai_maitaikhu                0xde7
19320x0e48 #define XK_Thai_maiek                    0xde8
19330x0e49 #define XK_Thai_maitho                    0xde9
19340x0e4a #define XK_Thai_maitri                    0xdea
19350x0e4b #define XK_Thai_maichattawa                0xdeb
19360x0e4c #define XK_Thai_thanthakhat                0xdec
19370x0e4d #define XK_Thai_nikhahit                0xded
19380x0e50 #define XK_Thai_leksun                    0xdf0
19390x0e51 #define XK_Thai_leknung                    0xdf1
19400x0e52 #define XK_Thai_leksong                    0xdf2
19410x0e53 #define XK_Thai_leksam                    0xdf3
19420x0e54 #define XK_Thai_leksi                    0xdf4
19430x0e55 #define XK_Thai_lekha                    0xdf5
19440x0e56 #define XK_Thai_lekhok                    0xdf6
19450x0e57 #define XK_Thai_lekchet                    0xdf7
19460x0e58 #define XK_Thai_lekpaet                    0xdf8
19470x0e59 #define XK_Thai_lekkao                    0xdf9
1948#endif /* XK_THAI */
1949
1950/*
1951 *   Korean
1952 *   Byte 3 = e
1953 */
1954
1955#ifdef XK_KOREAN
1956
19570x0000 #define XK_Hangul        0xff31    /* Hangul start/stop(toggle) */
19580x0000 #define XK_Hangul_Start        0xff32    /* Hangul start */
19590x0000 #define XK_Hangul_End        0xff33    /* Hangul end, English start */
19600x0000 #define XK_Hangul_Hanja        0xff34    /* Start Hangul->Hanja Conversion */
19610x0000 #define XK_Hangul_Jamo        0xff35    /* Hangul Jamo mode */
19620x0000 #define XK_Hangul_Romaja    0xff36    /* Hangul Romaja mode */
19630x0000 #define XK_Hangul_Codeinput    0xff37    /* Hangul code input mode */
19640x0000 #define XK_Hangul_Jeonja    0xff38    /* Jeonja mode */
19650x0000 #define XK_Hangul_Banja        0xff39    /* Banja mode */
19660x0000 #define XK_Hangul_PreHanja    0xff3a    /* Pre Hanja conversion */
19670x0000 #define XK_Hangul_PostHanja    0xff3b    /* Post Hanja conversion */
19680x0000 #define XK_Hangul_SingleCandidate    0xff3c    /* Single candidate */
19690x0000 #define XK_Hangul_MultipleCandidate    0xff3d    /* Multiple candidate */
19700x0000 #define XK_Hangul_PreviousCandidate    0xff3e    /* Previous candidate */
19710x0000 #define XK_Hangul_Special    0xff3f    /* Special symbols */
19720x0000 #define XK_Hangul_switch    0xFF7E    /* Alias for mode_switch */
1973
1974/* Hangul Consonant Characters */
19750x3131 #define XK_Hangul_Kiyeog                0xea1
19760x3132 #define XK_Hangul_SsangKiyeog                0xea2
19770x3133 #define XK_Hangul_KiyeogSios                0xea3
19780x3134 #define XK_Hangul_Nieun                    0xea4
19790x3135 #define XK_Hangul_NieunJieuj                0xea5
19800x3136 #define XK_Hangul_NieunHieuh                0xea6
19810x3137 #define XK_Hangul_Dikeud                0xea7
19820x3138 #define XK_Hangul_SsangDikeud                0xea8
19830x3139 #define XK_Hangul_Rieul                    0xea9
19840x313a #define XK_Hangul_RieulKiyeog                0xeaa
19850x313b #define XK_Hangul_RieulMieum                0xeab
19860x313c #define XK_Hangul_RieulPieub                0xeac
19870x313d #define XK_Hangul_RieulSios                0xead
19880x313e #define XK_Hangul_RieulTieut                0xeae
19890x313f #define XK_Hangul_RieulPhieuf                0xeaf
19900x3140 #define XK_Hangul_RieulHieuh                0xeb0
19910x3141 #define XK_Hangul_Mieum                    0xeb1
19920x3142 #define XK_Hangul_Pieub                    0xeb2
19930x3143 #define XK_Hangul_SsangPieub                0xeb3
19940x3144 #define XK_Hangul_PieubSios                0xeb4
19950x3145 #define XK_Hangul_Sios                    0xeb5
19960x3146 #define XK_Hangul_SsangSios                0xeb6
19970x3147 #define XK_Hangul_Ieung                    0xeb7
19980x3148 #define XK_Hangul_Jieuj                    0xeb8
19990x3149 #define XK_Hangul_SsangJieuj                0xeb9
20000x314a #define XK_Hangul_Cieuc                    0xeba
20010x314b #define XK_Hangul_Khieuq                0xebb
20020x314c #define XK_Hangul_Tieut                    0xebc
20030x314d #define XK_Hangul_Phieuf                0xebd
20040x314e #define XK_Hangul_Hieuh                    0xebe
2005
2006 /* Hangul Vowel Characters */
20070x314f #define XK_Hangul_A                    0xebf
20080x3150 #define XK_Hangul_AE                    0xec0
20090x3151 #define XK_Hangul_YA                    0xec1
20100x3152 #define XK_Hangul_YAE                    0xec2
20110x3153 #define XK_Hangul_EO                    0xec3
20120x3154 #define XK_Hangul_E                    0xec4
20130x3155 #define XK_Hangul_YEO                    0xec5
20140x3156 #define XK_Hangul_YE                    0xec6
20150x3157 #define XK_Hangul_O                    0xec7
20160x3158 #define XK_Hangul_WA                    0xec8
20170x3159 #define XK_Hangul_WAE                    0xec9
20180x315a #define XK_Hangul_OE                    0xeca
20190x315b #define XK_Hangul_YO                    0xecb
20200x315c #define XK_Hangul_U                    0xecc
20210x315d #define XK_Hangul_WEO                    0xecd
20220x315e #define XK_Hangul_WE                    0xece
20230x315f #define XK_Hangul_WI                    0xecf
20240x3160 #define XK_Hangul_YU                    0xed0
20250x3161 #define XK_Hangul_EU                    0xed1
20260x3162 #define XK_Hangul_YI                    0xed2
20270x3163 #define XK_Hangul_I                    0xed3
2028
2029/* Hangul syllable-final (JongSeong) Characters */
20300x11a8 #define XK_Hangul_J_Kiyeog                0xed4
20310x11a9 #define XK_Hangul_J_SsangKiyeog                0xed5
20320x11aa #define XK_Hangul_J_KiyeogSios                0xed6
20330x11ab #define XK_Hangul_J_Nieun                0xed7
20340x11ac #define XK_Hangul_J_NieunJieuj                0xed8
20350x11ad #define XK_Hangul_J_NieunHieuh                0xed9
20360x11ae #define XK_Hangul_J_Dikeud                0xeda
20370x11af #define XK_Hangul_J_Rieul                0xedb
20380x11b0 #define XK_Hangul_J_RieulKiyeog                0xedc
20390x11b1 #define XK_Hangul_J_RieulMieum                0xedd
20400x11b2 #define XK_Hangul_J_RieulPieub                0xede
20410x11b3 #define XK_Hangul_J_RieulSios                0xedf
20420x11b4 #define XK_Hangul_J_RieulTieut                0xee0
20430x11b5 #define XK_Hangul_J_RieulPhieuf                0xee1
20440x11b6 #define XK_Hangul_J_RieulHieuh                0xee2
20450x11b7 #define XK_Hangul_J_Mieum                0xee3
20460x11b8 #define XK_Hangul_J_Pieub                0xee4
20470x11b9 #define XK_Hangul_J_PieubSios                0xee5
20480x11ba #define XK_Hangul_J_Sios                0xee6
20490x11bb #define XK_Hangul_J_SsangSios                0xee7
20500x11bc #define XK_Hangul_J_Ieung                0xee8
20510x11bd #define XK_Hangul_J_Jieuj                0xee9
20520x11be #define XK_Hangul_J_Cieuc                0xeea
20530x11bf #define XK_Hangul_J_Khieuq                0xeeb
20540x11c0 #define XK_Hangul_J_Tieut                0xeec
20550x11c1 #define XK_Hangul_J_Phieuf                0xeed
20560x11c2 #define XK_Hangul_J_Hieuh                0xeee
2057
2058/* Ancient Hangul Consonant Characters */
20590x316d #define XK_Hangul_RieulYeorinHieuh            0xeef
20600x3171 #define XK_Hangul_SunkyeongeumMieum            0xef0
20610x3178 #define XK_Hangul_SunkyeongeumPieub            0xef1
20620x317f #define XK_Hangul_PanSios                0xef2
20630x3181 #define XK_Hangul_KkogjiDalrinIeung            0xef3
20640x3184 #define XK_Hangul_SunkyeongeumPhieuf            0xef4
20650x3186 #define XK_Hangul_YeorinHieuh                0xef5
2066
2067/* Ancient Hangul Vowel Characters */
20680x318d #define XK_Hangul_AraeA                    0xef6
20690x318e #define XK_Hangul_AraeAE                0xef7
2070
2071/* Ancient Hangul syllable-final (JongSeong) Characters */
20720x11eb #define XK_Hangul_J_PanSios                0xef8
20730x11f0 #define XK_Hangul_J_KkogjiDalrinIeung            0xef9
20740x11f9 #define XK_Hangul_J_YeorinHieuh                0xefa
2075
2076/* Korean currency symbol */
20770x20a9 #define XK_Korean_Won                    0xeff
2078
2079#endif /* XK_KOREAN */
2080
2081/*
2082 *   Armenian
2083 *   Byte 3 = 0x14
2084 */
2085// yan: skip Armenian for the time being
2086#ifdef XK_ARMENIAN
20870x0000 #define XK_Armenian_eternity                0x14a1
20880x0000 #define XK_Armenian_ligature_ew                0x14a2
20890x0000 #define XK_Armenian_full_stop                0x14a3
20900x0000 #define XK_Armenian_verjaket                0x14a3
20910x0000 #define XK_Armenian_parenright                0x14a4
20920x0000 #define XK_Armenian_parenleft                0x14a5
20930x0000 #define XK_Armenian_guillemotright            0x14a6
20940x0000 #define XK_Armenian_guillemotleft            0x14a7
20950x0000 #define XK_Armenian_em_dash                0x14a8
20960x0000 #define XK_Armenian_dot                    0x14a9
20970x0000 #define XK_Armenian_mijaket                0x14a9
20980x0000 #define XK_Armenian_separation_mark            0x14aa
20990x0000 #define XK_Armenian_but                    0x14aa
21000x0000 #define XK_Armenian_comma                0x14ab
21010x0000 #define XK_Armenian_en_dash                0x14ac
21020x0000 #define XK_Armenian_hyphen                0x14ad
21030x0000 #define XK_Armenian_yentamna                0x14ad
21040x0000 #define XK_Armenian_ellipsis                0x14ae
21050x0000 #define XK_Armenian_exclam                0x14af
21060x0000 #define XK_Armenian_amanak                0x14af
21070x0000 #define XK_Armenian_accent                0x14b0
21080x0000 #define XK_Armenian_shesht                0x14b0
21090x0000 #define XK_Armenian_question                0x14b1
21100x0000 #define XK_Armenian_paruyk                0x14b1
21110x0000 #define XK_Armenian_AYB                    0x14b2
21120x0000 #define XK_Armenian_ayb                    0x14b3
21130x0000 #define XK_Armenian_BEN                    0x14b4
21140x0000 #define XK_Armenian_ben                    0x14b5
21150x0000 #define XK_Armenian_GIM                    0x14b6
21160x0000 #define XK_Armenian_gim                    0x14b7
21170x0000 #define XK_Armenian_DA                    0x14b8
21180x0000 #define XK_Armenian_da                    0x14b9
21190x0000 #define XK_Armenian_YECH                0x14ba
21200x0000 #define XK_Armenian_yech                0x14bb
21210x0000 #define XK_Armenian_ZA                    0x14bc
21220x0000 #define XK_Armenian_za                    0x14bd
21230x0000 #define XK_Armenian_E                    0x14be
21240x0000 #define XK_Armenian_e                    0x14bf
21250x0000 #define XK_Armenian_AT                    0x14c0
21260x0000 #define XK_Armenian_at                    0x14c1
21270x0000 #define XK_Armenian_TO                    0x14c2
21280x0000 #define XK_Armenian_to                    0x14c3
21290x0000 #define XK_Armenian_ZHE                    0x14c4
21300x0000 #define XK_Armenian_zhe                    0x14c5
21310x0000 #define XK_Armenian_INI                    0x14c6
21320x0000 #define XK_Armenian_ini                    0x14c7
21330x0000 #define XK_Armenian_LYUN                0x14c8
21340x0000 #define XK_Armenian_lyun                0x14c9
21350x0000 #define XK_Armenian_KHE                    0x14ca
21360x0000 #define XK_Armenian_khe                    0x14cb
21370x0000 #define XK_Armenian_TSA                    0x14cc
21380x0000 #define XK_Armenian_tsa                    0x14cd
21390x0000 #define XK_Armenian_KEN                    0x14ce
21400x0000 #define XK_Armenian_ken                    0x14cf
21410x0000 #define XK_Armenian_HO                    0x14d0
21420x0000 #define XK_Armenian_ho                    0x14d1
21430x0000 #define XK_Armenian_DZA                    0x14d2
21440x0000 #define XK_Armenian_dza                    0x14d3
21450x0000 #define XK_Armenian_GHAT                0x14d4
21460x0000 #define XK_Armenian_ghat                0x14d5
21470x0000 #define XK_Armenian_TCHE                0x14d6
21480x0000 #define XK_Armenian_tche                0x14d7
21490x0000 #define XK_Armenian_MEN                    0x14d8
21500x0000 #define XK_Armenian_men                    0x14d9
21510x0000 #define XK_Armenian_HI                    0x14da
21520x0000 #define XK_Armenian_hi                    0x14db
21530x0000 #define XK_Armenian_NU                    0x14dc
21540x0000 #define XK_Armenian_nu                    0x14dd
21550x0000 #define XK_Armenian_SHA                    0x14de
21560x0000 #define XK_Armenian_sha                    0x14df
21570x0000 #define XK_Armenian_VO                    0x14e0
21580x0000 #define XK_Armenian_vo                    0x14e1
21590x0000 #define XK_Armenian_CHA                    0x14e2
21600x0000 #define XK_Armenian_cha                    0x14e3
21610x0000 #define XK_Armenian_PE                    0x14e4
21620x0000 #define XK_Armenian_pe                    0x14e5
21630x0000 #define XK_Armenian_JE                    0x14e6
21640x0000 #define XK_Armenian_je                    0x14e7
21650x0000 #define XK_Armenian_RA                    0x14e8
21660x0000 #define XK_Armenian_ra                    0x14e9
21670x0000 #define XK_Armenian_SE                    0x14ea
21680x0000 #define XK_Armenian_se                    0x14eb
21690x0000 #define XK_Armenian_VEV                    0x14ec
21700x0000 #define XK_Armenian_vev                    0x14ed
21710x0000 #define XK_Armenian_TYUN                0x14ee
21720x0000 #define XK_Armenian_tyun                0x14ef
21730x0000 #define XK_Armenian_RE                    0x14f0
21740x0000 #define XK_Armenian_re                    0x14f1
21750x0000 #define XK_Armenian_TSO                    0x14f2
21760x0000 #define XK_Armenian_tso                    0x14f3
21770x0000 #define XK_Armenian_VYUN                0x14f4
21780x0000 #define XK_Armenian_vyun                0x14f5
21790x0000 #define XK_Armenian_PYUR                0x14f6
21800x0000 #define XK_Armenian_pyur                0x14f7
21810x0000 #define XK_Armenian_KE                    0x14f8
21820x0000 #define XK_Armenian_ke                    0x14f9
21830x0000 #define XK_Armenian_O                    0x14fa
21840x0000 #define XK_Armenian_o                    0x14fb
21850x0000 #define XK_Armenian_FE                    0x14fc
21860x0000 #define XK_Armenian_fe                    0x14fd
21870x0000 #define XK_Armenian_apostrophe                0x14fe
21880x0000 #define XK_Armenian_section_sign            0x14ff
2189#endif /* XK_ARMENIAN */
2190
2191/*
2192 *   Georgian
2193 *   Byte 3 = 0x15
2194 */
2195//yan: skip Georgian for now;
2196#ifdef XK_GEORGIAN
21970x0000 #define XK_Georgian_an                    0x15d0
21980x0000 #define XK_Georgian_ban                    0x15d1
21990x0000 #define XK_Georgian_gan                    0x15d2
22000x0000 #define XK_Georgian_don                    0x15d3
22010x0000 #define XK_Georgian_en                    0x15d4
22020x0000 #define XK_Georgian_vin                    0x15d5
22030x0000 #define XK_Georgian_zen                    0x15d6
22040x0000 #define XK_Georgian_tan                    0x15d7
22050x0000 #define XK_Georgian_in                    0x15d8
22060x0000 #define XK_Georgian_kan                    0x15d9
22070x0000 #define XK_Georgian_las                    0x15da
22080x0000 #define XK_Georgian_man                    0x15db
22090x0000 #define XK_Georgian_nar                    0x15dc
22100x0000 #define XK_Georgian_on                    0x15dd
22110x0000 #define XK_Georgian_par                    0x15de
22120x0000 #define XK_Georgian_zhar                0x15df
22130x0000 #define XK_Georgian_rae                    0x15e0
22140x0000 #define XK_Georgian_san                    0x15e1
22150x0000 #define XK_Georgian_tar                    0x15e2
22160x0000 #define XK_Georgian_un                    0x15e3
22170x0000 #define XK_Georgian_phar                0x15e4
22180x0000 #define XK_Georgian_khar                0x15e5
22190x0000 #define XK_Georgian_ghan                0x15e6
22200x0000 #define XK_Georgian_qar                    0x15e7
22210x0000 #define XK_Georgian_shin                0x15e8
22220x0000 #define XK_Georgian_chin                0x15e9
22230x0000 #define XK_Georgian_can                    0x15ea
22240x0000 #define XK_Georgian_jil                    0x15eb
22250x0000 #define XK_Georgian_cil                    0x15ec
22260x0000 #define XK_Georgian_char                0x15ed
22270x0000 #define XK_Georgian_xan                    0x15ee
22280x0000 #define XK_Georgian_jhan                0x15ef
22290x0000 #define XK_Georgian_hae                    0x15f0
22300x0000 #define XK_Georgian_he                    0x15f1
22310x0000 #define XK_Georgian_hie                    0x15f2
22320x0000 #define XK_Georgian_we                    0x15f3
22330x0000 #define XK_Georgian_har                    0x15f4
22340x0000 #define XK_Georgian_hoe                    0x15f5
22350x0000 #define XK_Georgian_fi                    0x15f6
2236#endif /* XK_GEORGIAN */
2237
2238/*
2239 * Azeri (and other Turkic or Caucasian languages of ex-USSR)
2240 * Byte 3 = 0x16
2241 */
2242
2243#ifdef XK_CAUCASUS
2244/* latin */
22450x0000 #define XK_Ccedillaabovedot    0x16a2
22460x1e8a #define XK_Xabovedot        0x16a3
22470x0000 #define XK_Qabovedot        0x16a5
22480x012c #define    XK_Ibreve        0x16a6
22490x0000 #define XK_IE            0x16a7
22500x0000 #define XK_UO            0x16a8
22510x01b5 #define XK_Zstroke        0x16a9
22520x01e6 #define    XK_Gcaron        0x16aa
22530x019f #define    XK_Obarred        0x16af
22540x0000 #define XK_ccedillaabovedot    0x16b2
22550x1e8b #define XK_xabovedot        0x16b3
22560x0000 #define    XK_Ocaron        0x16b4
22570x0000 #define XK_qabovedot        0x16b5
22580x012d #define    XK_ibreve        0x16b6
22590x0000 #define XK_ie            0x16b7
22600x0000 #define XK_uo            0x16b8
22610x01b6 #define XK_zstroke        0x16b9
22620x01e7 #define    XK_gcaron        0x16ba
22630x01d2 #define    XK_ocaron        0x16bd
22640x0275 #define    XK_obarred        0x16bf
22650x018f #define XK_SCHWA        0x16c6
22660x0259 #define XK_schwa        0x16f6
2267/* those are not really Caucasus, but I put them here for now */
2268/* For Inupiak */
2269// yan: is there unicode for Inupiak or Guarani at all?
22700x0000 #define XK_Lbelowdot        0x16d1
22710x0000 #define XK_Lstrokebelowdot    0x16d2
22720x0000 #define XK_lbelowdot        0x16e1
22730x0000 #define XK_lstrokebelowdot    0x16e2
2274/* For Guarani */
22750x0000 #define XK_Gtilde        0x16d3
22760x0000 #define XK_gtilde        0x16e3
2277#endif /* XK_CAUCASUS */
2278
2279/*
2280 *   Vietnamese
2281 *   Byte 3 = 0x1e
2282 */
2283
2284#ifdef XK_VIETNAMESE
22850x1ea0 #define XK_Abelowdot                    0x1ea0
22860x1ea1 #define XK_abelowdot                    0x1ea1
22870x1ea2 #define XK_Ahook                    0x1ea2
22880x1ea3 #define XK_ahook                    0x1ea3
22890x1ea4 #define XK_Acircumflexacute                0x1ea4
22900x1ea5 #define XK_acircumflexacute                0x1ea5
22910x1ea6 #define XK_Acircumflexgrave                0x1ea6
22920x1ea7 #define XK_acircumflexgrave                0x1ea7
22930x1ea8 #define XK_Acircumflexhook                0x1ea8
22940x1ea9 #define XK_acircumflexhook                0x1ea9
22950x1eaa #define XK_Acircumflextilde                0x1eaa
22960x1eab #define XK_acircumflextilde                0x1eab
22970x1eac #define XK_Acircumflexbelowdot                0x1eac
22980x1ead #define XK_acircumflexbelowdot                0x1ead
22990x1eae #define XK_Abreveacute                    0x1eae
23000x1eaf #define XK_abreveacute                    0x1eaf
23010x1eb0 #define XK_Abrevegrave                    0x1eb0
23020x1eb1 #define XK_abrevegrave                    0x1eb1
23030x1eb2 #define XK_Abrevehook                    0x1eb2
23040x1eb3 #define XK_abrevehook                    0x1eb3
23050x1eb4 #define XK_Abrevetilde                    0x1eb4
23060x1eb5 #define XK_abrevetilde                    0x1eb5
23070x1eb6 #define XK_Abrevebelowdot                0x1eb6
23080x1eb7 #define XK_abrevebelowdot                0x1eb7
23090x1eb8 #define XK_Ebelowdot                    0x1eb8
23100x1eb9 #define XK_ebelowdot                    0x1eb9
23110x1eba #define XK_Ehook                    0x1eba
23120x1ebb #define XK_ehook                    0x1ebb
23130x1ebc #define XK_Etilde                    0x1ebc
23140x1ebd #define XK_etilde                    0x1ebd
23150x1ebe #define XK_Ecircumflexacute                0x1ebe
23160x1ebf #define XK_ecircumflexacute                0x1ebf
23170x1ec0 #define XK_Ecircumflexgrave                0x1ec0
23180x1ec1 #define XK_ecircumflexgrave                0x1ec1
23190x1ec2 #define XK_Ecircumflexhook                0x1ec2
23200x1ec3 #define XK_ecircumflexhook                0x1ec3
23210x1ec4 #define XK_Ecircumflextilde                0x1ec4
23220x1ec5 #define XK_ecircumflextilde                0x1ec5
23230x1ec6 #define XK_Ecircumflexbelowdot                0x1ec6
23240x1ec7 #define XK_ecircumflexbelowdot                0x1ec7
23250x1ec8 #define XK_Ihook                    0x1ec8
23260x1ec9 #define XK_ihook                    0x1ec9
23270x1eca #define XK_Ibelowdot                    0x1eca
23280x1ecb #define XK_ibelowdot                    0x1ecb
23290x1ecc #define XK_Obelowdot                    0x1ecc
23300x1ecd #define XK_obelowdot                    0x1ecd
23310x1ece #define XK_Ohook                    0x1ece
23320x1ecf #define XK_ohook                    0x1ecf
23330x1ed0 #define XK_Ocircumflexacute                0x1ed0
23340x1ed1 #define XK_ocircumflexacute                0x1ed1
23350x1ed2 #define XK_Ocircumflexgrave                0x1ed2
23360x1ed3 #define XK_ocircumflexgrave                0x1ed3
23370x1ed4 #define XK_Ocircumflexhook                0x1ed4
23380x1ed5 #define XK_ocircumflexhook                0x1ed5
23390x1ed6 #define XK_Ocircumflextilde                0x1ed6
23400x1ed7 #define XK_ocircumflextilde                0x1ed7
23410x1ed8 #define XK_Ocircumflexbelowdot                0x1ed8
23420x1ed9 #define XK_ocircumflexbelowdot                0x1ed9
23430x1eda #define XK_Ohornacute                    0x1eda
23440x1edb #define XK_ohornacute                    0x1edb
23450x1edc #define XK_Ohorngrave                    0x1edc
23460x1edd #define XK_ohorngrave                    0x1edd
23470x1ede #define XK_Ohornhook                    0x1ede
23480x1edf #define XK_ohornhook                    0x1edf
23490x1ee0 #define XK_Ohorntilde                    0x1ee0
23500x1ee1 #define XK_ohorntilde                    0x1ee1
23510x1ee2 #define XK_Ohornbelowdot                0x1ee2
23520x1ee3 #define XK_ohornbelowdot                0x1ee3
23530x1ee4 #define XK_Ubelowdot                    0x1ee4
23540x1ee5 #define XK_ubelowdot                    0x1ee5
23550x1ee6 #define XK_Uhook                    0x1ee6
23560x1ee7 #define XK_uhook                    0x1ee7
23570x1ee8 #define XK_Uhornacute                    0x1ee8
23580x1ee9 #define XK_uhornacute                    0x1ee9
23590x1eea #define XK_Uhorngrave                    0x1eea
23600x1eeb #define XK_uhorngrave                    0x1eeb
23610x1eec #define XK_Uhornhook                    0x1eec
23620x1eed #define XK_uhornhook                    0x1eed
23630x1eee #define XK_Uhorntilde                    0x1eee
23640x1eef #define XK_uhorntilde                    0x1eef
23650x1ef0 #define XK_Uhornbelowdot                0x1ef0
23660x1ef1 #define XK_uhornbelowdot                0x1ef1
23670x1ef4 #define XK_Ybelowdot                    0x1ef4
23680x1ef5 #define XK_ybelowdot                    0x1ef5
23690x1ef6 #define XK_Yhook                    0x1ef6
23700x1ef7 #define XK_yhook                    0x1ef7
23710x1ef8 #define XK_Ytilde                    0x1ef8
23720x1ef9 #define XK_ytilde                    0x1ef9
23730x01a0 #define XK_Ohorn                    0x1efa /* U+01a0 */
23740x01a1 #define XK_ohorn                    0x1efb /* U+01a1 */
23750x01af #define XK_Uhorn                    0x1efc /* U+01af */
23760x01b0 #define XK_uhorn                    0x1efd /* U+01b0 */
2377
23780x0000 #define XK_combining_tilde                0x1e9f /* U+0303 */
23790x0000 #define XK_combining_grave                0x1ef2 /* U+0300 */
23800x0000 #define XK_combining_acute                0x1ef3 /* U+0301 */
23810x0000 #define XK_combining_hook                0x1efe /* U+0309 */
23820x0000 #define XK_combining_belowdot                0x1eff /* U+0323 */
2383#endif /* XK_VIETNAMESE */
2384
2385#ifdef XK_CURRENCY
23860x20a0 #define XK_EcuSign                    0x20a0
23870x20a1 #define XK_ColonSign                    0x20a1
23880x20a2 #define XK_CruzeiroSign                    0x20a2
23890x20a3 #define XK_FFrancSign                    0x20a3
23900x20a4 #define XK_LiraSign                    0x20a4
23910x20a5 #define XK_MillSign                    0x20a5
23920x20a6 #define XK_NairaSign                    0x20a6
23930x20a7 #define XK_PesetaSign                    0x20a7
23940x20a8 #define XK_RupeeSign                    0x20a8
23950x20a9 #define XK_WonSign                    0x20a9
23960x20aa #define XK_NewSheqelSign                0x20aa
23970x20ab #define XK_DongSign                    0x20ab
23980x20ac #define XK_EuroSign                    0x20ac
2399#endif
2400
2401//yan: keysyms from vendor headers go here. I don't know  many though.
2402
24030x0008  #define  osfXK_BackSpace 0x1004FF08
24040x001b  #define  osfXK_Escape   0x1004FF1B
2405//XXX ? Esc on Solaris?, to check
24060x0000  #define  osfXK_Cancel   0x1004FF69
24070x007f  #define  osfXK_Delete   0x1004FFFF
2408
2409tojava
2410tojava         //XXX fill keysym2JavaKeycodeHash.
2411tojava
2412tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_a),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_A, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2413tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_b),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_B, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2414tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_c),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_C, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2415tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_d),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_D, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2416tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_e),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_E, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2417tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_f),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2418tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_g),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_G, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2419tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_h),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_H, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2420tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_i),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_I, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2421tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_j),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_J, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2422tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_k),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_K, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2423tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_l),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_L, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2424tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_m),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_M, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2425tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_n),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_N, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2426tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_o),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_O, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2427tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_p),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_P, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2428tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_q),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_Q, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2429tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_r),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_R, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2430tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_s),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_S, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2431tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_t),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_T, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2432tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_u),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_U, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2433tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_v),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_V, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2434tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_w),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_W, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2435tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_x),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_X, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2436tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_y),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_Y, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2437tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_z),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_Z, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2438tojava
2439tojava             /* TTY Function keys */
2440tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_BackSpace),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_BACK_SPACE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2441tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Tab),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_TAB, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2442tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_ISO_Left_Tab),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_TAB, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2443tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Clear),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CLEAR, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2444tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Return),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ENTER, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2445tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Linefeed),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ENTER, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2446tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Pause),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAUSE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2447tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F21),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAUSE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2448tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_R1),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAUSE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2449tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Scroll_Lock),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_SCROLL_LOCK, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2450tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F23),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_SCROLL_LOCK, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2451tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_R3),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_SCROLL_LOCK, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2452tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Escape),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ESCAPE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2453tojava
2454tojava             /* Other vendor-specific versions of TTY Function keys */
2455tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_BackSpace),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_BACK_SPACE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2456tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Clear),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CLEAR, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2457tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Escape),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ESCAPE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2458tojava
2459tojava             /* Modifier keys */
2460tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Shift_L),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_SHIFT, java.awt.event.KeyEvent.KEY_LOCATION_LEFT));
2461tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Shift_R),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_SHIFT, java.awt.event.KeyEvent.KEY_LOCATION_RIGHT));
2462tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Control_L),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CONTROL, java.awt.event.KeyEvent.KEY_LOCATION_LEFT));
2463tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Control_R),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CONTROL, java.awt.event.KeyEvent.KEY_LOCATION_RIGHT));
2464tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Alt_L),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALT, java.awt.event.KeyEvent.KEY_LOCATION_LEFT));
2465tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Alt_R),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALT, java.awt.event.KeyEvent.KEY_LOCATION_RIGHT));
2466tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Meta_L),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_META, java.awt.event.KeyEvent.KEY_LOCATION_LEFT));
2467tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Meta_R),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_META, java.awt.event.KeyEvent.KEY_LOCATION_RIGHT));
2468tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Caps_Lock),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CAPS_LOCK, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2469tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Shift_Lock),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CAPS_LOCK, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2470tojava
2471tojava             /* Misc Functions */
2472tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Print),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PRINTSCREEN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2473tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F22),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PRINTSCREEN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2474tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_R2),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PRINTSCREEN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2475tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Cancel),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CANCEL, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2476tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Help),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_HELP, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2477tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Num_Lock),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NUM_LOCK, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2478tojava
2479tojava             /* Other vendor-specific versions of Misc Functions */
2480tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Cancel),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CANCEL, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2481tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Help),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_HELP, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2482tojava
2483tojava             /* Rectangular Navigation Block */
2484tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Home),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_HOME, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2485tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_R7),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_HOME, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2486tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Page_Up),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_UP, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2487tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Prior),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_UP, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2488tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_R9),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_UP, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2489tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Page_Down),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_DOWN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2490tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Next),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_DOWN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2491tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_R15),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_DOWN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2492tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_End),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_END, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2493tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_R13),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_END, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2494tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Insert),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_INSERT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2495tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Delete),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DELETE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2496tojava
2497tojava             /* Keypad equivalents of Rectangular Navigation Block */
2498tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Home),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_HOME, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2499tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Page_Up),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_UP, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2500tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Prior),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_UP, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2501tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Page_Down),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_DOWN, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2502tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Next),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_DOWN, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2503tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_End),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_END, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2504tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Insert),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_INSERT, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2505tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Delete),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DELETE, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2506tojava
2507tojava             /* Other vendor-specific Rectangular Navigation Block */
2508tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_PageUp),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_UP, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2509tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Prior),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_UP, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2510tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_PageDown),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_DOWN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2511tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Next),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PAGE_DOWN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2512tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_EndLine),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_END, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2513tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Insert),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_INSERT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2514tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Delete),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DELETE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2515tojava
2516tojava             /* Triangular Navigation Block */
2517tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Left),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_LEFT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2518tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Up),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UP, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2519tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Right),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_RIGHT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2520tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Down),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DOWN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2521tojava
2522tojava             /* Keypad equivalents of Triangular Navigation Block */
2523tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Left),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_KP_LEFT, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2524tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Up),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_KP_UP, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2525tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Right),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_KP_RIGHT, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2526tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Down),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_KP_DOWN, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2527tojava
2528tojava             /* Other vendor-specific Triangular Navigation Block */
2529tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Left),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_LEFT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2530tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Up),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UP, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2531tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Right),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_RIGHT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2532tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Down),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DOWN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2533tojava
2534tojava             /* Remaining Cursor control & motion */
2535tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Begin),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_BEGIN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2536tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Begin),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_BEGIN, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2537tojava
2538tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_0),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_0, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2539tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_1),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_1, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2540tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_2),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_2, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2541tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_3),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_3, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2542tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_4),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_4, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2543tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_5),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_5, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2544tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_6),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_6, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2545tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_7),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_7, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2546tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_8),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_8, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2547tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_9),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_9, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2548tojava
2549tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_space),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_SPACE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2550tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_exclam),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_EXCLAMATION_MARK, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2551tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_quotedbl),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_QUOTEDBL, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2552tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_numbersign),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NUMBER_SIGN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2553tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dollar),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DOLLAR, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2554tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_ampersand),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_AMPERSAND, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2555tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_apostrophe),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_QUOTE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2556tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_parenleft),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_LEFT_PARENTHESIS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2557tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_parenright),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_RIGHT_PARENTHESIS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2558tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_asterisk),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ASTERISK, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2559tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_plus),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PLUS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2560tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_comma),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_COMMA, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2561tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_minus),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_MINUS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2562tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_period),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PERIOD, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2563tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_slash),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_SLASH, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2564tojava
2565tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_colon),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_COLON, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2566tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_semicolon),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_SEMICOLON, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2567tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_less),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_LESS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2568tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_equal),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_EQUALS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2569tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_greater),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_GREATER, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2570tojava
2571tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_at),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_AT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2572tojava
2573tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_bracketleft),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_OPEN_BRACKET, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2574tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_backslash),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_BACK_SLASH, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2575tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_bracketright),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CLOSE_BRACKET, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2576tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_asciicircum),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CIRCUMFLEX, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2577tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_underscore),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDERSCORE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2578tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Super_L),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_WINDOWS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2579tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Super_R),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_WINDOWS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2580tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Menu),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CONTEXT_MENU, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2581tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_grave),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_BACK_QUOTE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2582tojava
2583tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_braceleft),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_BRACELEFT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2584tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_braceright),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_BRACERIGHT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2585tojava
2586tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_exclamdown),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_INVERTED_EXCLAMATION_MARK, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2587tojava
2588tojava             /* Remaining Numeric Keypad Keys */
2589tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_0),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NUMPAD0, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2590tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_1),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NUMPAD1, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2591tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_2),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NUMPAD2, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2592tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_3),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NUMPAD3, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2593tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_4),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NUMPAD4, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2594tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_5),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NUMPAD5, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2595tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_6),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NUMPAD6, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2596tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_7),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NUMPAD7, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2597tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_8),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NUMPAD8, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2598tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_9),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NUMPAD9, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2599tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Space),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_SPACE, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2600tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Tab),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_TAB, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2601tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Enter),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ENTER, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2602tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Equal),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_EQUALS, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2603tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_R4),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_EQUALS, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2604tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Multiply),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_MULTIPLY, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2605tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F26),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_MULTIPLY, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2606tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_R6),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_MULTIPLY, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2607tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Add),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ADD, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2608tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Separator),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_SEPARATOR, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2609tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Subtract),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_SUBTRACT, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2610tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F24),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_SUBTRACT, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2611tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Decimal),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DECIMAL, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2612tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_KP_Divide),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DIVIDE, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2613tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F25),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DIVIDE, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2614tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_R5),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DIVIDE, java.awt.event.KeyEvent.KEY_LOCATION_NUMPAD));
2615tojava
2616tojava             /* Function Keys */
2617tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F1),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F1, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2618tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F2),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F2, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2619tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F3),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F3, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2620tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F4),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F4, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2621tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F5),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F5, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2622tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F6),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F6, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2623tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F7),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F7, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2624tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F8),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F8, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2625tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F9),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F9, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2626tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F10),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F10, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2627tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F11),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F11, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2628tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_F12),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F12, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2629tojava
2630tojava             /* Sun vendor-specific version of F11 and F12 */
2631tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_F36),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F11, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2632tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_F37),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_F12, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2633tojava
2634tojava             /* X11 keysym names for input method related keys don't always
2635tojava              * match keytop engravings or Java virtual key names, so here we
2636tojava              * only map constants that we've found on real keyboards.
2637tojava              */
2638tojava             /* Type 5c Japanese keyboard: kakutei */
2639tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Execute),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ACCEPT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2640tojava             /* Type 5c Japanese keyboard: henkan */
2641tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Kanji),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CONVERT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2642tojava             /* Type 5c Japanese keyboard: nihongo */
2643tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Henkan_Mode),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_INPUT_METHOD_ON_OFF, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2644tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Eisu_Shift   ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALPHANUMERIC       , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2645tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Eisu_toggle  ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALPHANUMERIC       , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2646tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Zenkaku      ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_FULL_WIDTH         , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2647tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Hankaku      ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_HALF_WIDTH         , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2648tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Hiragana     ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_HIRAGANA           , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2649tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Katakana     ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_KATAKANA           , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2650tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Romaji       ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_JAPANESE_ROMAN     , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2651tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Kana_Shift   ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_KANA               , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2652tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Kana_Lock    ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_KANA_LOCK          , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2653tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Muhenkan     ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_NONCONVERT         , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2654tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Zen_Koho     ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALL_CANDIDATES     , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2655tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Kanji_Bangou ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CODE_INPUT         , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2656tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Mae_Koho     ), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PREVIOUS_CANDIDATE , java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2657tojava
2658tojava
2659tojava             /* VK_KANA_LOCK is handled separately because it generates the
2660tojava              * same keysym as ALT_GRAPH in spite of its different behavior.
2661tojava              */
2662tojava
2663tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Multi_key),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_COMPOSE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2664tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Mode_switch),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALT_GRAPH, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2665tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_ISO_Level3_Shift),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALT_GRAPH, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2666tojava
2667tojava             /* Editing block */
2668tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Redo),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_AGAIN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2669tojava         // XXX XK_L2 == F12; TODO: add code to use only one of them depending on the keyboard type. For now, restore
2670tojava         // good PC behavior and bad but old Sparc behavior.
2671tojava         // keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_L2),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_AGAIN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2672tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Undo),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDO, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2673tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_L4),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDO, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2674tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_L6),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_COPY, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2675tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_L8),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PASTE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2676tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_L10),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CUT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2677tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Find),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_FIND, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2678tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_L9),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_FIND, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2679tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_L3),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PROPS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2680tojava         // XXX XK_L1 == F11; TODO: add code to use only one of them depending on the keyboard type. For now, restore
2681tojava         // good PC behavior and bad but old Sparc behavior.
2682tojava         // keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_L1),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_STOP, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2683tojava
2684tojava             /* Sun vendor-specific versions for editing block */
2685tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_Again),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_AGAIN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2686tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_Undo),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDO, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2687tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_Copy),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_COPY, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2688tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_Paste),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PASTE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2689tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_Cut),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CUT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2690tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_Find),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_FIND, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2691tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_Props),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PROPS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2692tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_Stop),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_STOP, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2693tojava
2694tojava             /* Apollo (HP) vendor-specific versions for editing block */
2695tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.apXK_Copy),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_COPY, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2696tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.apXK_Cut),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CUT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2697tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.apXK_Paste),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PASTE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2698tojava
2699tojava             /* Other vendor-specific versions for editing block */
2700tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Copy),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_COPY, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2701tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Cut),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_CUT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2702tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Paste),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_PASTE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2703tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.osfXK_Undo),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDO, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2704tojava
2705tojava             /* Dead key mappings (for European keyboards) */
2706tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_grave),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_GRAVE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2707tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_acute),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_ACUTE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2708tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_circumflex),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_CIRCUMFLEX, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2709tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_tilde),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_TILDE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2710tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_macron),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_MACRON, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2711tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_breve),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_BREVE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2712tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_abovedot),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_ABOVEDOT, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2713tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_diaeresis),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_DIAERESIS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2714tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_abovering),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_ABOVERING, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2715tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_doubleacute),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_DOUBLEACUTE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2716tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_caron),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_CARON, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2717tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_cedilla),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_CEDILLA, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2718tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_ogonek),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_OGONEK, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2719tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_iota),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_IOTA, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2720tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_voiced_sound),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_VOICED_SOUND, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2721tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_dead_semivoiced_sound),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_SEMIVOICED_SOUND, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2722tojava
2723tojava             /* Sun vendor-specific dead key mappings (for European keyboards) */
2724tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_FA_Grave),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_GRAVE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2725tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_FA_Circum),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_CIRCUMFLEX, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2726tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_FA_Tilde),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_TILDE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2727tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_FA_Acute),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_ACUTE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2728tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_FA_Diaeresis),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_DIAERESIS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2729tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.SunXK_FA_Cedilla),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_CEDILLA, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2730tojava
2731tojava             /* DEC vendor-specific dead key mappings (for European keyboards) */
2732tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.DXK_ring_accent),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_ABOVERING, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2733tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.DXK_circumflex_accent),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_CIRCUMFLEX, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2734tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.DXK_cedilla_accent),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_CEDILLA, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2735tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.DXK_acute_accent),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_ACUTE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2736tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.DXK_grave_accent),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_GRAVE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2737tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.DXK_tilde),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_TILDE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2738tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.DXK_diaeresis),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_DIAERESIS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2739tojava
2740tojava             /* Other vendor-specific dead key mappings (for European keyboards) */
2741tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.hpXK_mute_acute),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_ACUTE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2742tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.hpXK_mute_grave),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_GRAVE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2743tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.hpXK_mute_asciicircum),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_CIRCUMFLEX, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2744tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.hpXK_mute_diaeresis),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_DIAERESIS, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2745tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.hpXK_mute_asciitilde),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_DEAD_TILDE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD));
2746tojava
2747tojava         keysym2JavaKeycodeHash.put( Long.valueOf(XConstants.NoSymbol),     new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDEFINED, java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN));
2748tojava
2749tojava         /* Reverse search of keysym by keycode. */
2750tojava
2751tojava         /* Add keyboard locking codes. */
2752tojava         javaKeycode2KeysymHash.put( java.awt.event.KeyEvent.VK_CAPS_LOCK, XKeySymConstants.XK_Caps_Lock);
2753tojava         javaKeycode2KeysymHash.put( java.awt.event.KeyEvent.VK_NUM_LOCK, XKeySymConstants.XK_Num_Lock);
2754tojava         javaKeycode2KeysymHash.put( java.awt.event.KeyEvent.VK_SCROLL_LOCK, XKeySymConstants.XK_Scroll_Lock);
2755tojava         javaKeycode2KeysymHash.put( java.awt.event.KeyEvent.VK_KANA_LOCK, XKeySymConstants.XK_Kana_Lock);
2756tojava     };
2757tojava
2758tojava }
2759