gdkmain-win32.c

Go to the documentation of this file.
00001 /* GDK - The GIMP Drawing Kit
00002  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
00003  * Copyright (C) 1998-1999 Tor Lillqvist
00004  *
00005  * This library is free software; you can redistribute it and/or
00006  * modify it under the terms of the GNU Library General Public
00007  * License as published by the Free Software Foundation; either
00008  * version 2 of the License, or (at your option) any later version.
00009  *
00010  * This library is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  * Library General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU Library General Public
00016  * License along with this library; if not, write to the
00017  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00018  * Boston, MA 02111-1307, USA.
00019  */
00020 
00021 /*
00022  * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
00023  * file for a list of people on the GTK+ Team.  See the ChangeLog
00024  * files for a list of changes.  These files are distributed with
00025  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
00026  */
00027 
00028 #include "config.h"
00029 
00030 #include <stdio.h>
00031 #include <stdlib.h>
00032 #include <string.h>
00033 #include <limits.h>
00034 #include <io.h>
00035 
00036 #include "gdk.h"
00037 #include "gdkprivate-win32.h"
00038 #include "gdkinputprivate.h"
00039 #include "gdkkeysyms.h"
00040 
00041 #include <objbase.h>
00042 
00043 static gboolean gdk_synchronize = FALSE;
00044 
00045 GdkArgDesc _gdk_windowing_args[] = {
00046    {"sync", GDK_ARG_BOOL, &gdk_synchronize, (GdkArgFunc) NULL},
00047    {"no-wintab", GDK_ARG_BOOL, &gdk_input_ignore_wintab,
00048     (GdkArgFunc) NULL},
00049    {"ignore-wintab", GDK_ARG_BOOL, &gdk_input_ignore_wintab,
00050     (GdkArgFunc) NULL},
00051    {"event-func-from-window-proc",
00052     GDK_ARG_BOOL, &gdk_event_func_from_window_proc,
00053     (GdkArgFunc) NULL},
00054    {NULL}
00055 };
00056 
00057 int __stdcall DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID reserved)
00058 {
00059    gdk_DLLInstance = hinstDLL;
00060 
00061    return TRUE;
00062 }
00063 
00064 gboolean _gdk_windowing_init_check(int argc, char **argv)
00065 {
00066    gint i, j, k;
00067 
00068    if (getenv("GDK_IGNORE_WINTAB") != NULL)
00069       gdk_input_ignore_wintab = TRUE;
00070 
00071    if (getenv("GDK_EVENT_FUNC_FROM_WINDOW_PROC") != NULL)
00072       gdk_event_func_from_window_proc = TRUE;
00073 
00074    if (gdk_synchronize)
00075       GdiSetBatchLimit(1);
00076 
00077    gdk_ProgInstance = GetModuleHandle(NULL);
00078    gdk_DC = CreateDC("DISPLAY", NULL, NULL, NULL);
00079    gdk_root_window = GetDesktopWindow();
00080    windows_version = GetVersion();
00081 
00082    CoInitialize(NULL);
00083 
00084    gdk_selection_request_msg =
00085        RegisterWindowMessage("gdk-selection-request");
00086    gdk_selection_notify_msg =
00087        RegisterWindowMessage("gdk-selection-notify");
00088    gdk_selection_clear_msg = RegisterWindowMessage("gdk-selection-clear");
00089 
00090    gdk_selection_property = gdk_atom_intern("GDK_SELECTION", FALSE);
00091    gdk_clipboard_atom = gdk_atom_intern("CLIPBOARD", FALSE);
00092    gdk_win32_dropfiles_atom = gdk_atom_intern("DROPFILES_DND", FALSE);
00093    gdk_ole2_dnd_atom = gdk_atom_intern("OLE2_DND", FALSE);
00094 
00095    gdk_win32_selection_init();
00096 
00097    return TRUE;
00098 }
00099 
00100 void
00101 gdk_win32_api_failed(const gchar * where, gint line, const gchar * api)
00102 {
00103    gchar *msg = g_win32_error_message(GetLastError());
00104    g_warning("%s:%d: %s failed: %s", where, line, api, msg);
00105    g_free(msg);
00106 }
00107 
00108 void
00109 gdk_other_api_failed(const gchar * where, gint line, const gchar * api)
00110 {
00111    g_warning("%s:%d: %s failed", where, line, api);
00112 }
00113 
00114 void
00115 gdk_win32_gdi_failed(const gchar * where, gint line, const gchar * api)
00116 {
00117    /* On Win9x GDI calls are implemented in 16-bit code and thus
00118     * don't set the 32-bit error code, sigh.
00119     */
00120    if (IS_WIN_NT(windows_version))
00121       gdk_win32_api_failed(where, line, api);
00122    else
00123       gdk_other_api_failed(where, line, api);
00124 }
00125 
00126 void gdk_set_use_xshm(gint use_xshm)
00127 {
00128    /* Always on */
00129 }
00130 
00131 gint gdk_get_use_xshm(void)
00132 {
00133    return TRUE;
00134 }
00135 
00136 /*
00137  *--------------------------------------------------------------
00138  * gdk_screen_width
00139  *
00140  *   Return the width of the screen.
00141  *
00142  * Arguments:
00143  *
00144  * Results:
00145  *
00146  * Side effects:
00147  *
00148  *--------------------------------------------------------------
00149  */
00150 
00151 gint gdk_screen_width(void)
00152 {
00153    return ((GdkWindowPrivate *) gdk_parent_root)->drawable.width;
00154 }
00155 
00156 /*
00157  *--------------------------------------------------------------
00158  * gdk_screen_height
00159  *
00160  *   Return the height of the screen.
00161  *
00162  * Arguments:
00163  *
00164  * Results:
00165  *
00166  * Side effects:
00167  *
00168  *--------------------------------------------------------------
00169  */
00170 
00171 gint gdk_screen_height(void)
00172 {
00173    return ((GdkWindowPrivate *) gdk_parent_root)->drawable.height;
00174 }
00175 
00176 /*
00177  *--------------------------------------------------------------
00178  * gdk_screen_width_mm
00179  *
00180  *   Return the width of the screen in millimetres.
00181  *
00182  * Arguments:
00183  *
00184  * Results:
00185  *
00186  * Side effects:
00187  *
00188  *--------------------------------------------------------------
00189  */
00190 
00191 gint gdk_screen_width_mm(void)
00192 {
00193    return GetDeviceCaps(gdk_DC, HORZSIZE);
00194 }
00195 
00196 /*
00197  *--------------------------------------------------------------
00198  * gdk_screen_height
00199  *
00200  *   Return the height of the screen in millimetres.
00201  *
00202  * Arguments:
00203  *
00204  * Results:
00205  *
00206  * Side effects:
00207  *
00208  *--------------------------------------------------------------
00209  */
00210 
00211 gint gdk_screen_height_mm(void)
00212 {
00213    return GetDeviceCaps(gdk_DC, VERTSIZE);
00214 }
00215 
00216 void gdk_key_repeat_disable(void)
00217 {
00218    /* XXX */
00219 }
00220 
00221 void gdk_key_repeat_restore(void)
00222 {
00223    /* XXX */
00224 }
00225 
00226 void gdk_beep(void)
00227 {
00228    Beep(1000, 50);
00229 }
00230 
00231 void gdk_windowing_exit(void)
00232 {
00233    gdk_win32_dnd_exit();
00234    CoUninitialize();
00235    DeleteDC(gdk_DC);
00236    gdk_DC = NULL;
00237 }
00238 
00239 gchar *gdk_get_display(void)
00240 {
00241    return "Win32";
00242 }
00243 
00244 static struct gdk_key {
00245    guint keyval;
00246    const char *name;
00247 } gdk_keys_by_keyval[] = {
00248    {
00249    0x000020, "space"}, {
00250    0x000021, "exclam"}, {
00251    0x000022, "quotedbl"}, {
00252    0x000023, "numbersign"}, {
00253    0x000024, "dollar"}, {
00254    0x000025, "percent"}, {
00255    0x000026, "ampersand"}, {
00256    0x000027, "apostrophe"}, {
00257    0x000027, "quoteright"}, {
00258    0x000028, "parenleft"}, {
00259    0x000029, "parenright"}, {
00260    0x00002a, "asterisk"}, {
00261    0x00002b, "plus"}, {
00262    0x00002c, "comma"}, {
00263    0x00002d, "minus"}, {
00264    0x00002e, "period"}, {
00265    0x00002f, "slash"}, {
00266    0x000030, "0"}, {
00267    0x000031, "1"}, {
00268    0x000032, "2"}, {
00269    0x000033, "3"}, {
00270    0x000034, "4"}, {
00271    0x000035, "5"}, {
00272    0x000036, "6"}, {
00273    0x000037, "7"}, {
00274    0x000038, "8"}, {
00275    0x000039, "9"}, {
00276    0x00003a, "colon"}, {
00277    0x00003b, "semicolon"}, {
00278    0x00003c, "less"}, {
00279    0x00003d, "equal"}, {
00280    0x00003e, "greater"}, {
00281    0x00003f, "question"}, {
00282    0x000040, "at"}, {
00283    0x000041, "A"}, {
00284    0x000042, "B"}, {
00285    0x000043, "C"}, {
00286    0x000044, "D"}, {
00287    0x000045, "E"}, {
00288    0x000046, "F"}, {
00289    0x000047, "G"}, {
00290    0x000048, "H"}, {
00291    0x000049, "I"}, {
00292    0x00004a, "J"}, {
00293    0x00004b, "K"}, {
00294    0x00004c, "L"}, {
00295    0x00004d, "M"}, {
00296    0x00004e, "N"}, {
00297    0x00004f, "O"}, {
00298    0x000050, "P"}, {
00299    0x000051, "Q"}, {
00300    0x000052, "R"}, {
00301    0x000053, "S"}, {
00302    0x000054, "T"}, {
00303    0x000055, "U"}, {
00304    0x000056, "V"}, {
00305    0x000057, "W"}, {
00306    0x000058, "X"}, {
00307    0x000059, "Y"}, {
00308    0x00005a, "Z"}, {
00309    0x00005b, "bracketleft"}, {
00310    0x00005c, "backslash"}, {
00311    0x00005d, "bracketright"}, {
00312    0x00005e, "asciicircum"}, {
00313    0x00005f, "underscore"}, {
00314    0x000060, "grave"}, {
00315    0x000060, "quoteleft"}, {
00316    0x000061, "a"}, {
00317    0x000062, "b"}, {
00318    0x000063, "c"}, {
00319    0x000064, "d"}, {
00320    0x000065, "e"}, {
00321    0x000066, "f"}, {
00322    0x000067, "g"}, {
00323    0x000068, "h"}, {
00324    0x000069, "i"}, {
00325    0x00006a, "j"}, {
00326    0x00006b, "k"}, {
00327    0x00006c, "l"}, {
00328    0x00006d, "m"}, {
00329    0x00006e, "n"}, {
00330    0x00006f, "o"}, {
00331    0x000070, "p"}, {
00332    0x000071, "q"}, {
00333    0x000072, "r"}, {
00334    0x000073, "s"}, {
00335    0x000074, "t"}, {
00336    0x000075, "u"}, {
00337    0x000076, "v"}, {
00338    0x000077, "w"}, {
00339    0x000078, "x"}, {
00340    0x000079, "y"}, {
00341    0x00007a, "z"}, {
00342    0x00007b, "braceleft"}, {
00343    0x00007c, "bar"}, {
00344    0x00007d, "braceright"}, {
00345    0x00007e, "asciitilde"}, {
00346    0x0000a0, "nobreakspace"}, {
00347    0x0000a1, "exclamdown"}, {
00348    0x0000a2, "cent"}, {
00349    0x0000a3, "sterling"}, {
00350    0x0000a4, "currency"}, {
00351    0x0000a5, "yen"}, {
00352    0x0000a6, "brokenbar"}, {
00353    0x0000a7, "section"}, {
00354    0x0000a8, "diaeresis"}, {
00355    0x0000a9, "copyright"}, {
00356    0x0000aa, "ordfeminine"}, {
00357    0x0000ab, "guillemotleft"}, {
00358    0x0000ac, "notsign"}, {
00359    0x0000ad, "hyphen"}, {
00360    0x0000ae, "registered"}, {
00361    0x0000af, "macron"}, {
00362    0x0000b0, "degree"}, {
00363    0x0000b1, "plusminus"}, {
00364    0x0000b2, "twosuperior"}, {
00365    0x0000b3, "threesuperior"}, {
00366    0x0000b4, "acute"}, {
00367    0x0000b5, "mu"}, {
00368    0x0000b6, "paragraph"}, {
00369    0x0000b7, "periodcentered"}, {
00370    0x0000b8, "cedilla"}, {
00371    0x0000b9, "onesuperior"}, {
00372    0x0000ba, "masculine"}, {
00373    0x0000bb, "guillemotright"}, {
00374    0x0000bc, "onequarter"}, {
00375    0x0000bd, "onehalf"}, {
00376    0x0000be, "threequarters"}, {
00377    0x0000bf, "questiondown"}, {
00378    0x0000c0, "Agrave"}, {
00379    0x0000c1, "Aacute"}, {
00380    0x0000c2, "Acircumflex"}, {
00381    0x0000c3, "Atilde"}, {
00382    0x0000c4, "Adiaeresis"}, {
00383    0x0000c5, "Aring"}, {
00384    0x0000c6, "AE"}, {
00385    0x0000c7, "Ccedilla"}, {
00386    0x0000c8, "Egrave"}, {
00387    0x0000c9, "Eacute"}, {
00388    0x0000ca, "Ecircumflex"}, {
00389    0x0000cb, "Ediaeresis"}, {
00390    0x0000cc, "Igrave"}, {
00391    0x0000cd, "Iacute"}, {
00392    0x0000ce, "Icircumflex"}, {
00393    0x0000cf, "Idiaeresis"}, {
00394    0x0000d0, "ETH"}, {
00395    0x0000d0, "Eth"}, {
00396    0x0000d1, "Ntilde"}, {
00397    0x0000d2, "Ograve"}, {
00398    0x0000d3, "Oacute"}, {
00399    0x0000d4, "Ocircumflex"}, {
00400    0x0000d5, "Otilde"}, {
00401    0x0000d6, "Odiaeresis"}, {
00402    0x0000d7, "multiply"}, {
00403    0x0000d8, "Ooblique"}, {
00404    0x0000d9, "Ugrave"}, {
00405    0x0000da, "Uacute"}, {
00406    0x0000db, "Ucircumflex"}, {
00407    0x0000dc, "Udiaeresis"}, {
00408    0x0000dd, "Yacute"}, {
00409    0x0000de, "THORN"}, {
00410    0x0000de, "Thorn"}, {
00411    0x0000df, "ssharp"}, {
00412    0x0000e0, "agrave"}, {
00413    0x0000e1, "aacute"}, {
00414    0x0000e2, "acircumflex"}, {
00415    0x0000e3, "atilde"}, {
00416    0x0000e4, "adiaeresis"}, {
00417    0x0000e5, "aring"}, {
00418    0x0000e6, "ae"}, {
00419    0x0000e7, "ccedilla"}, {
00420    0x0000e8, "egrave"}, {
00421    0x0000e9, "eacute"}, {
00422    0x0000ea, "ecircumflex"}, {
00423    0x0000eb, "ediaeresis"}, {
00424    0x0000ec, "igrave"}, {
00425    0x0000ed, "iacute"}, {
00426    0x0000ee, "icircumflex"}, {
00427    0x0000ef, "idiaeresis"}, {
00428    0x0000f0, "eth"}, {
00429    0x0000f1, "ntilde"}, {
00430    0x0000f2, "ograve"}, {
00431    0x0000f3, "oacute"}, {
00432    0x0000f4, "ocircumflex"}, {
00433    0x0000f5, "otilde"}, {
00434    0x0000f6, "odiaeresis"}, {
00435    0x0000f7, "division"}, {
00436    0x0000f8, "oslash"}, {
00437    0x0000f9, "ugrave"}, {
00438    0x0000fa, "uacute"}, {
00439    0x0000fb, "ucircumflex"}, {
00440    0x0000fc, "udiaeresis"}, {
00441    0x0000fd, "yacute"}, {
00442    0x0000fe, "thorn"}, {
00443    0x0000ff, "ydiaeresis"}, {
00444    0x0001a1, "Aogonek"}, {
00445    0x0001a2, "breve"}, {
00446    0x0001a3, "Lstroke"}, {
00447    0x0001a5, "Lcaron"}, {
00448    0x0001a6, "Sacute"}, {
00449    0x0001a9, "Scaron"}, {
00450    0x0001aa, "Scedilla"}, {
00451    0x0001ab, "Tcaron"}, {
00452    0x0001ac, "Zacute"}, {
00453    0x0001ae, "Zcaron"}, {
00454    0x0001af, "Zabovedot"}, {
00455    0x0001b1, "aogonek"}, {
00456    0x0001b2, "ogonek"}, {
00457    0x0001b3, "lstroke"}, {
00458    0x0001b5, "lcaron"}, {
00459    0x0001b6, "sacute"}, {
00460    0x0001b7, "caron"}, {
00461    0x0001b9, "scaron"}, {
00462    0x0001ba, "scedilla"}, {
00463    0x0001bb, "tcaron"}, {
00464    0x0001bc, "zacute"}, {
00465    0x0001bd, "doubleacute"}, {
00466    0x0001be, "zcaron"}, {
00467    0x0001bf, "zabovedot"}, {
00468    0x0001c0, "Racute"}, {
00469    0x0001c3, "Abreve"}, {
00470    0x0001c5, "Lacute"}, {
00471    0x0001c6, "Cacute"}, {
00472    0x0001c8, "Ccaron"}, {
00473    0x0001ca, "Eogonek"}, {
00474    0x0001cc, "Ecaron"}, {
00475    0x0001cf, "Dcaron"}, {
00476    0x0001d0, "Dstroke"}, {
00477    0x0001d1, "Nacute"}, {
00478    0x0001d2, "Ncaron"}, {
00479    0x0001d5, "Odoubleacute"}, {
00480    0x0001d8, "Rcaron"}, {
00481    0x0001d9, "Uring"}, {
00482    0x0001db, "Udoubleacute"}, {
00483    0x0001de, "Tcedilla"}, {
00484    0x0001e0, "racute"}, {
00485    0x0001e3, "abreve"}, {
00486    0x0001e5, "lacute"}, {
00487    0x0001e6, "cacute"}, {
00488    0x0001e8, "ccaron"}, {
00489    0x0001ea, "eogonek"}, {
00490    0x0001ec, "ecaron"}, {
00491    0x0001ef, "dcaron"}, {
00492    0x0001f0, "dstroke"}, {
00493    0x0001f1, "nacute"}, {
00494    0x0001f2, "ncaron"}, {
00495    0x0001f5, "odoubleacute"}, {
00496    0x0001f8, "rcaron"}, {
00497    0x0001f9, "uring"}, {
00498    0x0001fb, "udoubleacute"}, {
00499    0x0001fe, "tcedilla"}, {
00500    0x0001ff, "abovedot"}, {
00501    0x0002a1, "Hstroke"}, {
00502    0x0002a6, "Hcircumflex"}, {
00503    0x0002a9, "Iabovedot"}, {
00504    0x0002ab, "Gbreve"}, {
00505    0x0002ac, "Jcircumflex"}, {
00506    0x0002b1, "hstroke"}, {
00507    0x0002b6, "hcircumflex"}, {
00508    0x0002b9, "idotless"}, {
00509    0x0002bb, "gbreve"}, {
00510    0x0002bc, "jcircumflex"}, {
00511    0x0002c5, "Cabovedot"}, {
00512    0x0002c6, "Ccircumflex"}, {
00513    0x0002d5, "Gabovedot"}, {
00514    0x0002d8, "Gcircumflex"}, {
00515    0x0002dd, "Ubreve"}, {
00516    0x0002de, "Scircumflex"}, {
00517    0x0002e5, "cabovedot"}, {
00518    0x0002e6, "ccircumflex"}, {
00519    0x0002f5, "gabovedot"}, {
00520    0x0002f8, "gcircumflex"}, {
00521    0x0002fd, "ubreve"}, {
00522    0x0002fe, "scircumflex"}, {
00523    0x0003a2, "kappa"}, {
00524    0x0003a2, "kra"}, {
00525    0x0003a3, "Rcedilla"}, {
00526    0x0003a5, "Itilde"}, {
00527    0x0003a6, "Lcedilla"}, {
00528    0x0003aa, "Emacron"}, {
00529    0x0003ab, "Gcedilla"}, {
00530    0x0003ac, "Tslash"}, {
00531    0x0003b3, "rcedilla"}, {
00532    0x0003b5, "itilde"}, {
00533    0x0003b6, "lcedilla"}, {
00534    0x0003ba, "emacron"}, {
00535    0x0003bb, "gcedilla"}, {
00536    0x0003bc, "tslash"}, {
00537    0x0003bd, "ENG"}, {
00538    0x0003bf, "eng"}, {
00539    0x0003c0, "Amacron"}, {
00540    0x0003c7, "Iogonek"}, {
00541    0x0003cc, "Eabovedot"}, {
00542    0x0003cf, "Imacron"}, {
00543    0x0003d1, "Ncedilla"}, {
00544    0x0003d2, "Omacron"}, {
00545    0x0003d3, "Kcedilla"}, {
00546    0x0003d9, "Uogonek"}, {
00547    0x0003dd, "Utilde"}, {
00548    0x0003de, "Umacron"}, {
00549    0x0003e0, "amacron"}, {
00550    0x0003e7, "iogonek"}, {
00551    0x0003ec, "eabovedot"}, {
00552    0x0003ef, "imacron"}, {
00553    0x0003f1, "ncedilla"}, {
00554    0x0003f2, "omacron"}, {
00555    0x0003f3, "kcedilla"}, {
00556    0x0003f9, "uogonek"}, {
00557    0x0003fd, "utilde"}, {
00558    0x0003fe, "umacron"}, {
00559    0x00047e, "overline"}, {
00560    0x0004a1, "kana_fullstop"}, {
00561    0x0004a2, "kana_openingbracket"}, {
00562    0x0004a3, "kana_closingbracket"}, {
00563    0x0004a4, "kana_comma"}, {
00564    0x0004a5, "kana_conjunctive"}, {
00565    0x0004a5, "kana_middledot"}, {
00566    0x0004a6, "kana_WO"}, {
00567    0x0004a7, "kana_a"}, {
00568    0x0004a8, "kana_i"}, {
00569    0x0004a9, "kana_u"}, {
00570    0x0004aa, "kana_e"}, {
00571    0x0004ab, "kana_o"}, {
00572    0x0004ac, "kana_ya"}, {
00573    0x0004ad, "kana_yu"}, {
00574    0x0004ae, "kana_yo"}, {
00575    0x0004af, "kana_tsu"}, {
00576    0x0004af, "kana_tu"}, {
00577    0x0004b0, "prolongedsound"}, {
00578    0x0004b1, "kana_A"}, {
00579    0x0004b2, "kana_I"}, {
00580    0x0004b3, "kana_U"}, {
00581    0x0004b4, "kana_E"}, {
00582    0x0004b5, "kana_O"}, {
00583    0x0004b6, "kana_KA"}, {
00584    0x0004b7, "kana_KI"}, {
00585    0x0004b8, "kana_KU"}, {
00586    0x0004b9, "kana_KE"}, {
00587    0x0004ba, "kana_KO"}, {
00588    0x0004bb, "kana_SA"}, {
00589    0x0004bc, "kana_SHI"}, {
00590    0x0004bd, "kana_SU"}, {
00591    0x0004be, "kana_SE"}, {
00592    0x0004bf, "kana_SO"}, {
00593    0x0004c0, "kana_TA"}, {
00594    0x0004c1, "kana_CHI"}, {
00595    0x0004c1, "kana_TI"}, {
00596    0x0004c2, "kana_TSU"}, {
00597    0x0004c2, "kana_TU"}, {
00598    0x0004c3, "kana_TE"}, {
00599    0x0004c4, "kana_TO"}, {
00600    0x0004c5, "kana_NA"}, {
00601    0x0004c6, "kana_NI"}, {
00602    0x0004c7, "kana_NU"}, {
00603    0x0004c8, "kana_NE"}, {
00604    0x0004c9, "kana_NO"}, {
00605    0x0004ca, "kana_HA"}, {
00606    0x0004cb, "kana_HI"}, {
00607    0x0004cc, "kana_FU"}, {
00608    0x0004cc, "kana_HU"}, {
00609    0x0004cd, "kana_HE"}, {
00610    0x0004ce, "kana_HO"}, {
00611    0x0004cf, "kana_MA"}, {
00612    0x0004d0, "kana_MI"}, {
00613    0x0004d1, "kana_MU"}, {
00614    0x0004d2, "kana_ME"}, {
00615    0x0004d3, "kana_MO"}, {
00616    0x0004d4, "kana_YA"}, {
00617    0x0004d5, "kana_YU"}, {
00618    0x0004d6, "kana_YO"}, {
00619    0x0004d7, "kana_RA"}, {
00620    0x0004d8, "kana_RI"}, {
00621    0x0004d9, "kana_RU"}, {
00622    0x0004da, "kana_RE"}, {
00623    0x0004db, "kana_RO"}, {
00624    0x0004dc, "kana_WA"}, {
00625    0x0004dd, "kana_N"}, {
00626    0x0004de, "voicedsound"}, {
00627    0x0004df, "semivoicedsound"}, {
00628    0x0005ac, "Arabic_comma"}, {
00629    0x0005bb, "Arabic_semicolon"}, {
00630    0x0005bf, "Arabic_question_mark"}, {
00631    0x0005c1, "Arabic_hamza"}, {
00632    0x0005c2, "Arabic_maddaonalef"}, {
00633    0x0005c3, "Arabic_hamzaonalef"}, {
00634    0x0005c4, "Arabic_hamzaonwaw"}, {
00635    0x0005c5, "Arabic_hamzaunderalef"}, {
00636    0x0005c6, "Arabic_hamzaonyeh"}, {
00637    0x0005c7, "Arabic_alef"}, {
00638    0x0005c8, "Arabic_beh"}, {
00639    0x0005c9, "Arabic_tehmarbuta"}, {
00640    0x0005ca, "Arabic_teh"}, {
00641    0x0005cb, "Arabic_theh"}, {
00642    0x0005cc, "Arabic_jeem"}, {
00643    0x0005cd, "Arabic_hah"}, {
00644    0x0005ce, "Arabic_khah"}, {
00645    0x0005cf, "Arabic_dal"}, {
00646    0x0005d0, "Arabic_thal"}, {
00647    0x0005d1, "Arabic_ra"}, {
00648    0x0005d2, "Arabic_zain"}, {
00649    0x0005d3, "Arabic_seen"}, {
00650    0x0005d4, "Arabic_sheen"}, {
00651    0x0005d5, "Arabic_sad"}, {
00652    0x0005d6, "Arabic_dad"}, {
00653    0x0005d7, "Arabic_tah"}, {
00654    0x0005d8, "Arabic_zah"}, {
00655    0x0005d9, "Arabic_ain"}, {
00656    0x0005da, "Arabic_ghain"}, {
00657    0x0005e0, "Arabic_tatweel"}, {
00658    0x0005e1, "Arabic_feh"}, {
00659    0x0005e2, "Arabic_qaf"}, {
00660    0x0005e3, "Arabic_kaf"}, {
00661    0x0005e4, "Arabic_lam"}, {
00662    0x0005e5, "Arabic_meem"}, {
00663    0x0005e6, "Arabic_noon"}, {
00664    0x0005e7, "Arabic_ha"}, {
00665    0x0005e7, "Arabic_heh"}, {
00666    0x0005e8, "Arabic_waw"}, {
00667    0x0005e9, "Arabic_alefmaksura"}, {
00668    0x0005ea, "Arabic_yeh"}, {
00669    0x0005eb, "Arabic_fathatan"}, {
00670    0x0005ec, "Arabic_dammatan"}, {
00671    0x0005ed, "Arabic_kasratan"}, {
00672    0x0005ee, "Arabic_fatha"}, {
00673    0x0005ef, "Arabic_damma"}, {
00674    0x0005f0, "Arabic_kasra"}, {
00675    0x0005f1, "Arabic_shadda"}, {
00676    0x0005f2, "Arabic_sukun"}, {
00677    0x0006a1, "Serbian_dje"}, {
00678    0x0006a2, "Macedonia_gje"}, {
00679    0x0006a3, "Cyrillic_io"}, {
00680    0x0006a4, "Ukrainian_ie"}, {
00681    0x0006a4, "Ukranian_je"}, {
00682    0x0006a5, "Macedonia_dse"}, {
00683    0x0006a6, "Ukrainian_i"}, {
00684    0x0006a6, "Ukranian_i"}, {
00685    0x0006a7, "Ukrainian_yi"}, {
00686    0x0006a7, "Ukranian_yi"}, {
00687    0x0006a8, "Cyrillic_je"}, {
00688    0x0006a8, "Serbian_je"}, {
00689    0x0006a9, "Cyrillic_lje"}, {
00690    0x0006a9, "Serbian_lje"}, {
00691    0x0006aa, "Cyrillic_nje"}, {
00692    0x0006aa, "Serbian_nje"}, {
00693    0x0006ab, "Serbian_tshe"}, {
00694    0x0006ac, "Macedonia_kje"}, {
00695    0x0006ae, "Byelorussian_shortu"}, {
00696    0x0006af, "Cyrillic_dzhe"}, {
00697    0x0006af, "Serbian_dze"}, {
00698    0x0006b0, "numerosign"}, {
00699    0x0006b1, "Serbian_DJE"}, {
00700    0x0006b2, "Macedonia_GJE"}, {
00701    0x0006b3, "Cyrillic_IO"}, {
00702    0x0006b4, "Ukrainian_IE"}, {
00703    0x0006b4, "Ukranian_JE"}, {
00704    0x0006b5, "Macedonia_DSE"}, {
00705    0x0006b6, "Ukrainian_I"}, {
00706    0x0006b6, "Ukranian_I"}, {
00707    0x0006b7, "Ukrainian_YI"}, {
00708    0x0006b7, "Ukranian_YI"}, {
00709    0x0006b8, "Cyrillic_JE"}, {
00710    0x0006b8, "Serbian_JE"}, {
00711    0x0006b9, "Cyrillic_LJE"}, {
00712    0x0006b9, "Serbian_LJE"}, {
00713    0x0006ba, "Cyrillic_NJE"}, {
00714    0x0006ba, "Serbian_NJE"}, {
00715    0x0006bb, "Serbian_TSHE"}, {
00716    0x0006bc, "Macedonia_KJE"}, {
00717    0x0006be, "Byelorussian_SHORTU"}, {
00718    0x0006bf, "Cyrillic_DZHE"}, {
00719    0x0006bf, "Serbian_DZE"}, {
00720    0x0006c0, "Cyrillic_yu"}, {
00721    0x0006c1, "Cyrillic_a"}, {
00722    0x0006c2, "Cyrillic_be"}, {
00723    0x0006c3, "Cyrillic_tse"}, {
00724    0x0006c4, "Cyrillic_de"}, {
00725    0x0006c5, "Cyrillic_ie"}, {
00726    0x0006c6, "Cyrillic_ef"}, {
00727    0x0006c7, "Cyrillic_ghe"}, {
00728    0x0006c8, "Cyrillic_ha"}, {
00729    0x0006c9, "Cyrillic_i"}, {
00730    0x0006ca, "Cyrillic_shorti"}, {
00731    0x0006cb, "Cyrillic_ka"}, {
00732    0x0006cc, "Cyrillic_el"}, {
00733    0x0006cd, "Cyrillic_em"}, {
00734    0x0006ce, "Cyrillic_en"}, {
00735    0x0006cf, "Cyrillic_o"}, {
00736    0x0006d0, "Cyrillic_pe"}, {
00737    0x0006d1, "Cyrillic_ya"}, {
00738    0x0006d2, "Cyrillic_er"}, {
00739    0x0006d3, "Cyrillic_es"}, {
00740    0x0006d4, "Cyrillic_te"}, {
00741    0x0006d5, "Cyrillic_u"}, {
00742    0x0006d6, "Cyrillic_zhe"}, {
00743    0x0006d7, "Cyrillic_ve"}, {
00744    0x0006d8, "Cyrillic_softsign"}, {
00745    0x0006d9, "Cyrillic_yeru"}, {
00746    0x0006da, "Cyrillic_ze"}, {
00747    0x0006db, "Cyrillic_sha"}, {
00748    0x0006dc, "Cyrillic_e"}, {
00749    0x0006dd, "Cyrillic_shcha"}, {
00750    0x0006de, "Cyrillic_che"}, {
00751    0x0006df, "Cyrillic_hardsign"}, {
00752    0x0006e0, "Cyrillic_YU"}, {
00753    0x0006e1, "Cyrillic_A"}, {
00754    0x0006e2, "Cyrillic_BE"}, {
00755    0x0006e3, "Cyrillic_TSE"}, {
00756    0x0006e4, "Cyrillic_DE"}, {
00757    0x0006e5, "Cyrillic_IE"}, {
00758    0x0006e6, "Cyrillic_EF"}, {
00759    0x0006e7, "Cyrillic_GHE"}, {
00760    0x0006e8, "Cyrillic_HA"}, {
00761    0x0006e9, "Cyrillic_I"}, {
00762    0x0006ea, "Cyrillic_SHORTI"}, {
00763    0x0006eb, "Cyrillic_KA"}, {
00764    0x0006ec, "Cyrillic_EL"}, {
00765    0x0006ed, "Cyrillic_EM"}, {
00766    0x0006ee, "Cyrillic_EN"}, {
00767    0x0006ef, "Cyrillic_O"}, {
00768    0x0006f0, "Cyrillic_PE"}, {
00769    0x0006f1, "Cyrillic_YA"}, {
00770    0x0006f2, "Cyrillic_ER"}, {
00771    0x0006f3, "Cyrillic_ES"}, {
00772    0x0006f4, "Cyrillic_TE"}, {
00773    0x0006f5, "Cyrillic_U"}, {
00774    0x0006f6, "Cyrillic_ZHE"}, {
00775    0x0006f7, "Cyrillic_VE"}, {
00776    0x0006f8, "Cyrillic_SOFTSIGN"}, {
00777    0x0006f9, "Cyrillic_YERU"}, {
00778    0x0006fa, "Cyrillic_ZE"}, {
00779    0x0006fb, "Cyrillic_SHA"}, {
00780    0x0006fc, "Cyrillic_E"}, {
00781    0x0006fd, "Cyrillic_SHCHA"}, {
00782    0x0006fe, "Cyrillic_CHE"}, {
00783    0x0006ff, "Cyrillic_HARDSIGN"}, {
00784    0x0007a1, "Greek_ALPHAaccent"}, {
00785    0x0007a2, "Greek_EPSILONaccent"}, {
00786    0x0007a3, "Greek_ETAaccent"}, {
00787    0x0007a4, "Greek_IOTAaccent"}, {
00788    0x0007a5, "Greek_IOTAdiaeresis"}, {
00789    0x0007a7, "Greek_OMICRONaccent"}, {
00790    0x0007a8, "Greek_UPSILONaccent"}, {
00791    0x0007a9, "Greek_UPSILONdieresis"}, {
00792    0x0007ab, "Greek_OMEGAaccent"}, {
00793    0x0007ae, "Greek_accentdieresis"}, {
00794    0x0007af, "Greek_horizbar"}, {
00795    0x0007b1, "Greek_alphaaccent"}, {
00796    0x0007b2, "Greek_epsilonaccent"}, {
00797    0x0007b3, "Greek_etaaccent"}, {
00798    0x0007b4, "Greek_iotaaccent"}, {
00799    0x0007b5, "Greek_iotadieresis"}, {
00800    0x0007b6, "Greek_iotaaccentdieresis"}, {
00801    0x0007b7, "Greek_omicronaccent"}, {
00802    0x0007b8, "Greek_upsilonaccent"}, {
00803    0x0007b9, "Greek_upsilondieresis"}, {
00804    0x0007ba, "Greek_upsilonaccentdieresis"}, {
00805    0x0007bb, "Greek_omegaaccent"}, {
00806    0x0007c1, "Greek_ALPHA"}, {
00807    0x0007c2, "Greek_BETA"}, {
00808    0x0007c3, "Greek_GAMMA"}, {
00809    0x0007c4, "Greek_DELTA"}, {
00810    0x0007c5, "Greek_EPSILON"}, {
00811    0x0007c6, "Greek_ZETA"}, {
00812    0x0007c7, "Greek_ETA"}, {
00813    0x0007c8, "Greek_THETA"}, {
00814    0x0007c9, "Greek_IOTA"}, {
00815    0x0007ca, "Greek_KAPPA"}, {
00816    0x0007cb, "Greek_LAMBDA"}, {
00817    0x0007cb, "Greek_LAMDA"}, {
00818    0x0007cc, "Greek_MU"}, {
00819    0x0007cd, "Greek_NU"}, {
00820    0x0007ce, "Greek_XI"}, {
00821    0x0007cf, "Greek_OMICRON"}, {
00822    0x0007d0, "Greek_PI"}, {
00823    0x0007d1, "Greek_RHO"}, {
00824    0x0007d2, "Greek_SIGMA"}, {
00825    0x0007d4, "Greek_TAU"}, {
00826    0x0007d5, "Greek_UPSILON"}, {
00827    0x0007d6, "Greek_PHI"}, {
00828    0x0007d7, "Greek_CHI"}, {
00829    0x0007d8, "Greek_PSI"}, {
00830    0x0007d9, "Greek_OMEGA"}, {
00831    0x0007e1, "Greek_alpha"}, {
00832    0x0007e2, "Greek_beta"}, {
00833    0x0007e3, "Greek_gamma"}, {
00834    0x0007e4, "Greek_delta"}, {
00835    0x0007e5, "Greek_epsilon"}, {
00836    0x0007e6, "Greek_zeta"}, {
00837    0x0007e7, "Greek_eta"}, {
00838    0x0007e8, "Greek_theta"}, {
00839    0x0007e9, "Greek_iota"}, {
00840    0x0007ea, "Greek_kappa"}, {
00841    0x0007eb, "Greek_lambda"}, {
00842    0x0007eb, "Greek_lamda"}, {
00843    0x0007ec, "Greek_mu"}, {
00844    0x0007ed, "Greek_nu"}, {
00845    0x0007ee, "Greek_xi"}, {
00846    0x0007ef, "Greek_omicron"}, {
00847    0x0007f0, "Greek_pi"}, {
00848    0x0007f1, "Greek_rho"}, {
00849    0x0007f2, "Greek_sigma"}, {
00850    0x0007f3, "Greek_finalsmallsigma"}, {
00851    0x0007f4, "Greek_tau"}, {
00852    0x0007f5, "Greek_upsilon"}, {
00853    0x0007f6, "Greek_phi"}, {
00854    0x0007f7, "Greek_chi"}, {
00855    0x0007f8, "Greek_psi"}, {
00856    0x0007f9, "Greek_omega"}, {
00857    0x0008a1, "leftradical"}, {
00858    0x0008a2, "topleftradical"}, {
00859    0x0008a3, "horizconnector"}, {
00860    0x0008a4, "topintegral"}, {
00861    0x0008a5, "botintegral"}, {
00862    0x0008a6, "vertconnector"}, {
00863    0x0008a7, "topleftsqbracket"}, {
00864    0x0008a8, "botleftsqbracket"}, {
00865    0x0008a9, "toprightsqbracket"}, {
00866    0x0008aa, "botrightsqbracket"}, {
00867    0x0008ab, "topleftparens"}, {
00868    0x0008ac, "botleftparens"}, {
00869    0x0008ad, "toprightparens"}, {
00870    0x0008ae, "botrightparens"}, {
00871    0x0008af, "leftmiddlecurlybrace"}, {
00872    0x0008b0, "rightmiddlecurlybrace"}, {
00873    0x0008b1, "topleftsummation"}, {
00874    0x0008b2, "botleftsummation"}, {
00875    0x0008b3, "topvertsummationconnector"}, {
00876    0x0008b4, "botvertsummationconnector"}, {
00877    0x0008b5, "toprightsummation"}, {
00878    0x0008b6, "botrightsummation"}, {
00879    0x0008b7, "rightmiddlesummation"}, {
00880    0x0008bc, "lessthanequal"}, {
00881    0x0008bd, "notequal"}, {
00882    0x0008be, "greaterthanequal"}, {
00883    0x0008bf, "integral"}, {
00884    0x0008c0, "therefore"}, {
00885    0x0008c1, "variation"}, {
00886    0x0008c2, "infinity"}, {
00887    0x0008c5, "nabla"}, {
00888    0x0008c8, "approximate"}, {
00889    0x0008c9, "similarequal"}, {
00890    0x0008cd, "ifonlyif"}, {
00891    0x0008ce, "implies"}, {
00892    0x0008cf, "identical"}, {
00893    0x0008d6, "radical"}, {
00894    0x0008da, "includedin"}, {
00895    0x0008db, "includes"}, {
00896    0x0008dc, "intersection"}, {
00897    0x0008dd, "union"}, {
00898    0x0008de, "logicaland"}, {
00899    0x0008df, "logicalor"}, {
00900    0x0008ef, "partialderivative"}, {
00901    0x0008f6, "function"}, {
00902    0x0008fb, "leftarrow"}, {
00903    0x0008fc, "uparrow"}, {
00904    0x0008fd, "rightarrow"}, {
00905    0x0008fe, "downarrow"}, {
00906    0x0009df, "blank"}, {
00907    0x0009e0, "soliddiamond"}, {
00908    0x0009e1, "checkerboard"}, {
00909    0x0009e2, "ht"}, {
00910    0x0009e3, "ff"}, {
00911    0x0009e4, "cr"}, {
00912    0x0009e5, "lf"}, {
00913    0x0009e8, "nl"}, {
00914    0x0009e9, "vt"}, {
00915    0x0009ea, "lowrightcorner"}, {
00916    0x0009eb, "uprightcorner"}, {
00917    0x0009ec, "upleftcorner"}, {
00918    0x0009ed, "lowleftcorner"}, {
00919    0x0009ee, "crossinglines"}, {
00920    0x0009ef, "horizlinescan1"}, {
00921    0x0009f0, "horizlinescan3"}, {
00922    0x0009f1, "horizlinescan5"}, {
00923    0x0009f2, "horizlinescan7"}, {
00924    0x0009f3, "horizlinescan9"}, {
00925    0x0009f4, "leftt"}, {
00926    0x0009f5, "rightt"}, {
00927    0x0009f6, "bott"}, {
00928    0x0009f7, "topt"}, {
00929    0x0009f8, "vertbar"}, {
00930    0x000aa1, "emspace"}, {
00931    0x000aa2, "enspace"}, {
00932    0x000aa3, "em3space"}, {
00933    0x000aa4, "em4space"}, {
00934    0x000aa5, "digitspace"}, {
00935    0x000aa6, "punctspace"}, {
00936    0x000aa7, "thinspace"}, {
00937    0x000aa8, "hairspace"}, {
00938    0x000aa9, "emdash"}, {
00939    0x000aaa, "endash"}, {
00940    0x000aac, "signifblank"}, {
00941    0x000aae, "ellipsis"}, {
00942    0x000aaf, "doubbaselinedot"}, {
00943    0x000ab0, "onethird"}, {
00944    0x000ab1, "twothirds"}, {
00945    0x000ab2, "onefifth"}, {
00946    0x000ab3, "twofifths"}, {
00947    0x000ab4, "threefifths"}, {
00948    0x000ab5, "fourfifths"}, {
00949    0x000ab6, "onesixth"}, {
00950    0x000ab7, "fivesixths"}, {
00951    0x000ab8, "careof"}, {
00952    0x000abb, "figdash"}, {
00953    0x000abc, "leftanglebracket"}, {
00954    0x000abd, "decimalpoint"}, {
00955    0x000abe, "rightanglebracket"}, {
00956    0x000abf, "marker"}, {
00957    0x000ac3, "oneeighth"}, {
00958    0x000ac4, "threeeighths"}, {
00959    0x000ac5, "fiveeighths"}, {
00960    0x000ac6, "seveneighths"}, {
00961    0x000ac9, "trademark"}, {
00962    0x000aca, "signaturemark"}, {
00963    0x000acb, "trademarkincircle"}, {
00964    0x000acc, "leftopentriangle"}, {
00965    0x000acd, "rightopentriangle"}, {
00966    0x000ace, "emopencircle"}, {
00967    0x000acf, "emopenrectangle"}, {
00968    0x000ad0, "leftsinglequotemark"}, {
00969    0x000ad1, "rightsinglequotemark"}, {
00970    0x000ad2, "leftdoublequotemark"}, {
00971    0x000ad3, "rightdoublequotemark"}, {
00972    0x000ad4, "prescription"}, {
00973    0x000ad6, "minutes"}, {
00974    0x000ad7, "seconds"}, {
00975    0x000ad9, "latincross"}, {
00976    0x000ada, "hexagram"}, {
00977    0x000adb, "filledrectbullet"}, {
00978    0x000adc, "filledlefttribullet"}, {
00979    0x000add, "filledrighttribullet"}, {
00980    0x000ade, "emfilledcircle"}, {
00981    0x000adf, "emfilledrect"}, {
00982    0x000ae0, "enopencircbullet"}, {
00983    0x000ae1, "enopensquarebullet"}, {
00984    0x000ae2, "openrectbullet"}, {
00985    0x000ae3, "opentribulletup"}, {
00986    0x000ae4, "opentribulletdown"}, {
00987    0x000ae5, "openstar"}, {
00988    0x000ae6, "enfilledcircbullet"}, {
00989    0x000ae7, "enfilledsqbullet"}, {
00990    0x000ae8, "filledtribulletup"}, {
00991    0x000ae9, "filledtribulletdown"}, {
00992    0x000aea, "leftpointer"}, {
00993    0x000aeb, "rightpointer"}, {
00994    0x000aec, "club"}, {
00995    0x000aed, "diamond"}, {
00996    0x000aee, "heart"}, {
00997    0x000af0, "maltesecross"}, {
00998    0x000af1, "dagger"}, {
00999    0x000af2, "doubledagger"}, {
01000    0x000af3, "checkmark"}, {
01001    0x000af4, "ballotcross"}, {
01002    0x000af5, "musicalsharp"}, {
01003    0x000af6, "musicalflat"}, {
01004    0x000af7, "malesymbol"}, {
01005    0x000af8, "femalesymbol"}, {
01006    0x000af9, "telephone"}, {
01007    0x000afa, "telephonerecorder"}, {
01008    0x000afb, "phonographcopyright"}, {
01009    0x000afc, "caret"}, {
01010    0x000afd, "singlelowquotemark"}, {
01011    0x000afe, "doublelowquotemark"}, {
01012    0x000aff, "cursor"}, {
01013    0x000ba3, "leftcaret"}, {
01014    0x000ba6, "rightcaret"}, {
01015    0x000ba8, "downcaret"}, {
01016    0x000ba9, "upcaret"}, {
01017    0x000bc0, "overbar"}, {
01018    0x000bc2, "downtack"}, {
01019    0x000bc3, "upshoe"}, {
01020    0x000bc4, "downstile"}, {
01021    0x000bc6, "underbar"}, {
01022    0x000bca, "jot"}, {
01023    0x000bcc, "quad"}, {
01024    0x000bce, "uptack"}, {
01025    0x000bcf, "circle"}, {
01026    0x000bd3, "upstile"}, {
01027    0x000bd6, "downshoe"}, {
01028    0x000bd8, "rightshoe"}, {
01029    0x000bda, "leftshoe"}, {
01030    0x000bdc, "lefttack"}, {
01031    0x000bfc, "righttack"}, {
01032    0x000cdf, "hebrew_doublelowline"}, {
01033    0x000ce0, "hebrew_aleph"}, {
01034    0x000ce1, "hebrew_bet"}, {
01035    0x000ce1, "hebrew_beth"}, {
01036    0x000ce2, "hebrew_gimel"}, {
01037    0x000ce2, "hebrew_gimmel"}, {
01038    0x000ce3, "hebrew_dalet"}, {
01039    0x000ce3, "hebrew_daleth"}, {
01040    0x000ce4, "hebrew_he"}, {
01041    0x000ce5, "hebrew_waw"}, {
01042    0x000ce6, "hebrew_zain"}, {
01043    0x000ce6, "hebrew_zayin"}, {
01044    0x000ce7, "hebrew_chet"}, {
01045    0x000ce7, "hebrew_het"}, {
01046    0x000ce8, "hebrew_tet"}, {
01047    0x000ce8, "hebrew_teth"}, {
01048    0x000ce9, "hebrew_yod"}, {
01049    0x000cea, "hebrew_finalkaph"}, {
01050    0x000ceb, "hebrew_kaph"}, {
01051    0x000cec, "hebrew_lamed"}, {
01052    0x000ced, "hebrew_finalmem"}, {
01053    0x000cee, "hebrew_mem"}, {
01054    0x000cef, "hebrew_finalnun"}, {
01055    0x000cf0, "hebrew_nun"}, {
01056    0x000cf1, "hebrew_samech"}, {
01057    0x000cf1, "hebrew_samekh"}, {
01058    0x000cf2, "hebrew_ayin"}, {
01059    0x000cf3, "hebrew_finalpe"}, {
01060    0x000cf4, "hebrew_pe"}, {
01061    0x000cf5, "hebrew_finalzade"}, {
01062    0x000cf5, "hebrew_finalzadi"}, {
01063    0x000cf6, "hebrew_zade"}, {
01064    0x000cf6, "hebrew_zadi"}, {
01065    0x000cf7, "hebrew_kuf"}, {
01066    0x000cf7, "hebrew_qoph"}, {
01067    0x000cf8, "hebrew_resh"}, {
01068    0x000cf9, "hebrew_shin"}, {
01069    0x000cfa, "hebrew_taf"}, {
01070    0x000cfa, "hebrew_taw"}, {
01071    0x000da1, "Thai_kokai"}, {
01072    0x000da2, "Thai_khokhai"}, {
01073    0x000da3, "Thai_khokhuat"}, {
01074    0x000da4, "Thai_khokhwai"}, {
01075    0x000da5, "Thai_khokhon"}, {
01076    0x000da6, "Thai_khorakhang"}, {
01077    0x000da7, "Thai_ngongu"}, {
01078    0x000da8, "Thai_chochan"}, {
01079    0x000da9, "Thai_choching"}, {
01080    0x000daa, "Thai_chochang"}, {
01081    0x000dab, "Thai_soso"}, {
01082    0x000dac, "Thai_chochoe"}, {
01083    0x000dad, "Thai_yoying"}, {
01084    0x000dae, "Thai_dochada"}, {
01085    0x000daf, "Thai_topatak"}, {
01086    0x000db0, "Thai_thothan"}, {
01087    0x000db1, "Thai_thonangmontho"}, {
01088    0x000db2, "Thai_thophuthao"}, {
01089    0x000db3, "Thai_nonen"}, {
01090    0x000db4, "Thai_dodek"}, {
01091    0x000db5, "Thai_totao"}, {
01092    0x000db6, "Thai_thothung"}, {
01093    0x000db7, "Thai_thothahan"}, {
01094    0x000db8, "Thai_thothong"}, {
01095    0x000db9, "Thai_nonu"}, {
01096    0x000dba, "Thai_bobaimai"}, {
01097    0x000dbb, "Thai_popla"}, {
01098    0x000dbc, "Thai_phophung"}, {
01099    0x000dbd, "Thai_fofa"}, {
01100    0x000dbe, "Thai_phophan"}, {
01101    0x000dbf, "Thai_fofan"}, {
01102    0x000dc0, "Thai_phosamphao"}, {
01103    0x000dc1, "Thai_moma"}, {
01104    0x000dc2, "Thai_yoyak"}, {
01105    0x000dc3, "Thai_rorua"}, {
01106    0x000dc4, "Thai_ru"}, {
01107    0x000dc5, "Thai_loling"}, {
01108    0x000dc6, "Thai_lu"}, {
01109    0x000dc7, "Thai_wowaen"}, {
01110    0x000dc8, "Thai_sosala"}, {
01111    0x000dc9, "Thai_sorusi"}, {
01112    0x000dca, "Thai_sosua"}, {
01113    0x000dcb, "Thai_hohip"}, {
01114    0x000dcc, "Thai_lochula"}, {
01115    0x000dcd, "Thai_oang"}, {
01116    0x000dce, "Thai_honokhuk"}, {
01117    0x000dcf, "Thai_paiyannoi"}, {
01118    0x000dd0, "Thai_saraa"}, {
01119    0x000dd1, "Thai_maihanakat"}, {
01120    0x000dd2, "Thai_saraaa"}, {
01121    0x000dd3, "Thai_saraam"}, {
01122    0x000dd4, "Thai_sarai"}, {
01123    0x000dd5, "Thai_saraii"}, {
01124    0x000dd6, "Thai_saraue"}, {
01125    0x000dd7, "Thai_sarauee"}, {
01126    0x000dd8, "Thai_sarau"}, {
01127    0x000dd9, "Thai_sarauu"}, {
01128    0x000dda, "Thai_phinthu"}, {
01129    0x000dde, "Thai_maihanakat_maitho"}, {
01130    0x000ddf, "Thai_baht"}, {
01131    0x000de0, "Thai_sarae"}, {
01132    0x000de1, "Thai_saraae"}, {
01133    0x000de2, "Thai_sarao"}, {
01134    0x000de3, "Thai_saraaimaimuan"}, {
01135    0x000de4, "Thai_saraaimaimalai"}, {
01136    0x000de5, "Thai_lakkhangyao"}, {
01137    0x000de6, "Thai_maiyamok"}, {
01138    0x000de7, "Thai_maitaikhu"}, {
01139    0x000de8, "Thai_maiek"}, {
01140    0x000de9, "Thai_maitho"}, {
01141    0x000dea, "Thai_maitri"}, {
01142    0x000deb, "Thai_maichattawa"}, {
01143    0x000dec, "Thai_thanthakhat"}, {
01144    0x000ded, "Thai_nikhahit"}, {
01145    0x000df0, "Thai_leksun"}, {
01146    0x000df1, "Thai_leknung"}, {
01147    0x000df2, "Thai_leksong"}, {
01148    0x000df3, "Thai_leksam"}, {
01149    0x000df4, "Thai_leksi"}, {
01150    0x000df5, "Thai_lekha"}, {
01151    0x000df6, "Thai_lekhok"}, {
01152    0x000df7, "Thai_lekchet"}, {
01153    0x000df8, "Thai_lekpaet"}, {
01154    0x000df9, "Thai_lekkao"}, {
01155    0x000ea1, "Hangul_Kiyeog"}, {
01156    0x000ea2, "Hangul_SsangKiyeog"}, {
01157    0x000ea3, "Hangul_KiyeogSios"}, {
01158    0x000ea4, "Hangul_Nieun"}, {
01159    0x000ea5, "Hangul_NieunJieuj"}, {
01160    0x000ea6, "Hangul_NieunHieuh"}, {
01161    0x000ea7, "Hangul_Dikeud"}, {
01162    0x000ea8, "Hangul_SsangDikeud"}, {
01163    0x000ea9, "Hangul_Rieul"}, {
01164    0x000eaa, "Hangul_RieulKiyeog"}, {
01165    0x000eab, "Hangul_RieulMieum"}, {
01166    0x000eac, "Hangul_RieulPieub"}, {
01167    0x000ead, "Hangul_RieulSios"}, {
01168    0x000eae, "Hangul_RieulTieut"}, {
01169    0x000eaf, "Hangul_RieulPhieuf"}, {
01170    0x000eb0, "Hangul_RieulHieuh"}, {
01171    0x000eb1, "Hangul_Mieum"}, {
01172    0x000eb2, "Hangul_Pieub"}, {
01173    0x000eb3, "Hangul_SsangPieub"}, {
01174    0x000eb4, "Hangul_PieubSios"}, {
01175    0x000eb5, "Hangul_Sios"}, {
01176    0x000eb6, "Hangul_SsangSios"}, {
01177    0x000eb7, "Hangul_Ieung"}, {
01178    0x000eb8, "Hangul_Jieuj"}, {
01179    0x000eb9, "Hangul_SsangJieuj"}, {
01180    0x000eba, "Hangul_Cieuc"}, {
01181    0x000ebb, "Hangul_Khieuq"}, {
01182    0x000ebc, "Hangul_Tieut"}, {
01183    0x000ebd, "Hangul_Phieuf"}, {
01184    0x000ebe, "Hangul_Hieuh"}, {
01185    0x000ebf, "Hangul_A"}, {
01186    0x000ec0, "Hangul_AE"}, {
01187    0x000ec1, "Hangul_YA"}, {
01188    0x000ec2, "Hangul_YAE"}, {
01189    0x000ec3, "Hangul_EO"}, {
01190    0x000ec4, "Hangul_E"}, {
01191    0x000ec5, "Hangul_YEO"}, {
01192    0x000ec6, "Hangul_YE"}, {
01193    0x000ec7, "Hangul_O"}, {
01194    0x000ec8, "Hangul_WA"}, {
01195    0x000ec9, "Hangul_WAE"}, {
01196    0x000eca, "Hangul_OE"}, {
01197    0x000ecb, "Hangul_YO"}, {
01198    0x000ecc, "Hangul_U"}, {
01199    0x000ecd, "Hangul_WEO"}, {
01200    0x000ece, "Hangul_WE"}, {
01201    0x000ecf, "Hangul_WI"}, {
01202    0x000ed0, "Hangul_YU"}, {
01203    0x000ed1, "Hangul_EU"}, {
01204    0x000ed2, "Hangul_YI"}, {
01205    0x000ed3, "Hangul_I"}, {
01206    0x000ed4, "Hangul_J_Kiyeog"}, {
01207    0x000ed5, "Hangul_J_SsangKiyeog"}, {
01208    0x000ed6, "Hangul_J_KiyeogSios"}, {
01209    0x000ed7, "Hangul_J_Nieun"}, {
01210    0x000ed8, "Hangul_J_NieunJieuj"}, {
01211    0x000ed9, "Hangul_J_NieunHieuh"}, {
01212    0x000eda, "Hangul_J_Dikeud"}, {
01213    0x000edb, "Hangul_J_Rieul"}, {
01214    0x000edc, "Hangul_J_RieulKiyeog"}, {
01215    0x000edd, "Hangul_J_RieulMieum"}, {
01216    0x000ede, "Hangul_J_RieulPieub"}, {
01217    0x000edf, "Hangul_J_RieulSios"}, {
01218    0x000ee0, "Hangul_J_RieulTieut"}, {
01219    0x000ee1, "Hangul_J_RieulPhieuf"}, {
01220    0x000ee2, "Hangul_J_RieulHieuh"}, {
01221    0x000ee3, "Hangul_J_Mieum"}, {
01222    0x000ee4, "Hangul_J_Pieub"}, {
01223    0x000ee5, "Hangul_J_PieubSios"}, {
01224    0x000ee6, "Hangul_J_Sios"}, {
01225    0x000ee7, "Hangul_J_SsangSios"}, {
01226    0x000ee8, "Hangul_J_Ieung"}, {
01227    0x000ee9, "Hangul_J_Jieuj"}, {
01228    0x000eea, "Hangul_J_Cieuc"}, {
01229    0x000eeb, "Hangul_J_Khieuq"}, {
01230    0x000eec, "Hangul_J_Tieut"}, {
01231    0x000eed, "Hangul_J_Phieuf"}, {
01232    0x000eee, "Hangul_J_Hieuh"}, {
01233    0x000eef, "Hangul_RieulYeorinHieuh"}, {
01234    0x000ef0, "Hangul_SunkyeongeumMieum"}, {
01235    0x000ef1, "Hangul_SunkyeongeumPieub"}, {
01236    0x000ef2, "Hangul_PanSios"}, {
01237    0x000ef3, "Hangul_KkogjiDalrinIeung"}, {
01238    0x000ef4, "Hangul_SunkyeongeumPhieuf"}, {
01239    0x000ef5, "Hangul_YeorinHieuh"}, {
01240    0x000ef6, "Hangul_AraeA"}, {
01241    0x000ef7, "Hangul_AraeAE"}, {
01242    0x000ef8, "Hangul_J_PanSios"}, {
01243    0x000ef9, "Hangul_J_KkogjiDalrinIeung"}, {
01244    0x000efa, "Hangul_J_YeorinHieuh"}, {
01245    0x000eff, "Korean_Won"}, {
01246    0x0013bc, "OE"}, {
01247    0x0013bd, "oe"}, {
01248    0x0013be, "Ydiaeresis"}, {
01249    0x0020a0, "EcuSign"}, {
01250    0x0020a1, "ColonSign"}, {
01251    0x0020a2, "CruzeiroSign"}, {
01252    0x0020a3, "FFrancSign"}, {
01253    0x0020a4, "LiraSign"}, {
01254    0x0020a5, "MillSign"}, {
01255    0x0020a6, "NairaSign"}, {
01256    0x0020a7, "PesetaSign"}, {
01257    0x0020a8, "RupeeSign"}, {
01258    0x0020a9, "WonSign"}, {
01259    0x0020aa, "NewSheqelSign"}, {
01260    0x0020ab, "DongSign"}, {
01261    0x0020ac, "EuroSign"}, {
01262    0x00fd01, "3270_Duplicate"}, {
01263    0x00fd02, "3270_FieldMark"}, {
01264    0x00fd03, "3270_Right2"}, {
01265    0x00fd04, "3270_Left2"}, {
01266    0x00fd05, "3270_BackTab"}, {
01267    0x00fd06, "3270_EraseEOF"}, {
01268    0x00fd07, "3270_EraseInput"}, {
01269    0x00fd08, "3270_Reset"}, {
01270    0x00fd09, "3270_Quit"}, {
01271    0x00fd0a, "3270_PA1"}, {
01272    0x00fd0b, "3270_PA2"}, {
01273    0x00fd0c, "3270_PA3"}, {
01274    0x00fd0d, "3270_Test"}, {
01275    0x00fd0e, "3270_Attn"}, {
01276    0x00fd0f, "3270_CursorBlink"}, {
01277    0x00fd10, "3270_AltCursor"}, {
01278    0x00fd11, "3270_KeyClick"}, {
01279    0x00fd12, "3270_Jump"}, {
01280    0x00fd13, "3270_Ident"}, {
01281    0x00fd14, "3270_Rule"}, {
01282    0x00fd15, "3270_Copy"}, {
01283    0x00fd16, "3270_Play"}, {
01284    0x00fd17, "3270_Setup"}, {
01285    0x00fd18, "3270_Record"}, {
01286    0x00fd19, "3270_ChangeScreen"}, {
01287    0x00fd1a, "3270_DeleteWord"}, {
01288    0x00fd1b, "3270_ExSelect"}, {
01289    0x00fd1c, "3270_CursorSelect"}, {
01290    0x00fd1d, "3270_PrintScreen"}, {
01291    0x00fd1e, "3270_Enter"}, {
01292    0x00fe01, "ISO_Lock"}, {
01293    0x00fe02, "ISO_Level2_Latch"}, {
01294    0x00fe03, "ISO_Level3_Shift"}, {
01295    0x00fe04, "ISO_Level3_Latch"}, {
01296    0x00fe05, "ISO_Level3_Lock"}, {
01297    0x00fe06, "ISO_Group_Latch"}, {
01298    0x00fe07, "ISO_Group_Lock"}, {
01299    0x00fe08, "ISO_Next_Group"}, {
01300    0x00fe09, "ISO_Next_Group_Lock"}, {
01301    0x00fe0a, "ISO_Prev_Group"}, {
01302    0x00fe0b, "ISO_Prev_Group_Lock"}, {
01303    0x00fe0c, "ISO_First_Group"}, {
01304    0x00fe0d, "ISO_First_Group_Lock"}, {
01305    0x00fe0e, "ISO_Last_Group"}, {
01306    0x00fe0f, "ISO_Last_Group_Lock"}, {
01307    0x00fe20, "ISO_Left_Tab"}, {
01308    0x00fe21, "ISO_Move_Line_Up"}, {
01309    0x00fe22, "ISO_Move_Line_Down"}, {
01310    0x00fe23, "ISO_Partial_Line_Up"}, {
01311    0x00fe24, "ISO_Partial_Line_Down"}, {
01312    0x00fe25, "ISO_Partial_Space_Left"}, {
01313    0x00fe26, "ISO_Partial_Space_Right"}, {
01314    0x00fe27, "ISO_Set_Margin_Left"}, {
01315    0x00fe28, "ISO_Set_Margin_Right"}, {
01316    0x00fe29, "ISO_Release_Margin_Left"}, {
01317    0x00fe2a, "ISO_Release_Margin_Right"}, {
01318    0x00fe2b, "ISO_Release_Both_Margins"}, {
01319    0x00fe2c, "ISO_Fast_Cursor_Left"}, {
01320    0x00fe2d, "ISO_Fast_Cursor_Right"}, {
01321    0x00fe2e, "ISO_Fast_Cursor_Up"}, {
01322    0x00fe2f, "ISO_Fast_Cursor_Down"}, {
01323    0x00fe30, "ISO_Continuous_Underline"}, {
01324    0x00fe31, "ISO_Discontinuous_Underline"}, {
01325    0x00fe32, "ISO_Emphasize"}, {
01326    0x00fe33, "ISO_Center_Object"}, {
01327    0x00fe34, "ISO_Enter"}, {
01328    0x00fe50, "dead_grave"}, {
01329    0x00fe51, "dead_acute"}, {
01330    0x00fe52, "dead_circumflex"}, {
01331    0x00fe53, "dead_tilde"}, {
01332    0x00fe54, "dead_macron"}, {
01333    0x00fe55, "dead_breve"}, {
01334    0x00fe56, "dead_abovedot"}, {
01335    0x00fe57, "dead_diaeresis"}, {
01336    0x00fe58, "dead_abovering"}, {
01337    0x00fe59, "dead_doubleacute"}, {
01338    0x00fe5a, "dead_caron"}, {
01339    0x00fe5b, "dead_cedilla"}, {
01340    0x00fe5c, "dead_ogonek"}, {
01341    0x00fe5d, "dead_iota"}, {
01342    0x00fe5e, "dead_voiced_sound"}, {
01343    0x00fe5f, "dead_semivoiced_sound"}, {
01344    0x00fe60, "dead_belowdot"}, {
01345    0x00fe70, "AccessX_Enable"}, {
01346    0x00fe71, "AccessX_Feedback_Enable"}, {
01347    0x00fe72, "RepeatKeys_Enable"}, {
01348    0x00fe73, "SlowKeys_Enable"}, {
01349    0x00fe74, "BounceKeys_Enable"}, {
01350    0x00fe75, "StickyKeys_Enable"}, {
01351    0x00fe76, "MouseKeys_Enable"}, {
01352    0x00fe77, "MouseKeys_Accel_Enable"}, {
01353    0x00fe78, "Overlay1_Enable"}, {
01354    0x00fe79, "Overlay2_Enable"}, {
01355    0x00fe7a, "AudibleBell_Enable"}, {
01356    0x00fed0, "First_Virtual_Screen"}, {
01357    0x00fed1, "Prev_Virtual_Screen"}, {
01358    0x00fed2, "Next_Virtual_Screen"}, {
01359    0x00fed4, "Last_Virtual_Screen"}, {
01360    0x00fed5, "Terminate_Server"}, {
01361    0x00fee0, "Pointer_Left"}, {
01362    0x00fee1, "Pointer_Right"}, {
01363    0x00fee2, "Pointer_Up"}, {
01364    0x00fee3, "Pointer_Down"}, {
01365    0x00fee4, "Pointer_UpLeft"}, {
01366    0x00fee5, "Pointer_UpRight"}, {
01367    0x00fee6, "Pointer_DownLeft"}, {
01368    0x00fee7, "Pointer_DownRight"}, {
01369    0x00fee8, "Pointer_Button_Dflt"}, {
01370    0x00fee9, "Pointer_Button1"}, {
01371    0x00feea, "Pointer_Button2"}, {
01372    0x00feeb, "Pointer_Button3"}, {
01373    0x00feec, "Pointer_Button4"}, {
01374    0x00feed, "Pointer_Button5"}, {
01375    0x00feee, "Pointer_DblClick_Dflt"}, {
01376    0x00feef, "Pointer_DblClick1"}, {
01377    0x00fef0, "Pointer_DblClick2"}, {
01378    0x00fef1, "Pointer_DblClick3"}, {
01379    0x00fef2, "Pointer_DblClick4"}, {
01380    0x00fef3, "Pointer_DblClick5"}, {
01381    0x00fef4, "Pointer_Drag_Dflt"}, {
01382    0x00fef5, "Pointer_Drag1"}, {
01383    0x00fef6, "Pointer_Drag2"}, {
01384    0x00fef7, "Pointer_Drag3"}, {
01385    0x00fef8, "Pointer_Drag4"}, {
01386    0x00fef9, "Pointer_EnableKeys"}, {
01387    0x00fefa, "Pointer_Accelerate"}, {
01388    0x00fefb, "Pointer_DfltBtnNext"}, {
01389    0x00fefc, "Pointer_DfltBtnPrev"}, {
01390    0x00fefd, "Pointer_Drag5"}, {
01391    0x00ff08, "BackSpace"}, {
01392    0x00ff09, "Tab"}, {
01393    0x00ff0a, "Linefeed"}, {
01394    0x00ff0b, "Clear"}, {
01395    0x00ff0d, "Return"}, {
01396    0x00ff13, "Pause"}, {
01397    0x00ff14, "Scroll_Lock"}, {
01398    0x00ff15, "Sys_Req"}, {
01399    0x00ff1b, "Escape"}, {
01400    0x00ff20, "Multi_key"}, {
01401    0x00ff21, "Kanji"}, {
01402    0x00ff22, "Muhenkan"}, {
01403    0x00ff23, "Henkan"}, {
01404    0x00ff23, "Henkan_Mode"}, {
01405    0x00ff24, "Romaji"}, {
01406    0x00ff25, "Hiragana"}, {
01407    0x00ff26, "Katakana"}, {
01408    0x00ff27, "Hiragana_Katakana"}, {
01409    0x00ff28, "Zenkaku"}, {
01410    0x00ff29, "Hankaku"}, {
01411    0x00ff2a, "Zenkaku_Hankaku"}, {
01412    0x00ff2b, "Touroku"}, {
01413    0x00ff2c, "Massyo"}, {
01414    0x00ff2d, "Kana_Lock"}, {
01415    0x00ff2e, "Kana_Shift"}, {
01416    0x00ff2f, "Eisu_Shift"}, {
01417    0x00ff30, "Eisu_toggle"}, {
01418    0x00ff31, "Hangul"}, {
01419    0x00ff32, "Hangul_Start"}, {
01420    0x00ff33, "Hangul_End"}, {
01421    0x00ff34, "Hangul_Hanja"}, {
01422    0x00ff35, "Hangul_Jamo"}, {
01423    0x00ff36, "Hangul_Romaja"}, {
01424    0x00ff37, "Codeinput"}, {
01425    0x00ff38, "Hangul_Jeonja"}, {
01426    0x00ff39, "Hangul_Banja"}, {
01427    0x00ff3a, "Hangul_PreHanja"}, {
01428    0x00ff3b, "Hangul_PostHanja"}, {
01429    0x00ff3c, "SingleCandidate"}, {
01430    0x00ff3d, "MultipleCandidate"}, {
01431    0x00ff3e, "PreviousCandidate"}, {
01432    0x00ff3f, "Hangul_Special"}, {
01433    0x00ff50, "Home"}, {
01434    0x00ff51, "Left"}, {
01435    0x00ff52, "Up"}, {
01436    0x00ff53, "Right"}, {
01437    0x00ff54, "Down"}, {
01438    0x00ff55, "Page_Up"}, {
01439    0x00ff55, "Prior"}, {
01440    0x00ff56, "Next"}, {
01441    0x00ff56, "Page_Down"}, {
01442    0x00ff57, "End"}, {
01443    0x00ff58, "Begin"}, {
01444    0x00ff60, "Select"}, {
01445    0x00ff61, "Print"}, {
01446    0x00ff62, "Execute"}, {
01447    0x00ff63, "Insert"}, {
01448    0x00ff65, "Undo"}, {
01449    0x00ff66, "Redo"}, {
01450    0x00ff67, "Menu"}, {
01451    0x00ff68, "Find"}, {
01452    0x00ff69, "Cancel"}, {
01453    0x00ff6a, "Help"}, {
01454    0x00ff6b, "Break"}, {
01455    0x00ff7e, "Arabic_switch"}, {
01456    0x00ff7e, "Greek_switch"}, {
01457    0x00ff7e, "Hangul_switch"}, {
01458    0x00ff7e, "Hebrew_switch"}, {
01459    0x00ff7e, "ISO_Group_Shift"}, {
01460    0x00ff7e, "Mode_switch"}, {
01461    0x00ff7e, "kana_switch"}, {
01462    0x00ff7e, "script_switch"}, {
01463    0x00ff7f, "Num_Lock"}, {
01464    0x00ff80, "KP_Space"}, {
01465    0x00ff89, "KP_Tab"}, {
01466    0x00ff8d, "KP_Enter"}, {
01467    0x00ff91, "KP_F1"}, {
01468    0x00ff92, "KP_F2"}, {
01469    0x00ff93, "KP_F3"}, {
01470    0x00ff94, "KP_F4"}, {
01471    0x00ff95, "KP_Home"}, {
01472    0x00ff96, "KP_Left"}, {
01473    0x00ff97, "KP_Up"}, {
01474    0x00ff98, "KP_Right"}, {
01475    0x00ff99, "KP_Down"}, {
01476    0x00ff9a, "KP_Page_Up"}, {
01477    0x00ff9a, "KP_Prior"}, {
01478    0x00ff9b, "KP_Next"}, {
01479    0x00ff9b, "KP_Page_Down"}, {
01480    0x00ff9c, "KP_End"}, {
01481    0x00ff9d, "KP_Begin"}, {
01482    0x00ff9e, "KP_Insert"}, {
01483    0x00ff9f, "KP_Delete"}, {
01484    0x00ffaa, "KP_Multiply"}, {
01485    0x00ffab, "KP_Add"}, {
01486    0x00ffac, "KP_Separator"}, {
01487    0x00ffad, "KP_Subtract"}, {
01488    0x00ffae, "KP_Decimal"}, {
01489    0x00ffaf, "KP_Divide"}, {
01490    0x00ffb0, "KP_0"}, {
01491    0x00ffb1, "KP_1"}, {
01492    0x00ffb2, "KP_2"}, {
01493    0x00ffb3, "KP_3"}, {
01494    0x00ffb4, "KP_4"}, {
01495    0x00ffb5, "KP_5"}, {
01496    0x00ffb6, "KP_6"}, {
01497    0x00ffb7, "KP_7"}, {
01498    0x00ffb8, "KP_8"}, {
01499    0x00ffb9, "KP_9"}, {
01500    0x00ffbd, "KP_Equal"}, {
01501    0x00ffbe, "F1"}, {
01502    0x00ffbf, "F2"}, {
01503    0x00ffc0, "F3"}, {
01504    0x00ffc1, "F4"}, {
01505    0x00ffc2, "F5"}, {
01506    0x00ffc3, "F6"}, {
01507    0x00ffc4, "F7"}, {
01508    0x00ffc5, "F8"}, {
01509    0x00ffc6, "F9"}, {
01510    0x00ffc7, "F10"}, {
01511    0x00ffc8, "F11"}, {
01512    0x00ffc9, "F12"}, {
01513    0x00ffca, "F13"}, {
01514    0x00ffcb, "F14"}, {
01515    0x00ffcc, "F15"}, {
01516    0x00ffcd, "F16"}, {
01517    0x00ffce, "F17"}, {
01518    0x00ffcf, "F18"}, {
01519    0x00ffd0, "F19"}, {
01520    0x00ffd1, "F20"}, {
01521    0x00ffd2, "F21"}, {
01522    0x00ffd3, "F22"}, {
01523    0x00ffd4, "F23"}, {
01524    0x00ffd5, "F24"}, {
01525    0x00ffd6, "F25"}, {
01526    0x00ffd7, "F26"}, {
01527    0x00ffd8, "F27"}, {
01528    0x00ffd9, "F28"}, {
01529    0x00ffda, "F29"}, {
01530    0x00ffdb, "F30"}, {
01531    0x00ffdc, "F31"}, {
01532    0x00ffdd, "F32"}, {
01533    0x00ffde, "F33"}, {
01534    0x00ffdf, "F34"}, {
01535    0x00ffe0, "F35"}, {
01536    0x00ffe1, "Shift_L"}, {
01537    0x00ffe2, "Shift_R"}, {
01538    0x00ffe3, "Control_L"}, {
01539    0x00ffe4, "Control_R"}, {
01540    0x00ffe5, "Caps_Lock"}, {
01541    0x00ffe6, "Shift_Lock"}, {
01542    0x00ffe7, "Meta_L"}, {
01543    0x00ffe8, "Meta_R"}, {
01544    0x00ffe9, "Alt_L"}, {
01545    0x00ffea, "Alt_R"}, {
01546    0x00ffeb, "Super_L"}, {
01547    0x00ffec, "Super_R"}, {
01548    0x00ffed, "Hyper_L"}, {
01549    0x00ffee, "Hyper_R"}, {
01550    0x00ffff, "Delete"}, {
01551 0xffffff, "VoidSymbol"},};
01552 
01553 #define GDK_NUM_KEYS (sizeof (gdk_keys_by_keyval) / sizeof (gdk_keys_by_keyval[0]))
01554 
01555 static struct gdk_key *gdk_keys_by_name = NULL;
01556 
01557 static int gdk_keys_keyval_compare(const void *pkey, const void *pbase)
01558 {
01559    return (*(int *) pkey) - ((struct gdk_key *) pbase)->keyval;
01560 }
01561 
01562 gchar *gdk_keyval_name(guint keyval)
01563 {
01564    struct gdk_key *found = bsearch(&keyval, gdk_keys_by_keyval,
01565                                    GDK_NUM_KEYS, sizeof(struct gdk_key),
01566                                    gdk_keys_keyval_compare);
01567    if (found != NULL)
01568       return (gchar *) found->name;
01569    else
01570       return NULL;
01571 }
01572 
01573 static int gdk_key_compare_by_name(const void *a, const void *b)
01574 {
01575    return strcmp(((const struct gdk_key *) a)->name,
01576                  ((const struct gdk_key *) b)->name);
01577 }
01578 
01579 static int gdk_keys_name_compare(const void *pkey, const void *pbase)
01580 {
01581    return strcmp((const char *) pkey,
01582                  ((const struct gdk_key *) pbase)->name);
01583 }
01584 
01585 guint gdk_keyval_from_name(const gchar * keyval_name)
01586 {
01587    struct gdk_key *found;
01588 
01589    g_return_val_if_fail(keyval_name != NULL, 0);
01590 
01591    if (gdk_keys_by_name == NULL) {
01592       gdk_keys_by_name = g_new(struct gdk_key, GDK_NUM_KEYS);
01593 
01594       memcpy(gdk_keys_by_name, gdk_keys_by_keyval,
01595              GDK_NUM_KEYS * sizeof(struct gdk_key));
01596 
01597       qsort(gdk_keys_by_name, GDK_NUM_KEYS, sizeof(struct gdk_key),
01598             gdk_key_compare_by_name);
01599    }
01600 
01601    found = bsearch(keyval_name, gdk_keys_by_name,
01602                    GDK_NUM_KEYS, sizeof(struct gdk_key),
01603                    gdk_keys_name_compare);
01604    if (found != NULL)
01605       return found->keyval;
01606    else
01607       return GDK_VoidSymbol;
01608 }

Generated on Tue Jul 5 14:14:40 2011 for ROOT_528-00b_version by  doxygen 1.5.1