- r = ToAsciiEx(wParam, scan, keystate, keys, 0, kbd_layout);
+ /* XXX how do we know what the max size of the keys array should
+ * be is? There's indication on MS' website of an Inquire/InquireEx
+ * functioning returning a KBINFO structure which tells us. */
+ if (osVersion.dwPlatformId == VER_PLATFORM_WIN32_NT) {
+ /* XXX 'keys' parameter is declared in MSDN documentation as
+ * 'LPWORD lpChar'.
+ * The experience of a French user indicates that on
+ * Win98, WORD[] should be passed in, but on Win2K, it should
+ * be BYTE[]. German WinXP and my Win2K with "US International"
+ * driver corroborate this.
+ * Experimentally I've conditionalised the behaviour on the
+ * Win9x/NT split, but I suspect it's worse than that.
+ * See wishlist item `win-dead-keys' for more horrible detail
+ * and speculations. */
+ BYTE keybs[3];
+ int i;
+ r = ToAsciiEx(wParam, scan, keystate, (LPWORD)keybs, 0, kbd_layout);
+ for (i=0; i<3; i++) keys[i] = keybs[i];
+ } else {
+ r = ToAsciiEx(wParam, scan, keystate, keys, 0, kbd_layout);
+ }