/*

This file fakes some of X11's key handling for the special purpose of running
a standalone rdp2vnc (without linking to X11)

*/

#include "x11stubs.h"
#include <string.h>

/* ignored */
int *display;

typedef struct
{
	const char *string;
	KeySym keysym;
}
StringToKeysym_t;

StringToKeysym_t StringToKeysym[] = {
#ifndef KEYSYMFAKE_H
	{"VoidSymbol", XK_VoidSymbol},
#ifdef XK_MISCELLANY
	{"BackSpace", XK_BackSpace},
	{"Tab", XK_Tab},
	{"Linefeed", XK_Linefeed},
	{"Clear", XK_Clear},
	{"Return", XK_Return},
	{"Pause", XK_Pause},
	{"Scroll_Lock", XK_Scroll_Lock},
	{"Sys_Req", XK_Sys_Req},
	{"Escape", XK_Escape},
	{"Delete", XK_Delete},
	{"Multi_key", XK_Multi_key},
	{"SingleCandidate", XK_SingleCandidate},
	{"MultipleCandidate", XK_MultipleCandidate},
	{"PreviousCandidate", XK_PreviousCandidate},
	{"Kanji", XK_Kanji},
	{"Muhenkan", XK_Muhenkan},
	{"Henkan_Mode", XK_Henkan_Mode},
	{"Henkan", XK_Henkan},
	{"Romaji", XK_Romaji},
	{"Hiragana", XK_Hiragana},
	{"Katakana", XK_Katakana},
	{"Hiragana_Katakana", XK_Hiragana_Katakana},
	{"Zenkaku", XK_Zenkaku},
	{"Hankaku", XK_Hankaku},
	{"Zenkaku_Hankaku", XK_Zenkaku_Hankaku},
	{"Touroku", XK_Touroku},
	{"Massyo", XK_Massyo},
	{"Kana_Lock", XK_Kana_Lock},
	{"Kana_Shift", XK_Kana_Shift},
	{"Eisu_Shift", XK_Eisu_Shift},
	{"Eisu_toggle", XK_Eisu_toggle},
	{"Zen_Koho", XK_Zen_Koho},
	{"Mae_Koho", XK_Mae_Koho},
	{"Home", XK_Home},
	{"Left", XK_Left},
	{"Up", XK_Up},
	{"Right", XK_Right},
	{"Down", XK_Down},
	{"Prior", XK_Prior},
	{"Page_Up", XK_Page_Up},
	{"Next", XK_Next},
	{"Page_Down", XK_Page_Down},
	{"End", XK_End},
	{"Begin", XK_Begin},
	{"Select", XK_Select},
	{"Print", XK_Print},
	{"Execute", XK_Execute},
	{"Insert", XK_Insert},
	{"Undo", XK_Undo},
	{"Redo", XK_Redo},
	{"Menu", XK_Menu},
	{"Find", XK_Find},
	{"Cancel", XK_Cancel},
	{"Help", XK_Help},
	{"Break", XK_Break},
	{"Mode_switch", XK_Mode_switch},
	{"script_switch", XK_script_switch},
	{"Num_Lock", XK_Num_Lock},
	{"KP_Space", XK_KP_Space},
	{"KP_Tab", XK_KP_Tab},
	{"KP_Enter", XK_KP_Enter},
	{"KP_F1", XK_KP_F1},
	{"KP_F2", XK_KP_F2},
	{"KP_F3", XK_KP_F3},
	{"KP_F4", XK_KP_F4},
	{"KP_Home", XK_KP_Home},
	{"KP_Left", XK_KP_Left},
	{"KP_Up", XK_KP_Up},
	{"KP_Right", XK_KP_Right},
	{"KP_Down", XK_KP_Down},
	{"KP_Prior", XK_KP_Prior},
	{"KP_Page_Up", XK_KP_Page_Up},
	{"KP_Next", XK_KP_Next},
	{"KP_Page_Down", XK_KP_Page_Down},
	{"KP_End", XK_KP_End},
	{"KP_Begin", XK_KP_Begin},
	{"KP_Insert", XK_KP_Insert},
	{"KP_Delete", XK_KP_Delete},
	{"KP_Equal", XK_KP_Equal},
	{"KP_Multiply", XK_KP_Multiply},
	{"KP_Add", XK_KP_Add},
	{"KP_Separator", XK_KP_Separator},
	{"KP_Subtract", XK_KP_Subtract},
	{"KP_Decimal", XK_KP_Decimal},
	{"KP_Divide", XK_KP_Divide},
	{"KP_0", XK_KP_0},
	{"KP_1", XK_KP_1},
	{"KP_2", XK_KP_2},
	{"KP_3", XK_KP_3},
	{"KP_4", XK_KP_4},
	{"KP_5", XK_KP_5},
	{"KP_6", XK_KP_6},
	{"KP_7", XK_KP_7},
	{"KP_8", XK_KP_8},
	{"KP_9", XK_KP_9},
	{"F1", XK_F1},
	{"F2", XK_F2},
	{"F3", XK_F3},
	{"F4", XK_F4},
	{"F5", XK_F5},
	{"F6", XK_F6},
	{"F7", XK_F7},
	{"F8", XK_F8},
	{"F9", XK_F9},
	{"F10", XK_F10},
	{"F11", XK_F11},
	{"L1", XK_L1},
	{"F12", XK_F12},
	{"L2", XK_L2},
	{"F13", XK_F13},
	{"L3", XK_L3},
	{"F14", XK_F14},
	{"L4", XK_L4},
	{"F15", XK_F15},
	{"L5", XK_L5},
	{"F16", XK_F16},
	{"L6", XK_L6},
	{"F17", XK_F17},
	{"L7", XK_L7},
	{"F18", XK_F18},
	{"L8", XK_L8},
	{"F19", XK_F19},
	{"L9", XK_L9},
	{"F20", XK_F20},
	{"L10", XK_L10},
	{"F21", XK_F21},
	{"R1", XK_R1},
	{"F22", XK_F22},
	{"R2", XK_R2},
	{"F23", XK_F23},
	{"R3", XK_R3},
	{"F24", XK_F24},
	{"R4", XK_R4},
	{"F25", XK_F25},
	{"R5", XK_R5},
	{"F26", XK_F26},
	{"R6", XK_R6},
	{"F27", XK_F27},
	{"R7", XK_R7},
	{"F28", XK_F28},
	{"R8", XK_R8},
	{"F29", XK_F29},
	{"R9", XK_R9},
	{"F30", XK_F30},
	{"R10", XK_R10},
	{"F31", XK_F31},
	{"R11", XK_R11},
	{"F32", XK_F32},
	{"R12", XK_R12},
	{"F33", XK_F33},
	{"R13", XK_R13},
	{"F34", XK_F34},
	{"R14", XK_R14},
	{"F35", XK_F35},
	{"R15", XK_R15},
	{"Shift_L", XK_Shift_L},
	{"Shift_R", XK_Shift_R},
	{"Control_L", XK_Control_L},
	{"Control_R", XK_Control_R},
	{"Caps_Lock", XK_Caps_Lock},
	{"Shift_Lock", XK_Shift_Lock},
	{"Meta_L", XK_Meta_L},
	{"Meta_R", XK_Meta_R},
	{"Alt_L", XK_Alt_L},
	{"Alt_R", XK_Alt_R},
	{"Super_L", XK_Super_L},
	{"Super_R", XK_Super_R},
	{"Hyper_L", XK_Hyper_L},
	{"Hyper_R", XK_Hyper_R},
#endif /* XK_MISCELLANY */
#ifdef XK_XKB_KEYS
	{"ISO_Lock", XK_ISO_Lock},
	{"ISO_Level2_Latch", XK_ISO_Level2_Latch},
	{"ISO_Level3_Shift", XK_ISO_Level3_Shift},
	{"ISO_Level3_Latch", XK_ISO_Level3_Latch},
	{"ISO_Level3_Lock", XK_ISO_Level3_Lock},
	{"ISO_Group_Shift", XK_ISO_Group_Shift},
	{"ISO_Group_Latch", XK_ISO_Group_Latch},
	{"ISO_Group_Lock", XK_ISO_Group_Lock},
	{"ISO_Next_Group", XK_ISO_Next_Group},
	{"ISO_Next_Group_Lock", XK_ISO_Next_Group_Lock},
	{"ISO_Prev_Group", XK_ISO_Prev_Group},
	{"ISO_Prev_Group_Lock", XK_ISO_Prev_Group_Lock},
	{"ISO_First_Group", XK_ISO_First_Group},
	{"ISO_First_Group_Lock", XK_ISO_First_Group_Lock},
	{"ISO_Last_Group", XK_ISO_Last_Group},
	{"ISO_Last_Group_Lock", XK_ISO_Last_Group_Lock},
	{"ISO_Left_Tab", XK_ISO_Left_Tab},
	{"ISO_Move_Line_Up", XK_ISO_Move_Line_Up},
	{"ISO_Move_Line_Down", XK_ISO_Move_Line_Down},
	{"ISO_Partial_Line_Up", XK_ISO_Partial_Line_Up},
	{"ISO_Partial_Line_Down", XK_ISO_Partial_Line_Down},
	{"ISO_Partial_Space_Left", XK_ISO_Partial_Space_Left},
	{"ISO_Partial_Space_Right", XK_ISO_Partial_Space_Right},
	{"ISO_Set_Margin_Left", XK_ISO_Set_Margin_Left},
	{"ISO_Set_Margin_Right", XK_ISO_Set_Margin_Right},
	{"ISO_Release_Margin_Left", XK_ISO_Release_Margin_Left},
	{"ISO_Release_Margin_Right", XK_ISO_Release_Margin_Right},
	{"ISO_Release_Both_Margins", XK_ISO_Release_Both_Margins},
	{"ISO_Fast_Cursor_Left", XK_ISO_Fast_Cursor_Left},
	{"ISO_Fast_Cursor_Right", XK_ISO_Fast_Cursor_Right},
	{"ISO_Fast_Cursor_Up", XK_ISO_Fast_Cursor_Up},
	{"ISO_Fast_Cursor_Down", XK_ISO_Fast_Cursor_Down},
	{"ISO_Continuous_Underline", XK_ISO_Continuous_Underline},
	{"ISO_Discontinuous_Underline", XK_ISO_Discontinuous_Underline},
	{"ISO_Emphasize", XK_ISO_Emphasize},
	{"ISO_Center_Object", XK_ISO_Center_Object},
	{"ISO_Enter", XK_ISO_Enter},
	{"dead_grave", XK_dead_grave},
	{"dead_acute", XK_dead_acute},
	{"dead_circumflex", XK_dead_circumflex},
	{"dead_tilde", XK_dead_tilde},
	{"dead_macron", XK_dead_macron},
	{"dead_breve", XK_dead_breve},
	{"dead_abovedot", XK_dead_abovedot},
	{"dead_diaeresis", XK_dead_diaeresis},
	{"dead_abovering", XK_dead_abovering},
	{"dead_doubleacute", XK_dead_doubleacute},
	{"dead_caron", XK_dead_caron},
	{"dead_cedilla", XK_dead_cedilla},
	{"dead_ogonek", XK_dead_ogonek},
	{"dead_iota", XK_dead_iota},
	{"dead_voiced_sound", XK_dead_voiced_sound},
	{"dead_semivoiced_sound", XK_dead_semivoiced_sound},
	{"dead_belowdot", XK_dead_belowdot},
	{"First_Virtual_Screen", XK_First_Virtual_Screen},
	{"Prev_Virtual_Screen", XK_Prev_Virtual_Screen},
	{"Next_Virtual_Screen", XK_Next_Virtual_Screen},
	{"Last_Virtual_Screen", XK_Last_Virtual_Screen},
	{"Terminate_Server", XK_Terminate_Server},
	{"AccessX_Enable", XK_AccessX_Enable},
	{"AccessX_Feedback_Enable", XK_AccessX_Feedback_Enable},
	{"RepeatKeys_Enable", XK_RepeatKeys_Enable},
	{"SlowKeys_Enable", XK_SlowKeys_Enable},
	{"BounceKeys_Enable", XK_BounceKeys_Enable},
	{"StickyKeys_Enable", XK_StickyKeys_Enable},
	{"MouseKeys_Enable", XK_MouseKeys_Enable},
	{"MouseKeys_Accel_Enable", XK_MouseKeys_Accel_Enable},
	{"Overlay1_Enable", XK_Overlay1_Enable},
	{"Overlay2_Enable", XK_Overlay2_Enable},
	{"AudibleBell_Enable", XK_AudibleBell_Enable},
	{"Pointer_Left", XK_Pointer_Left},
	{"Pointer_Right", XK_Pointer_Right},
	{"Pointer_Up", XK_Pointer_Up},
	{"Pointer_Down", XK_Pointer_Down},
	{"Pointer_UpLeft", XK_Pointer_UpLeft},
	{"Pointer_UpRight", XK_Pointer_UpRight},
	{"Pointer_DownLeft", XK_Pointer_DownLeft},
	{"Pointer_DownRight", XK_Pointer_DownRight},
	{"Pointer_Button_Dflt", XK_Pointer_Button_Dflt},
	{"Pointer_Button1", XK_Pointer_Button1},
	{"Pointer_Button2", XK_Pointer_Button2},
	{"Pointer_Button3", XK_Pointer_Button3},
	{"Pointer_Button4", XK_Pointer_Button4},
	{"Pointer_Button5", XK_Pointer_Button5},
	{"Pointer_DblClick_Dflt", XK_Pointer_DblClick_Dflt},
	{"Pointer_DblClick1", XK_Pointer_DblClick1},
	{"Pointer_DblClick2", XK_Pointer_DblClick2},
	{"Pointer_DblClick3", XK_Pointer_DblClick3},
	{"Pointer_DblClick4", XK_Pointer_DblClick4},
	{"Pointer_DblClick5", XK_Pointer_DblClick5},
	{"Pointer_Drag_Dflt", XK_Pointer_Drag_Dflt},
	{"Pointer_Drag1", XK_Pointer_Drag1},
	{"Pointer_Drag2", XK_Pointer_Drag2},
	{"Pointer_Drag3", XK_Pointer_Drag3},
	{"Pointer_Drag4", XK_Pointer_Drag4},
	{"Pointer_Drag5", XK_Pointer_Drag5},
	{"Pointer_EnableKeys", XK_Pointer_EnableKeys},
	{"Pointer_Accelerate", XK_Pointer_Accelerate},
	{"Pointer_DfltBtnNext", XK_Pointer_DfltBtnNext},
	{"Pointer_DfltBtnPrev", XK_Pointer_DfltBtnPrev},
#endif
#ifdef XK_3270
	{"3270_Duplicate", XK_3270_Duplicate},
	{"3270_FieldMark", XK_3270_FieldMark},
	{"3270_Right2", XK_3270_Right2},
	{"3270_Left2", XK_3270_Left2},
	{"3270_BackTab", XK_3270_BackTab},
	{"3270_EraseEOF", XK_3270_EraseEOF},
	{"3270_EraseInput", XK_3270_EraseInput},
	{"3270_Reset", XK_3270_Reset},
	{"3270_Quit", XK_3270_Quit},
	{"3270_PA1", XK_3270_PA1},
	{"3270_PA2", XK_3270_PA2},
	{"3270_PA3", XK_3270_PA3},
	{"3270_Test", XK_3270_Test},
	{"3270_Attn", XK_3270_Attn},
	{"3270_CursorBlink", XK_3270_CursorBlink},
	{"3270_AltCursor", XK_3270_AltCursor},
	{"3270_KeyClick", XK_3270_KeyClick},
	{"3270_Jump", XK_3270_Jump},
	{"3270_Ident", XK_3270_Ident},
	{"3270_Rule", XK_3270_Rule},
	{"3270_Copy", XK_3270_Copy},
	{"3270_Play", XK_3270_Play},
	{"3270_Setup", XK_3270_Setup},
	{"3270_Record", XK_3270_Record},
	{"3270_ChangeScreen", XK_3270_ChangeScreen},
	{"3270_DeleteWord", XK_3270_DeleteWord},
	{"3270_ExSelect", XK_3270_ExSelect},
	{"3270_CursorSelect", XK_3270_CursorSelect},
	{"3270_PrintScreen", XK_3270_PrintScreen},
	{"3270_Enter", XK_3270_Enter},
#endif
#ifdef XK_LATIN1
	{"space", XK_space},
	{"exclam", XK_exclam},
	{"quotedbl", XK_quotedbl},
	{"numbersign", XK_numbersign},
	{"dollar", XK_dollar},
	{"percent", XK_percent},
	{"ampersand", XK_ampersand},
	{"apostrophe", XK_apostrophe},
	{"quoteright", XK_quoteright},
	{"parenleft", XK_parenleft},
	{"parenright", XK_parenright},
	{"asterisk", XK_asterisk},
	{"plus", XK_plus},
	{"comma", XK_comma},
	{"minus", XK_minus},
	{"period", XK_period},
	{"slash", XK_slash},
	{"0", XK_0},
	{"1", XK_1},
	{"2", XK_2},
	{"3", XK_3},
	{"4", XK_4},
	{"5", XK_5},
	{"6", XK_6},
	{"7", XK_7},
	{"8", XK_8},
	{"9", XK_9},
	{"colon", XK_colon},
	{"semicolon", XK_semicolon},
	{"less", XK_less},
	{"equal", XK_equal},
	{"greater", XK_greater},
	{"question", XK_question},
	{"at", XK_at},
	{"A", XK_A},
	{"B", XK_B},
	{"C", XK_C},
	{"D", XK_D},
	{"E", XK_E},
	{"F", XK_F},
	{"G", XK_G},
	{"H", XK_H},
	{"I", XK_I},
	{"J", XK_J},
	{"K", XK_K},
	{"L", XK_L},
	{"M", XK_M},
	{"N", XK_N},
	{"O", XK_O},
	{"P", XK_P},
	{"Q", XK_Q},
	{"R", XK_R},
	{"S", XK_S},
	{"T", XK_T},
	{"U", XK_U},
	{"V", XK_V},
	{"W", XK_W},
	{"X", XK_X},
	{"Y", XK_Y},
	{"Z", XK_Z},
	{"bracketleft", XK_bracketleft},
	{"backslash", XK_backslash},
	{"bracketright", XK_bracketright},
	{"asciicircum", XK_asciicircum},
	{"underscore", XK_underscore},
	{"grave", XK_grave},
	{"quoteleft", XK_quoteleft},
	{"a", XK_a},
	{"b", XK_b},
	{"c", XK_c},
	{"d", XK_d},
	{"e", XK_e},
	{"f", XK_f},
	{"g", XK_g},
	{"h", XK_h},
	{"i", XK_i},
	{"j", XK_j},
	{"k", XK_k},
	{"l", XK_l},
	{"m", XK_m},
	{"n", XK_n},
	{"o", XK_o},
	{"p", XK_p},
	{"q", XK_q},
	{"r", XK_r},
	{"s", XK_s},
	{"t", XK_t},
	{"u", XK_u},
	{"v", XK_v},
	{"w", XK_w},
	{"x", XK_x},
	{"y", XK_y},
	{"z", XK_z},
	{"braceleft", XK_braceleft},
	{"bar", XK_bar},
	{"braceright", XK_braceright},
	{"asciitilde", XK_asciitilde},
	{"nobreakspace", XK_nobreakspace},
	{"exclamdown", XK_exclamdown},
	{"cent", XK_cent},
	{"sterling", XK_sterling},
	{"currency", XK_currency},
	{"yen", XK_yen},
	{"brokenbar", XK_brokenbar},
	{"section", XK_section},
	{"diaeresis", XK_diaeresis},
	{"copyright", XK_copyright},
	{"ordfeminine", XK_ordfeminine},
	{"guillemotleft", XK_guillemotleft},
	{"notsign", XK_notsign},
	{"hyphen", XK_hyphen},
	{"registered", XK_registered},
	{"macron", XK_macron},
	{"degree", XK_degree},
	{"plusminus", XK_plusminus},
	{"twosuperior", XK_twosuperior},
	{"threesuperior", XK_threesuperior},
	{"acute", XK_acute},
	{"mu", XK_mu},
	{"paragraph", XK_paragraph},
	{"periodcentered", XK_periodcentered},
	{"cedilla", XK_cedilla},
	{"onesuperior", XK_onesuperior},
	{"masculine", XK_masculine},
	{"guillemotright", XK_guillemotright},
	{"onequarter", XK_onequarter},
	{"onehalf", XK_onehalf},
	{"threequarters", XK_threequarters},
	{"questiondown", XK_questiondown},
	{"Agrave", XK_Agrave},
	{"Aacute", XK_Aacute},
	{"Acircumflex", XK_Acircumflex},
	{"Atilde", XK_Atilde},
	{"Adiaeresis", XK_Adiaeresis},
	{"Aring", XK_Aring},
	{"AE", XK_AE},
	{"Ccedilla", XK_Ccedilla},
	{"Egrave", XK_Egrave},
	{"Eacute", XK_Eacute},
	{"Ecircumflex", XK_Ecircumflex},
	{"Ediaeresis", XK_Ediaeresis},
	{"Igrave", XK_Igrave},
	{"Iacute", XK_Iacute},
	{"Icircumflex", XK_Icircumflex},
	{"Idiaeresis", XK_Idiaeresis},
	{"ETH", XK_ETH},
	{"Eth", XK_Eth},
	{"Ntilde", XK_Ntilde},
	{"Ograve", XK_Ograve},
	{"Oacute", XK_Oacute},
	{"Ocircumflex", XK_Ocircumflex},
	{"Otilde", XK_Otilde},
	{"Odiaeresis", XK_Odiaeresis},
	{"multiply", XK_multiply},
	{"Ooblique", XK_Ooblique},
	{"Ugrave", XK_Ugrave},
	{"Uacute", XK_Uacute},
	{"Ucircumflex", XK_Ucircumflex},
	{"Udiaeresis", XK_Udiaeresis},
	{"Yacute", XK_Yacute},
	{"THORN", XK_THORN},
	{"Thorn", XK_Thorn},
	{"ssharp", XK_ssharp},
	{"agrave", XK_agrave},
	{"aacute", XK_aacute},
	{"acircumflex", XK_acircumflex},
	{"atilde", XK_atilde},
	{"adiaeresis", XK_adiaeresis},
	{"aring", XK_aring},
	{"ae", XK_ae},
	{"ccedilla", XK_ccedilla},
	{"egrave", XK_egrave},
	{"eacute", XK_eacute},
	{"ecircumflex", XK_ecircumflex},
	{"ediaeresis", XK_ediaeresis},
	{"igrave", XK_igrave},
	{"iacute", XK_iacute},
	{"icircumflex", XK_icircumflex},
	{"idiaeresis", XK_idiaeresis},
	{"eth", XK_eth},
	{"ntilde", XK_ntilde},
	{"ograve", XK_ograve},
	{"oacute", XK_oacute},
	{"ocircumflex", XK_ocircumflex},
	{"otilde", XK_otilde},
	{"odiaeresis", XK_odiaeresis},
	{"division", XK_division},
	{"oslash", XK_oslash},
	{"ugrave", XK_ugrave},
	{"uacute", XK_uacute},
	{"ucircumflex", XK_ucircumflex},
	{"udiaeresis", XK_udiaeresis},
	{"yacute", XK_yacute},
	{"thorn", XK_thorn},
	{"ydiaeresis", XK_ydiaeresis},
#endif /* XK_LATIN1 */
#ifdef XK_LATIN2
	{"Aogonek", XK_Aogonek},
	{"breve", XK_breve},
	{"Lstroke", XK_Lstroke},
	{"Lcaron", XK_Lcaron},
	{"Sacute", XK_Sacute},
	{"Scaron", XK_Scaron},
	{"Scedilla", XK_Scedilla},
	{"Tcaron", XK_Tcaron},
	{"Zacute", XK_Zacute},
	{"Zcaron", XK_Zcaron},
	{"Zabovedot", XK_Zabovedot},
	{"aogonek", XK_aogonek},
	{"ogonek", XK_ogonek},
	{"lstroke", XK_lstroke},
	{"lcaron", XK_lcaron},
	{"sacute", XK_sacute},
	{"caron", XK_caron},
	{"scaron", XK_scaron},
	{"scedilla", XK_scedilla},
	{"tcaron", XK_tcaron},
	{"zacute", XK_zacute},
	{"doubleacute", XK_doubleacute},
	{"zcaron", XK_zcaron},
	{"zabovedot", XK_zabovedot},
	{"Racute", XK_Racute},
	{"Abreve", XK_Abreve},
	{"Lacute", XK_Lacute},
	{"Cacute", XK_Cacute},
	{"Ccaron", XK_Ccaron},
	{"Eogonek", XK_Eogonek},
	{"Ecaron", XK_Ecaron},
	{"Dcaron", XK_Dcaron},
	{"Dstroke", XK_Dstroke},
	{"Nacute", XK_Nacute},
	{"Ncaron", XK_Ncaron},
	{"Odoubleacute", XK_Odoubleacute},
	{"Rcaron", XK_Rcaron},
	{"Uring", XK_Uring},
	{"Udoubleacute", XK_Udoubleacute},
	{"Tcedilla", XK_Tcedilla},
	{"racute", XK_racute},
	{"abreve", XK_abreve},
	{"lacute", XK_lacute},
	{"cacute", XK_cacute},
	{"ccaron", XK_ccaron},
	{"eogonek", XK_eogonek},
	{"ecaron", XK_ecaron},
	{"dcaron", XK_dcaron},
	{"dstroke", XK_dstroke},
	{"nacute", XK_nacute},
	{"ncaron", XK_ncaron},
	{"odoubleacute", XK_odoubleacute},
	{"udoubleacute", XK_udoubleacute},
	{"rcaron", XK_rcaron},
	{"uring", XK_uring},
	{"tcedilla", XK_tcedilla},
	{"abovedot", XK_abovedot},
#endif /* XK_LATIN2 */
#ifdef XK_LATIN3
	{"Hstroke", XK_Hstroke},
	{"Hcircumflex", XK_Hcircumflex},
	{"Iabovedot", XK_Iabovedot},
	{"Gbreve", XK_Gbreve},
	{"Jcircumflex", XK_Jcircumflex},
	{"hstroke", XK_hstroke},
	{"hcircumflex", XK_hcircumflex},
	{"idotless", XK_idotless},
	{"gbreve", XK_gbreve},
	{"jcircumflex", XK_jcircumflex},
	{"Cabovedot", XK_Cabovedot},
	{"Ccircumflex", XK_Ccircumflex},
	{"Gabovedot", XK_Gabovedot},
	{"Gcircumflex", XK_Gcircumflex},
	{"Ubreve", XK_Ubreve},
	{"Scircumflex", XK_Scircumflex},
	{"cabovedot", XK_cabovedot},
	{"ccircumflex", XK_ccircumflex},
	{"gabovedot", XK_gabovedot},
	{"gcircumflex", XK_gcircumflex},
	{"ubreve", XK_ubreve},
	{"scircumflex", XK_scircumflex},
#endif /* XK_LATIN3 */
#ifdef XK_LATIN4
	{"kra", XK_kra},
	{"kappa", XK_kappa},
	{"Rcedilla", XK_Rcedilla},
	{"Itilde", XK_Itilde},
	{"Lcedilla", XK_Lcedilla},
	{"Emacron", XK_Emacron},
	{"Gcedilla", XK_Gcedilla},
	{"Tslash", XK_Tslash},
	{"rcedilla", XK_rcedilla},
	{"itilde", XK_itilde},
	{"lcedilla", XK_lcedilla},
	{"emacron", XK_emacron},
	{"gcedilla", XK_gcedilla},
	{"tslash", XK_tslash},
	{"ENG", XK_ENG},
	{"eng", XK_eng},
	{"Amacron", XK_Amacron},
	{"Iogonek", XK_Iogonek},
	{"Eabovedot", XK_Eabovedot},
	{"Imacron", XK_Imacron},
	{"Ncedilla", XK_Ncedilla},
	{"Omacron", XK_Omacron},
	{"Kcedilla", XK_Kcedilla},
	{"Uogonek", XK_Uogonek},
	{"Utilde", XK_Utilde},
	{"Umacron", XK_Umacron},
	{"amacron", XK_amacron},
	{"iogonek", XK_iogonek},
	{"eabovedot", XK_eabovedot},
	{"imacron", XK_imacron},
	{"ncedilla", XK_ncedilla},
	{"omacron", XK_omacron},
	{"kcedilla", XK_kcedilla},
	{"uogonek", XK_uogonek},
	{"utilde", XK_utilde},
	{"umacron", XK_umacron},
#endif /* XK_LATIN4 */
#ifdef XK_KATAKANA
	{"overline", XK_overline},
	{"kana_fullstop", XK_kana_fullstop},
	{"kana_openingbracket", XK_kana_openingbracket},
	{"kana_closingbracket", XK_kana_closingbracket},
	{"kana_comma", XK_kana_comma},
	{"kana_conjunctive", XK_kana_conjunctive},
	{"kana_middledot", XK_kana_middledot},
	{"kana_WO", XK_kana_WO},
	{"kana_a", XK_kana_a},
	{"kana_i", XK_kana_i},
	{"kana_u", XK_kana_u},
	{"kana_e", XK_kana_e},
	{"kana_o", XK_kana_o},
	{"kana_ya", XK_kana_ya},
	{"kana_yu", XK_kana_yu},
	{"kana_yo", XK_kana_yo},
	{"kana_tsu", XK_kana_tsu},
	{"kana_tu", XK_kana_tu},
	{"prolongedsound", XK_prolongedsound},
	{"kana_A", XK_kana_A},
	{"kana_I", XK_kana_I},
	{"kana_U", XK_kana_U},
	{"kana_E", XK_kana_E},
	{"kana_O", XK_kana_O},
	{"kana_KA", XK_kana_KA},
	{"kana_KI", XK_kana_KI},
	{"kana_KU", XK_kana_KU},
	{"kana_KE", XK_kana_KE},
	{"kana_KO", XK_kana_KO},
	{"kana_SA", XK_kana_SA},
	{"kana_SHI", XK_kana_SHI},
	{"kana_SU", XK_kana_SU},
	{"kana_SE", XK_kana_SE},
	{"kana_SO", XK_kana_SO},
	{"kana_TA", XK_kana_TA},
	{"kana_CHI", XK_kana_CHI},
	{"kana_TI", XK_kana_TI},
	{"kana_TSU", XK_kana_TSU},
	{"kana_TU", XK_kana_TU},
	{"kana_TE", XK_kana_TE},
	{"kana_TO", XK_kana_TO},
	{"kana_NA", XK_kana_NA},
	{"kana_NI", XK_kana_NI},
	{"kana_NU", XK_kana_NU},
	{"kana_NE", XK_kana_NE},
	{"kana_NO", XK_kana_NO},
	{"kana_HA", XK_kana_HA},
	{"kana_HI", XK_kana_HI},
	{"kana_FU", XK_kana_FU},
	{"kana_HU", XK_kana_HU},
	{"kana_HE", XK_kana_HE},
	{"kana_HO", XK_kana_HO},
	{"kana_MA", XK_kana_MA},
	{"kana_MI", XK_kana_MI},
	{"kana_MU", XK_kana_MU},
	{"kana_ME", XK_kana_ME},
	{"kana_MO", XK_kana_MO},
	{"kana_YA", XK_kana_YA},
	{"kana_YU", XK_kana_YU},
	{"kana_YO", XK_kana_YO},
	{"kana_RA", XK_kana_RA},
	{"kana_RI", XK_kana_RI},
	{"kana_RU", XK_kana_RU},
	{"kana_RE", XK_kana_RE},
	{"kana_RO", XK_kana_RO},
	{"kana_WA", XK_kana_WA},
	{"kana_N", XK_kana_N},
	{"voicedsound", XK_voicedsound},
	{"semivoicedsound", XK_semivoicedsound},
	{"kana_switch", XK_kana_switch},
#endif /* XK_KATAKANA */
#ifdef XK_ARABIC
	{"Arabic_comma", XK_Arabic_comma},
	{"Arabic_semicolon", XK_Arabic_semicolon},
	{"Arabic_question_mark", XK_Arabic_question_mark},
	{"Arabic_hamza", XK_Arabic_hamza},
	{"Arabic_maddaonalef", XK_Arabic_maddaonalef},
	{"Arabic_hamzaonalef", XK_Arabic_hamzaonalef},
	{"Arabic_hamzaonwaw", XK_Arabic_hamzaonwaw},
	{"Arabic_hamzaunderalef", XK_Arabic_hamzaunderalef},
	{"Arabic_hamzaonyeh", XK_Arabic_hamzaonyeh},
	{"Arabic_alef", XK_Arabic_alef},
	{"Arabic_beh", XK_Arabic_beh},
	{"Arabic_tehmarbuta", XK_Arabic_tehmarbuta},
	{"Arabic_teh", XK_Arabic_teh},
	{"Arabic_theh", XK_Arabic_theh},
	{"Arabic_jeem", XK_Arabic_jeem},
	{"Arabic_hah", XK_Arabic_hah},
	{"Arabic_khah", XK_Arabic_khah},
	{"Arabic_dal", XK_Arabic_dal},
	{"Arabic_thal", XK_Arabic_thal},
	{"Arabic_ra", XK_Arabic_ra},
	{"Arabic_zain", XK_Arabic_zain},
	{"Arabic_seen", XK_Arabic_seen},
	{"Arabic_sheen", XK_Arabic_sheen},
	{"Arabic_sad", XK_Arabic_sad},
	{"Arabic_dad", XK_Arabic_dad},
	{"Arabic_tah", XK_Arabic_tah},
	{"Arabic_zah", XK_Arabic_zah},
	{"Arabic_ain", XK_Arabic_ain},
	{"Arabic_ghain", XK_Arabic_ghain},
	{"Arabic_tatweel", XK_Arabic_tatweel},
	{"Arabic_feh", XK_Arabic_feh},
	{"Arabic_qaf", XK_Arabic_qaf},
	{"Arabic_kaf", XK_Arabic_kaf},
	{"Arabic_lam", XK_Arabic_lam},
	{"Arabic_meem", XK_Arabic_meem},
	{"Arabic_noon", XK_Arabic_noon},
	{"Arabic_ha", XK_Arabic_ha},
	{"Arabic_heh", XK_Arabic_heh},
	{"Arabic_waw", XK_Arabic_waw},
	{"Arabic_alefmaksura", XK_Arabic_alefmaksura},
	{"Arabic_yeh", XK_Arabic_yeh},
	{"Arabic_fathatan", XK_Arabic_fathatan},
	{"Arabic_dammatan", XK_Arabic_dammatan},
	{"Arabic_kasratan", XK_Arabic_kasratan},
	{"Arabic_fatha", XK_Arabic_fatha},
	{"Arabic_damma", XK_Arabic_damma},
	{"Arabic_kasra", XK_Arabic_kasra},
	{"Arabic_shadda", XK_Arabic_shadda},
	{"Arabic_sukun", XK_Arabic_sukun},
	{"Arabic_switch", XK_Arabic_switch},
#endif /* XK_ARABIC */
#ifdef XK_CYRILLIC
	{"Serbian_dje", XK_Serbian_dje},
	{"Macedonia_gje", XK_Macedonia_gje},
	{"Cyrillic_io", XK_Cyrillic_io},
	{"Ukrainian_ie", XK_Ukrainian_ie},
	{"Ukranian_je", XK_Ukranian_je},
	{"Macedonia_dse", XK_Macedonia_dse},
	{"Ukrainian_i", XK_Ukrainian_i},
	{"Ukranian_i", XK_Ukranian_i},
	{"Ukrainian_yi", XK_Ukrainian_yi},
	{"Ukranian_yi", XK_Ukranian_yi},
	{"Cyrillic_je", XK_Cyrillic_je},
	{"Serbian_je", XK_Serbian_je},
	{"Cyrillic_lje", XK_Cyrillic_lje},
	{"Serbian_lje", XK_Serbian_lje},
	{"Cyrillic_nje", XK_Cyrillic_nje},
	{"Serbian_nje", XK_Serbian_nje},
	{"Serbian_tshe", XK_Serbian_tshe},
	{"Macedonia_kje", XK_Macedonia_kje},
	{"Byelorussian_shortu", XK_Byelorussian_shortu},
	{"Cyrillic_dzhe", XK_Cyrillic_dzhe},
	{"Serbian_dze", XK_Serbian_dze},
	{"numerosign", XK_numerosign},
	{"Serbian_DJE", XK_Serbian_DJE},
	{"Macedonia_GJE", XK_Macedonia_GJE},
	{"Cyrillic_IO", XK_Cyrillic_IO},
	{"Ukrainian_IE", XK_Ukrainian_IE},
	{"Ukranian_JE", XK_Ukranian_JE},
	{"Macedonia_DSE", XK_Macedonia_DSE},
	{"Ukrainian_I", XK_Ukrainian_I},
	{"Ukranian_I", XK_Ukranian_I},
	{"Ukrainian_YI", XK_Ukrainian_YI},
	{"Ukranian_YI", XK_Ukranian_YI},
	{"Cyrillic_JE", XK_Cyrillic_JE},
	{"Serbian_JE", XK_Serbian_JE},
	{"Cyrillic_LJE", XK_Cyrillic_LJE},
	{"Serbian_LJE", XK_Serbian_LJE},
	{"Cyrillic_NJE", XK_Cyrillic_NJE},
	{"Serbian_NJE", XK_Serbian_NJE},
	{"Serbian_TSHE", XK_Serbian_TSHE},
	{"Macedonia_KJE", XK_Macedonia_KJE},
	{"Byelorussian_SHORTU", XK_Byelorussian_SHORTU},
	{"Cyrillic_DZHE", XK_Cyrillic_DZHE},
	{"Serbian_DZE", XK_Serbian_DZE},
	{"Cyrillic_yu", XK_Cyrillic_yu},
	{"Cyrillic_a", XK_Cyrillic_a},
	{"Cyrillic_be", XK_Cyrillic_be},
	{"Cyrillic_tse", XK_Cyrillic_tse},
	{"Cyrillic_de", XK_Cyrillic_de},
	{"Cyrillic_ie", XK_Cyrillic_ie},
	{"Cyrillic_ef", XK_Cyrillic_ef},
	{"Cyrillic_ghe", XK_Cyrillic_ghe},
	{"Cyrillic_ha", XK_Cyrillic_ha},
	{"Cyrillic_i", XK_Cyrillic_i},
	{"Cyrillic_shorti", XK_Cyrillic_shorti},
	{"Cyrillic_ka", XK_Cyrillic_ka},
	{"Cyrillic_el", XK_Cyrillic_el},
	{"Cyrillic_em", XK_Cyrillic_em},
	{"Cyrillic_en", XK_Cyrillic_en},
	{"Cyrillic_o", XK_Cyrillic_o},
	{"Cyrillic_pe", XK_Cyrillic_pe},
	{"Cyrillic_ya", XK_Cyrillic_ya},
	{"Cyrillic_er", XK_Cyrillic_er},
	{"Cyrillic_es", XK_Cyrillic_es},
	{"Cyrillic_te", XK_Cyrillic_te},
	{"Cyrillic_u", XK_Cyrillic_u},
	{"Cyrillic_zhe", XK_Cyrillic_zhe},
	{"Cyrillic_ve", XK_Cyrillic_ve},
	{"Cyrillic_softsign", XK_Cyrillic_softsign},
	{"Cyrillic_yeru", XK_Cyrillic_yeru},
	{"Cyrillic_ze", XK_Cyrillic_ze},
	{"Cyrillic_sha", XK_Cyrillic_sha},
	{"Cyrillic_e", XK_Cyrillic_e},
	{"Cyrillic_shcha", XK_Cyrillic_shcha},
	{"Cyrillic_che", XK_Cyrillic_che},
	{"Cyrillic_hardsign", XK_Cyrillic_hardsign},
	{"Cyrillic_YU", XK_Cyrillic_YU},
	{"Cyrillic_A", XK_Cyrillic_A},
	{"Cyrillic_BE", XK_Cyrillic_BE},
	{"Cyrillic_TSE", XK_Cyrillic_TSE},
	{"Cyrillic_DE", XK_Cyrillic_DE},
	{"Cyrillic_IE", XK_Cyrillic_IE},
	{"Cyrillic_EF", XK_Cyrillic_EF},
	{"Cyrillic_GHE", XK_Cyrillic_GHE},
	{"Cyrillic_HA", XK_Cyrillic_HA},
	{"Cyrillic_I", XK_Cyrillic_I},
	{"Cyrillic_SHORTI", XK_Cyrillic_SHORTI},
	{"Cyrillic_KA", XK_Cyrillic_KA},
	{"Cyrillic_EL", XK_Cyrillic_EL},
	{"Cyrillic_EM", XK_Cyrillic_EM},
	{"Cyrillic_EN", XK_Cyrillic_EN},
	{"Cyrillic_O", XK_Cyrillic_O},
	{"Cyrillic_PE", XK_Cyrillic_PE},
	{"Cyrillic_YA", XK_Cyrillic_YA},
	{"Cyrillic_ER", XK_Cyrillic_ER},
	{"Cyrillic_ES", XK_Cyrillic_ES},
	{"Cyrillic_TE", XK_Cyrillic_TE},
	{"Cyrillic_U", XK_Cyrillic_U},
	{"Cyrillic_ZHE", XK_Cyrillic_ZHE},
	{"Cyrillic_VE", XK_Cyrillic_VE},
	{"Cyrillic_SOFTSIGN", XK_Cyrillic_SOFTSIGN},
	{"Cyrillic_YERU", XK_Cyrillic_YERU},
	{"Cyrillic_ZE", XK_Cyrillic_ZE},
	{"Cyrillic_SHA", XK_Cyrillic_SHA},
	{"Cyrillic_E", XK_Cyrillic_E},
	{"Cyrillic_SHCHA", XK_Cyrillic_SHCHA},
	{"Cyrillic_CHE", XK_Cyrillic_CHE},
	{"Cyrillic_HARDSIGN", XK_Cyrillic_HARDSIGN},
#endif /* XK_CYRILLIC */
#ifdef XK_GREEK
	{"Greek_ALPHAaccent", XK_Greek_ALPHAaccent},
	{"Greek_EPSILONaccent", XK_Greek_EPSILONaccent},
	{"Greek_ETAaccent", XK_Greek_ETAaccent},
	{"Greek_IOTAaccent", XK_Greek_IOTAaccent},
	{"Greek_IOTAdieresis", XK_Greek_IOTAdieresis},
	{"Greek_OMICRONaccent", XK_Greek_OMICRONaccent},
	{"Greek_UPSILONaccent", XK_Greek_UPSILONaccent},
	{"Greek_UPSILONdieresis", XK_Greek_UPSILONdieresis},
	{"Greek_OMEGAaccent", XK_Greek_OMEGAaccent},
	{"Greek_accentdieresis", XK_Greek_accentdieresis},
	{"Greek_horizbar", XK_Greek_horizbar},
	{"Greek_alphaaccent", XK_Greek_alphaaccent},
	{"Greek_epsilonaccent", XK_Greek_epsilonaccent},
	{"Greek_etaaccent", XK_Greek_etaaccent},
	{"Greek_iotaaccent", XK_Greek_iotaaccent},
	{"Greek_iotadieresis", XK_Greek_iotadieresis},
	{"Greek_iotaaccentdieresis", XK_Greek_iotaaccentdieresis},
	{"Greek_omicronaccent", XK_Greek_omicronaccent},
	{"Greek_upsilonaccent", XK_Greek_upsilonaccent},
	{"Greek_upsilondieresis", XK_Greek_upsilondieresis},
	{"Greek_upsilonaccentdieresis", XK_Greek_upsilonaccentdieresis},
	{"Greek_omegaaccent", XK_Greek_omegaaccent},
	{"Greek_ALPHA", XK_Greek_ALPHA},
	{"Greek_BETA", XK_Greek_BETA},
	{"Greek_GAMMA", XK_Greek_GAMMA},
	{"Greek_DELTA", XK_Greek_DELTA},
	{"Greek_EPSILON", XK_Greek_EPSILON},
	{"Greek_ZETA", XK_Greek_ZETA},
	{"Greek_ETA", XK_Greek_ETA},
	{"Greek_THETA", XK_Greek_THETA},
	{"Greek_IOTA", XK_Greek_IOTA},
	{"Greek_KAPPA", XK_Greek_KAPPA},
	{"Greek_LAMDA", XK_Greek_LAMDA},
	{"Greek_LAMBDA", XK_Greek_LAMBDA},
	{"Greek_MU", XK_Greek_MU},
	{"Greek_NU", XK_Greek_NU},
	{"Greek_XI", XK_Greek_XI},
	{"Greek_OMICRON", XK_Greek_OMICRON},
	{"Greek_PI", XK_Greek_PI},
	{"Greek_RHO", XK_Greek_RHO},
	{"Greek_SIGMA", XK_Greek_SIGMA},
	{"Greek_TAU", XK_Greek_TAU},
	{"Greek_UPSILON", XK_Greek_UPSILON},
	{"Greek_PHI", XK_Greek_PHI},
	{"Greek_CHI", XK_Greek_CHI},
	{"Greek_PSI", XK_Greek_PSI},
	{"Greek_OMEGA", XK_Greek_OMEGA},
	{"Greek_alpha", XK_Greek_alpha},
	{"Greek_beta", XK_Greek_beta},
	{"Greek_gamma", XK_Greek_gamma},
	{"Greek_delta", XK_Greek_delta},
	{"Greek_epsilon", XK_Greek_epsilon},
	{"Greek_zeta", XK_Greek_zeta},
	{"Greek_eta", XK_Greek_eta},
	{"Greek_theta", XK_Greek_theta},
	{"Greek_iota", XK_Greek_iota},
	{"Greek_kappa", XK_Greek_kappa},
	{"Greek_lamda", XK_Greek_lamda},
	{"Greek_lambda", XK_Greek_lambda},
	{"Greek_mu", XK_Greek_mu},
	{"Greek_nu", XK_Greek_nu},
	{"Greek_xi", XK_Greek_xi},
	{"Greek_omicron", XK_Greek_omicron},
	{"Greek_pi", XK_Greek_pi},
	{"Greek_rho", XK_Greek_rho},
	{"Greek_sigma", XK_Greek_sigma},
	{"Greek_finalsmallsigma", XK_Greek_finalsmallsigma},
	{"Greek_tau", XK_Greek_tau},
	{"Greek_upsilon", XK_Greek_upsilon},
	{"Greek_phi", XK_Greek_phi},
	{"Greek_chi", XK_Greek_chi},
	{"Greek_psi", XK_Greek_psi},
	{"Greek_omega", XK_Greek_omega},
	{"Greek_switch", XK_Greek_switch},
#endif /* XK_GREEK */
#ifdef XK_TECHNICAL
	{"leftradical", XK_leftradical},
	{"topleftradical", XK_topleftradical},
	{"horizconnector", XK_horizconnector},
	{"topintegral", XK_topintegral},
	{"botintegral", XK_botintegral},
	{"vertconnector", XK_vertconnector},
	{"topleftsqbracket", XK_topleftsqbracket},
	{"botleftsqbracket", XK_botleftsqbracket},
	{"toprightsqbracket", XK_toprightsqbracket},
	{"botrightsqbracket", XK_botrightsqbracket},
	{"topleftparens", XK_topleftparens},
	{"botleftparens", XK_botleftparens},
	{"toprightparens", XK_toprightparens},
	{"botrightparens", XK_botrightparens},
	{"leftmiddlecurlybrace", XK_leftmiddlecurlybrace},
	{"rightmiddlecurlybrace", XK_rightmiddlecurlybrace},
	{"topleftsummation", XK_topleftsummation},
	{"botleftsummation", XK_botleftsummation},
	{"topvertsummationconnector", XK_topvertsummationconnector},
	{"botvertsummationconnector", XK_botvertsummationconnector},
	{"toprightsummation", XK_toprightsummation},
	{"botrightsummation", XK_botrightsummation},
	{"rightmiddlesummation", XK_rightmiddlesummation},
	{"lessthanequal", XK_lessthanequal},
	{"notequal", XK_notequal},
	{"greaterthanequal", XK_greaterthanequal},
	{"integral", XK_integral},
	{"therefore", XK_therefore},
	{"variation", XK_variation},
	{"infinity", XK_infinity},
	{"nabla", XK_nabla},
	{"approximate", XK_approximate},
	{"similarequal", XK_similarequal},
	{"ifonlyif", XK_ifonlyif},
	{"implies", XK_implies},
	{"identical", XK_identical},
	{"radical", XK_radical},
	{"includedin", XK_includedin},
	{"includes", XK_includes},
	{"intersection", XK_intersection},
	{"union", XK_union},
	{"logicaland", XK_logicaland},
	{"logicalor", XK_logicalor},
	{"partialderivative", XK_partialderivative},
	{"function", XK_function},
	{"leftarrow", XK_leftarrow},
	{"uparrow", XK_uparrow},
	{"rightarrow", XK_rightarrow},
	{"downarrow", XK_downarrow},
#endif /* XK_TECHNICAL */
#ifdef XK_SPECIAL
	{"blank", XK_blank},
	{"soliddiamond", XK_soliddiamond},
	{"checkerboard", XK_checkerboard},
	{"ht", XK_ht},
	{"ff", XK_ff},
	{"cr", XK_cr},
	{"lf", XK_lf},
	{"nl", XK_nl},
	{"vt", XK_vt},
	{"lowrightcorner", XK_lowrightcorner},
	{"uprightcorner", XK_uprightcorner},
	{"upleftcorner", XK_upleftcorner},
	{"lowleftcorner", XK_lowleftcorner},
	{"crossinglines", XK_crossinglines},
	{"horizlinescan1", XK_horizlinescan1},
	{"horizlinescan3", XK_horizlinescan3},
	{"horizlinescan5", XK_horizlinescan5},
	{"horizlinescan7", XK_horizlinescan7},
	{"horizlinescan9", XK_horizlinescan9},
	{"leftt", XK_leftt},
	{"rightt", XK_rightt},
	{"bott", XK_bott},
	{"topt", XK_topt},
	{"vertbar", XK_vertbar},
#endif /* XK_SPECIAL */
#ifdef XK_PUBLISHING
	{"emspace", XK_emspace},
	{"enspace", XK_enspace},
	{"em3space", XK_em3space},
	{"em4space", XK_em4space},
	{"digitspace", XK_digitspace},
	{"punctspace", XK_punctspace},
	{"thinspace", XK_thinspace},
	{"hairspace", XK_hairspace},
	{"emdash", XK_emdash},
	{"endash", XK_endash},
	{"signifblank", XK_signifblank},
	{"ellipsis", XK_ellipsis},
	{"doubbaselinedot", XK_doubbaselinedot},
	{"onethird", XK_onethird},
	{"twothirds", XK_twothirds},
	{"onefifth", XK_onefifth},
	{"twofifths", XK_twofifths},
	{"threefifths", XK_threefifths},
	{"fourfifths", XK_fourfifths},
	{"onesixth", XK_onesixth},
	{"fivesixths", XK_fivesixths},
	{"careof", XK_careof},
	{"figdash", XK_figdash},
	{"leftanglebracket", XK_leftanglebracket},
	{"decimalpoint", XK_decimalpoint},
	{"rightanglebracket", XK_rightanglebracket},
	{"marker", XK_marker},
	{"oneeighth", XK_oneeighth},
	{"threeeighths", XK_threeeighths},
	{"fiveeighths", XK_fiveeighths},
	{"seveneighths", XK_seveneighths},
	{"trademark", XK_trademark},
	{"signaturemark", XK_signaturemark},
	{"trademarkincircle", XK_trademarkincircle},
	{"leftopentriangle", XK_leftopentriangle},
	{"rightopentriangle", XK_rightopentriangle},
	{"emopencircle", XK_emopencircle},
	{"emopenrectangle", XK_emopenrectangle},
	{"leftsinglequotemark", XK_leftsinglequotemark},
	{"rightsinglequotemark", XK_rightsinglequotemark},
	{"leftdoublequotemark", XK_leftdoublequotemark},
	{"rightdoublequotemark", XK_rightdoublequotemark},
	{"prescription", XK_prescription},
	{"minutes", XK_minutes},
	{"seconds", XK_seconds},
	{"latincross", XK_latincross},
	{"hexagram", XK_hexagram},
	{"filledrectbullet", XK_filledrectbullet},
	{"filledlefttribullet", XK_filledlefttribullet},
	{"filledrighttribullet", XK_filledrighttribullet},
	{"emfilledcircle", XK_emfilledcircle},
	{"emfilledrect", XK_emfilledrect},
	{"enopencircbullet", XK_enopencircbullet},
	{"enopensquarebullet", XK_enopensquarebullet},
	{"openrectbullet", XK_openrectbullet},
	{"opentribulletup", XK_opentribulletup},
	{"opentribulletdown", XK_opentribulletdown},
	{"openstar", XK_openstar},
	{"enfilledcircbullet", XK_enfilledcircbullet},
	{"enfilledsqbullet", XK_enfilledsqbullet},
	{"filledtribulletup", XK_filledtribulletup},
	{"filledtribulletdown", XK_filledtribulletdown},
	{"leftpointer", XK_leftpointer},
	{"rightpointer", XK_rightpointer},
	{"club", XK_club},
	{"diamond", XK_diamond},
	{"heart", XK_heart},
	{"maltesecross", XK_maltesecross},
	{"dagger", XK_dagger},
	{"doubledagger", XK_doubledagger},
	{"checkmark", XK_checkmark},
	{"ballotcross", XK_ballotcross},
	{"musicalsharp", XK_musicalsharp},
	{"musicalflat", XK_musicalflat},
	{"malesymbol", XK_malesymbol},
	{"femalesymbol", XK_femalesymbol},
	{"telephone", XK_telephone},
	{"telephonerecorder", XK_telephonerecorder},
	{"phonographcopyright", XK_phonographcopyright},
	{"caret", XK_caret},
	{"singlelowquotemark", XK_singlelowquotemark},
	{"doublelowquotemark", XK_doublelowquotemark},
	{"cursor", XK_cursor},
#endif /* XK_PUBLISHING */
#ifdef XK_APL
	{"leftcaret", XK_leftcaret},
	{"rightcaret", XK_rightcaret},
	{"downcaret", XK_downcaret},
	{"upcaret", XK_upcaret},
	{"overbar", XK_overbar},
	{"downtack", XK_downtack},
	{"upshoe", XK_upshoe},
	{"downstile", XK_downstile},
	{"underbar", XK_underbar},
	{"jot", XK_jot},
	{"quad", XK_quad},
	{"uptack", XK_uptack},
	{"circle", XK_circle},
	{"upstile", XK_upstile},
	{"downshoe", XK_downshoe},
	{"rightshoe", XK_rightshoe},
	{"leftshoe", XK_leftshoe},
	{"lefttack", XK_lefttack},
	{"righttack", XK_righttack},
#endif /* XK_APL */
#ifdef XK_HEBREW
	{"hebrew_doublelowline", XK_hebrew_doublelowline},
	{"hebrew_aleph", XK_hebrew_aleph},
	{"hebrew_bet", XK_hebrew_bet},
	{"hebrew_beth", XK_hebrew_beth},
	{"hebrew_gimel", XK_hebrew_gimel},
	{"hebrew_gimmel", XK_hebrew_gimmel},
	{"hebrew_dalet", XK_hebrew_dalet},
	{"hebrew_daleth", XK_hebrew_daleth},
	{"hebrew_he", XK_hebrew_he},
	{"hebrew_waw", XK_hebrew_waw},
	{"hebrew_zain", XK_hebrew_zain},
	{"hebrew_zayin", XK_hebrew_zayin},
	{"hebrew_chet", XK_hebrew_chet},
	{"hebrew_het", XK_hebrew_het},
	{"hebrew_tet", XK_hebrew_tet},
	{"hebrew_teth", XK_hebrew_teth},
	{"hebrew_yod", XK_hebrew_yod},
	{"hebrew_finalkaph", XK_hebrew_finalkaph},
	{"hebrew_kaph", XK_hebrew_kaph},
	{"hebrew_lamed", XK_hebrew_lamed},
	{"hebrew_finalmem", XK_hebrew_finalmem},
	{"hebrew_mem", XK_hebrew_mem},
	{"hebrew_finalnun", XK_hebrew_finalnun},
	{"hebrew_nun", XK_hebrew_nun},
	{"hebrew_samech", XK_hebrew_samech},
	{"hebrew_samekh", XK_hebrew_samekh},
	{"hebrew_ayin", XK_hebrew_ayin},
	{"hebrew_finalpe", XK_hebrew_finalpe},
	{"hebrew_pe", XK_hebrew_pe},
	{"hebrew_finalzade", XK_hebrew_finalzade},
	{"hebrew_finalzadi", XK_hebrew_finalzadi},
	{"hebrew_zade", XK_hebrew_zade},
	{"hebrew_zadi", XK_hebrew_zadi},
	{"hebrew_qoph", XK_hebrew_qoph},
	{"hebrew_kuf", XK_hebrew_kuf},
	{"hebrew_resh", XK_hebrew_resh},
	{"hebrew_shin", XK_hebrew_shin},
	{"hebrew_taw", XK_hebrew_taw},
	{"hebrew_taf", XK_hebrew_taf},
	{"Hebrew_switch", XK_Hebrew_switch},
#endif /* XK_HEBREW */
#ifdef XK_THAI
	{"Thai_kokai", XK_Thai_kokai},
	{"Thai_khokhai", XK_Thai_khokhai},
	{"Thai_khokhuat", XK_Thai_khokhuat},
	{"Thai_khokhwai", XK_Thai_khokhwai},
	{"Thai_khokhon", XK_Thai_khokhon},
	{"Thai_khorakhang", XK_Thai_khorakhang},
	{"Thai_ngongu", XK_Thai_ngongu},
	{"Thai_chochan", XK_Thai_chochan},
	{"Thai_choching", XK_Thai_choching},
	{"Thai_chochang", XK_Thai_chochang},
	{"Thai_soso", XK_Thai_soso},
	{"Thai_chochoe", XK_Thai_chochoe},
	{"Thai_yoying", XK_Thai_yoying},
	{"Thai_dochada", XK_Thai_dochada},
	{"Thai_topatak", XK_Thai_topatak},
	{"Thai_thothan", XK_Thai_thothan},
	{"Thai_thonangmontho", XK_Thai_thonangmontho},
	{"Thai_thophuthao", XK_Thai_thophuthao},
	{"Thai_nonen", XK_Thai_nonen},
	{"Thai_dodek", XK_Thai_dodek},
	{"Thai_totao", XK_Thai_totao},
	{"Thai_thothung", XK_Thai_thothung},
	{"Thai_thothahan", XK_Thai_thothahan},
	{"Thai_thothong", XK_Thai_thothong},
	{"Thai_nonu", XK_Thai_nonu},
	{"Thai_bobaimai", XK_Thai_bobaimai},
	{"Thai_popla", XK_Thai_popla},
	{"Thai_phophung", XK_Thai_phophung},
	{"Thai_fofa", XK_Thai_fofa},
	{"Thai_phophan", XK_Thai_phophan},
	{"Thai_fofan", XK_Thai_fofan},
	{"Thai_phosamphao", XK_Thai_phosamphao},
	{"Thai_moma", XK_Thai_moma},
	{"Thai_yoyak", XK_Thai_yoyak},
	{"Thai_rorua", XK_Thai_rorua},
	{"Thai_ru", XK_Thai_ru},
	{"Thai_loling", XK_Thai_loling},
	{"Thai_lu", XK_Thai_lu},
	{"Thai_wowaen", XK_Thai_wowaen},
	{"Thai_sosala", XK_Thai_sosala},
	{"Thai_sorusi", XK_Thai_sorusi},
	{"Thai_sosua", XK_Thai_sosua},
	{"Thai_hohip", XK_Thai_hohip},
	{"Thai_lochula", XK_Thai_lochula},
	{"Thai_oang", XK_Thai_oang},
	{"Thai_honokhuk", XK_Thai_honokhuk},
	{"Thai_paiyannoi", XK_Thai_paiyannoi},
	{"Thai_saraa", XK_Thai_saraa},
	{"Thai_maihanakat", XK_Thai_maihanakat},
	{"Thai_saraaa", XK_Thai_saraaa},
	{"Thai_saraam", XK_Thai_saraam},
	{"Thai_sarai", XK_Thai_sarai},
	{"Thai_saraii", XK_Thai_saraii},
	{"Thai_saraue", XK_Thai_saraue},
	{"Thai_sarauee", XK_Thai_sarauee},
	{"Thai_sarau", XK_Thai_sarau},
	{"Thai_sarauu", XK_Thai_sarauu},
	{"Thai_phinthu", XK_Thai_phinthu},
	{"Thai_maihanakat_maitho", XK_Thai_maihanakat_maitho},
	{"Thai_baht", XK_Thai_baht},
	{"Thai_sarae", XK_Thai_sarae},
	{"Thai_saraae", XK_Thai_saraae},
	{"Thai_sarao", XK_Thai_sarao},
	{"Thai_saraaimaimuan", XK_Thai_saraaimaimuan},
	{"Thai_saraaimaimalai", XK_Thai_saraaimaimalai},
	{"Thai_lakkhangyao", XK_Thai_lakkhangyao},
	{"Thai_maiyamok", XK_Thai_maiyamok},
	{"Thai_maitaikhu", XK_Thai_maitaikhu},
	{"Thai_maiek", XK_Thai_maiek},
	{"Thai_maitho", XK_Thai_maitho},
	{"Thai_maitri", XK_Thai_maitri},
	{"Thai_maichattawa", XK_Thai_maichattawa},
	{"Thai_thanthakhat", XK_Thai_thanthakhat},
	{"Thai_nikhahit", XK_Thai_nikhahit},
	{"Thai_leksun", XK_Thai_leksun},
	{"Thai_leknung", XK_Thai_leknung},
	{"Thai_leksong", XK_Thai_leksong},
	{"Thai_leksam", XK_Thai_leksam},
	{"Thai_leksi", XK_Thai_leksi},
	{"Thai_lekha", XK_Thai_lekha},
	{"Thai_lekhok", XK_Thai_lekhok},
	{"Thai_lekchet", XK_Thai_lekchet},
	{"Thai_lekpaet", XK_Thai_lekpaet},
	{"Thai_lekkao", XK_Thai_lekkao},
#endif /* XK_THAI */
#ifdef XK_KOREAN
	{"Hangul", XK_Hangul},
	{"Hangul_Start", XK_Hangul_Start},
	{"Hangul_End", XK_Hangul_End},
	{"Hangul_Hanja", XK_Hangul_Hanja},
	{"Hangul_Jamo", XK_Hangul_Jamo},
	{"Hangul_Romaja", XK_Hangul_Romaja},
	{"Hangul_Codeinput", XK_Hangul_Codeinput},
	{"Hangul_Jeonja", XK_Hangul_Jeonja},
	{"Hangul_Banja", XK_Hangul_Banja},
	{"Hangul_PreHanja", XK_Hangul_PreHanja},
	{"Hangul_PostHanja", XK_Hangul_PostHanja},
	{"Hangul_SingleCandidate", XK_Hangul_SingleCandidate},
	{"Hangul_MultipleCandidate", XK_Hangul_MultipleCandidate},
	{"Hangul_PreviousCandidate", XK_Hangul_PreviousCandidate},
	{"Hangul_Special", XK_Hangul_Special},
	{"Hangul_switch", XK_Hangul_switch},
	{"Hangul_Kiyeog", XK_Hangul_Kiyeog},
	{"Hangul_SsangKiyeog", XK_Hangul_SsangKiyeog},
	{"Hangul_KiyeogSios", XK_Hangul_KiyeogSios},
	{"Hangul_Nieun", XK_Hangul_Nieun},
	{"Hangul_NieunJieuj", XK_Hangul_NieunJieuj},
	{"Hangul_NieunHieuh", XK_Hangul_NieunHieuh},
	{"Hangul_Dikeud", XK_Hangul_Dikeud},
	{"Hangul_SsangDikeud", XK_Hangul_SsangDikeud},
	{"Hangul_Rieul", XK_Hangul_Rieul},
	{"Hangul_RieulKiyeog", XK_Hangul_RieulKiyeog},
	{"Hangul_RieulMieum", XK_Hangul_RieulMieum},
	{"Hangul_RieulPieub", XK_Hangul_RieulPieub},
	{"Hangul_RieulSios", XK_Hangul_RieulSios},
	{"Hangul_RieulTieut", XK_Hangul_RieulTieut},
	{"Hangul_RieulPhieuf", XK_Hangul_RieulPhieuf},
	{"Hangul_RieulHieuh", XK_Hangul_RieulHieuh},
	{"Hangul_Mieum", XK_Hangul_Mieum},
	{"Hangul_Pieub", XK_Hangul_Pieub},
	{"Hangul_SsangPieub", XK_Hangul_SsangPieub},
	{"Hangul_PieubSios", XK_Hangul_PieubSios},
	{"Hangul_Sios", XK_Hangul_Sios},
	{"Hangul_SsangSios", XK_Hangul_SsangSios},
	{"Hangul_Ieung", XK_Hangul_Ieung},
	{"Hangul_Jieuj", XK_Hangul_Jieuj},
	{"Hangul_SsangJieuj", XK_Hangul_SsangJieuj},
	{"Hangul_Cieuc", XK_Hangul_Cieuc},
	{"Hangul_Khieuq", XK_Hangul_Khieuq},
	{"Hangul_Tieut", XK_Hangul_Tieut},
	{"Hangul_Phieuf", XK_Hangul_Phieuf},
	{"Hangul_Hieuh", XK_Hangul_Hieuh},
	{"Hangul_A", XK_Hangul_A},
	{"Hangul_AE", XK_Hangul_AE},
	{"Hangul_YA", XK_Hangul_YA},
	{"Hangul_YAE", XK_Hangul_YAE},
	{"Hangul_EO", XK_Hangul_EO},
	{"Hangul_E", XK_Hangul_E},
	{"Hangul_YEO", XK_Hangul_YEO},
	{"Hangul_YE", XK_Hangul_YE},
	{"Hangul_O", XK_Hangul_O},
	{"Hangul_WA", XK_Hangul_WA},
	{"Hangul_WAE", XK_Hangul_WAE},
	{"Hangul_OE", XK_Hangul_OE},
	{"Hangul_YO", XK_Hangul_YO},
	{"Hangul_U", XK_Hangul_U},
	{"Hangul_WEO", XK_Hangul_WEO},
	{"Hangul_WE", XK_Hangul_WE},
	{"Hangul_WI", XK_Hangul_WI},
	{"Hangul_YU", XK_Hangul_YU},
	{"Hangul_EU", XK_Hangul_EU},
	{"Hangul_YI", XK_Hangul_YI},
	{"Hangul_I", XK_Hangul_I},
	{"Hangul_J_Kiyeog", XK_Hangul_J_Kiyeog},
	{"Hangul_J_SsangKiyeog", XK_Hangul_J_SsangKiyeog},
	{"Hangul_J_KiyeogSios", XK_Hangul_J_KiyeogSios},
	{"Hangul_J_Nieun", XK_Hangul_J_Nieun},
	{"Hangul_J_NieunJieuj", XK_Hangul_J_NieunJieuj},
	{"Hangul_J_NieunHieuh", XK_Hangul_J_NieunHieuh},
	{"Hangul_J_Dikeud", XK_Hangul_J_Dikeud},
	{"Hangul_J_Rieul", XK_Hangul_J_Rieul},
	{"Hangul_J_RieulKiyeog", XK_Hangul_J_RieulKiyeog},
	{"Hangul_J_RieulMieum", XK_Hangul_J_RieulMieum},
	{"Hangul_J_RieulPieub", XK_Hangul_J_RieulPieub},
	{"Hangul_J_RieulSios", XK_Hangul_J_RieulSios},
	{"Hangul_J_RieulTieut", XK_Hangul_J_RieulTieut},
	{"Hangul_J_RieulPhieuf", XK_Hangul_J_RieulPhieuf},
	{"Hangul_J_RieulHieuh", XK_Hangul_J_RieulHieuh},
	{"Hangul_J_Mieum", XK_Hangul_J_Mieum},
	{"Hangul_J_Pieub", XK_Hangul_J_Pieub},
	{"Hangul_J_PieubSios", XK_Hangul_J_PieubSios},
	{"Hangul_J_Sios", XK_Hangul_J_Sios},
	{"Hangul_J_SsangSios", XK_Hangul_J_SsangSios},
	{"Hangul_J_Ieung", XK_Hangul_J_Ieung},
	{"Hangul_J_Jieuj", XK_Hangul_J_Jieuj},
	{"Hangul_J_Cieuc", XK_Hangul_J_Cieuc},
	{"Hangul_J_Khieuq", XK_Hangul_J_Khieuq},
	{"Hangul_J_Tieut", XK_Hangul_J_Tieut},
	{"Hangul_J_Phieuf", XK_Hangul_J_Phieuf},
	{"Hangul_J_Hieuh", XK_Hangul_J_Hieuh},
	{"Hangul_RieulYeorinHieuh", XK_Hangul_RieulYeorinHieuh},
	{"Hangul_SunkyeongeumMieum", XK_Hangul_SunkyeongeumMieum},
	{"Hangul_SunkyeongeumPieub", XK_Hangul_SunkyeongeumPieub},
	{"Hangul_PanSios", XK_Hangul_PanSios},
	{"Hangul_KkogjiDalrinIeung", XK_Hangul_KkogjiDalrinIeung},
	{"Hangul_SunkyeongeumPhieuf", XK_Hangul_SunkyeongeumPhieuf},
	{"Hangul_YeorinHieuh", XK_Hangul_YeorinHieuh},
	{"Hangul_AraeA", XK_Hangul_AraeA},
	{"Hangul_AraeAE", XK_Hangul_AraeAE},
	{"Hangul_J_PanSios", XK_Hangul_J_PanSios},
	{"Hangul_J_KkogjiDalrinIeung", XK_Hangul_J_KkogjiDalrinIeung},
	{"Hangul_J_YeorinHieuh", XK_Hangul_J_YeorinHieuh},
	{"Korean_Won", XK_Korean_Won},
#endif /* XK_KOREAN */
	{"EuroSign", XK_EuroSign},
#endif
	{"NoSymbol", NoSymbol}
};

KeySym
XStringToKeysym(const char *str)
{
	int i;
	for (i = 0; StringToKeysym[i].keysym != NoSymbol
	     && strcmp(StringToKeysym[i].string, str); i++);
	return StringToKeysym[i].keysym;
}

const char *
XKeysymToString(KeySym keysym)
{
	int i;
	for (i = 0; StringToKeysym[i].keysym != NoSymbol
	     && StringToKeysym[i].keysym != keysym; i++);
	return StringToKeysym[i].string;
}

void
XDisplayKeycodes(Display * display, int *min_keycode, int *max_keycode)
{
	/* VNC keycodes are non-existant */
	*min_keycode = 0xffff;
	*max_keycode = 0;
}
