/*
* This module converts the corresponding ISO 10646 (UCS, Unicode) values
* into keysym values.
- *
+ *
* The array keysymtab[] contains pairs of Unicode value values for graphical
* characters and the corresponding X11 keysym. The function
* ucs2keysym() maps Unicode a onto a keysym value using a binary search,
* therefore keysymtab[] must remain SORTED by Unicode value.
*
* Author of keysymtab[]: Markus G. Kuhn <mkuhn@acm.org>, University of Cambridge, April 2001
- *
+ *
* Special thanks to Richard Verhoeven <river@win.tue.nl> for preparing
* an initial draft of the mapping table.
*
#include "wine/winuser16.h"
static const struct codepair {
-unsigned short keysym;
+ unsigned short keysym;
unsigned short ucs;
} keysymtab[] = {
{ 0x047e, 0x203e }, /* overline ? OVERLINE */
{ 0x0eff, 0x20a9 }, /* Korean_Won ? WON SIGN */
{ 0x13a4, 0x20ac }, /* Euro ? EURO SIGN */
- { 0x20ac, 0x20ac }, /* EuroSign ? EURO SIGN */
+ { 0x20ac, 0x20ac }, /* EuroSign ? EURO SIGN */
{ 0x0ab8, 0x2105 }, /* careof ? CARE OF */
{ 0x06b0, 0x2116 }, /* numerosign ? NUMERO SIGN */
{ 0x0afb, 0x2117 }, /* phonographcopyright ? SOUND RECORDING COPYRIGHT */
KeySym X11DRV_ucs2keysym(WCHAR wChar)
{
- int min = 0;
- int max = sizeof(keysymtab) / sizeof(struct codepair) - 1;
- int mid;
- char cChar[4];
+ int min = 0;
+ int max = sizeof(keysymtab) / sizeof(keysymtab[0]) - 1;
+ int mid;
+ char cChar[4];
- /* binary search in table */
- if(wChar <= 0x07f)
- {
+ if(wChar <= 0x07f)
+ {
WideCharToMultiByte(CP_ACP, 0, &wChar, 1, &cChar[0], 4, NULL, NULL);
- return (unsigned char)cChar[0];
- }
+ return (KeySym)cChar[0];
+ }
- while (max >= min)
- {
- mid = (min + max) / 2 ;
- if (keysymtab[mid].ucs < wChar)
- min = mid + 1;
- else if (keysymtab[mid].ucs > wChar)
- max = mid - 1;
- else /* found it */
- return keysymtab[mid].keysym;
- }
+ /* binary search in table */
+ while (max >= min)
+ {
+ mid = (min + max) / 2;
+ if (keysymtab[mid].ucs < wChar)
+ min = mid + 1;
+ else if (keysymtab[mid].ucs > wChar)
+ max = mid - 1;
+ else /* ==, found it */
+ return keysymtab[mid].keysym;
+ }
- /* no matching keysym value found */
- return -1;
+ /* no matching keysym value found */
+ return -1;
}