#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <X11/Xmu/Lookup.h>
#define XK_LATIN1
#define XK_PUBLISHING
#include <X11/keysymdef.h>
static unsigned short _Xconst latin1[128] =
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x10ee, 0x0000, 0x1000, 0x1084, 0x102e, 0x1000, 0x1080, 0x108e,
0x108e, 0x1080, 0x0000, 0x1080, 0x1080, 0x10ee, 0x1000, 0x1008,
0x108e, 0x1080, 0x1084, 0x1084, 0x108e, 0x1004, 0x1000, 0x1084,
0x100e, 0x1000, 0x0000, 0x1080, 0x1000, 0x1084, 0x1000, 0x0000,
0x0004, 0x000e, 0x000e, 0x0008, 0x000e, 0x0008, 0x0008, 0x0006,
0x0004, 0x000e, 0x0004, 0x000e, 0x0004, 0x000e, 0x000e, 0x0004,
0x0000, 0x0004, 0x0004, 0x0006, 0x000e, 0x0008, 0x000e, 0x000e,
0x0008, 0x0004, 0x000e, 0x000c, 0x000e, 0x0002, 0x0000, 0x000e,
0x0004, 0x000e, 0x000e, 0x0008, 0x000e, 0x0008, 0x0008, 0x0006,
0x0004, 0x000e, 0x0004, 0x000e, 0x0004, 0x000e, 0x000e, 0x0004,
0x0000, 0x0004, 0x0004, 0x0006, 0x000e, 0x0008, 0x000e, 0x000e,
0x0008, 0x0004, 0x000e, 0x000c, 0x000e, 0x0002, 0x0000, 0x0000};
static unsigned short _Xconst latin2[128] =
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0008, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0008, 0x0004, 0x0000, 0x0000, 0x0000, 0x0008, 0x0004,
0x0000, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008,
0x0000, 0x0008, 0x0004, 0x0000, 0x0000, 0x0000, 0x0008, 0x0004,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0008, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0008, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c};
static unsigned char _Xconst cyrillic[128] =
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf2, 0xf3, 0xf1, 0xf4, 0xf5, 0xf6, 0xf7,
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0xfe, 0xff,
0xf0, 0xa2, 0xa3, 0xa1, 0xa4, 0xa5, 0xa6, 0xa7,
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf,
0xee, 0xd0, 0xd1, 0xe6, 0xd4, 0xd5, 0xe4, 0xd3,
0xe5, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde,
0xdf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xd6, 0xd2,
0xec, 0xeb, 0xd7, 0xe8, 0xed, 0xe9, 0xe7, 0xea,
0xce, 0xb0, 0xb1, 0xc6, 0xb4, 0xb5, 0xc4, 0xb3,
0xc5, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe,
0xbf, 0xcf, 0xc0, 0xc1, 0xc2, 0xc3, 0xb6, 0xb2,
0xcc, 0xcb, 0xb7, 0xc8, 0xcd, 0xc9, 0xc7, 0xca};
static unsigned char _Xconst greek[128] =
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xb6, 0xb8, 0xb9, 0xba, 0xda, 0x00, 0xbc,
0xbe, 0xdb, 0x00, 0xbf, 0x00, 0x00, 0xb5, 0xaf,
0x00, 0xdc, 0xdd, 0xde, 0xdf, 0xfa, 0xc0, 0xfc,
0xfd, 0xfb, 0xe0, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0, 0xd1, 0xd3, 0x00, 0xd4, 0xd5, 0xd6, 0xd7,
0xd8, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0, 0xf1, 0xf3, 0xf2, 0xf4, 0xf5, 0xf6, 0xf7,
0xf8, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
#define sLatin1 (unsigned long)0
#define sLatin2 (unsigned long)1
#define sLatin3 (unsigned long)2
#define sLatin4 (unsigned long)3
#define sKana (unsigned long)4
#define sX0201 (unsigned long)0x01000004
#define sArabic (unsigned long)5
#define sCyrillic (unsigned long)6
#define sGreek (unsigned long)7
#define sAPL (unsigned long)11
#define sHebrew (unsigned long)12
int
XmuLookupString(register XKeyEvent *event, unsigned char *buffer, int nbytes,
KeySym *keysym, XComposeStatus *status,
unsigned long keysymSet)
{
int count;
KeySym symbol;
unsigned long kset;
kset = keysymSet & 0xffffff;
count = XLookupString(event, (char *)buffer, nbytes, &symbol, status);
if (keysym) *keysym = symbol;
if ((nbytes == 0) || (symbol == NoSymbol)) {
} else if ((count == 0) && ((symbol >> 8) == kset)) {
count = 1;
switch (keysymSet) {
case sKana:
buffer[0] = (symbol & 0xff);
if (buffer[0] == 0x7e)
count = 0;
break;
case sCyrillic:
buffer[0] = cyrillic[symbol & 0x7f];
break;
case sGreek:
buffer[0] = greek[symbol & 0x7f];
if (!buffer[0])
count = 0;
break;
default:
buffer[0] = (symbol & 0xff);
break;
}
} else if ((keysymSet != 0) && (count == 1) &&
(((unsigned char *)buffer)[0] == symbol) &&
(symbol & 0x80) &&
!(latin1[symbol & 0x7f] & (1 << kset))) {
if ((keysymSet == sHebrew) && (symbol == XK_multiply))
buffer[0] = 0xaa;
else if ((keysymSet == sHebrew) && (symbol == XK_division))
buffer[0] = 0xba;
else if ((keysymSet == sCyrillic) && (symbol == XK_section))
buffer[0] = 0xfd;
else if ((keysymSet == sX0201) && (symbol == XK_yen))
buffer[0] = 0x5c;
else
count = 0;
} else if (count != 0) {
if ((keysymSet == sX0201) &&
((symbol == XK_backslash) || (symbol == XK_asciitilde)))
count = 0;
} else if (((symbol >> 8) == sLatin2) &&
(symbol & 0x80) && (latin2[symbol & 0x7f] & (1 << kset))) {
buffer[0] = (symbol & 0xff);
count = 1;
} else if ((keysymSet == sGreek) &&
((symbol == XK_leftsinglequotemark) ||
(symbol == XK_rightsinglequotemark))) {
buffer[0] = symbol - (XK_leftsinglequotemark - 0xa1);
count = 1;
}
return count;
}
int
XmuLookupLatin1(register XKeyEvent *event, unsigned char *buffer, int nbytes,
KeySym *keysym, XComposeStatus *status)
{
return XLookupString(event, (char *)buffer, nbytes, keysym, status);
}
int
XmuLookupLatin2(register XKeyEvent *event, unsigned char *buffer, int nbytes,
KeySym *keysym, XComposeStatus *status)
{
return XmuLookupString(event, buffer, nbytes, keysym, status, sLatin2);
}
int
XmuLookupLatin3(register XKeyEvent *event, unsigned char *buffer, int nbytes,
KeySym *keysym, XComposeStatus *status)
{
return XmuLookupString(event, buffer, nbytes, keysym, status, sLatin3);
}
int
XmuLookupLatin4(register XKeyEvent *event, unsigned char *buffer, int nbytes,
KeySym *keysym, XComposeStatus *status)
{
return XmuLookupString(event, buffer, nbytes, keysym, status, sLatin4);
}
int
XmuLookupKana(register XKeyEvent *event, unsigned char *buffer, int nbytes,
KeySym *keysym, XComposeStatus *status)
{
return XmuLookupString(event, buffer, nbytes, keysym, status, sKana);
}
int
XmuLookupJISX0201(register XKeyEvent *event, unsigned char *buffer, int nbytes,
KeySym *keysym, XComposeStatus *status)
{
return XmuLookupString(event, buffer, nbytes, keysym, status, sX0201);
}
int
XmuLookupArabic(register XKeyEvent *event, unsigned char *buffer, int nbytes,
KeySym *keysym, XComposeStatus *status)
{
return XmuLookupString(event, buffer, nbytes, keysym, status, sArabic);
}
int
XmuLookupCyrillic(register XKeyEvent *event, unsigned char *buffer, int nbytes,
KeySym *keysym, XComposeStatus *status)
{
return XmuLookupString(event, buffer, nbytes, keysym, status, sCyrillic);
}
int
XmuLookupGreek(register XKeyEvent *event, unsigned char *buffer, int nbytes,
KeySym *keysym, XComposeStatus *status)
{
return XmuLookupString(event, buffer, nbytes, keysym, status, sGreek);
}
int
XmuLookupAPL(register XKeyEvent *event, unsigned char *buffer, int nbytes,
KeySym *keysym, XComposeStatus *status)
{
return XmuLookupString(event, buffer, nbytes, keysym, status, sAPL);
}
int
XmuLookupHebrew(register XKeyEvent *event, unsigned char *buffer, int nbytes,
KeySym *keysym, XComposeStatus *status)
{
return XmuLookupString(event, buffer, nbytes, keysym, status, sHebrew);
}