00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
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
00118
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
00129 }
00130
00131 gint gdk_get_use_xshm(void)
00132 {
00133 return TRUE;
00134 }
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151 gint gdk_screen_width(void)
00152 {
00153 return ((GdkWindowPrivate *) gdk_parent_root)->drawable.width;
00154 }
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171 gint gdk_screen_height(void)
00172 {
00173 return ((GdkWindowPrivate *) gdk_parent_root)->drawable.height;
00174 }
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191 gint gdk_screen_width_mm(void)
00192 {
00193 return GetDeviceCaps(gdk_DC, HORZSIZE);
00194 }
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
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
00219 }
00220
00221 void gdk_key_repeat_restore(void)
00222 {
00223
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 }