mmihz.c
来自「是一个手机功能的模拟程序」· C语言 代码 · 共 1,669 行 · 第 1/5 页
C
1,669 行
{ if(PinYinCode(pchinese_Data->ConditionStr,InputMethodOtherChar[KeyCode-2][Position]))
pchinese_Data->OtherMightChar[strlen(pchinese_Data->OtherMightChar)]=InputMethodOtherChar[KeyCode-2][Position];
Position++;
}
}
static int FindBiShun(char *ConditionStr)
{ unsigned int Num;
char c;
for(Num=1; Num<strlen(ConditionStr); Num++)
{ c = ConditionStr[Num];
if ( c!='5' && c!='8' && c!='9' && c!='7' && c!='0'
&& c!='-' && c!='|' && c!='/' && c!='\\' && c!='>'
&& c!='r' && c!='u' && c!='v')
return 0;
}
return 1;
}
static void ChangCharToBs(char * ConditionStr)
{ unsigned int Num;
char msg[100];
TRACE_EVENT("change to bishun");
for(Num=1; Num<strlen(ConditionStr); Num++)
switch(ConditionStr[Num])
{ case '5': ConditionStr[Num]='-';
break;
case 'u':
case 'v':
case '8': ConditionStr[Num]='|';
break;
case 'r':
case '7': ConditionStr[Num]='/';
break;
case '9': ConditionStr[Num]='\\';
break;
case '0': ConditionStr[Num]='>';
break;
case '-':
case '|':
case '/':
case '\\':
case '>': break;
default : ConditionStr[Num]='?';
break;
}
sprintf(msg,"zxp bishun:%s",ConditionStr);
TRACE_EVENT(msg);
}
static void PinYinProgramCode(chinese_Data* pchinese_Data)
{ unsigned int Num;
char* ConditionStr =(char*)pchinese_Data->ConditionStr;
char* ProgramCode=(char*)pchinese_Data->ProgramCode;
ProgramCode[0] = ConditionStr[0];
for(Num=1; Num<strlen(ConditionStr); Num++)
switch(ConditionStr[Num])
{ case 'a': ProgramCode[Num]=2; break;
case 'e': ProgramCode[Num]=3; break;
case 'i': ProgramCode[Num]=4; break;
case 'n': ProgramCode[Num]=5; break;
case 'o': ProgramCode[Num]=6; break;
case 'r': ProgramCode[Num]=7; break;
case 'u': ProgramCode[Num]=8; break;
case 'g': ProgramCode[Num]=9; break;
case 'h': ProgramCode[Num]=12; break;
case 'v': ProgramCode[Num]=11; break;
default : ProgramCode[Num]=0; break;
}
for(;Num<8;Num++) ProgramCode[Num]=0;
}
static void SearchSomeHanZi_ByPinYin(chinese_Data* pchinese_Data)
{ unsigned int Smart, OffSetPositoin,OffSetEnd,IsNotPinyinCode;
unsigned int PCode;
unsigned short TempString[10],ch1[3];
char msg[100];
char* ProgramCode=(char*)pchinese_Data->ProgramCode;
OffSetPositoin = 0;
OffSetEnd = MaxHanZi;
if(ProgramCode[4]) Smart=0xffff;
else if(ProgramCode[3]) Smart=0xfff0;
else if(ProgramCode[2]) Smart=0xff00;
else if(ProgramCode[1]) Smart=0xf000;
else Smart=0x0000;
PCode= ((int)ProgramCode[1]<<12)+((int)ProgramCode[2]<<8)+
((int)ProgramCode[3]<<4 )+(int)ProgramCode[4];
IsNotPinyinCode = 1 - PinYinCode(pchinese_Data->ConditionStr,0);
if(ProgramCode[5]) IsNotPinyinCode =1;
if(pchinese_Data->PageNum)
//if(LineNum>1)
{ memset(TempString,0,sizeof(TempString));
while( OffSetPositoin<OffSetEnd && pchinese_Data->SatisfyNum<pchinese_Data->MAX_Satisfy) // page 0
{ if( (( *(HLCode+OffSetPositoin+1))& Smart) == PCode && ((*(HLCode+OffSetPositoin))>>8) ==ProgramCode[0] &&
((*(HLCode+OffSetPositoin)&0x000f)==(int)ProgramCode[5] || ProgramCode[5]==0) )
pchinese_Data->SatisfyNum++;
OffSetPositoin += 4;
}
while( OffSetPositoin<OffSetEnd && pchinese_Data->SatisfyNum<pchinese_Data->MAX_Satisfy*pchinese_Data->PageNum )// page 1 to n-1 (n=1....Max)
{ if( (( *(HLCode+OffSetPositoin+1))& Smart) == PCode && ((*(HLCode+OffSetPositoin))>>8) ==ProgramCode[0] &&
((*(HLCode+OffSetPositoin)&0x000f)==(int)ProgramCode[5] || ProgramCode[5]==0) &&
(IsNotPinyinCode || ((*(HLCode+OffSetPositoin)&0x000f)==0 && *(HLCode+OffSetPositoin+1) == PCode)) )
pchinese_Data->SatisfyNum++;
OffSetPositoin += 4;
}
pchinese_Data->SatisfyNum = 0;
/*
if(LineNum==2){
while( OffSetPositoin<OffSetEnd && SatisfyNum<MAX_Satisfy/2) // page 0
{ if( (( *(HLCode+OffSetPositoin+1))& Smart) == PCode && ((*(HLCode+OffSetPositoin))>>8) ==ProgramCode[0] &&
((*(HLCode+OffSetPositoin)&0x000f)==(int)ProgramCode[5] || ProgramCode[5]==0) )
{// ch1[0] = (*(HLCode+OffSetPositoin+3));
//ch1[1] = ' ';
//ch1[2] = 0;
SatisfyNum++;
ch1[0]=SatisfyNum+0x30;
ch1[1]=(*(HLCode+OffSetPositoin+3));
ch1[2]=0;
// wsprintf(TempString,"%s",ch1);
// wordstrcat(PromptBuf,TempString);
wordstrcat(PromptBuf,ch1);
}
OffSetPositoin += 4;
}
}
*/
while( OffSetPositoin<OffSetEnd && pchinese_Data->SatisfyNum<=pchinese_Data->MAX_Satisfy )
{ if( (( *(HLCode+OffSetPositoin+1))& Smart) == PCode && ((*(HLCode+OffSetPositoin))>>8) ==ProgramCode[0] &&
((*(HLCode+OffSetPositoin)&0x000f)==(int)ProgramCode[5] || ProgramCode[5]==0) &&
(IsNotPinyinCode || ((*(HLCode+OffSetPositoin)&0x000f)==0 && *(HLCode+OffSetPositoin+1) == PCode)) )
{ // ch1[0] = (char)(*(HLCode+OffSetPositoin+3)>>8);
// ch1[0] = (*(HLCode+OffSetPositoin+3));
// ch1[1] = ' ';
// ch1[2] = 0;
pchinese_Data->SatisfyNum++;
if(pchinese_Data->SatisfyNum%10==0)
ch1[0]=0x30;
else ch1[0]=pchinese_Data->SatisfyNum+0x30;
ch1[1]=(*(HLCode+OffSetPositoin+3));
ch1[2]=0;
//wsprintf(TempString,"%d%c%c ",SatisfyNum,ch1,ch2);
// wsprintf(TempString,"%s",ch1);
// wordstrcat(PromptBuf,TempString);
wordstrcat(pchinese_Data->PromptBuf,ch1);
}
OffSetPositoin += 4;
}
}
else
{ memset(TempString,0,sizeof(TempString));
while( OffSetPositoin<OffSetEnd && pchinese_Data->SatisfyNum<pchinese_Data->MAX_Satisfy ) // 0 to Max_Satisfy-1 HanZi
{ if( (( *(HLCode+OffSetPositoin+1))& Smart) == PCode && ((*(HLCode+OffSetPositoin))>>8) ==ProgramCode[0] &&
((*(HLCode+OffSetPositoin)&0x000f)==(int)ProgramCode[5] || ProgramCode[5]==0) )
{ /* ch1[0] = (*(HLCode+OffSetPositoin+3));
ch1[1] = ' ';
ch1[2] = 0;
*/
//ch1 = (char)(*(HLCode+OffSetPositoin+3)>>8);
pchinese_Data->SatisfyNum++;
if(pchinese_Data->SatisfyNum%10==0)
ch1[0]=0x30;
else ch1[0]=pchinese_Data->SatisfyNum+0x30;
ch1[1]=(*(HLCode+OffSetPositoin+3));
ch1[2]=0;
// wsprintf(TempString,"%d%c%c ",SatisfyNum,ch1,ch2);
// wsprintf(TempString,"%s",ch1);
// wordstrcat(PromptBuf,TempString);
wordstrcat(pchinese_Data->PromptBuf,ch1);
}
OffSetPositoin += 4;
}
while( OffSetPositoin<OffSetEnd && pchinese_Data->SatisfyNum==pchinese_Data->MAX_Satisfy) // Is (MAX_Satisfy HanZi) Exist?
{ if( (( *(HLCode+OffSetPositoin+1))& Smart) == PCode && ((*(HLCode+OffSetPositoin))>>8) ==ProgramCode[0] &&
((*(HLCode+OffSetPositoin)&0x000f)==(int)ProgramCode[5] || ProgramCode[5]==0) &&
(IsNotPinyinCode || ((*(HLCode+OffSetPositoin)&0x000f)==0 && *(HLCode+OffSetPositoin+1) == PCode)) )
{ /* ch1[0] = (*(HLCode+OffSetPositoin+3));
ch1[1] = ' ';
ch1[2] = 0;
*/
//ch1 = (char)(*(HLCode+OffSetPositoin+3)>>8);
pchinese_Data->SatisfyNum++;
if(pchinese_Data->SatisfyNum%10==0)
ch1[0]=0x30;
else ch1[0]=pchinese_Data->SatisfyNum+0x30;
ch1[1]=(*(HLCode+OffSetPositoin+3));
ch1[2]=0;
//wsprintf(TempString,"%d%c%c ",SatisfyNum,ch1,ch2);
// wsprintf(TempString,"%s",ch1);
// wordstrcat(PromptBuf,TempString);
wordstrcat(pchinese_Data->PromptBuf,ch1);
}
OffSetPositoin += 4;
}
}
}
static void SearchSomeHanZi_ByBiShun(chinese_Data* pchinese_Data)
{ unsigned int Smart, OffSetPositoin,OffSetEnd,PCode;
unsigned short TempString[10],ch1[3];
char* ProgramCode=(char*)pchinese_Data->ProgramCode;
OffSetPositoin = 0;
OffSetEnd = MaxHanZi;
if(ProgramCode[4]) Smart=0xffff;
else if(ProgramCode[3]) Smart=0xfff0;
else if(ProgramCode[2]) Smart=0xff00;
else if(ProgramCode[1]) Smart=0xf000;
else Smart=0x0000;
PCode= ((int)ProgramCode[1]<<12)+((int)ProgramCode[2]<<8)+
((int)ProgramCode[3]<<4 )+(int)ProgramCode[4];
while( OffSetPositoin<OffSetEnd && pchinese_Data->SatisfyNum<pchinese_Data->MAX_Satisfy*pchinese_Data->PageNum )
{ if( (( *(HLCode+OffSetPositoin+2))& Smart) == PCode && ((ProgramCode[0]=='*') || ((*(HLCode+OffSetPositoin)))>>8 ==ProgramCode[0])
&& (((*(HLCode+OffSetPositoin)>>4)&0x000f)==(int)ProgramCode[5] || ProgramCode[5]==0) )
pchinese_Data->SatisfyNum++;
OffSetPositoin += 4;
}
pchinese_Data->SatisfyNum = 0;
memset(TempString,0,sizeof(TempString));
while( OffSetPositoin<OffSetEnd && pchinese_Data->SatisfyNum<=pchinese_Data->MAX_Satisfy )
{ if( (( *(HLCode+OffSetPositoin+2))& Smart) == PCode && ((ProgramCode[0]=='*') || ((*(HLCode+OffSetPositoin))>>8) ==ProgramCode[0])
&& (((*(HLCode+OffSetPositoin)>>4)& 0x000f)==(int)ProgramCode[5] || ProgramCode[5]==0) )
{ /* ch1[0] = (*(HLCode+OffSetPositoin+3));
ch1[1] = ' '; //(char)(*(HLCode+OffSetPositoin+3)>>8);
ch1[2] = 0;
*/
ch1[0]=0;
ch1[1]=(*(HLCode+OffSetPositoin+3));
ch1[2]=0;
if( (ch1[1]!=pchinese_Data->PromptBuf[0]) && (ch1[1]!=pchinese_Data->PromptBuf[2]) &&
(ch1[1]!=pchinese_Data->PromptBuf[4]) && (ch1[1]!=pchinese_Data->PromptBuf[6]) &&
(ch1[1]!=pchinese_Data->PromptBuf[8]) && (ch1[1]!=pchinese_Data->PromptBuf[10]) &&
(ch1[1]!=pchinese_Data->PromptBuf[12]) && (ch1[1]!=pchinese_Data->PromptBuf[14])&&
(ch1[1]!=pchinese_Data->PromptBuf[16]) && (ch1[1]!=pchinese_Data->PromptBuf[18]))
{ pchinese_Data->SatisfyNum++;
if(pchinese_Data->SatisfyNum%10==0)
ch1[0]=0x30;
else ch1[0]=pchinese_Data->SatisfyNum+0x30;
// wsprintf(TempString,"%s",ch1);
// wordstrcat(PromptBuf,TempString);
wordstrcat(pchinese_Data->PromptBuf,ch1);
}
}
OffSetPositoin += 4;
}
}
static void SearchSomeHanZi_ByBiaoDian(chinese_Data* pchinese_Data)
{ unsigned int OffSetPositoin,OffSetEnd;
unsigned short TempString[10],ch1[6];
char msg[100];
OffSetPositoin =MaxHanZi-41*4;
OffSetEnd = MaxHanZi;
while( OffSetPositoin<OffSetEnd && pchinese_Data->SatisfyNum<pchinese_Data->MAX_Satisfy*pchinese_Data->PageNum )
{ if( (*(HLCode+OffSetPositoin+2)& 0xf000) == 0xe000 )
pchinese_Data->SatisfyNum++;
OffSetPositoin += 4;
}
pchinese_Data->SatisfyNum = 0;
memset(TempString,0,sizeof(TempString));
while( OffSetPositoin<OffSetEnd && pchinese_Data->SatisfyNum<=pchinese_Data->MAX_Satisfy )
{ if( (*(HLCode+OffSetPositoin+2)& 0xf000) == 0xe000 )
{ pchinese_Data->SatisfyNum++;
if(pchinese_Data->SatisfyNum%10==0)
ch1[0]=0x30;
else ch1[0]=pchinese_Data->SatisfyNum+0x30;
ch1[1]=(*(HLCode+OffSetPositoin+3));
if((ch1[1]>>8&0xff)==0)
{ch1[2]=' ';
ch1[3]=0;
}
else ch1[2]=0;
wordstrcat(pchinese_Data->PromptBuf,ch1);
/*
if(SatisfyNum%7==0){
ch1[0]=' ';
ch1[1]=0;
// wsprintf(TempString,"%s",ch1);
// wordstrcat(PromptBuf,TempString);
sprintf(msg,"ch1:0x%x",ch1[0]);
TRACE_EVENT(msg);
wordstrcat(PromptBuf,ch1);
sprintf(msg,"PromptBuf[]:0x%x",PromptBuf[SatisfyNum]);
TRACE_EVENT(msg);
}
if(SatisfyNum>=0&&SatisfyNum<=5){
ch1[0] = *(HLCode+OffSetPositoin+3);
ch1[1] = 0;
SatisfyNum++;
}
else{
ch1[0] = *(HLCode+OffSetPositoin+3);
ch1[1] = ' '; // (char)(*(HLCode+OffSetPositoin+3)>>8);
ch1[2] = 0;
SatisfyNum++;
}
// wsprintf(TempString,"%s",ch1);
// wordstrcat(PromptBuf,TempString);
sprintf(msg,"ch1:0x%x",ch1[0]);
TRACE_EVENT(msg);
wordstrcat(PromptBuf,ch1);
sprintf(msg,"PromptBuf[SatisfyNum]:0x%x",PromptBuf[SatisfyNum]);
TRACE_EVENT(msg);
*/
}
OffSetPositoin += 4;
}
}
static void SearchSomeAssociateHanZi(chinese_Data* pchinese_Data) /*折半查找法查找联想字*/
{
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?