windows-nt/Source/XPSP1/NT/windows/feime/ddk/jpn/toascii.c
2020-09-26 16:20:57 +08:00

100 lines
2.7 KiB
C

/*++
Copyright (c) 1990-1998 Microsoft Corporation, All Rights Reserved
Module Name:
TOASCII.C
++*/
/**********************************************************************/
#include "windows.h"
#include "immdev.h"
#include "fakeime.h"
/**********************************************************************/
/* ImeToAsciiEx */
/* */
/* HIBYTE of uVirtKey is char code now. */
/**********************************************************************/
UINT WINAPI ImeToAsciiEx (UINT uVKey,UINT uScanCode,CONST LPBYTE lpbKeyState,LPTRANSMSGLIST lpTransBuf,UINT fuState,HIMC hIMC)
{
LPARAM lParam;
LPINPUTCONTEXT lpIMC;
BOOL fOpen;
ImeLog(LOGF_KEY | LOGF_API, TEXT("ImeToAsciiEx"));
lpCurTransKey = lpTransBuf;
lParam = ((DWORD)uScanCode << 16) + 1L;
// Init uNumTransKey here.
uNumTransKey = 0;
// if hIMC is NULL, this means DISABLE IME.
if (!hIMC)
return 0;
if (!(lpIMC = ImmLockIMC(hIMC)))
return 0;
fOpen = lpIMC->fOpen;
ImmUnlockIMC(hIMC);
// The current status of IME is "closed".
if (!fOpen)
goto itae_exit;
if (uScanCode & 0x8000)
IMEKeyupHandler( hIMC, uVKey, lParam, lpbKeyState);
else
IMEKeydownHandler( hIMC, uVKey, lParam, lpbKeyState);
// Clear static value, no more generated message!
lpCurTransKey = NULL;
itae_exit:
// If trans key buffer that is allocated by USER.EXE full up,
// the return value is the negative number.
if (fOverTransKey)
{
#ifdef DEBUG
OutputDebugString((LPTSTR)TEXT("***************************************\r\n"));
OutputDebugString((LPTSTR)TEXT("* TransKey OVER FLOW Messages!!! *\r\n"));
OutputDebugString((LPTSTR)TEXT("* by FAKEIME.DLL *\r\n"));
OutputDebugString((LPTSTR)TEXT("***************************************\r\n"));
#endif
return (int)uNumTransKey;
}
return (int)uNumTransKey;
}
/**********************************************************************/
/* GenerateMessageToTransKey() */
/* */
/* Update the transrate key buffer. */
/**********************************************************************/
BOOL PASCAL GenerateMessageToTransKey(LPTRANSMSGLIST lpTransBuf,LPTRANSMSG lpGeneMsg)
{
LPTRANSMSG lpgmT0;
uNumTransKey++;
if (uNumTransKey >= lpTransBuf->uMsgCount)
{
fOverTransKey = TRUE;
return FALSE;
}
lpgmT0= lpTransBuf->TransMsg + (uNumTransKey - 1);
*lpgmT0= *lpGeneMsg;
return TRUE;
}