| #include <linux/keyboard.h> |
| #include <stdio.h> |
| #include <string.h> |
| #include "ksyms.h" |
| #include "nls.h" |
| |
| /* Keysyms whose KTYP is KT_LATIN or KT_LETTER and whose KVAL is 0..127. */ |
| |
| static const char *iso646_syms[] = { |
| "nul", |
| "Control_a", |
| "Control_b", |
| "Control_c", |
| "Control_d", |
| "Control_e", |
| "Control_f", |
| "Control_g", |
| "BackSpace", |
| "Tab", |
| "Linefeed", |
| "Control_k", |
| "Control_l", |
| "Control_m", |
| "Control_n", |
| "Control_o", |
| "Control_p", |
| "Control_q", |
| "Control_r", |
| "Control_s", |
| "Control_t", |
| "Control_u", |
| "Control_v", |
| "Control_w", |
| "Control_x", |
| "Control_y", |
| "Control_z", |
| "Escape", |
| "Control_backslash", |
| "Control_bracketright", |
| "Control_asciicircum", |
| "Control_underscore", |
| "space", |
| "exclam", |
| "quotedbl", |
| "numbersign", |
| "dollar", |
| "percent", |
| "ampersand", |
| "apostrophe", |
| "parenleft", |
| "parenright", |
| "asterisk", |
| "plus", |
| "comma", |
| "minus", |
| "period", |
| "slash", |
| "zero", |
| "one", |
| "two", |
| "three", |
| "four", |
| "five", |
| "six", |
| "seven", |
| "eight", |
| "nine", |
| "colon", |
| "semicolon", |
| "less", |
| "equal", |
| "greater", |
| "question", |
| "at", |
| "A", |
| "B", |
| "C", |
| "D", |
| "E", |
| "F", |
| "G", |
| "H", |
| "I", |
| "J", |
| "K", |
| "L", |
| "M", |
| "N", |
| "O", |
| "P", |
| "Q", |
| "R", |
| "S", |
| "T", |
| "U", |
| "V", |
| "W", |
| "X", |
| "Y", |
| "Z", |
| "bracketleft", |
| "backslash", |
| "bracketright", |
| "asciicircum", |
| "underscore", |
| "grave", |
| "a", |
| "b", |
| "c", |
| "d", |
| "e", |
| "f", |
| "g", |
| "h", |
| "i", |
| "j", |
| "k", |
| "l", |
| "m", |
| "n", |
| "o", |
| "p", |
| "q", |
| "r", |
| "s", |
| "t", |
| "u", |
| "v", |
| "w", |
| "x", |
| "y", |
| "z", |
| "braceleft", |
| "bar", |
| "braceright", |
| "asciitilde", |
| "Delete", |
| |
| /* set_charset() fills in charset dependent strings here. */ |
| /* start with the latin1 defaults */ |
| "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", |
| "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", |
| "nobreakspace", |
| "exclamdown", |
| "cent", |
| "sterling", |
| "currency", |
| "yen", |
| "brokenbar", |
| "section", |
| "diaeresis", |
| "copyright", |
| "ordfeminine", |
| "guillemotleft", |
| "notsign", |
| "hyphen", |
| "registered", |
| "macron", |
| "degree", |
| "plusminus", |
| "twosuperior", |
| "threesuperior", |
| "acute", |
| "mu", |
| "paragraph", |
| "periodcentered", |
| "cedilla", |
| "onesuperior", |
| "masculine", |
| "guillemotright", |
| "onequarter", |
| "onehalf", |
| "threequarters", |
| "questiondown", |
| "Agrave", |
| "Aacute", |
| "Acircumflex", |
| "Atilde", |
| "Adiaeresis", |
| "Aring", |
| "AE", |
| "Ccedilla", |
| "Egrave", |
| "Eacute", |
| "Ecircumflex", |
| "Ediaeresis", |
| "Igrave", |
| "Iacute", |
| "Icircumflex", |
| "Idiaeresis", |
| "ETH", |
| "Ntilde", |
| "Ograve", |
| "Oacute", |
| "Ocircumflex", |
| "Otilde", |
| "Odiaeresis", |
| "multiply", |
| "Ooblique", |
| "Ugrave", |
| "Uacute", |
| "Ucircumflex", |
| "Udiaeresis", |
| "Yacute", |
| "THORN", |
| "ssharp", |
| "agrave", |
| "aacute", |
| "acircumflex", |
| "atilde", |
| "adiaeresis", |
| "aring", |
| "ae", |
| "ccedilla", |
| "egrave", |
| "eacute", |
| "ecircumflex", |
| "ediaeresis", |
| "igrave", |
| "iacute", |
| "icircumflex", |
| "idiaeresis", |
| "eth", |
| "ntilde", |
| "ograve", |
| "oacute", |
| "ocircumflex", |
| "otilde", |
| "odiaeresis", |
| "division", |
| "oslash", |
| "ugrave", |
| "uacute", |
| "ucircumflex", |
| "udiaeresis", |
| "yacute", |
| "thorn", |
| "ydiaeresis", |
| }; |
| |
| /* Keysyms whose KTYP is KT_LATIN or KT_LETTER and whose KVAL is 128..255, |
| and their Unicode equivalent. */ |
| |
| static sym latin1_syms[] = { |
| { 0x00a0, "nobreakspace" }, |
| { 0x00a1, "exclamdown" }, |
| { 0x00a2, "cent" }, |
| { 0x00a3, "sterling" }, |
| { 0x00a4, "currency" }, |
| { 0x00a5, "yen" }, |
| { 0x00a6, "brokenbar" }, |
| { 0x00a7, "section" }, |
| { 0x00a8, "diaeresis" }, |
| { 0x00a9, "copyright" }, |
| { 0x00aa, "ordfeminine" }, |
| { 0x00ab, "guillemotleft" }, |
| { 0x00ac, "notsign" }, |
| { 0x00ad, "hyphen" }, |
| { 0x00ae, "registered" }, |
| { 0x00af, "macron" }, |
| { 0x00b0, "degree" }, |
| { 0x00b1, "plusminus" }, |
| { 0x00b2, "twosuperior" }, |
| { 0x00b3, "threesuperior" }, |
| { 0x00b4, "acute" }, |
| { 0x00b5, "mu" }, |
| { 0x00b6, "paragraph" }, |
| { 0x00b7, "periodcentered" }, |
| { 0x00b8, "cedilla" }, |
| { 0x00b9, "onesuperior" }, |
| { 0x00ba, "masculine" }, |
| { 0x00bb, "guillemotright" }, |
| { 0x00bc, "onequarter" }, |
| { 0x00bd, "onehalf" }, |
| { 0x00be, "threequarters" }, |
| { 0x00bf, "questiondown" }, |
| { 0x00c0, "Agrave" }, |
| { 0x00c1, "Aacute" }, |
| { 0x00c2, "Acircumflex" }, |
| { 0x00c3, "Atilde" }, |
| { 0x00c4, "Adiaeresis" }, |
| { 0x00c5, "Aring" }, |
| { 0x00c6, "AE" }, |
| { 0x00c7, "Ccedilla" }, |
| { 0x00c8, "Egrave" }, |
| { 0x00c9, "Eacute" }, |
| { 0x00ca, "Ecircumflex" }, |
| { 0x00cb, "Ediaeresis" }, |
| { 0x00cc, "Igrave" }, |
| { 0x00cd, "Iacute" }, |
| { 0x00ce, "Icircumflex" }, |
| { 0x00cf, "Idiaeresis" }, |
| { 0x00d0, "ETH" }, |
| { 0x00d1, "Ntilde" }, |
| { 0x00d2, "Ograve" }, |
| { 0x00d3, "Oacute" }, |
| { 0x00d4, "Ocircumflex" }, |
| { 0x00d5, "Otilde" }, |
| { 0x00d6, "Odiaeresis" }, |
| { 0x00d7, "multiply" }, |
| { 0x00d8, "Ooblique" }, |
| { 0x00d9, "Ugrave" }, |
| { 0x00da, "Uacute" }, |
| { 0x00db, "Ucircumflex" }, |
| { 0x00dc, "Udiaeresis" }, |
| { 0x00dd, "Yacute" }, |
| { 0x00de, "THORN" }, |
| { 0x00df, "ssharp" }, |
| { 0x00e0, "agrave" }, |
| { 0x00e1, "aacute" }, |
| { 0x00e2, "acircumflex" }, |
| { 0x00e3, "atilde" }, |
| { 0x00e4, "adiaeresis" }, |
| { 0x00e5, "aring" }, |
| { 0x00e6, "ae" }, |
| { 0x00e7, "ccedilla" }, |
| { 0x00e8, "egrave" }, |
| { 0x00e9, "eacute" }, |
| { 0x00ea, "ecircumflex" }, |
| { 0x00eb, "ediaeresis" }, |
| { 0x00ec, "igrave" }, |
| { 0x00ed, "iacute" }, |
| { 0x00ee, "icircumflex" }, |
| { 0x00ef, "idiaeresis" }, |
| { 0x00f0, "eth" }, |
| { 0x00f1, "ntilde" }, |
| { 0x00f2, "ograve" }, |
| { 0x00f3, "oacute" }, |
| { 0x00f4, "ocircumflex" }, |
| { 0x00f5, "otilde" }, |
| { 0x00f6, "odiaeresis" }, |
| { 0x00f7, "division" }, |
| { 0x00f8, "oslash" }, |
| { 0x00f9, "ugrave" }, |
| { 0x00fa, "uacute" }, |
| { 0x00fb, "ucircumflex" }, |
| { 0x00fc, "udiaeresis" }, |
| { 0x00fd, "yacute" }, |
| { 0x00fe, "thorn" }, |
| { 0x00ff, "ydiaeresis" } |
| }; |
| |
| static sym latin2_syms[] = { |
| { 0x00a0, "" }, /* 0240 */ |
| { 0x0104, "Aogonek" }, |
| { 0x02d8, "breve" }, |
| { 0x0141, "Lstroke" }, |
| { 0x00a4, "" }, |
| { 0x013d, "Lcaron" }, |
| { 0x015a, "Sacute" }, |
| { 0x00a7, "" }, |
| { 0x00a8, "" }, |
| { 0x0160, "Scaron" }, |
| { 0x015e, "Scedilla" }, |
| { 0x0164, "Tcaron" }, |
| { 0x0179, "Zacute" }, |
| { 0x00ad, "" }, |
| { 0x017d, "Zcaron" }, |
| { 0x017b, "Zabovedot" }, |
| { 0x00b0, "" }, |
| { 0x0105, "aogonek" }, |
| { 0x02db, "ogonek" }, |
| { 0x0142, "lstroke" }, |
| { 0x00b4, "" }, |
| { 0x013e, "lcaron" }, |
| { 0x015b, "sacute" }, |
| { 0x02c7, "caron" }, |
| { 0x00b8, "" }, |
| { 0x0161, "scaron" }, |
| { 0x015f, "scedilla" }, |
| { 0x0165, "tcaron" }, |
| { 0x017a, "zacute" }, |
| { 0x02dd, "doubleacute" }, |
| { 0x017e, "zcaron" }, |
| { 0x017c, "zabovedot" }, |
| { 0x0154, "Racute" }, /* 0300 */ |
| { 0x00c1, "" }, |
| { 0x00c2, "" }, |
| { 0x0102, "Abreve" }, |
| { 0x00c4, "" }, |
| { 0x0139, "Lacute" }, |
| { 0x0106, "Cacute" }, |
| { 0x00c7, "" }, |
| { 0x010c, "Ccaron" }, |
| { 0x00c9, "" }, |
| { 0x0118, "Eogonek" }, |
| { 0x00cb, "" }, |
| { 0x011a, "Ecaron" }, |
| { 0x00cd, "" }, |
| { 0x00ce, "" }, |
| { 0x010e, "Dcaron" }, |
| { 0x0110, "Dstroke" }, |
| { 0x0143, "Nacute" }, |
| { 0x0147, "Ncaron" }, |
| { 0x00d3, "" }, |
| { 0x00d4, "" }, |
| { 0x0150, "Odoubleacute" }, |
| { 0x00d6, "" }, |
| { 0x00d7, "" }, |
| { 0x0158, "Rcaron" }, |
| { 0x016e, "Uring" }, |
| { 0x00da, "" }, |
| { 0x0170, "Udoubleacute" }, |
| { 0x00dc, "" }, |
| { 0x00dd, "" }, |
| { 0x0162, "Tcedilla" }, |
| { 0x00df, "" }, |
| { 0x0155, "racute" }, |
| { 0x00e1, "" }, |
| { 0x00e2, "" }, |
| { 0x0103, "abreve" }, |
| { 0x00e4, "" }, |
| { 0x013a, "lacute" }, |
| { 0x0107, "cacute" }, |
| { 0x00e7, "" }, |
| { 0x010d, "ccaron" }, |
| { 0x00e9, "" }, |
| { 0x0119, "eogonek" }, |
| { 0x00eb, "" }, |
| { 0x011b, "ecaron" }, |
| { 0x00ed, "" }, |
| { 0x00ee, "" }, |
| { 0x010f, "dcaron" }, |
| { 0x0111, "dstroke" }, |
| { 0x0144, "nacute" }, |
| { 0x0148, "ncaron" }, |
| { 0x00f3, "" }, |
| { 0x00f4, "" }, |
| { 0x0151, "odoubleacute" }, |
| { 0x00f6, "" }, |
| { 0x00f7, "" }, |
| { 0x0159, "rcaron" }, |
| { 0x016f, "uring" }, |
| { 0x00fa, "" }, |
| { 0x0171, "udoubleacute" }, |
| { 0x00fc, "" }, |
| { 0x00fd, "" }, |
| { 0x0163, "tcedilla" }, |
| { 0x02d9, "abovedot" } |
| }; |
| |
| static sym mazovia_syms[] = { |
| /* as specified by Wlodek Bzyl <matwb@univ.gda.pl> */ |
| { 0x0080, "" }, |
| { 0x0081, "" }, |
| { 0x0082, "" }, |
| { 0x0083, "" }, |
| { 0x0084, "" }, |
| { 0x0085, "" }, |
| { 0x0105, "aogonek" }, |
| { 0x0087, "" }, |
| { 0x0088, "" }, |
| { 0x0089, "" }, |
| { 0x008a, "" }, |
| { 0x008b, "" }, |
| { 0x008c, "" }, |
| { 0x0107, "cacute" }, |
| { 0x008e, "" }, |
| { 0x0104, "Aogonek" }, |
| { 0x0118, "Eogonek" }, |
| { 0x0119, "eogonek" }, |
| { 0x0142, "lstroke" }, |
| { 0x0093, "" }, |
| { 0x0094, "" }, |
| { 0x0106, "Cacute" }, |
| { 0x0096, "" }, |
| { 0x0097, "" }, |
| { 0x015a, "Sacute" }, |
| { 0x0099, "" }, |
| { 0x009a, "" }, |
| { 0x009b, "" }, |
| { 0x0141, "Lstroke" }, |
| { 0x009d, "" }, |
| { 0x015b, "sacute" }, |
| { 0x009f, "" }, |
| { 0x0179, "Zacute" }, |
| { 0x017b, "Zabovedot" }, |
| { 0x00f3, "oacute" }, |
| { 0x00d3, "Oacute" }, |
| { 0x0144, "nacute" }, |
| { 0x0143, "Nacute" }, |
| { 0x017a, "zacute" }, |
| { 0x017c, "zabovedot" }, |
| { 0x00a8, "" }, |
| { 0x00a9, "" }, |
| { 0x00aa, "" }, |
| { 0x00ab, "" }, |
| { 0x00ac, "" }, |
| { 0x00ad, "" }, |
| { 0x00ab, "guillemotleft" }, |
| { 0x00bb, "guillemotright" }, |
| { 0x00b0, "" }, |
| { 0x00b1, "" }, |
| { 0x00b2, "" }, |
| { 0x00b3, "" }, |
| { 0x00b4, "" }, |
| { 0x00b5, "" }, |
| { 0x00b6, "" }, |
| { 0x00b7, "" }, |
| { 0x00b8, "" }, |
| { 0x00b9, "" }, |
| { 0x00ba, "" }, |
| { 0x00bb, "" }, |
| { 0x00bc, "" }, |
| { 0x00bd, "" }, |
| { 0x00be, "" }, |
| { 0x00bf, "" }, |
| { 0x00c0, "" }, |
| { 0x00c1, "" }, |
| { 0x00c2, "" }, |
| { 0x00c3, "" }, |
| { 0x00c4, "" }, |
| { 0x00c5, "" }, |
| { 0x00c6, "" }, |
| { 0x00c7, "" }, |
| { 0x00c8, "" }, |
| { 0x00c9, "" }, |
| { 0x00ca, "" }, |
| { 0x00cb, "" }, |
| { 0x00cc, "" }, |
| { 0x00cd, "" }, |
| { 0x00ce, "" }, |
| { 0x00cf, "" }, |
| { 0x00d0, "" }, |
| { 0x00d1, "" }, |
| { 0x00d2, "" }, |
| { 0x00d3, "" }, |
| { 0x00d4, "" }, |
| { 0x00d5, "" }, |
| { 0x00d6, "" }, |
| { 0x00d7, "" }, |
| { 0x00d8, "" }, |
| { 0x00d9, "" }, |
| { 0x00da, "" }, |
| { 0x00db, "" }, |
| { 0x00dc, "" }, |
| { 0x00dd, "" }, |
| { 0x00de, "" }, |
| { 0x00df, "" }, |
| { 0x00e0, "" }, |
| { 0x00e1, "" }, |
| { 0x00e2, "" }, |
| { 0x00e3, "" }, |
| { 0x00e4, "" }, |
| { 0x00e5, "" }, |
| { 0x00e6, "" }, |
| { 0x00e7, "" }, |
| { 0x00e8, "" }, |
| { 0x00e9, "" }, |
| { 0x00ea, "" }, |
| { 0x00eb, "" }, |
| { 0x00ec, "" }, |
| { 0x00ed, "" }, |
| { 0x00ee, "" }, |
| { 0x00ef, "" }, |
| { 0x00f0, "" }, |
| { 0x00f1, "" }, |
| { 0x00f2, "" }, |
| { 0x00f3, "" }, |
| { 0x00f4, "" }, |
| { 0x00f5, "" }, |
| { 0x00f6, "" }, |
| { 0x00f7, "" }, |
| { 0x00f8, "" }, |
| { 0x00f9, "" }, |
| { 0x00fa, "" }, |
| { 0x00fb, "" }, |
| { 0x00fc, "" }, |
| { 0x00fd, "" }, |
| { 0x00fe, "" }, |
| { 0x201e, "quotedblbase" } |
| }; |
| |
| static sym latin3_syms[] = { |
| { 0x00a0, "" }, |
| { 0x0126, "Hstroke" }, |
| { 0x02d8, "" }, |
| { 0x00a3, "" }, |
| { 0x00a4, "" }, |
| { 0xfffd, "" }, |
| { 0x0124, "Hcircumflex" }, |
| { 0x00a7, "" }, |
| { 0x00a8, "" }, |
| { 0x0130, "Iabovedot" }, |
| { 0x015e, "" }, |
| { 0x011e, "Gbreve" }, |
| { 0x0134, "Jcircumflex" }, |
| { 0x00ad, "" }, |
| { 0xfffd, "" }, |
| { 0x017b, "" }, |
| { 0x00b0, "" }, |
| { 0x0127, "hstroke" }, |
| { 0x00b2, "" }, |
| { 0x00b3, "" }, |
| { 0x00b4, "" }, |
| { 0x00b5, "" }, |
| { 0x0125, "hcircumflex" }, |
| { 0x00b7, "" }, |
| { 0x00b8, "" }, |
| { 0x0131, "idotless" }, |
| { 0x015f, "" }, |
| { 0x011f, "gbreve" }, |
| { 0x0135, "jcircumflex" }, |
| { 0x00bd, "" }, |
| { 0xfffd, "" }, |
| { 0x017c, "" }, |
| { 0x00c0, "" }, |
| { 0x00c1, "" }, |
| { 0x00c2, "" }, |
| { 0xfffd, "" }, |
| { 0x00c4, "" }, |
| { 0x010a, "Cabovedot" }, |
| { 0x0108, "Ccircumflex" }, |
| { 0x00c7, "" }, |
| { 0x00c8, "" }, |
| { 0x00c9, "" }, |
| { 0x00ca, "" }, |
| { 0x00cb, "" }, |
| { 0x00cc, "" }, |
| { 0x00cd, "" }, |
| { 0x00ce, "" }, |
| { 0x00cf, "" }, |
| { 0xfffd, "" }, |
| { 0x00d1, "" }, |
| { 0x00d2, "" }, |
| { 0x00d3, "" }, |
| { 0x00d4, "" }, |
| { 0x0120, "Gabovedot" }, |
| { 0x00d6, "" }, |
| { 0x00d7, "" }, |
| { 0x011c, "Gcircumflex" }, |
| { 0x00d9, "" }, |
| { 0x00da, "" }, |
| { 0x00db, "" }, |
| { 0x00dc, "" }, |
| { 0x016c, "Ubreve" }, |
| { 0x015c, "Scircumflex" }, |
| { 0x00df, "" }, |
| { 0x00e0, "" }, |
| { 0x00e1, "" }, |
| { 0x00e2, "" }, |
| { 0xfffd, "" }, |
| { 0x00e4, "" }, |
| { 0x010b, "cabovedot" }, |
| { 0x0109, "ccircumflex" }, |
| { 0x00e7, "" }, |
| { 0x00e8, "" }, |
| { 0x00e9, "" }, |
| { 0x00ea, "" }, |
| { 0x00eb, "" }, |
| { 0x00ec, "" }, |
| { 0x00ed, "" }, |
| { 0x00ee, "" }, |
| { 0x00ef, "" }, |
| { 0xfffd, "" }, |
| { 0x00f1, "" }, |
| { 0x00f2, "" }, |
| { 0x00f3, "" }, |
| { 0x00f4, "" }, |
| { 0x0121, "gabovedot" }, |
| { 0x00f6, "" }, |
| { 0x00f7, "" }, |
| { 0x011d, "gcircumflex" }, |
| { 0x00f9, "" }, |
| { 0x00fa, "" }, |
| { 0x00fb, "" }, |
| { 0x00fc, "" }, |
| { 0x016d, "ubreve" }, |
| { 0x015d, "scircumflex" }, |
| { 0x02d9, "" } |
| }; |
| |
| static sym latin4_syms[] = { |
| { 0x00a0, "" }, |
| { 0x0104, "" }, |
| { 0x0138, "kra" }, |
| { 0x0156, "Rcedilla" }, |
| { 0x00a4, "" }, |
| { 0x0128, "Itilde" }, |
| { 0x013b, "Lcedilla" }, |
| { 0x00a7, "" }, |
| { 0x00a8, "" }, |
| { 0x0160, "" }, |
| { 0x0112, "Emacron" }, |
| { 0x0122, "Gcedilla" }, |
| { 0x0166, "Tslash" }, |
| { 0x00ad, "" }, |
| { 0x017d, "" }, |
| { 0x00af, "" }, |
| { 0x00b0, "" }, |
| { 0x0105, "" }, |
| { 0x02db, "" }, |
| { 0x0157, "rcedilla" }, |
| { 0x00b4, "" }, |
| { 0x0129, "itilde" }, |
| { 0x013c, "lcedilla" }, |
| { 0x02c7, "" }, |
| { 0x00b8, "" }, |
| { 0x0161, "" }, |
| { 0x0113, "emacron" }, |
| { 0x0123, "gcedilla" }, |
| { 0x0167, "tslash" }, |
| { 0x014a, "ENG" }, |
| { 0x017e, "" }, |
| { 0x014b, "eng" }, |
| { 0x0100, "Amacron" }, |
| { 0x00c1, "" }, |
| { 0x00c2, "" }, |
| { 0x00c3, "" }, |
| { 0x00c4, "" }, |
| { 0x00c5, "" }, |
| { 0x00c6, "" }, |
| { 0x012e, "Iogonek" }, |
| { 0x010c, "" }, |
| { 0x00c9, "" }, |
| { 0x0118, "" }, |
| { 0x00cb, "" }, |
| { 0x0116, "Eabovedot" }, |
| { 0x00cd, "" }, |
| { 0x00ce, "" }, |
| { 0x012a, "Imacron" }, |
| { 0x0110, "" }, |
| { 0x0145, "Ncedilla" }, |
| { 0x014c, "Omacron" }, |
| { 0x0136, "Kcedilla" }, |
| { 0x00d4, "" }, |
| { 0x00d5, "" }, |
| { 0x00d6, "" }, |
| { 0x00d7, "" }, |
| { 0x00d8, "" }, |
| { 0x0172, "Uogonek" }, |
| { 0x00da, "" }, |
| { 0x00db, "" }, |
| { 0x00dc, "" }, |
| { 0x0168, "Utilde" }, |
| { 0x016a, "Umacron" }, |
| { 0x00df, "" }, |
| { 0x0101, "amacron" }, |
| { 0x00e1, "" }, |
| { 0x00e2, "" }, |
| { 0x00e3, "" }, |
| { 0x00e4, "" }, |
| { 0x00e5, "" }, |
| { 0x00e6, "" }, |
| { 0x012f, "iogonek" }, |
| { 0x010d, "" }, |
| { 0x00e9, "" }, |
| { 0x0119, "" }, |
| { 0x00eb, "" }, |
| { 0x0117, "eabovedot" }, |
| { 0x00ed, "" }, |
| { 0x00ee, "" }, |
| { 0x012b, "imacron" }, |
| { 0x0111, "" }, |
| { 0x0146, "ncedilla" }, |
| { 0x014d, "omacron" }, |
| { 0x0137, "kcedilla" }, |
| { 0x00f4, "" }, |
| { 0x00f5, "" }, |
| { 0x00f6, "" }, |
| { 0x00f7, "" }, |
| { 0x00f8, "" }, |
| { 0x0173, "uogonek" }, |
| { 0x00fa, "" }, |
| { 0x00fb, "" }, |
| { 0x00fc, "" }, |
| { 0x0169, "utilde" }, |
| { 0x016b, "umacron" }, |
| { 0x02d9, "" } |
| }; |
| |
| static sym iso_8859_5_syms[] = { /* 160-255 */ |
| { 0x00a0, "no-break_space" }, /* 0240 */ |
| { 0x0401, "cyrillic_capital_letter_io" }, |
| { 0x0402, "serbocroatian_cyrillic_capital_letter_dje" }, |
| { 0x0403, "macedonian_cyrillic_capital_letter_gje" }, |
| { 0x0404, "ukrainian_cyrillic_capital_letter_ie" }, |
| { 0x0405, "macedonian_cyrillic_capital_letter_dze" }, |
| { 0x0406, "ukrainian_cyrillic_capital_letter_i" }, |
| { 0x0407, "ukrainian_cyrillic_capital_letter_yi" }, |
| { 0x0408, "cyrillic_capital_letter_je" }, /* 0250 */ |
| { 0x0409, "cyrillic_capital_letter_lje" }, |
| { 0x040a, "cyrillic_capital_letter_nje" }, |
| { 0x040b, "serbocroatian_cyrillic_capital_letter_chje" }, |
| { 0x040c, "macedonian_cyrillic_capital_letter_kje" }, |
| { 0x00ad, "soft_hyphen" }, |
| { 0x040e, "bielorussian_cyrillic_capital_letter_short_u" }, |
| { 0x040f, "cyrillic_capital_letter_dze" }, |
| { 0x0410, "cyrillic_capital_letter_a" }, /* 0260 */ |
| { 0x0411, "cyrillic_capital_letter_be" }, |
| { 0x0412, "cyrillic_capital_letter_ve" }, |
| { 0x0413, "cyrillic_capital_letter_ghe" }, |
| { 0x0414, "cyrillic_capital_letter_de" }, |
| { 0x0415, "cyrillic_capital_letter_ie" }, |
| { 0x0416, "cyrillic_capital_letter_zhe" }, |
| { 0x0417, "cyrillic_capital_letter_ze" }, |
| { 0x0418, "cyrillic_capital_letter_i" }, /* 0270 */ |
| { 0x0419, "cyrillic_capital_letter_short_i" }, |
| { 0x041a, "cyrillic_capital_letter_ka" }, |
| { 0x041b, "cyrillic_capital_letter_el" }, |
| { 0x041c, "cyrillic_capital_letter_em" }, |
| { 0x041d, "cyrillic_capital_letter_en" }, |
| { 0x041e, "cyrillic_capital_letter_o" }, |
| { 0x041f, "cyrillic_capital_letter_pe" }, |
| { 0x0420, "cyrillic_capital_letter_er" }, /* 0300 */ |
| { 0x0421, "cyrillic_capital_letter_es" }, |
| { 0x0422, "cyrillic_capital_letter_te" }, |
| { 0x0423, "cyrillic_capital_letter_u" }, |
| { 0x0424, "cyrillic_capital_letter_ef" }, |
| { 0x0425, "cyrillic_capital_letter_ha" }, |
| { 0x0426, "cyrillic_capital_letter_tse" }, |
| { 0x0427, "cyrillic_capital_letter_che" }, |
| { 0x0428, "cyrillic_capital_letter_sha" }, /* 0310 */ |
| { 0x0429, "cyrillic_capital_letter_shcha" }, |
| { 0x042a, "cyrillic_capital_hard_sign" }, |
| { 0x042b, "cyrillic_capital_letter_yeru" }, |
| { 0x042c, "cyrillic_capital_soft_sign" }, |
| { 0x042d, "cyrillic_capital_letter_e" }, |
| { 0x042e, "cyrillic_capital_letter_yu" }, |
| { 0x042f, "cyrillic_capital_letter_ya" }, |
| { 0x0430, "cyrillic_small_letter_a" }, /* 0320 */ |
| { 0x0431, "cyrillic_small_letter_be" }, |
| { 0x0432, "cyrillic_small_letter_ve" }, |
| { 0x0433, "cyrillic_small_letter_ghe" }, |
| { 0x0434, "cyrillic_small_letter_de" }, |
| { 0x0435, "cyrillic_small_letter_ie" }, |
| { 0x0436, "cyrillic_small_letter_zhe" }, |
| { 0x0437, "cyrillic_small_letter_ze" }, |
| { 0x0438, "cyrillic_small_letter_i" }, /* 0330 */ |
| { 0x0439, "cyrillic_small_letter_short_i" }, |
| { 0x043a, "cyrillic_small_letter_ka" }, |
| { 0x043b, "cyrillic_small_letter_el" }, |
| { 0x043c, "cyrillic_small_letter_em" }, |
| { 0x043d, "cyrillic_small_letter_en" }, |
| { 0x043e, "cyrillic_small_letter_o" }, |
| { 0x043f, "cyrillic_small_letter_pe" }, |
| { 0x0440, "cyrillic_small_letter_er" }, /* 0340 */ |
| { 0x0441, "cyrillic_small_letter_es" }, |
| { 0x0442, "cyrillic_small_letter_te" }, |
| { 0x0443, "cyrillic_small_letter_u" }, |
| { 0x0444, "cyrillic_small_letter_ef" }, |
| { 0x0445, "cyrillic_small_letter_ha" }, |
| { 0x0446, "cyrillic_small_letter_tse" }, |
| { 0x0447, "cyrillic_small_letter_che" }, |
| { 0x0448, "cyrillic_small_letter_sha" }, /* 0350 */ |
| { 0x0449, "cyrillic_small_letter_shcha" }, |
| { 0x044a, "cyrillic_small_hard_sign" }, |
| { 0x044b, "cyrillic_small_letter_yeru" }, |
| { 0x044c, "cyrillic_small_soft_sign" }, |
| { 0x044d, "cyrillic_small_letter_e" }, |
| { 0x044e, "cyrillic_small_letter_yu" }, |
| { 0x044f, "cyrillic_small_letter_ya" }, |
| { 0x2116, "number_acronym" }, /* 0360 */ |
| { 0x0451, "cyrillic_small_letter_io" }, |
| { 0x0452, "serbocroatian_cyrillic_small_letter_dje" }, |
| { 0x0453, "macedonian_cyrillic_small_letter_gje" }, |
| { 0x0454, "ukrainian_cyrillic_small_letter_ie" }, |
| { 0x0455, "macedonian_cyrillic_small_letter_dze" }, |
| { 0x0456, "ukrainian_cyrillic_small_letter_i" }, |
| { 0x0457, "ukrainian_cyrillic_small_letter_yi" }, |
| { 0x0458, "cyrillic_small_letter_je" }, /* 0370 */ |
| { 0x0459, "cyrillic_small_letter_lje" }, |
| { 0x045a, "cyrillic_small_letter_nje" }, |
| { 0x045b, "serbocroatian_cyrillic_small_letter_chje" }, |
| { 0x045c, "macedonian_cyrillic_small_letter_kje" }, |
| { 0x00a7, "paragraph_sign" }, |
| { 0x045e, "bielorussian_cyrillic_small_letter_short_u" }, /* printing error in ECMA-113 */ |
| { 0x045f, "cyrillic_small_letter_dze" } |
| }; |
| |
| static sym iso_8859_7_syms[] = { /* 160-255 */ |
| { 0x00a0, "" }, |
| { 0x02bd, "leftquote" }, |
| { 0x02bc, "rightquote" }, |
| { 0x00a3, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0x00a6, "" }, |
| { 0x00a7, "" }, |
| { 0x00a8, "" }, |
| { 0x00a9, "" }, |
| { 0xfffd, "" }, |
| { 0x00ab, "" }, |
| { 0x00ac, "" }, |
| { 0x00ad, "" }, |
| { 0xfffd, "" }, |
| { 0x2015, "" }, |
| { 0x00b0, "" }, |
| { 0x00b1, "" }, |
| { 0x00b2, "" }, |
| { 0x00b3, "" }, |
| { 0x0384, "accent" }, |
| { 0x0385, "diaeresisaccent" }, |
| { 0x0386, "Alphaaccent" }, |
| { 0x00b7, "" }, |
| { 0x0388, "Epsilonaccent" }, |
| { 0x0389, "Etaaccent" }, |
| { 0x038a, "Iotaaccent" }, |
| { 0x00bb, "rightanglequote" }, |
| { 0x038c, "Omicronaccent" }, |
| { 0x00bd, "onehalf" }, |
| { 0x038e, "Upsilonaccent" }, |
| { 0x038f, "Omegaaccent" }, |
| { 0x0390, "iotadiaeresisaccent" }, |
| { 0x0391, "Alpha" }, |
| { 0x0392, "Beta" }, |
| { 0x0393, "Gamma" }, |
| { 0x0394, "Delta" }, |
| { 0x0395, "Epsilon" }, |
| { 0x0396, "Zeta" }, |
| { 0x0397, "Eta" }, |
| { 0x0398, "Theta" }, |
| { 0x0399, "Iota" }, |
| { 0x039a, "Kappa" }, |
| { 0x039b, "Lamda" /*sic*/ }, |
| { 0x039c, "Mu" }, |
| { 0x039d, "Nu" }, |
| { 0x039e, "Ksi" }, |
| { 0x039f, "Omicron" }, |
| { 0x03a0, "Pi" }, |
| { 0x03a1, "Rho" }, |
| { 0xfffd, "" }, |
| { 0x03a3, "Sigma" }, |
| { 0x03a4, "Tau" }, |
| { 0x03a5, "Upsilon" }, |
| { 0x03a6, "Phi" }, |
| { 0x03a7, "Khi" }, |
| { 0x03a8, "Psi" }, |
| { 0x03a9, "Omega" }, |
| { 0x03aa, "Iotadiaeresis" }, |
| { 0x03ab, "Upsilondiaeresis" }, |
| { 0x03ac, "alphaaccent" }, |
| { 0x03ad, "epsilonaccent" }, |
| { 0x03ae, "etaaccent" }, |
| { 0x03af, "iotaaccent" }, |
| { 0x03b0, "upsilondiaeresisaccent" }, |
| { 0x03b1, "alpha" }, |
| { 0x03b2, "beta" }, |
| { 0x03b3, "gamma" }, |
| { 0x03b4, "delta" }, |
| { 0x03b5, "epsilon" }, |
| { 0x03b6, "zeta" }, |
| { 0x03b7, "eta" }, |
| { 0x03b8, "theta" }, |
| { 0x03b9, "iota" }, |
| { 0x03ba, "kappa" }, |
| { 0x03bb, "lamda" /*sic*/ }, |
| { 0x03bc, "mu" }, |
| { 0x03bd, "nu" }, |
| { 0x03be, "ksi" }, |
| { 0x03bf, "omicron" }, |
| { 0x03c0, "pi" }, |
| { 0x03c1, "rho" }, |
| { 0x03c2, "terminalsigma" }, |
| { 0x03c3, "sigma" }, |
| { 0x03c4, "tau" }, |
| { 0x03c5, "upsilon" }, |
| { 0x03c6, "phi" }, |
| { 0x03c7, "khi" }, |
| { 0x03c8, "psi" }, |
| { 0x03c9, "omega" }, |
| { 0x03ca, "iotadiaeresis" }, |
| { 0x03cb, "upsilondiaeresis" }, |
| { 0x03cc, "omicronaccent" }, |
| { 0x03cd, "upsilonaccent" }, |
| { 0x03ce, "omegaaccent" }, |
| { 0xfffd, "" } |
| }; |
| |
| static sym iso_8859_8_syms[] = { |
| { 0x00a0, "" }, |
| { 0xfffd, "" }, |
| { 0x00a2, "" }, |
| { 0x00a3, "" }, |
| { 0x00a4, "" }, |
| { 0x00a5, "" }, |
| { 0x00a6, "" }, |
| { 0x00a7, "" }, |
| { 0x00a8, "" }, |
| { 0x00a9, "" }, |
| { 0x00d7, "multiplication" }, |
| { 0x00ab, "" }, |
| { 0x00ac, "" }, |
| { 0x00ad, "" }, |
| { 0x00ae, "" }, |
| { 0x203e, "overscore" }, |
| { 0x00b0, "" }, |
| { 0x00b1, "" }, |
| { 0x00b2, "" }, |
| { 0x00b3, "" }, |
| { 0x00b4, "" }, |
| { 0x00b5, "" }, |
| { 0x00b6, "" }, |
| { 0x00b7, "" }, |
| { 0x00b8, "" }, |
| { 0x00b9, "" }, |
| { 0x00f7, "division" }, |
| { 0x00bb, "" }, |
| { 0x00bc, "" }, |
| { 0x00bd, "" }, |
| { 0x00be, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0x2017, "doubleunderscore" }, |
| { 0x05d0, "alef" }, |
| { 0x05d1, "bet" }, |
| { 0x05d2, "gimel" }, |
| { 0x05d3, "dalet" }, |
| { 0x05d4, "he" }, |
| { 0x05d5, "vav" }, |
| { 0x05d6, "zayin" }, |
| { 0x05d7, "het" }, |
| { 0x05d8, "tet" }, |
| { 0x05d9, "yod" }, |
| { 0x05da, "finalkaf" }, |
| { 0x05db, "kaf" }, |
| { 0x05dc, "lamed" }, |
| { 0x05dd, "finalmem" }, |
| { 0x05de, "mem" }, |
| { 0x05df, "finalnun" }, |
| { 0x05e0, "nun" }, |
| { 0x05e1, "samekh" }, |
| { 0x05e2, "ayin" }, |
| { 0x05e3, "finalpe" }, |
| { 0x05e4, "pe" }, |
| { 0x05e5, "finaltsadi" }, |
| { 0x05e6, "tsadi" }, |
| { 0x05e7, "qof" }, |
| { 0x05e8, "resh" }, |
| { 0x05e9, "shin" }, |
| { 0x05ea, "tav" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" }, |
| { 0xfffd, "" } |
| }; |
| |
| static sym iso_8859_9_syms[] = { /* latin-5 */ |
| /* Identical to latin-1, but with the 6 symbols |
| ETH, eth, THORN, thorn, Yacute, yacute replaced by |
| Gbreve, gbreve, Scedilla, scedilla, Idotabove, dotlessi */ |
| { 0x011e, "Gbreve" }, |
| { 0x00d1, "" }, |
| { 0x00d2, "" }, |
| { 0x00d3, "" }, |
| { 0x00d4, "" }, |
| { 0x00d5, "" }, |
| { 0x00d6, "" }, |
| { 0x00d7, "" }, |
| { 0x00d8, "" }, |
| { 0x00d9, "" }, |
| { 0x00da, "" }, |
| { 0x00db, "" }, |
| { 0x00dc, "" }, |
| { 0x0130, "Idotabove" }, |
| { 0x015e, "Scedilla" }, |
| { 0x00df, "" }, |
| { 0x00e0, "" }, |
| { 0x00e1, "" }, |
| { 0x00e2, "" }, |
| { 0x00e3, "" }, |
| { 0x00e4, "" }, |
| { 0x00e5, "" }, |
| { 0x00e6, "" }, |
| { 0x00e7, "" }, |
| { 0x00e8, "" }, |
| { 0x00e9, "" }, |
| { 0x00ea, "" }, |
| { 0x00eb, "" }, |
| { 0x00ec, "" }, |
| { 0x00ed, "" }, |
| { 0x00ee, "" }, |
| { 0x00ef, "" }, |
| { 0x011f, "gbreve" }, |
| { 0x00f1, "" }, |
| { 0x00f2, "" }, |
| { 0x00f3, "" }, |
| { 0x00f4, "" }, |
| { 0x00f5, "" }, |
| { 0x00f6, "" }, |
| { 0x00f7, "" }, |
| { 0x00f8, "" }, |
| { 0x00f9, "" }, |
| { 0x00fa, "" }, |
| { 0x00fb, "" }, |
| { 0x00fc, "" }, |
| { 0x0131, "dotlessi" }, |
| { 0x015f, "scedilla" }, |
| { 0x00ff, "" } |
| }; |
| |
| #include "koi8.syms.h" |
| #include "cp1250.syms.h" |
| #include "ethiopic.syms.h" |
| #include "sami.syms.h" |
| |
| static sym iso_8859_15_syms[] = { |
| /* latin-1 with 8 changes */ |
| { 0x00a0, "" }, |
| { 0x00a1, "" }, |
| { 0x00a2, "" }, |
| { 0x00a3, "" }, |
| { 0x20ac, "euro" }, |
| { 0x00a5, "" }, |
| { 0x0160, "Scaron" }, |
| { 0x00a7, "" }, |
| { 0x0161, "scaron" }, |
| { 0x00a9, "" }, |
| { 0x00aa, "" }, |
| { 0x00ab, "" }, |
| { 0x00ac, "" }, |
| { 0x00ad, "" }, |
| { 0x00ae, "" }, |
| { 0x00af, "" }, |
| { 0x00b0, "" }, |
| { 0x00b1, "" }, |
| { 0x00b2, "" }, |
| { 0x00b3, "" }, |
| { 0x017d, "Zcaron" }, |
| { 0x00b5, "" }, |
| { 0x00b6, "" }, |
| { 0x00b7, "" }, |
| { 0x017e, "zcaron" }, |
| { 0x00b9, "" }, |
| { 0x00ba, "" }, |
| { 0x00bb, "" }, |
| { 0x0152, "OE" }, |
| { 0x0153, "oe" }, |
| { 0x0178, "Ydiaeresis" }, |
| { 0x00bf, "" }, |
| { 0x00c0, "" }, |
| { 0x00c1, "" }, |
| { 0x00c2, "" }, |
| { 0x00c3, "" }, |
| { 0x00c4, "" }, |
| { 0x00c5, "" }, |
| { 0x00c6, "" }, |
| { 0x00c7, "" }, |
| { 0x00c8, "" }, |
| { 0x00c9, "" }, |
| { 0x00ca, "" }, |
| { 0x00cb, "" }, |
| { 0x00cc, "" }, |
| { 0x00cd, "" }, |
| { 0x00ce, "" }, |
| { 0x00cf, "" }, |
| { 0x00d0, "" }, |
| { 0x00d1, "" }, |
| { 0x00d2, "" }, |
| { 0x00d3, "" }, |
| { 0x00d4, "" }, |
| { 0x00d5, "" }, |
| { 0x00d6, "" }, |
| { 0x00d7, "" }, |
| { 0x00d8, "" }, |
| { 0x00d9, "" }, |
| { 0x00da, "" }, |
| { 0x00db, "" }, |
| { 0x00dc, "" }, |
| { 0x00dd, "" }, |
| { 0x00de, "" }, |
| { 0x00df, "" }, |
| { 0x00e0, "" }, |
| { 0x00e1, "" }, |
| { 0x00e2, "" }, |
| { 0x00e3, "" }, |
| { 0x00e4, "" }, |
| { 0x00e5, "" }, |
| { 0x00e6, "" }, |
| { 0x00e7, "" }, |
| { 0x00e8, "" }, |
| { 0x00e9, "" }, |
| { 0x00ea, "" }, |
| { 0x00eb, "" }, |
| { 0x00ec, "" }, |
| { 0x00ed, "" }, |
| { 0x00ee, "" }, |
| { 0x00ef, "" }, |
| { 0x00f0, "" }, |
| { 0x00f1, "" }, |
| { 0x00f2, "" }, |
| { 0x00f3, "" }, |
| { 0x00f4, "" }, |
| { 0x00f5, "" }, |
| { 0x00f6, "" }, |
| { 0x00f7, "" }, |
| { 0x00f8, "" }, |
| { 0x00f9, "" }, |
| { 0x00fa, "" }, |
| { 0x00fb, "" }, |
| { 0x00fc, "" }, |
| { 0x00fd, "" }, |
| { 0x00fe, "" }, |
| { 0x00ff, "" } |
| }; |
| |
| /* Keysyms whose KTYP is KT_FN. */ |
| |
| static const char *fn_syms[] = { |
| "F1", "F2", "F3", "F4", "F5", |
| "F6", "F7", "F8", "F9", "F10", |
| "F11", "F12", "F13", "F14", "F15", |
| "F16", "F17", "F18", "F19", "F20", |
| "Find", /* also called: "Home" */ |
| "Insert", |
| "Remove", |
| "Select", /* also called: "End" */ |
| "Prior", /* also called: "PageUp" */ |
| "Next", /* also called: "PageDown" */ |
| "Macro", |
| "Help", |
| "Do", |
| "Pause", |
| "F21", "F22", "F23", "F24", "F25", |
| "F26", "F27", "F28", "F29", "F30", |
| "F31", "F32", "F33", "F34", "F35", |
| "F36", "F37", "F38", "F39", "F40", |
| "F41", "F42", "F43", "F44", "F45", |
| "F46", "F47", "F48", "F49", "F50", |
| "F51", "F52", "F53", "F54", "F55", |
| "F56", "F57", "F58", "F59", "F60", |
| "F61", "F62", "F63", "F64", "F65", |
| "F66", "F67", "F68", "F69", "F70", |
| "F71", "F72", "F73", "F74", "F75", |
| "F76", "F77", "F78", "F79", "F80", |
| "F81", "F82", "F83", "F84", "F85", |
| "F86", "F87", "F88", "F89", "F90", |
| "F91", "F92", "F93", "F94", "F95", |
| "F96", "F97", "F98", "F99", "F100", |
| "F101", "F102", "F103", "F104", "F105", |
| "F106", "F107", "F108", "F109", "F110", |
| "F111", "F112", "F113", "F114", "F115", |
| "F116", "F117", "F118", "F119", "F120", |
| "F121", "F122", "F123", "F124", "F125", |
| "F126", "F127", "F128", "F129", "F130", |
| "F131", "F132", "F133", "F134", "F135", |
| "F136", "F137", "F138", "F139", "F140", |
| "F141", "F142", "F143", "F144", "F145", |
| "F146", "F147", "F148", "F149", "F150", |
| "F151", "F152", "F153", "F154", "F155", |
| "F156", "F157", "F158", "F159", "F160", |
| "F161", "F162", "F163", "F164", "F165", |
| "F166", "F167", "F168", "F169", "F170", |
| "F171", "F172", "F173", "F174", "F175", |
| "F176", "F177", "F178", "F179", "F180", |
| "F181", "F182", "F183", "F184", "F185", |
| "F186", "F187", "F188", "F189", "F190", |
| "F191", "F192", "F193", "F194", "F195", |
| "F196", "F197", "F198", "F199", "F200", |
| "F201", "F202", "F203", "F204", "F205", |
| "F206", "F207", "F208", "F209", "F210", |
| "F211", "F212", "F213", "F214", "F215", |
| "F216", "F217", "F218", "F219", "F220", |
| "F221", "F222", "F223", "F224", "F225", |
| "F226", "F227", "F228", "F229", "F230", |
| "F231", "F232", "F233", "F234", "F235", |
| "F236", "F237", "F238", "F239", "F240", |
| "F241", "F242", "F243", "F244", "F245", |
| "F246" /* there are 10 keys named Insert etc., total 256 */ |
| }; |
| |
| /* Keysyms whose KTYP is KT_SPEC. */ |
| |
| static const char *spec_syms[] = { |
| "VoidSymbol", |
| "Return", |
| "Show_Registers", |
| "Show_Memory", |
| "Show_State", |
| "Break", |
| "Last_Console", |
| "Caps_Lock", |
| "Num_Lock", |
| "Scroll_Lock", |
| "Scroll_Forward", |
| "Scroll_Backward", |
| "Boot", |
| "Caps_On", |
| "Compose", |
| "SAK", |
| "Decr_Console", |
| "Incr_Console", |
| "KeyboardSignal", |
| "Bare_Num_Lock" |
| }; |
| |
| /* Keysyms whose KTYP is KT_PAD. */ |
| |
| static const char *pad_syms[] = { |
| "KP_0", |
| "KP_1", |
| "KP_2", |
| "KP_3", |
| "KP_4", |
| "KP_5", |
| "KP_6", |
| "KP_7", |
| "KP_8", |
| "KP_9", |
| "KP_Add", |
| "KP_Subtract", |
| "KP_Multiply", |
| "KP_Divide", |
| "KP_Enter", |
| "KP_Comma", |
| "KP_Period", |
| "KP_MinPlus" |
| }; |
| |
| /* Keysyms whose KTYP is KT_DEAD. */ |
| |
| static const char *dead_syms[] = { |
| "dead_grave", |
| "dead_acute", |
| "dead_circumflex", |
| "dead_tilde", |
| "dead_diaeresis", |
| "dead_cedilla" |
| }; |
| |
| /* Keysyms whose KTYP is KT_CONS. */ |
| |
| static const char *cons_syms[] = { |
| "Console_1", |
| "Console_2", |
| "Console_3", |
| "Console_4", |
| "Console_5", |
| "Console_6", |
| "Console_7", |
| "Console_8", |
| "Console_9", |
| "Console_10", |
| "Console_11", |
| "Console_12", |
| "Console_13", |
| "Console_14", |
| "Console_15", |
| "Console_16", |
| "Console_17", |
| "Console_18", |
| "Console_19", |
| "Console_20", |
| "Console_21", |
| "Console_22", |
| "Console_23", |
| "Console_24", |
| "Console_25", |
| "Console_26", |
| "Console_27", |
| "Console_28", |
| "Console_29", |
| "Console_30", |
| "Console_31", |
| "Console_32", |
| "Console_33", |
| "Console_34", |
| "Console_35", |
| "Console_36", |
| "Console_37", |
| "Console_38", |
| "Console_39", |
| "Console_40", |
| "Console_41", |
| "Console_42", |
| "Console_43", |
| "Console_44", |
| "Console_45", |
| "Console_46", |
| "Console_47", |
| "Console_48", |
| "Console_49", |
| "Console_50", |
| "Console_51", |
| "Console_52", |
| "Console_53", |
| "Console_54", |
| "Console_55", |
| "Console_56", |
| "Console_57", |
| "Console_58", |
| "Console_59", |
| "Console_60", |
| "Console_61", |
| "Console_62", |
| "Console_63" |
| }; |
| |
| /* Keysyms whose KTYP is KT_CUR. */ |
| |
| static const char *cur_syms[] = { |
| "Down", |
| "Left", |
| "Right", |
| "Up" |
| }; |
| |
| /* Keysyms whose KTYP is KT_SHIFT. */ |
| |
| static const char *shift_syms[] = { |
| "Shift", |
| "AltGr", |
| "Control", |
| "Alt", |
| "ShiftL", |
| "ShiftR", |
| "CtrlL", |
| "CtrlR", |
| "CapsShift" |
| }; |
| |
| /* Keysyms whose KTYP is KT_ASCII. */ |
| |
| static const char *ascii_syms[] = { |
| "Ascii_0", |
| "Ascii_1", |
| "Ascii_2", |
| "Ascii_3", |
| "Ascii_4", |
| "Ascii_5", |
| "Ascii_6", |
| "Ascii_7", |
| "Ascii_8", |
| "Ascii_9", |
| "Hex_0", |
| "Hex_1", |
| "Hex_2", |
| "Hex_3", |
| "Hex_4", |
| "Hex_5", |
| "Hex_6", |
| "Hex_7", |
| "Hex_8", |
| "Hex_9", |
| "Hex_A", |
| "Hex_B", |
| "Hex_C", |
| "Hex_D", |
| "Hex_E", |
| "Hex_F" |
| }; |
| |
| /* Keysyms whose KTYP is KT_LOCK. */ |
| |
| static const char *lock_syms[] = { |
| "Shift_Lock", |
| "AltGr_Lock", |
| "Control_Lock", |
| "Alt_Lock", |
| "ShiftL_Lock", |
| "ShiftR_Lock", |
| "CtrlL_Lock", |
| "CtrlR_Lock" |
| }; |
| |
| /* Keysyms whose KTYP is KT_SLOCK. */ |
| |
| static const char *sticky_syms[] = { |
| "SShift", |
| "SAltGr", |
| "SControl", |
| "SAlt", |
| "SShiftL", |
| "SShiftR", |
| "SCtrlL", |
| "SCtrlR" |
| }; |
| |
| #define E(x) { x, sizeof(x) / sizeof(x[0]) } |
| |
| syms_entry syms[] = { |
| E(iso646_syms), /* KT_LATIN */ |
| E(fn_syms), /* KT_FN */ |
| E(spec_syms), /* KT_SPEC */ |
| E(pad_syms), /* KT_PAD */ |
| E(dead_syms), /* KT_DEAD */ |
| E(cons_syms), /* KT_CONS */ |
| E(cur_syms), /* KT_CUR */ |
| E(shift_syms), /* KT_SHIFT */ |
| { 0, 0 }, /* KT_META */ |
| E(ascii_syms), /* KT_ASCII */ |
| E(lock_syms), /* KT_LOCK */ |
| { 0, 0 }, /* KT_LETTER */ |
| E(sticky_syms) /* KT_SLOCK */ |
| }; |
| |
| #undef E |
| |
| struct syn |
| synonyms[] = { |
| { "Control_h", "BackSpace" }, |
| { "Control_i", "Tab" }, |
| { "Control_j", "Linefeed" }, |
| { "Home", "Find" }, |
| /* Unfortunately Delete already denotes ASCII 0177 */ |
| /* { "Delete", "Remove" }, */ |
| { "End", "Select" }, |
| { "PageUp", "Prior" }, |
| { "PageDown", "Next" }, |
| { "multiplication", "multiply" }, |
| { "pound", "sterling" }, |
| { "pilcrow", "paragraph" }, |
| { "Oslash", "Ooblique" }, |
| { "Shift_L", "ShiftL" }, |
| { "Shift_R", "ShiftR" }, |
| { "Control_L", "CtrlL" }, |
| { "Control_R", "CtrlR" }, |
| { "AltL", "Alt" }, |
| { "AltR", "AltGr" }, |
| { "Alt_L", "Alt" }, |
| { "Alt_R", "AltGr" }, |
| { "AltGr_L", "Alt" }, |
| { "AltGr_R", "AltGr" }, |
| { "AltLLock", "Alt_Lock" }, |
| { "AltRLock", "AltGr_Lock" }, |
| { "SCtrl", "SControl" }, |
| { "Spawn_Console", "KeyboardSignal" }, |
| { "Uncaps_Shift", "CapsShift" }, |
| /* the names of the Greek letters are spelled differently |
| in the iso-8859-7 and the Unicode standards */ |
| { "lambda", "lamda" }, |
| { "Lambda", "Lamda" }, |
| { "xi", "ksi" }, |
| { "Xi", "Ksi" }, |
| { "chi", "khi" }, |
| { "Chi", "Khi" }, |
| /* diacriticals */ |
| { "tilde", "asciitilde" }, |
| { "circumflex", "asciicircum" }, |
| /* as dead_ogonek, dead_caron, dead_breve and dead_doubleacute do not exist |
| * (yet), I put also compose lines for use with respectively dead_cedilla, |
| * dead_circumflex, dead_tilde and dead_tilde */ |
| { "dead_ogonek", "dead_cedilla" }, |
| { "dead_caron", "dead_circumflex" }, |
| { "dead_breve", "dead_tilde" }, |
| { "dead_doubleacute", "dead_tilde" }, |
| /* cyrillic */ |
| { "bielorussian_cyrillic_capital_letter_i", "ukrainian_cyrillic_capital_letter_i" }, |
| { "cyrillic_capital_letter_kha", "cyrillic_capital_letter_ha" }, |
| { "cyrillic_capital_letter_ge", "cyrillic_capital_letter_ghe" }, |
| { "cyrillic_capital_letter_ia", "cyrillic_capital_letter_ya" }, |
| { "cyrillic_capital_letter_iu", "cyrillic_capital_letter_yu" }, |
| { "cyrillic_capital_letter_yeri", "cyrillic_capital_letter_yeru" }, |
| { "cyrillic_capital_letter_reversed_e", "cyrillic_capital_letter_e" }, |
| { "cyrillic_capital_letter_ii", "cyrillic_capital_letter_i" }, |
| { "cyrillic_capital_letter_short_ii", "cyrillic_capital_letter_short_i" }, |
| { "bielorussian_cyrillic_small_letter_i", "ukrainian_cyrillic_small_letter_i" }, |
| { "cyrillic_small_letter_kha", "cyrillic_small_letter_ha" }, |
| { "cyrillic_small_letter_ge", "cyrillic_small_letter_ghe" }, |
| { "cyrillic_small_letter_ia", "cyrillic_small_letter_ya" }, |
| { "cyrillic_small_letter_iu", "cyrillic_small_letter_yu" }, |
| { "cyrillic_small_letter_yeri", "cyrillic_small_letter_yeru" }, |
| { "cyrillic_small_letter_reversed_e", "cyrillic_small_letter_e" }, |
| { "cyrillic_small_letter_ii", "cyrillic_small_letter_i" }, |
| { "cyrillic_small_letter_short_ii", "cyrillic_small_letter_short_i" } |
| }; |
| |
| const int syms_size = sizeof(syms) / sizeof(syms_entry); |
| const int syn_size = sizeof(synonyms) / sizeof(synonyms[0]); |
| |
| struct cs { |
| const char *charset; |
| sym *charnames; |
| int start; |
| } charsets[] = { |
| { "iso-8859-1", latin1_syms, 160 }, |
| { "iso-8859-2", latin2_syms, 160 }, |
| { "iso-8859-3", latin3_syms, 160 }, |
| { "iso-8859-4", latin4_syms, 160 }, |
| { "iso-8859-5", iso_8859_5_syms, 160 }, |
| { "iso-8859-7", iso_8859_7_syms, 160 }, |
| { "iso-8859-8", iso_8859_8_syms, 160 }, |
| { "iso-8859-9", iso_8859_9_syms, 208 }, |
| { "iso-8859-10", latin6_syms, 160 }, |
| { "iso-8859-15", iso_8859_15_syms, 160 }, |
| { "mazovia", mazovia_syms, 128 }, |
| { "cp-1250", cp1250_syms, 128 }, |
| { "koi8-r", koi8_syms, 128 }, |
| { "koi8-u", koi8_syms, 128 }, |
| { "iso-10646-18", iso_10646_18_syms, 159 }, /* ethiopic */ |
| { "iso-ir-197", iso_ir_197_syms, 160 }, /* sami */ |
| { "iso-ir-209", iso_ir_209_syms, 160 }, /* sami */ |
| }; |
| |
| /* Functions for both dumpkeys and loadkeys. */ |
| |
| static int prefer_unicode = 0; |
| static const char *chosen_charset = NULL; |
| |
| void |
| list_charsets(FILE *f) { |
| int i,j,lth,ct; |
| char *mm[] = { "iso-8859-", "koi8-" }; |
| |
| for (j=0; j<sizeof(mm)/sizeof(mm[0]); j++) { |
| if(j) |
| fprintf(f, ","); |
| fprintf(f, "%s{", mm[j]); |
| ct = 0; |
| lth = strlen(mm[j]); |
| for(i=0; i < sizeof(charsets)/sizeof(charsets[0]); i++) { |
| if(!strncmp(charsets[i].charset, mm[j], lth)) { |
| if(ct++) |
| fprintf(f, ","); |
| fprintf(f, charsets[i].charset+lth); |
| } |
| } |
| fprintf(f, "}"); |
| } |
| for(i=0; i < sizeof(charsets)/sizeof(charsets[0]); i++) { |
| for (j=0; j<sizeof(mm)/sizeof(mm[0]); j++) { |
| lth = strlen(mm[j]); |
| if(!strncmp(charsets[i].charset, mm[j], lth)) |
| goto nxti; |
| } |
| fprintf(f, ",%s", charsets[i].charset); |
| nxti:; |
| } |
| fprintf(f, "\n"); |
| } |
| |
| int |
| set_charset(const char *charset) { |
| sym *p; |
| int i; |
| |
| if (!strcasecmp(charset, "unicode")) { |
| prefer_unicode = 1; |
| return 0; |
| } |
| |
| for (i = 0; i < sizeof(charsets)/sizeof(charsets[0]); i++) { |
| if (!strcasecmp(charsets[i].charset, charset)) { |
| p = charsets[i].charnames; |
| for (i = charsets[i].start; i < 256; i++,p++) { |
| if(p->name[0]) |
| syms[0].table[i] = p->name; |
| } |
| chosen_charset = charset; |
| return 0; |
| } |
| } |
| fprintf (stderr, _("unknown charset %s - ignoring charset request\n"), |
| charset); |
| return 1; |
| } |
| |
| const char * |
| unicodetoksym(int code) { |
| int i, j; |
| sym *p; |
| |
| if (code < 0) |
| return NULL; |
| if (code < 0x80) |
| return iso646_syms[code]; |
| for (i = 0; i < sizeof(charsets)/sizeof(charsets[0]); i++) { |
| p = charsets[i].charnames; |
| for (j = charsets[i].start; j < 256; j++, p++) { |
| if (p->uni == code && p->name[0]) |
| return p->name; |
| } |
| } |
| return NULL; |
| } |
| |
| /* Functions for loadkeys. */ |
| |
| int unicode_used = 0; |
| |
| int |
| ksymtocode(const char *s) { |
| int i; |
| int j, jmax; |
| int keycode; |
| sym *p; |
| |
| if (!strncmp(s, "Meta_", 5)) { |
| keycode = ksymtocode(s+5); |
| if (KTYP(keycode) == KT_LATIN) |
| return K(KT_META, KVAL(keycode)); |
| /* fall through to error printf */ |
| } |
| |
| for (i = 0; i < syms_size; i++) { |
| jmax = ((i == 0 && prefer_unicode) ? 128 : syms[i].size); |
| for (j = 0; j < jmax; j++) |
| if (!strcmp(s,syms[i].table[j])) |
| return K(i, j); |
| } |
| |
| for (i = 0; i < syn_size; i++) |
| if (!strcmp(s, synonyms[i].synonym)) |
| return ksymtocode(synonyms[i].official_name); |
| |
| if (prefer_unicode) { |
| for (i = 0; i < sizeof(charsets)/sizeof(charsets[0]); i++) { |
| p = charsets[i].charnames; |
| for (j = charsets[i].start; j < 256; j++, p++) |
| if (!strcmp(s,p->name)) { |
| unicode_used = 1; |
| return (p->uni ^ 0xf000); /* %%% */ |
| } |
| } |
| } else /* if (!chosen_charset) */ { |
| /* note: some keymaps use latin1 but with euro, |
| so set_charset() would fail */ |
| /* note: some keymaps with charset line still use |
| symbols from more than one character set, |
| so we cannot have the `if (!chosen_charset)' here */ |
| |
| for (i = 0; i < 256 - 160; i++) |
| if (!strcmp(s, latin1_syms[i].name)) { |
| fprintf(stderr, |
| _("assuming iso-8859-1 %s\n"), s); |
| return K(KT_LATIN, 160 + i); |
| } |
| |
| for (i = 0; i < 256 - 160; i++) |
| if (!strcmp(s, iso_8859_15_syms[i].name)) { |
| fprintf(stderr, |
| _("assuming iso-8859-15 %s\n"), s); |
| return K(KT_LATIN, 160 + i); |
| } |
| |
| for (i = 0; i < 256 - 160; i++) |
| if (!strcmp(s, latin2_syms[i].name)) { |
| fprintf(stderr, |
| _("assuming iso-8859-2 %s\n"), s); |
| return K(KT_LATIN, 160 + i); |
| } |
| |
| for (i = 0; i < 256 - 160; i++) |
| if (!strcmp(s, latin3_syms[i].name)) { |
| fprintf(stderr, |
| _("assuming iso-8859-3 %s\n"), s); |
| return K(KT_LATIN, 160 + i); |
| } |
| |
| for (i = 0; i < 256 - 160; i++) |
| if (!strcmp(s, latin4_syms[i].name)) { |
| fprintf(stderr, |
| _("assuming iso-8859-4 %s\n"), s); |
| return K(KT_LATIN, 160 + i); |
| } |
| } |
| |
| fprintf(stderr, _("unknown keysym '%s'\n"), s); |
| |
| return -1; |
| } |
| |
| int |
| unicodetocode(int code) { |
| const char *s; |
| |
| s = unicodetoksym(code); |
| if (s) |
| return ksymtocode(s); |
| else { |
| unicode_used = 1; |
| return (code ^ 0xf000); /* %%% */ |
| } |
| } |
| |
| int |
| add_capslock(int code) |
| { |
| char buf[7]; |
| const char *p; |
| |
| if (KTYP(code) == KT_LATIN) |
| return K(KT_LETTER, KVAL(code)); |
| if (KTYP(code) >= syms_size) { |
| if ((p = unicodetoksym(code ^ 0xf000)) == NULL) { |
| sprintf(buf, "U+%04x", code ^ 0xf000); |
| p = buf; |
| } |
| } else { |
| sprintf(buf, "0x%04x", code); |
| p = buf; |
| } |
| #if 0 |
| /* silence the common usage dumpkeys | loadkeys -u */ |
| fprintf(stderr, _("plus before %s ignored\n"), p); |
| #endif |
| return code; |
| } |