📄 toascii.c
字号:
/*++
Copyright (c) 1990-1999 Microsoft Corporation, All Rights Reserved
Module Name:
toascii.c
++*/
#include <windows.h>
#include <imm.h>
#include <imedefs.h>
/**********************************************************************/
/* IsUsedCode() */
/* Return Value: */
/* TURE: is UsedCode; FALSE: is'nt UsedCode; */
/**********************************************************************/
BOOL IsUsedCode(
WORD wCharCode)
{
WORD wFlg;
for(wFlg=0; wFlg<sImeG.wNumCodes; wFlg++)
if (wCharCode == sImeG.UsedCodes[wFlg])
break;
if(wFlg < sImeG.wNumCodes)
return (TRUE);
return (FALSE);
}
/**********************************************************************/
/* GBProcessKey() */
/* Return Value: */
/* different state which input key will change IME to (CST_ */
/**********************************************************************/
UINT PASCAL GBProcessKey( // this key will cause the IME go to what state
WORD wCharCode,
LPPRIVCONTEXT lpImcP)
{
if (!lpImcP) {
return (CST_INVALID);
}
// check space
if (wCharCode == TEXT(' ')) {
if (lpImcP->bSeq[0] && lpImcP->bSeq[1]) {
return (CST_INPUT);
} else if (!lpImcP->bSeq[0]) {
return (CST_ALPHANUMERIC);
} else {
return (CST_INVALID_INPUT);
}
}
// check finalize char
if ((wCharCode >= TEXT('0') && wCharCode <= TEXT('9'))
||(wCharCode >= TEXT('a') && wCharCode <= TEXT('f'))
||(wCharCode == TEXT('?'))) {
if (!lpImcP->bSeq[0]) {
if (wCharCode == TEXT('?')){
// 0x0??? - 0xF??? is OK
return (CST_ALPHANUMERIC);
} else {
// there is no 0x0??? - 0x7???
lpImcP->bSeq[1] = TEXT('\0');
return (CST_INPUT);
}
} else if (!lpImcP->bSeq[1]) {
if (lpImcP->bSeq[0] >=TEXT('0') && lpImcP->bSeq[0] <= TEXT('9')){ //Area
if ((lpImcP->bSeq[0] == TEXT('0') && wCharCode == TEXT('0'))
||(lpImcP->bSeq[0] == TEXT('9') && wCharCode >= TEXT('5'))
||(wCharCode >= TEXT('a') && wCharCode <= TEXT('f'))
||(wCharCode == TEXT('?'))) {
// there is less than 95 area and bigger than 0 area
return (CST_INVALID_INPUT);
}
else {
lpImcP->bSeq[2] = TEXT('\0');
return (CST_INPUT);
}
}
if (lpImcP->bSeq[0] >= TEXT('a') && lpImcP->bSeq[0] <= TEXT('f')) { //GB
if ((lpImcP->bSeq[0] == TEXT('a') && wCharCode == TEXT('0'))
||(lpImcP->bSeq[0] == TEXT('f') && wCharCode == TEXT('f'))
||(wCharCode == TEXT('?'))) {
// there is less than 95 area and bigger than 0 area
return (CST_INVALID_INPUT);
}
else {
lpImcP->bSeq[2] = TEXT('\0');
return (CST_INPUT);
}
}
} else if (!lpImcP->bSeq[2]) {
if (wCharCode == TEXT('?')){
return (CST_INPUT);
}
if (lpImcP->bSeq[0] >= TEXT('0') && lpImcP->bSeq[0] <= TEXT('9')){ //Area
if (wCharCode >= TEXT('0') && wCharCode <= TEXT('9')) {
lpImcP->bSeq[3] = TEXT('\0');
return (CST_INPUT);
} else {
return (CST_INVALID_INPUT);
}
}
if (lpImcP->bSeq[0] >= TEXT('a') && lpImcP->bSeq[0] <= TEXT('f')) { //GB
if (wCharCode >= TEXT('a') && wCharCode <= TEXT('f')) {
lpImcP->bSeq[3] = TEXT('\0');
return (CST_INPUT);
} else {
return (CST_INVALID_INPUT);
}
}
} else if (!lpImcP->bSeq[3]) {
if (lpImcP->bSeq[2] == TEXT('?')) {
if (wCharCode == TEXT('?')) {
return (CST_INPUT);
}else{
return (CST_INVALID_INPUT);
}
}
if (lpImcP->bSeq[0] >= TEXT('0') && lpImcP->bSeq[0] <= TEXT('9')) { //Area
if ((lpImcP->bSeq[2] == TEXT('0') && wCharCode == TEXT('0'))
||(lpImcP->bSeq[2] == TEXT('9') && wCharCode >= TEXT('5'))
||(wCharCode >= TEXT('a') && wCharCode <= TEXT('f'))
||(wCharCode == TEXT('?'))) {
// there is less than 95 area and bigger than 0 area
return (CST_INVALID_INPUT);
}
else {
return (CST_INPUT);
}
}
if (lpImcP->bSeq[0] >= TEXT('a') && lpImcP->bSeq[0] <= TEXT('f')) { //GB
if ((lpImcP->bSeq[2] == TEXT('a') && wCharCode == TEXT('0'))
||(lpImcP->bSeq[2] == TEXT('f') && wCharCode == TEXT('f'))
||(wCharCode == TEXT('?'))){
// there is less than 95 area and bigger than 0 area
return (CST_INVALID_INPUT);
}
else {
return (CST_INPUT);
}
}
} else {
return (CST_INVALID_INPUT);
}
} else if (wCharCode >= TEXT(' ') && wCharCode <= TEXT('~')) {
return (CST_ALPHANUMERIC);
} else {
return (CST_INVALID_INPUT);
}
return (CST_INVALID_INPUT);
}
#if defined(COMBO_IME)
/**********************************************************************/
/* UnicodeProcessKey() */
/* Return Value: */
/* different state which input key will change IME to (CST_ */
/**********************************************************************/
UINT PASCAL UnicodeProcessKey( // this key will cause the IME go to what state
WORD wCharCode,
LPPRIVCONTEXT lpImcP)
{
if (!lpImcP) {
return (CST_INVALID);
}
if (wCharCode == TEXT(' ')) {
if (lpImcP->bSeq[0] && lpImcP->bSeq[1]) {
return (CST_INPUT);
} else if (!lpImcP->bSeq[0]) {
return (CST_ALPHANUMERIC);
} else {
return (CST_INVALID_INPUT);
}
}
// check finalize char
// 0000 -- ffff
if ((wCharCode >= TEXT('0') && wCharCode <= TEXT('9'))
||(wCharCode >= TEXT('a') && wCharCode <= TEXT('f'))
||(wCharCode == TEXT('?'))) {
if (wCharCode == TEXT('?')){
if (!lpImcP->bSeq[2]) {
return (CST_INPUT);
}else
return(CST_INVALID_INPUT);
}else{
return (CST_INPUT);
}
} else if(lpImcP->bSeq[0]){
return (CST_INVALID_INPUT);
} else
return (CST_ALPHANUMERIC);
}
#endif //COMBO_IME
/**********************************************************************/
/* XGBProcessKey() */
/* Return Value: */
/* different state which input key will change IME to (CST_ */
/**********************************************************************/
UINT PASCAL XGBProcessKey( // this key will cause the IME go to what state
WORD wCharCode,
LPPRIVCONTEXT lpImcP)
{
if (!lpImcP) {
return (CST_INVALID);
}
if (wCharCode == TEXT(' ')) {
if (lpImcP->bSeq[0] && lpImcP->bSeq[1]) {
return (CST_INPUT);
} else if (!lpImcP->bSeq[0]) {
return (CST_ALPHANUMERIC);
} else {
return (CST_INVALID_INPUT);
}
}
// check finalize char
//lead byte 81 - fe
//trail byte 40 - 7e, 80 - fe
if ((wCharCode >= TEXT('0') && wCharCode <= TEXT('9'))
||(wCharCode >= TEXT('a') && wCharCode <= TEXT('f'))
||(wCharCode == TEXT('?'))) {
if (!lpImcP->bSeq[0]) {
if (wCharCode == TEXT('?')) {
// 0x0??? - 0xF??? is OK
// : - @ was filted
return (CST_ALPHANUMERIC);
}else if (wCharCode >=TEXT('8') && wCharCode <= TEXT('f')){
// 0x0??? - 0xF??? is OK
lpImcP->bSeq[1] = TEXT('\0');
return (CST_INPUT);
} else {
// there is no 0x0??? - 0x7???
return (CST_INVALID_INPUT);
}
} else if (!lpImcP->bSeq[1]) {
if ((lpImcP->bSeq[0] == TEXT('f') && wCharCode == TEXT('f'))
||(lpImcP->bSeq[0] == TEXT('8') && wCharCode == TEXT('0'))
||(wCharCode == TEXT('?'))) {
//XGB is 81 - fe
return (CST_INVALID_INPUT);
}
else {
lpImcP->bSeq[2] = TEXT('\0');
return (CST_INPUT);
}
} else if (!lpImcP->bSeq[2]) {
if (wCharCode == TEXT('?')){
lpImcP->bSeq[3] = TEXT('\0');
return (CST_INPUT);
}
if (wCharCode >= TEXT('4') && wCharCode <= TEXT('f')) {
lpImcP->bSeq[3] = TEXT('\0');
return (CST_INPUT);
} else {
return (CST_INVALID_INPUT);
}
} else if (!lpImcP->bSeq[3]) {
if (lpImcP->bSeq[2] == TEXT('?')) {
if (wCharCode == TEXT('?')) {
return (CST_INPUT);
}else{
return (CST_INVALID_INPUT);
}
}
if ((lpImcP->bSeq[2] == TEXT('7') && wCharCode == TEXT('f'))
||(lpImcP->bSeq[2] == TEXT('f') && wCharCode == TEXT('f'))
||(wCharCode == TEXT('?'))) {
//trail byte
//40 - 7e, 80 - fe
return (CST_INVALID_INPUT);
}
else {
return (CST_INPUT);
}
} else {
return (CST_INVALID_INPUT);
}
} else if (wCharCode >= TEXT(' ') && wCharCode <= TEXT('~')) {
return (CST_ALPHANUMERIC);
} else {
return (CST_INVALID_INPUT);
}
}
/**********************************************************************/
/* ProcessKey() */
/* Return Value: */
/* different state which input key will change IME to (CST_ */
/**********************************************************************/
UINT PASCAL ProcessKey( // this key will cause the IME go to what state
WORD wCharCode,
UINT uVirtKey,
UINT uScanCode,
LPBYTE lpbKeyState,
LPINPUTCONTEXT lpIMC,
LPPRIVCONTEXT lpImcP)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -