📄 myt9input.c
字号:
{"iong",PY_mb_xiong},
{"iu",PY_mb_xiu},
{"u",PY_mb_xu},
{"uan",PY_mb_xuan},
{"ue",PY_mb_xue},
{"un",PY_mb_xun}};
code struct PY_index code PY_index_y[]={{"a",PY_mb_ya},
{"an",PY_mb_yan},
{"ang",PY_mb_yang},
{"ao",PY_mb_yao},
{"e",PY_mb_ye},
{"i",PY_mb_yi},
{"in",PY_mb_yin},
{"ing",PY_mb_ying},
{"o",PY_mb_yo},
{"ong",PY_mb_yong},
{"ou",PY_mb_you},
{"u",PY_mb_yu},
{"uan",PY_mb_yuan},
{"ue",PY_mb_yue},
{"un",PY_mb_yun}};
code struct PY_index code PY_index_z[]={{"a",PY_mb_za},
{"ai",PY_mb_zai},
{"an",PY_mb_zan},
{"ang",PY_mb_zang},
{"ao",PY_mb_zao},
{"e",PY_mb_ze},
{"ei",PY_mb_zei},
{"en",PY_mb_zen},
{"eng",PY_mb_zeng},
{"ha",PY_mb_zha},
{"hai",PY_mb_zhai},
{"han",PY_mb_zhan},
{"hang",PY_mb_zhang},
{"hao",PY_mb_zhao},
{"he",PY_mb_zhe},
{"hen",PY_mb_zhen},
{"heng",PY_mb_zheng},
{"hi",PY_mb_zhi},
{"hong",PY_mb_zhong},
{"hou",PY_mb_zhou},
{"hu",PY_mb_zhu},
{"hua",PY_mb_zhua},
{"huai",PY_mb_zhuai},
{"huan",PY_mb_zhuan},
{"huang",PY_mb_zhuang},
{"hui",PY_mb_zhui},
{"hun",PY_mb_zhun},
{"huo",PY_mb_zhuo},
{"i",PY_mb_zi},
{"ong",PY_mb_zong},
{"ou",PY_mb_zou},
{"u",PY_mb_zu},
{"uan",PY_mb_zuan},
{"ui",PY_mb_zui},
{"un",PY_mb_zun},
{"uo",PY_mb_zuo}};
code struct PY_index code PY_index_end[]={"",PY_mb_space};
/*定义首字母索引表*/
code struct PY_index code *PY_index_headletter[]=
{
PY_index_a,
PY_index_b,
PY_index_c,
PY_index_d,
PY_index_e,
PY_index_f,
PY_index_g,
PY_index_h,
PY_index_i,
PY_index_j,
PY_index_k,
PY_index_l,
PY_index_m,
PY_index_n,
PY_index_o,
PY_index_p,
PY_index_q,
PY_index_r,
PY_index_s,
PY_index_t,
PY_index_u,
PY_index_v,
PY_index_w,
PY_index_x,
PY_index_y,
PY_index_z,
PY_index_end
};
/*------------------------清拼音字符串输入缓冲区-------------------------*/
void T9Reset()//reentrant
{
//开始拼写一个汉字之前必须先调用
unsigned char i,j,k;
for(i=0;i<6;i++)
{
for(j=0;j<8;j++)
{
keycb.PYBuf_Pool[i].match=0;
for(k=0;k<8;k++)
keycb.PYBuf_Pool[i].PYBuf[j][k]=0;
}
}
for (i=0;i<8;i++)
{
keycb.tmp_buf[i]=0;
for(j=0;j<8;j++)
keycb.PYBuf_bak[i][j]=0;
}
keycb.valid_input_sum=0;
}
/*清汉字表控制块,包括码表指针个数、汉字个数以及码表指针首地址*/
void ChnTblReset(void)//reentrant
{
/*每次输入一个有效的拼音字母后必须先调用*/
unsigned char i;
for(i=0;i<8;i++)
{
keycb.chn_tbl[i].chn_sum=0;
keycb.chn_tbl[i].pmb=NULL;
}
}
/*对于每次输入后生成的字符串,找到一个匹配的串*/
unsigned char * FindMatchStr(unsigned char * strInput_py_str)//reentrant
{
/*返回值:指向第一个符合拼音的码表指针*/
struct PY_index *cpHZ,*cpHZedge;
char i,cInputStrLength;
cInputStrLength=strlen(strInput_py_str); /*输入的拼音串长度*/
if(*strInput_py_str=='\0')
return NULL; /*如果输入空字符返回0*/
cpHZ=PY_index_headletter[strInput_py_str][0]-'a']; /*查首字母索引*/
cpHZedge=PY_index_headletter[strInput_py_str][0]-'a'+1]; /*设置指针界限*/
strInput_py_str++; /*指向拼音串第二个字母*/
while(cpHZ<cpHZedge) /*索引表不超界*/
{
for(i=0;i<cInputStrLength;i++)
{
if (*(strInput_py_str+i)==0) /*比较到头,前面都相等*/
return cpHZ->PY_mb;
if (*(strInput_py_str+i)!=*((*cpHZ).PY+i))
break; /*发现字母串不配,退出*/
}
cpHZ++;
}
return NULL;
}
/*得到韵母*/
void GetPYRhyme(unsigned char Key)//reentrant
{ //输入:0~7
//keycb.PYBuf结构:每行第一个Byte代表这行内有几个字母,0代表没有
unsigned char i,j;
unsigned char match_count;
unsigned char *pPY;
for(i=0;i<8;i++)
{
if(keycb.PYBuf_Pool[keycb.valid_input_sum-1].PYBuf[i][0]==0)
break;
for(j=0;j<8;j++)
{
keycb.PYBuf_bak[i][j]=keycb.PYBuf_Pool[keycb.valid_input_sum-1].PYBuf[i][j];
}
}
match_count=0;
for(i=0;i<8;i++)
{
if(keycb.PYBuf_bak[i][0]==0)
break;
for(j=0;j<8;j++)
keycb.tmp_buf[j]=keycb.PYBuf_bak[i][j];
pPY=&KeyPY[Key][0];
while(*pPY!=0)
{
keycb.tmp_buf[keycb.PYBuf_bak][i][0]+1]=*pPY;
keycb.tmp_buf[keycb.PYBuf_bak][i][0]+2]=0;
if(FindMatchStr(keycb.tmp_buf+1))
{
keycb.tmp_buf[0]++;
for(j=0;j<8;j++)
keycb.PYBuf_Pool[keycb.valid_input_sum].PYBuf[match_count][j]=keycb.tmp_buf[j];
match_count++;
if(*(pPY+1)==0)
break;
else
{
keycb.tmp_buf[0]--;
pPY++;
continue;
}
}
else
pPY++;
}
}
if(match_count>0)
keycb.PYBuf_Pool[keycb.valid_input_sum++].match=match_count;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
keycb.PYBuf_bak[i][j]=0;
}
}
/*得到声母*/
void GetPYHeader(unsigned char Key)//reentrant
{
unsigned char i,j;
unsigned char *p;
p=&KeyPY[Key][0];
for (i=0,j=0;*(p+i)!=0;i++)
{
if (*(p+i)=='i' ||*(p+i)=='u' ||*(p+i)=='v')
continue;
else
{
keycb.PYBuf_Pool[0].PYBuf[j][0]=1;
keycb.PYBuf_Pool[0].PYBuf[j][1]=*(p+i);
keycb.PYBuf_Pool[0].match++;
j++;
}
}
keycb.valid_input_sum++;
}
/*拼音输入处理*/
void PYInputProcess(void)//reentrant
{
unsigned char i,j;
unsigned char * p;
DispPy(0,0);//type:0反显第一个拼音//direction:0 no direction
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -