1
0
Files
irix-657m-src/stand/arcs/lib/libsk/io/pc_kbtable.c
2022-09-29 17:59:04 +03:00

538 lines
23 KiB
C

/* PC keyboard translation table.
*/
#ident "$Revision: 1.27 $"
#include <sys/types.h>
#include <sys/pckm.h>
/* scan code -> key type index */
short base_sc2kti[142] = {
0, 0, 0, 0, 0, 0, 0, 89, 88, 0, /* 0 */
0, 0, 0, 15, 1, 90, 0, 56, 43, 44, /* 10 */
29, 16, 2, 91, 0, 57, 45, 31, 30, 17, /* 20 */
3, 92, 0, 47, 46, 32, 18, 5, 4, 93, /* 30 */
0, 58, 48, 33, 20, 19, 6, 94, 0, 50, /* 40 */
49, 35, 34, 21, 7, 95, 0, 59, 51, 36, /* 50 */
22, 8, 9, 96, 0, 52, 37, 23, 24, 11, /* 60 */
10, 97, 0, 53, 54, 38, 39, 25, 12, 98, /* 70 */
0, 0, 40, 41, 26, 13, 99, 101, 60, 55, /* 80 */
42, 27, 28, 0, 100, 102, 67, 63, 103, 66, /* 90 */
62, 65, 14, 61, 0, 74, 70, 73, 72, 69, /* 100 */
64, 68, 79, 84, 78, 77, 82, 76, 71, 75, /* 110 */
0, 87, 83, 0, 86, 81, 80, 0, 0, 0, /* 120 */
0, 0, 85, 0, 0, 0, 0, 0, 0, 104, /* 130 */
105, 0 /* 140 */
};
#define NIL KBDMAPNIL
#ifdef FULLMAP
#define f(X,Y) X
#define n(X) X
#define s(X) X
#define c(X) X
#define a(X) X
#else
#define f(X,Y) { KBD_EXT_TABLE , Y }
#define n(X) NIL
#define s(X) NIL
#define c(X) NIL
#define a(X) NIL
#endif
/* Key types. -- these must remain ordered so sc2kti[] works! */
struct key_type keys[] = {
/*0*/{ 0, 0, NIL, NIL, NIL, NIL }, /* bad scan code */
/*1*/{ 0x0E, 0, "`", "~", c("\033[057q"), a("\033[115q") },
/*2*/{ 0x16, 0, "1", "!", c("\033[049q"), a("\033[058q") },
/*3*/{ 0x1E, 0, "2", "@", "\000", a("\033[059q") },
/*4*/{ 0x26, 0, "3", "#", c("\033[050q"), a("\033[060q") },
/*5*/{ 0x25, 0, "4", "$", c("\033[051q"), a("\033[061q") },
/*6*/{ 0x2E, 0, "5", "%", c("\033[052q"), a("\033[062q") },
/*7*/{ 0x36, 0, "6", "^", "\036", a("\033[063q") },
/*8*/{ 0x3D, 0, "7", "&", c("\033[053q"), a("\033[064q") },
/*9*/{ 0x3E, 0, "8", "*", c("\033[054q"), a("\033[065q") },
/*10*/{ 0x46, 0, "9", "(", c("\033[055q"), a("\033[066q") },
/*11*/{ 0x45, 0, "0", ")", c("\033[056q"), a("\033[067q") },
/*12*/{ 0x4E, 0,"-", "_", "\037", a("\033[068q") },
/*13*/{ 0x55, 0, "=", "+", c("\033[069q"), a("\033[070q") },
/*14*/{ 0x66, 0, "\010", "\010", "\177", a("\033[071q") }, /* Backspace */
/*15*/{ 0x0D, 0, "\011", s("\033[Z"), c("\033[072q"), a("\033[073q")},/* Tab */
/*16*/{ 0x15, KEY_CAPLOCK, "q", "Q", "\021", a("\033[074q") },
/*17*/{ 0x1D, KEY_CAPLOCK, "w", "W", "\027", a("\033[075q") },
/*18*/{ 0x24, KEY_CAPLOCK, "e", "E", "\005", a("\033[076q") },
/*19*/{ 0x2D, KEY_CAPLOCK, "r", "R", "\022", a("\033[077q") },
/*20*/{ 0x2C, KEY_CAPLOCK, "t", "T", "\024", a("\033[078q") },
/*21*/{ 0x35, KEY_CAPLOCK, "y", "Y", "\031", a("\033[079q") },
/*22*/{ 0x3C, KEY_CAPLOCK, "u", "U", "\025", a("\033[080q") },
/*23*/{ 0x43, KEY_CAPLOCK, "i", "I", "\011", a("\033[081q") },
/*24*/{ 0x44, KEY_CAPLOCK, "o", "O", "\017", a("\033[082q") },
/*25*/{ 0x4D, KEY_CAPLOCK, "p", "P", "\020", a("\033[083q") },
/*26*/{ 0x54, 0, "[", "{", "\033", a("\033[084q") },
/*27*/{ 0x5B, 0, "]", "}", "\035", a("\033[085q") },
/*28*/{ 0x5C, 0, "\\", "|", "\034", a("\033[086q") },
/*29*/{ 0x14, KEY_CHLED, I2CP(S_CAPSLOCK), I2CP(LED_CAPSLOCK), 0, 0 },
/*30*/{ 0x1C, KEY_CAPLOCK, "a", "A", "\001", a("\033[087q") },
/*31*/{ 0x1B, KEY_CAPLOCK, "s", "S", "\023", a("\033[088q") },
/*32*/{ 0x23, KEY_CAPLOCK, "d", "D", "\004", a("\033[089q") },
/*33*/{ 0x2B, KEY_CAPLOCK, "f", "F", "\006", a("\033[090q") },
/*34*/{ 0x34, KEY_CAPLOCK, "g", "G", "\007", a("\033[091q") },
/*35*/{ 0x33, KEY_CAPLOCK, "h", "H", "\010", a("\033[092q") },
/*36*/{ 0x3B, KEY_CAPLOCK, "j", "J", "\012", a("\033[093q") },
/*37*/{ 0x42, KEY_CAPLOCK, "k", "K", "\013", a("\033[094q") },
/*38*/{ 0x4B, KEY_CAPLOCK, "l", "L", "\014", a("\033[095q") },
/*39*/{ 0x4C, 0, ";", ":", c("\033[096q"), a("\033[097q") },
/*40*/{ 0x52, 0, "'", "\"", c("\033[098q"), a("\033[099q") },
/*41*/{ 0x53, 0, "\\", "|", NIL, NIL }, /* Intl--some US use for \ */
/*42*/{ 0x5A, 0, "\015", "\015", "\015", a("\033[100q") },/* Enter */
/*43*/{ 0x12, KEY_CHSTATE, I2CP(S_LEFTSHIFT), NIL, NIL, NIL },
/*44*/{ 0x13, 0, "<", ">", NIL, NIL }, /* International */
/*45*/{ 0x1A, KEY_CAPLOCK, "z", "Z", "\032", a("\033[101q") },
/*46*/{ 0x22, KEY_CAPLOCK, "x", "X", "\030", a("\033[102q") },
/*47*/{ 0x21, KEY_CAPLOCK, "c", "C", "\003", a("\033[103q") },
/*48*/{ 0x2A, KEY_CAPLOCK, "v", "V", "\026", a("\033[104q") },
/*49*/{ 0x32, KEY_CAPLOCK, "b", "B", "\002", a("\033[105q") },
/*50*/{ 0x31, KEY_CAPLOCK, "n", "N", "\016", a("\033[106q") },
/*51*/{ 0x3A, KEY_CAPLOCK, "m", "M", "\015", a("\033[107q") },
/*52*/{ 0x41, 0, ",", "<", c("\033[108q"), a("\033[109q") },
/*53*/{ 0x49, 0, ".", ">", c("\033[110q"), a("\033[111q") },
/*54*/{ 0x4A, 0, "/", "?", c("\033[112q"), a("\033[113q") },
/*55*/{ 0x59, KEY_CHSTATE, I2CP(S_RIGHTSHIFT), NIL, NIL, NIL },
/*56*/{ 0x11, KEY_CHSTATE, I2CP(S_LEFTCONTROL), NIL, NIL, NIL },
/*57*/{ 0x19, KEY_CHSTATE, I2CP(S_LEFTALT), NIL, NIL, NIL },
/*58*/{ 0x29, 0, " ", " ", " ", " " }, /* space bar */
/* Right alt and control are unused since they do not generate a break code */
/*59*/{ 0x39, KEY_CHSTATE, I2CP(S_RIGHTALT), NIL, NIL, NIL },
/* Really S_RIGHTCONTROL */
/*60*/{ 0x58, KEY_CHSTATE, I2CP(S_LEFTCONTROL), NIL, NIL, NIL },
/*61*/{ 0x67, 0, n("\033[@"), NIL, NIL, NIL }, /* Insert */
#ifdef _STANDALONE
/*62*/{ 0x64, 0, "\177", NIL, NIL, NIL }, /* Delete */
#else
/*62*/{ 0x64, 0, n("\033[P"), NIL, NIL, NIL }, /* Delete */
#endif
/*63*/{ 0x61, 0, f("\033[D",KBD_LEFT), NIL, NIL, NIL }, /* Left Arrow */
/*64*/{ 0x6E, 0, n("\033[H"), NIL, NIL, NIL }, /* Home */
/*65*/{ 0x65, 0, NIL, NIL, NIL, NIL }, /* End */
/*66*/{ 0x63, 0, f("\033[A",KBD_UP), NIL, NIL, NIL }, /* Up Arrow */
/*67*/{ 0x60, 0, f("\033[B",KBD_DOWN), NIL, NIL, NIL }, /* Down Arrow */
/*68*/{ 0x6F, 0, NIL, NIL, NIL, NIL }, /* Page Up */
/*69*/{ 0x6D, 0, NIL, NIL, NIL, NIL }, /* Page Down */
/*70*/{ 0x6A, 0, f("\033[C",KBD_RIGHT), NIL, NIL, NIL },/* Right Arrow */
/*.......... Pad keys ..........*/
/*71*/{ 0x76, KEY_CHLED, I2CP(S_NUMLOCK), I2CP(LED_NUMLOCK), NIL, NIL },
/*72*/{ 0x6C, KEY_NUMLOCK, n("\033[H"), "7", c("\033[172q"), a("\007") },
/*73*/{ 0x6B, KEY_NUMLOCK, n("\033[D"), "4", c("\033[174q"), a("\004") },
/*74*/{ 0x69, KEY_NUMLOCK, n("\033[146q"), "1", c("\033[176q"), a("\001")},
/*75*/{ 0x77, KEY_NUMLOCK, "/", "/", c("\033[179q"), a("\033[180q") },
/*76*/{ 0x75, KEY_NUMLOCK, n("\033[A"), "8", c("\033[182q"), a("\010") },
/*77*/{ 0x73, KEY_NUMLOCK, n("\033[000q"),"5", c("\033[184q"), a("\005")},
/*78*/{ 0x72, KEY_NUMLOCK, n("\033[B"), "2", c("\033[186q"), a("\002") },
/*79*/{ 0x70, KEY_NUMLOCK, n("\033[@"),"0", c("\033[178q"), a("\000") },
/*80*/{ 0x7E, KEY_NUMLOCK, "*", "*", c("\033[187q"), a("\033[188q") },
/*81*/{ 0x7D, KEY_NUMLOCK, n("\033[150q"), "9", c("\033[190q"), a("\011") },
/*82*/{ 0x74, KEY_NUMLOCK, n("\033[C"), "6", c("\033[192q"), a("\006") },
/*83*/{ 0x7A, KEY_NUMLOCK, n("\033[154q"), "3", c("\033[194q"), a("\003") },
/*84*/{ 0x71, KEY_NUMLOCK, n("\033[P"),".", c("\033[196q"), a("\033[197q")},
/*85*/{ 0x84, 0, "-", "-", c("\033[198q"), a("\033[199q") },
/*86*/{ 0x7C, 0, "+", "+", c("\033[200q"), a("\033[201q") },
/*87*/{ 0x79, 0, "\015", "\015", "\015", a("\033[100q") }, /* Enter */
/* Escape */
/*88*/{ 0x08, 0, "\033", s("\033[120q"), c("\033[121q"), a("\033[122q")},
/* All F-KEYS */
/*89*/{ 0x07, 0, f("\033[001q",KBD_F1), s("\033[013q"), c("\033[025q"),
a("\033[037q") },
/*90*/{ 0x0F, 0, f("\033[002q",KBD_F2), s("\033[014q"), c("\033[026q"),
a("\033[038q") },
/*91*/{ 0x17, 0, f("\033[003q",KBD_F3), s("\033[015q"), c("\033[027q"),
a("\033[039q") },
/*92*/{ 0x1F, 0, f("\033[004q",KBD_F4), s("\033[016q"), c("\033[028q"),
a("\033[040q") },
/*93*/{ 0x27, 0, f("\033[005q",KBD_F5), s("\033[017q"), c("\033[029q"),
a("\033[041q") },
/*94*/{ 0x2F, 0, f("\033[006q",KBD_F6), s("\033[018q"), c("\033[030q"),
a("\033[042q") },
/*95*/{ 0x37, 0, f("\033[007q",KBD_F7), s("\033[019q"), c("\033[031q"),
a("\033[043q") },
/*96*/{ 0x3F, 0, f("\033[008q",KBD_F8), s("\033[020q"), c("\033[032q"),
a("\033[044q") },
/*97*/{ 0x47, 0, f("\033[009q",KBD_F9), s("\033[021q"), c("\033[033q"),
a("\033[045q") },
/*98*/{ 0x4F, 0, f("\033[010q",KBD_F10), s("\033[022q"), c("\033[034q"),
a("\033[046q") },
/*99*/{ 0x56, 0, f("\033[011q",KBD_F11), s("\033[023q"), c("\033[035q"),
a("\033[047q") },
/*100*/{ 0x5E, 0, f("\033[012q",KBD_F12), s("\033[024q"), c("\033[036q"),
a("\033[048q")},
/*101*/{ 0x57, 0, n("\033[209q"),s("\033[210q"),c("\033[211q"),a("\033[212q") },
/*102*/{ 0x5F, 0, n("\033[213q"),s("\033[214q"),c("\033[215q"),a("\033[216q") },
/*103*/{ 0x62, 0, n("\033[217q"), s("\033[218q"), NIL, "\177" },
/* Microsoft keyboard */
/*104*/{ 0x93, 0, " ", NIL, NIL, NIL },
/*105*/{ 0x94, 0, " ", NIL, NIL, NIL },
/* CHE-F */
#define START_SWISS_FRENCH 104
#define END_SWISS_FRENCH (START_SWISS_FRENCH+22)
/*000*/{ 0x0E, 0, "\247", "\260", NIL, NIL },
/*001*/{ 0x13, 0, "<", ">", NIL, "\\" },
/*002*/{ 0x16, 0, "1", "+", NIL, "|" },
/*003*/{ 0x1E, 0, "2", "\"", "\000", "@" },
/*004*/{ 0x1A, KEY_CAPLOCK, "y", "Y", "\031", NIL },
/*005*/{ 0x25, KEY_CAPSHFT, "4", "\347", NIL, NIL },
/*006*/{ 0x26, 0, "3", "*", NIL, "#" },
/*007*/{ 0x35, KEY_CAPLOCK, "z", "Z", "\032", NIL },
/*008*/{ 0x36, 0, "6", "&", "\036", "\254" },
/*009*/{ 0x3D, 0, "7", "/", NIL, "\246" },
/*010*/{ 0x3E, 0, "8", "(", NIL, "\242" },
/*011*/{ 0x41, 0, ",", ";", NIL, NIL },
/*012*/{ 0x45, 0, "0", "=", NIL, NIL },
/*013*/{ 0x46, 0, "9", ")", NIL, NIL },
/*014*/{ 0x49, 0, ".", ":", NIL, NIL },
/*015*/{ 0x4A, 0, "-", "_", "\037", NIL },
/*016*/{ 0x4C, KEY_CAPNORM|KEY_CAPSHFT, "\351", "\366", NIL, NIL },
/*017*/{ 0x4E, 0, "'", "?", NIL, "\264" },
/*018*/{ 0x52, KEY_CAPNORM|KEY_CAPSHFT, "\340", "\344", NIL, "{" },
/*019*/{ 0x53, 0, "$", "\243", NIL, "}" },
/*020*/{ 0x54, KEY_CAPNORM|KEY_CAPSHFT, "\350", "\374", NIL, "[" },
/*021*/{ 0x55, 0, "^", "`", NIL, "~" },
/*022*/{ 0x5B, 0, "\250", "!", NIL, "]" },
/* CHE-D */
#define START_SWISS_GERMAN (END_SWISS_FRENCH+1)
#define END_SWISS_GERMAN (START_SWISS_GERMAN+22)
/*000*/{ 0x0E, 0, "\247", "\260", NIL, NIL },
/*001*/{ 0x13, 0, "<", ">", NIL, "\\" },
/*002*/{ 0x16, 0, "1", "+", NIL, "|" },
/*003*/{ 0x1A, KEY_CAPLOCK, "y", "Y", "\031", NIL },
/*004*/{ 0x1E, 0, "2", "\"", "\000", "@" },
/*005*/{ 0x25, KEY_CAPSHFT, "4", "\347", NIL, NIL },
/*006*/{ 0x26, 0, "3", "*", NIL, "#" },
/*007*/{ 0x35, KEY_CAPLOCK, "z", "Z", "\032", NIL },
/*008*/{ 0x36, 0, "6", "&", "\036", "\254" },
/*009*/{ 0x3D, 0, "7", "/", NIL, "\246" },
/*010*/{ 0x3E, 0, "8", "(", NIL, "\242" },
/*011*/{ 0x41, 0, ",", ";", NIL, NIL },
/*012*/{ 0x45, 0, "0", "=", NIL, NIL },
/*013*/{ 0x46, 0, "9", ")", NIL, NIL },
/*014*/{ 0x49, 0, ".", ":", NIL, NIL },
/*015*/{ 0x4A, 0, "-", "_", "\037", NIL },
/*016*/{ 0x4C, KEY_CAPNORM|KEY_CAPSHFT, "\366", "\351", NIL, NIL },
/*017*/{ 0x4E, 0, "'", "?", NIL, "\264" },
/*018*/{ 0x52, KEY_CAPNORM|KEY_CAPSHFT, "\344", "\340", NIL, "{" },
/*019*/{ 0x53, 0, "$", "\243", NIL, "}" },
/*020*/{ 0x54, KEY_CAPNORM|KEY_CAPSHFT, "\374", "\350", NIL, "[" },
/*021*/{ 0x55, 0, "^", "`", NIL, "~" },
/*022*/{ 0x5B, 0, "\250", "!", NIL, "]" },
/* PRT */
#define START_PORTUGUESE (END_SWISS_GERMAN+1)
#define END_PORTUGUESE (START_PORTUGUESE+18)
/*000*/{ 0x0E, 0, "\\", "|", NIL, NIL },
/*001*/{ 0x1E, 0, "2", "\"", "\000", "@" },
/*002*/{ 0x25, 0, "4", "$", NIL, "\247" },
/*003*/{ 0x26, 0, "3", "#", NIL, "\243" },
/*004*/{ 0x36, 0, "6", "&", "\036", NIL },
/*005*/{ 0x3D, 0, "7", "/", NIL, "{" },
/*006*/{ 0x3E, 0, "8", "(", NIL, "[" },
/*007*/{ 0x41, 0, ",", ";", NIL, NIL },
/*008*/{ 0x45, 0, "0", "=", NIL, "}" },
/*009*/{ 0x46, 0, "9", ")", NIL, "]" },
/*010*/{ 0x49, 0, ".", ":", NIL, NIL },
/*011*/{ 0x4A, 0, "-", "_", "\037", NIL },
/*012*/{ 0x4C, KEY_CAPLOCK, "\347", "\307", NIL, NIL },
/*013*/{ 0x4E, 0, "'", "?", NIL, NIL },
/*014*/{ 0x52, 0, "\272", "\252", 0, 0 },
/*015*/{ 0x53, 0, "~", "^", NIL, NIL },
/*016*/{ 0x54, 0, "+", "*", NIL, "\250" },
/*017*/{ 0x55, 0, "\253", "\273", NIL, NIL },
/*018*/{ 0x5B, 0, "\264", "`", NIL, NIL },
/* NOR */
#define START_NORWEGIAN (END_PORTUGUESE+1)
#define END_NORWEGIAN (START_NORWEGIAN+18)
/*000*/{ 0x0E, 0, "|", "\247", NIL, NIL },
/*001*/{ 0x1E, 0, "2", "\"", "\000", "@" },
/*002*/{ 0x25, 0, "4", "\244", NIL, "$" },
/*003*/{ 0x26, 0, "3", "#", NIL, "\243" },
/*004*/{ 0x36, 0, "6", "&", "\036", NIL },
/*005*/{ 0x3D, 0, "7", "/", NIL, "{" },
/*006*/{ 0x3E, 0, "8", "(", NIL, "[" },
/*007*/{ 0x41, 0, ",", ";", NIL, NIL },
/*008*/{ 0x45, 0, "0", "=", NIL, "}" },
/*009*/{ 0x46, 0, "9", ")", NIL, "]" },
/*010*/{ 0x49, 0, ".", ":", NIL, NIL },
/*011*/{ 0x4A, 0, "-", "_", "\037", NIL },
/*012*/{ 0x4C, KEY_CAPLOCK, "\370", "\330", NIL, NIL },
/*013*/{ 0x4E, 0, "+", "?", NIL, NIL },
/*014*/{ 0x52, KEY_CAPLOCK, "\346", "\306", NIL, NIL },
/*015*/{ 0x53, 0, "'", "*", NIL, NIL },
/*016*/{ 0x54, KEY_CAPLOCK, "\345", "\305", NIL, NIL },
/*017*/{ 0x55, 0, "\\", "`", NIL, "\264" },
/*018*/{ 0x5B, 0, "\250", "^", NIL, "~" },
/* GBR */
#define START_UNITED_KINGDOM (END_NORWEGIAN+1)
#define END_UNITED_KINGDOM (START_UNITED_KINGDOM+6)
/*000*/{ 0x0E, 0, "`", "\254", NIL, "|" },
/*001*/{ 0x13, 0, "\\", "\246", NIL, NIL },
/*002*/{ 0x1E, 0, "2", "\"", NIL, NIL },
/*003*/{ 0x26, 0, "3", "\243", NIL, NIL },
/*004*/{ 0x52, 0, "'", "@", "\000", NIL },
/*005*/{ 0x53, 0, "#", "~", NIL, NIL },
/*006*/{ 0x54, 0, "[", "{", NIL, NIL },
/* SWE */
#define START_SWEDISH (END_UNITED_KINGDOM+1)
#define END_SWEDISH (START_SWEDISH+21)
/*000*/{ 0x0E, 0, "\247", "\275", "\003", NIL },
/*001*/{ 0x13, 0, "<", ">", NIL, "|" },
/*002*/{ 0x1E, 0, "2", "\"", "\000", "@" },
/*003*/{ 0x25, 0, "4", "\244", NIL, "$" },
/*004*/{ 0x26, 0, "3", "#", NIL, "\243" },
/*005*/{ 0x36, 0, "6", "&", "\036", NIL },
/*006*/{ 0x3D, 0, "7", "/", NIL, "{" },
/*007*/{ 0x3E, 0, "8", "(", NIL, "[" },
/*008*/{ 0x41, 0, ",", ";", NIL, NIL },
/*009*/{ 0x45, 0, "0", "=", NIL, "}" },
/*010*/{ 0x46, 0, "9", ")", NIL, "]" },
/*011*/{ 0x49, 0, ".", ":", NIL, NIL },
/*012*/{ 0x4A, 0, "-", "_", "\037", NIL },
/*013*/{ 0x4C, KEY_CAPLOCK, "\366", "\326", NIL, NIL },
/*014*/{ 0x4E, 0, "+", "?", NIL, "\\" },
/*015*/{ 0x4D, KEY_CAPLOCK, "p", "P", "\020", NIL },
/*016*/{ 0x52, KEY_CAPLOCK, "\344", "\304", NIL, NIL },
/*017*/{ 0x53, 0, "'", "*", "\003", NIL },
/*018*/{ 0x54, KEY_CAPLOCK, "\345", "\305", NIL, NIL },
/*019*/{ 0x55, 0, "\264", "`", NIL, NIL },
/*020*/{ 0x5B, 0, "\250", "^", "\003", "~" },
/*021*/{ 0x71, KEY_NUMLOCK, NIL, ",", NIL, NIL },
/* DEU */
#define START_GERMAN (END_SWEDISH+1)
#define END_GERMAN (START_GERMAN+23)
/*000*/{ 0x0E, 0, "^", "\260", NIL, NIL },
/*001*/{ 0x13, 0, "<", ">", NIL, "|" },
/*002*/{ 0x15, KEY_CAPLOCK, "q", "Q", "\021", "@" },
/*003*/{ 0x1A, KEY_CAPLOCK, "y", "Y", "\031", NIL },
/*004*/{ 0x1E, 0, "2", "\"", "\000", "\262" },
/*005*/{ 0x26, 0, "3", "\247", NIL, "\263" },
/*006*/{ 0x35, KEY_CAPLOCK, "z", "Z", "\032", NIL },
/*007*/{ 0x36, 0, "6", "&", "\036", NIL },
/*008*/{ 0x3A, KEY_CAPLOCK, "m", "M", "\015", "\265" },
/*009*/{ 0x3D, 0, "7", "/", NIL, "{" },
/*010*/{ 0x3E, 0, "8", "(", NIL, "[" },
/*011*/{ 0x41, 0, ",", ";", NIL, NIL },
/*012*/{ 0x45, 0, "0", "=", NIL, "}" },
/*013*/{ 0x46, 0, "9", ")", NIL, "]" },
/*014*/{ 0x49, 0, ".", ":", NIL, NIL },
/*015*/{ 0x4A, 0, "-", "_", "\037", NIL },
/*016*/{ 0x4C, KEY_CAPLOCK, "\366", "\326", NIL, NIL },
/*017*/{ 0x4E, 0, "\337", "?", NIL, "\\" },
/*018*/{ 0x52, KEY_CAPLOCK, "\344", "\304", NIL, NIL },
/*019*/{ 0x53, 0, "#", "'", NIL, NIL },
/*020*/{ 0x54, KEY_CAPLOCK, "\374", "\334", "\033", NIL },
/*021*/{ 0x55, 0, "\264", "`", NIL, NIL },
/*022*/{ 0x5B, 0, "+", "*", NIL, "~" },
/*023*/{ 0x71, KEY_NUMLOCK, NIL, ",", NIL, NIL },
/* FRA */
#define START_FRENCH (END_GERMAN+1)
#define END_FRENCH (START_FRENCH+25)
/*000*/{ 0x0E, 0, "\262", NIL, NIL, NIL },
/*001*/{ 0x15, KEY_CAPLOCK, "a", "A", "\001", NIL },
/*002*/{ 0x16, 0, "&", "1", NIL, NIL},
/*003*/{ 0x1A, KEY_CAPLOCK, "w", "W", "\027", NIL },
/*004*/{ 0x1C, KEY_CAPLOCK, "q", "Q", "\021", NIL },
/*005*/{ 0x1D, KEY_CAPLOCK, "z", "Z", "\032", NIL },
/*006*/{ 0x1E, KEY_CAPNORM, "\351", "2", NIL, "~" },
/*007*/{ 0x25, 0, "'", "4", NIL, "{" },
/*008*/{ 0x26, 0, "\"", "3", NIL, "#" },
/*009*/{ 0x2E, 0, "(", "5", NIL, "[" },
/*010*/{ 0x36, 0, "-", "6", NIL, "|" },
/*011*/{ 0x3A, 0, ",", "?", NIL, NIL },
/*012*/{ 0x3D, KEY_CAPNORM, "\350", "7", NIL, "`" },
/*013*/{ 0x3E, 0, "_", "8", "\037", "\\" },
/*014*/{ 0x41, 0, ";", ".", NIL, NIL },
/*015*/{ 0x45, KEY_CAPNORM, "\340", "0", NIL, "@" },
/*016*/{ 0x46, KEY_CAPNORM, "\347", "9", NIL, "^" },
/*017*/{ 0x49, 0, ":", "/", NIL, NIL },
/*018*/{ 0x4A, 0, "!", "\247", NIL, NIL },
/*019*/{ 0x4C, KEY_CAPLOCK, "m", "M", "\015", NIL },
/*020*/{ 0x4E, 0, ")", "\260", NIL, "]" },
/*021*/{ 0x52, KEY_CAPNORM, "\371", "%", NIL, NIL },
/*022*/{ 0x53, 0, "*", "\265", NIL, NIL },
/*023*/{ 0x54, 0, "^", "\250", NIL, NIL },
/*024*/{ 0x55, 0, "=", "+", NIL, "}" },
/*025*/{ 0x5B, 0, "$", "\243", NIL, "\244" },
/* BEL */
#define START_BELGIAN (END_FRENCH+1)
#define END_BELGIAN (START_BELGIAN+26)
/*000*/{ 0x0E, 0, "\262", "\263", NIL, NIL },
/*001*/{ 0x13, 0, "<", ">", NIL, "\\" },
/*002*/{ 0x15, KEY_CAPLOCK, "a", "A", "\001", NIL },
/*003*/{ 0x16, 0, "&", "1", NIL, "|"},
/*004*/{ 0x1A, KEY_CAPLOCK, "w", "W", "\027", NIL },
/*005*/{ 0x1C, KEY_CAPLOCK, "q", "Q", "\021", NIL },
/*006*/{ 0x1D, KEY_CAPLOCK, "z", "Z", "\032", NIL },
/*007*/{ 0x1E, KEY_CAPNORM, "\351", "2", NIL, "@" },
/*008*/{ 0x25, 0, "'", "4", NIL, NIL },
/*009*/{ 0x26, 0, "\"", "3", NIL, "#" },
/*010*/{ 0x2E, 0, "(", "5", NIL, NIL },
/*011*/{ 0x36, 0, "\247", "6", NIL, "^" },
/*012*/{ 0x3A, 0, ",", "?", NIL, NIL },
/*013*/{ 0x3D, KEY_CAPNORM, "\350", "7", NIL, NIL },
/*014*/{ 0x3E, 0, "!", "8", "\037", NIL },
/*015*/{ 0x41, 0, ";", ".", NIL, NIL },
/*016*/{ 0x45, KEY_CAPNORM, "\340", "0", NIL, "}" },
/*017*/{ 0x46, KEY_CAPNORM, "\347", "9", NIL, "{" },
/*018*/{ 0x49, 0, ":", "/", NIL, NIL },
/*019*/{ 0x4A, 0, "=", "+", NIL, "~" },
/*020*/{ 0x4C, KEY_CAPLOCK, "m", "M", "\015", NIL },
/*021*/{ 0x4E, 0, ")", "\260", NIL, NIL },
/*022*/{ 0x52, KEY_CAPNORM, "\371", "%", NIL, "'" },
/*021*/{ 0x53, 0, "\265", "\243", NIL, "`" },
/*022*/{ 0x54, 0, "^", "\250", NIL, "[" },
/*023*/{ 0x55, 0, "-", "_", NIL, NIL},
/*024*/{ 0x5B, 0, "$", "*", NIL, "]" },
/* ITA */
#define START_ITALIAN (END_BELGIAN+1)
#define END_ITALIAN (START_ITALIAN+17)
/*000*/{ 0x0E, 0, "\\", "|", NIL, NIL },
/*001*/{ 0x1E, 0, "2", "\"", NIL, NIL },
/*002*/{ 0x26, 0, "3", "\243", NIL, NIL },
/*003*/{ 0x36, 0, "6", "&", "\036", NIL },
/*004*/{ 0x3D, 0, "7", "/", NIL, NIL },
/*005*/{ 0x3E, 0, "8", "(", NIL, NIL },
/*006*/{ 0x41, 0, ",", ";", NIL, NIL },
/*007*/{ 0x45, 0, "0", "=", NIL, NIL },
/*008*/{ 0x46, 0, "9", ")", NIL, NIL },
/*009*/{ 0x49, 0, ".", ":", NIL, NIL },
/*010*/{ 0x4A, 0, "-", "_", "\037", NIL },
/*011*/{ 0x4C, KEY_CAPNORM|KEY_CAPSHFT, "\362", "\347", NIL, "@" },
/*012*/{ 0x4E, 0, "'", "?", NIL, "`" },
/*013*/{ 0x52, KEY_CAPNORM, "\340", "\260", NIL, "#" },
/*014*/{ 0x53, KEY_CAPNORM, "\371", "\247", NIL, NIL },
/*015*/{ 0x54, KEY_CAPNORM|KEY_CAPSHFT, "\350", "\351", NIL, "[" },
/*016*/{ 0x55, KEY_CAPNORM, "\354", "^", NIL, "~" },
/*017*/{ 0x5B, 0, "+", "*", NIL, "]" },
/* DNK */
#define START_DANISH (END_ITALIAN+1)
#define END_DANISH (START_DANISH+19)
/*000*/{ 0x0E, 0, "\275", "\247", NIL, NIL },
/*001*/{ 0x13, 0, "<", ">", NIL, "\\" },
/*002*/{ 0x1E, 0, "2", "\"", "\000", "@" },
/*003*/{ 0x25, 0, "4", "\244", NIL, "$" },
/*004*/{ 0x26, 0, "3", "#", NIL, "\243" },
/*005*/{ 0x36, 0, "6", "&", "\036", 0 },
/*006*/{ 0x3D, 0, "7", "/", NIL, "{" },
/*007*/{ 0x3E, 0, "8", "(", NIL, "[" },
/*008*/{ 0x41, 0, ",", ";", NIL, NIL },
/*009*/{ 0x45, 0, "0", "=", NIL, "}" },
/*010*/{ 0x46, 0, "9", ")", NIL, "]" },
/*011*/{ 0x49, 0, ".", ":", NIL, NIL },
/*012*/{ 0x4A, 0, "-", "_", "\037", NIL },
/*013*/{ 0x4C, KEY_CAPLOCK, "\346", "\306", NIL, NIL },
/*014*/{ 0x4E, 0, "+", "?", NIL, NIL },
/*015*/{ 0x52, KEY_CAPLOCK, "\370", "\330", NIL, NIL },
/*016*/{ 0x53, 0, "'", "*", NIL, NIL },
/*017*/{ 0x54, KEY_CAPLOCK, "\345", "\305", NIL, NIL },
/*018*/{ 0x55, 0, "\264", "`", NIL, "|" },
/*019*/{ 0x5B, 0, "\250", "^", NIL, "~" },
/* ESP */
#define START_SPANISH (END_DANISH+1)
#define END_SPANISH (START_SPANISH+18)
/*000*/{ 0x0E, 0, "\272", "\252", NIL, "\\" },
/*001*/{ 0x16, 0, "1", "!", NIL, "|" },
/*002*/{ 0x1E, 0, "2", "\"", "\000", "@" },
/*003*/{ 0x26, 0, "3", "\260", NIL, "#" },
/*004*/{ 0x36, 0, "6", "&", "\036", "\254" },
/*005*/{ 0x3D, 0, "7", "/", NIL, NIL },
/*006*/{ 0x3E, 0, "8", "(", NIL, NIL },
/*007*/{ 0x41, 0, ",", ";", NIL, NIL },
/*008*/{ 0x45, 0, "0", "=", NIL, NIL },
/*009*/{ 0x46, 0, "9", ")", NIL, NIL },
/*010*/{ 0x49, 0, ".", ":", NIL, NIL },
/*011*/{ 0x4A, 0, "-", "_", "\037", NIL },
/*012*/{ 0x4C, KEY_CAPLOCK, "\361", "\321", NIL, "~" },
/*013*/{ 0x4E, 0, "\264", "?", NIL, NIL },
/*014*/{ 0x52, 0, "'", "\250", NIL, "{" },
/*015*/{ 0x53, KEY_CAPLOCK, "\347", "\307", NIL, "}" },
/*016*/{ 0x54, 0, "`", "^", NIL, "[" },
/*017*/{ 0x55, 0, "\241", "\277", NIL, NIL },
/*018*/{ 0x5B, 0, "+", "*", NIL, "]" },
/* JP */
#define START_JAPAN (END_SPANISH+1)
#define END_JAPAN (START_JAPAN+18)
/*000*/{ 0x0E, 0, NIL, NIL, NIL, NIL },
/*001*/{ 0x1E, 0, "2", "\"", NIL, NIL },
/*002*/{ 0x36, 0, "6", "&", NIL, NIL },
/*003*/{ 0x3D, 0, "7", "'", NIL, NIL },
/*004*/{ 0x3E, 0, "8", "(", NIL, NIL },
/*005*/{ 0x46, 0, "9", ")", NIL, NIL },
/*006*/{ 0x45, 0, "0", "~", NIL, NIL },
/*007*/{ 0x4E, 0, "-", "=", NIL, NIL },
/*008*/{ 0x55, 0, "^", "~", NIL, NIL },
/*009*/{ 0x5D, 0, "\\", "|", "\0254", "_" },
/*010*/{ 0x54, 0, "@", "`", NIL, "\242" },
/*011*/{ 0x5B, 0, "[", "{", NIL, "\260" },
/*012*/{ 0x4C, 0, ";", "+", NIL, NIL },
/*013*/{ 0x52, 0, ":", "*", NIL, NIL },
/*014*/{ 0x53, 0, "]", "}", NIL, NIL },
/*015*/{ 0x51, 0, "\\", "_", NIL, "\246" },
/*016*/{ 0x85, 0, " ", " ", " ", " " },
/*017*/{ 0x86, 0, " ", " ", " ", " " },
/*018*/{ 0x87, 0, " ", " ", " ", " " }
};
char *keys_ext[] = {
"\033[001q", /* f1 */
"\033[002q", /* f2 */
"\033[003q", /* f3 */
"\033[004q", /* f4 */
"\033[005q", /* f5 */
"\033[006q", /* f6 */
"\033[007q", /* f7 */
"\033[008q", /* f8 */
"\033[009q", /* f9 */
"\033[010q", /* f10 */
"\033[011q", /* f11 */
"\033[012q", /* f12 */
"\033[A", /* Up Arrow */
"\033[B", /* Down Arrow */
"\033[D", /* Left Arrow */
"\033[C" /* Right Arrow */
/* Windows keys */
};
short delta_swiss_french[2] = {START_SWISS_FRENCH, END_SWISS_FRENCH};
short delta_swiss_german[2] = { START_SWISS_GERMAN, END_SWISS_GERMAN };
short delta_portuguese[2] = { START_PORTUGUESE, END_PORTUGUESE };
short delta_norwegian[2] = { START_NORWEGIAN, END_NORWEGIAN };
short delta_united_kingdom[2] = { START_UNITED_KINGDOM, END_UNITED_KINGDOM };
short delta_swedish[2] = { START_SWEDISH, END_SWEDISH };
short delta_german[2] = { START_GERMAN, END_GERMAN };
short delta_french[2] = { START_FRENCH, END_FRENCH };
short delta_belgian[2] = { START_BELGIAN, END_BELGIAN };
short delta_itailian[2] = { START_ITALIAN, END_ITALIAN };
short delta_danish[2] = { START_DANISH, END_DANISH };
short delta_spanish[2] = { START_SPANISH, END_SPANISH };
short delta_japanese[2] = { START_JAPAN, END_JAPAN };