阿锦
管理员
管理员
  • 金钱419320RMB
  • 威望212480点
  • 贡献值122点
  • CAV币0点
阅读:1518回复:3

T9输入法主程序

楼主#
更多 发布于:2003-01-09 07:37
雁舞白沙 发表于21IC BBs 2003-1-4 15:54 转自技术交流:

实用的程序---T9输入法---主程序

//========================================主程序体========================================"

unsigned char py_ime(unsigned char code **pchp,unsigned char input_py_val[])
{
    unsigned char code (*p1)[8],(*p2)[8],(*p3)[8];
    unsigned char i=0;
    if (input_py_val[0]==0) return(0);                    //如果输入空字符返回0"
    if (input_py_val[0]=='i') return(0);
    if (input_py_val[0]=='u') return(0);
    if (input_py_val[0]=='v') return(0);
    p1=p2=PY_index_pointer[input_py_val][0]-0x61];       //计算入口树根"
    p3=PY_index_pointer[input_py_val][0]-0x60];            //设置指针界限"
    if (p1==0) return(0);                                //查询失败返回0"
    i=1;
    while (p1<p3){//查找
       if(input_py_val==' ') break;             //如果找到空格,就不再向下查找    
        if ((*p1)[i-1]==input_py_val)          //条件满足,继续向下找
        {
           if(i>1){
             if ((*p1)[i-2]!=input_py_val[i-1])    break;      
              }                     //如果已经比较一个,再比较下一次时,上一个也相等,若不等,则不再比较
            p2=p1;
            i++;
        }
        else p1++;        
        }                         //查找
    *pchp=(unsigned char code *)((*p2)[6]+(*p2)[7]*256+py_mb_begin);                

                            //返回查询结果首地址"
    return i;                         //返回正确匹配个数,当为零时,即一个也没有匹配上    
}

void strto20h(unsigned char *buf,unsigned char n)
{                            //用于清空字符串,将串清空成空格20
    uchar i;
    for(i=0;i<n;i++) buf=0x20;
}                             //用于清空字符串,将串清空成空格20

//将输入的汉字或字符显示在当前LCDX,LCDY的位置返回值为输入字符或汉字长度,一个汉字占两个数
unsigned int pyinput(unsigned char *pbuf,unsigned int len)
{
                             /存贮位置,最常输入数
    uchar x,y;                       //用于记录显示地址
    uchar pybuf[6];                      //用于存贮输入的拼音字母
    uint ibuf;                           //INT型临时变量
    uchar pyi;                           //用于存贮 输入字母指针
    uchar keyi;                          //用于存贮上一次的键值,即指明按的哪一个键,选择字母时用
    uchar fxi;                           //方向记数,当为0时,不显示,也不起作为,当用方向键后,确认键也起作用
    uchar fyi;                           //分页键,用在汉字显示分页用,一页13个汉字
    uchar inputlen;                      //当屏文字长度,记事本,编辑最多只能编一屏,如果有第二屏,第一屏不能修改    
    uchar bzpy;                          //用于指明是拼音输入还是英文输入当为0时为数字输入,当为1时,为英文,当为2时,

拼音    
    if(len>239) {
        qdcx();
        return 0;
    } //当总长度大于一屏时,长响,并返回0
    bzpy=0;                              //初始化为数字
    inputlen=0;                          //初始化为0即本次还未输入一个汉字
    linestate=0;                         //先定义各行状态为0,只有换行时不完成,才置1
    x=lcdx;y=lcdy;
    xszfhz('_',0);                       //显示光标
    lcdx=0;lcdy=112;
    xsstr(pystr1,1,0);                  //返着显示,长度不受限制显示拼音    
bzpyinput1:                             //当执行了中英文切换,跳到此处  
    strto20h(pybuf,6);                  //将输入字母空间清空
    pyi=0;                              //未输入字母时,地址为0
    lcdx=0;lcdy=96;  
    if(bzpy<1) xsstr(pystr2+0,1,2);             //当为0时,为数字输入
    else if(bzpy<2) xsstr(pystr2+2,1,2);          //当为1时,为英文
    else xsstr(pystr2+4,1,2);                   //其它为拼音
    lcdx=2;lcdy=96; xsnkb(0);                 //清掉无用信息,在提示行,其它行不管
    if(bzpy<1)
{                            //当为0时为数字输入
bzpysz:    
        key=rbkey();                          //等待一个值的输入
        switch(key){
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
            key=key+0x30;
bzpysz1:            
                if(inputlen>len-1)
        {                     //如果已经输入够数,再按数字键,不予处理
                    qdcx();                    
                    goto bzpysz;
                }                     //如果已经输入够数,再按数字键,不予处理
                lcdx=x;lcdy=y;        
                pbuf[inputlen]=key;
                xszfhz(key,0);                     //显示字母
                x=lcdx;y=lcdy;                    //重新取回输入的汉字            
                xszfhz('_',0);                    //显示光标
                inputlen++;                       //记数自动加1      
                goto bzpysz;                      //输入完数字后,
            case 10:                           //.
                key='.';
                goto bzpysz1;
            case 11:                           //*
                key='*';
                goto bzpysz1;
            case 12:                           // /
                key='/';
                goto bzpysz1;
            case 13:                           //+
                key='+';
                goto bzpysz1;
            case 14:                           //-
                key='-';
                goto bzpysz1;
            case 15:                           //=
                key='=';                           //借用KEY暂存符号          
                goto bzpysz1;
            case 16:
              if(bzpy<2) bzpy++;                //如果小于2,则加1
              else bzpy=0;                      //返回到数字输入              
              goto bzpyinput1;                 //重新显示中英文方式
            case 17:                           //取消键,每按一次,当前位置的输入将删除
                lcdx=x;lcdy=y;
                xszfhz(' ',0);                      //将原光标清掉                                        

  
                if(inputlen<1) return 0;            //如果一个字母也没有输入,取消键退出
                inputlen--;                         //总长度自动减1
                if(pbuf[inputlen]>0xa0){
                    pbuf[inputlen]=0x20;                //给一个空格                              
                    inputlen--;
                    pbuf[inputlen]=0x20;            //给一个空格
                    if(x>1) x-=2;
                    else {
                        y-=16;
                        x=28;
                        key=1;
                        key=key<<(y/16);            //借用KEY暂存位比较值  因后面没有用KEY值
                        if(linestate&key){
                            x--;              //当有空格时,X值再减1
                            linestate=linestate^key;     //异或,清掉该位
                            }                 //当已经清掉了该行,则该位也应该清掉
                    }                     //当需要换行时        
                 lcdx=x;lcdy=y;
                 xszfhz('_',0);                 //显示光标    
                 xszfhz(' ',0);
                 } //即要删除的是汉字
                 else {
                     pbuf[inputlen]=0x20;            //给一个空格                                    
                     if(x>0) x--;
                     else {
                         y-=16;
                         x=29;  
                         key=1;
                         key=key<<(y/16);            //借用KEY暂存位比较值  因后面没有用KEY值
                        if(linestate&key){
                            x--;              //当有空格时,X值再减1
                            linestate=linestate^key;   //异或,清掉该位
                        }                 //清完一个后,且换行,有空位,清掉该标志
                     }                     //当需要换行时  
                 lcdx=x;lcdy=y;
                 xszfhz('_',0);                 //显示光标    
                 }                     //删除的是字母      
                goto bzpysz;                //返回重新输入              
            case 20:            
                return inputlen;               //当按确认键返回时,返回输入数量                    
            default:
                qdcx();                     //不是有效的键值,长响
          }                         //键值处理
        goto bzpysz;
    }                             //数字输入    
    else if(bzpy<2){                    //当为1时,为英文输入
bzpyinputyw:                                   //英文输入跳转位    
        key=rbkey();                           //取出一个键值
        switch(key){//键值处理
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
                keyi=key;          //取出当前键值,进入显示提示信息阶段    
                fxi=0;             //开始时第一个字母返显不处理翻页
                break;            
            case 10:               //.
                key='.';
                goto bzpyinputywt;
            case 11:               //*
                key='*';
                goto bzpyinputywt;            
            case 12:               // /
                key='/';
                goto bzpyinputywt;            
            case 13:               //+
                key='+';
                goto bzpyinputywt;            
            case 14:               //-
                key='-';
                goto bzpyinputywt;            
            case 15:               //=
                key='=';                   //借用KEY暂存符号          
bzpyinputywt:                              //特殊符号处理+-*/=等
                lcdx=x;lcdy=y;        
                pbuf[inputlen]=key;
                xszfhz(key,0);             //显示字母            
                goto bzpyinputywz1;        //直接取出字符,上屏    
            case 16:
              if(bzpy<2) bzpy++;    //如果小于2,则加1
              else bzpy=0;          //返回到数字输入              
              goto bzpyinput1;     //重新显示中英文方式
            case 17:               //取消键,每按一次,当前位置的输入将删除
                lcdx=x;lcdy=y;
                xszfhz(' ',0);             //显示空格,清掉原来的光标            
                if(inputlen<1) return 0;    //如果一个字母也没有输入,取消键退出
                inputlen--;                 //总长度自动减1
                if(pbuf[inputlen]>0xa0){
                    pbuf[inputlen]=0x20;        //给一个空格                              
                    inputlen--;
                    pbuf[inputlen]=0x20;        //给一个空格                              
                    if(x>1) x-=2;
                    else {
                        y-=16;
                        x=28;
                        key=1;
                        key=key<<(y/16);        //借用KEY暂存位比较值  因后面没有用KEY值
                        if(linestate&key){
                            x--;  //当有空格时,X值再减1
                            linestate=linestate^key;   //异或,清掉该位
                            } //当已经清掉了该行,则该位也应该清掉
                    } //当需要换行时        
                 lcdx=x;lcdy=y;
                 xszfhz('_',0);     //显示光标    
                 xszfhz(' ',0);                
                 } //即要删除的是汉字
                 else {
                     pbuf[inputlen]=0x20;        //给一个空格                                    
                     if(x>0) x--;
                     else {
                         y-=16;
                         x=29;  
                         key=1;
                         key=key<<(y/16);        //借用KEY暂存位比较值  因后面没有用KEY值
                        if(linestate&key){
                            x--;  //当有空格时,X值再减1
                            linestate=linestate^key;   //异或,清掉该位
                        } //清完一个后,且换行,有空位,清掉该标志
                     } //当需要换行时  
                 lcdx=x;lcdy=y;
                 xszfhz('_',0);     //显示光标    
                 } //删除的是字母      
                goto bzpyinputyw;  //返回重新输入              
            case 20:            
                return inputlen;   //当按确认键返回时,返回输入数量    
            default:
              qdcx();
              goto bzpyinputyw;
        }  //键值处理
bzpyinputyw1:                      //正确显示字母后,通过提供信息选择        
        if((keyi==1)||(keyi==7)||(keyi==9)){
            lcdx=24;lcdy=96;        
            xsstr(pystry[keyi],0,5);      //显示5个可选字母
            lcdx=24+fxi;lcdy=96;        
            xsstr(pystry[keyi]+fxi,1,1);  //将所选字母返显
            lcdy=96;                    
            lcdx=16;                      //和显示特殊字符首址一样
            xsnkb(8);                     //若提示信息前有其它,清掉
        } //有5个字母可选,                      
        else if(keyi==0){ //特殊符号提示
            lcdx=16;lcdy=96;        
            xsstr(pyfhy,0,13);            //显示特殊符号
            lcdx=16+fxi;lcdy=96;        
            xsstr(pyfhy+fxi,1,1);         //将所选的特殊符号反显
        } //特殊符号提示    
        else { //四个字符的显示
            lcdx=25;lcdy=96;        
            xsstr(pystry[keyi],0,4);      //显示四个字母的提示      
            lcdx=25+fxi;lcdy=96;        
            xsstr(pystry[keyi]+fxi,1,1);      //反显所选字母
            lcdy=96;                    
            lcdx=16;                      //和显示特殊字符首址一样
            xsnkb(9);                     //若前面有信息,将之清掉
         }  //四个字符的显示
bzpyinputyw2:                             //选择字母无效,反回来重新选择
        key=rbkey();
        switch(key){//选择提示的字母
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
                if((keyi==1)||(keyi==7)||(keyi==9)){            
                    if((key>0)&&(key<6)) break;   //当选择12345时,正常  
                }    //如果为5个显示字母                                                  
                else if(keyi>0) {  //不是第一种情况,且大于0,即是正常四个字母显示
                    if((key>0)&&(key<5)) break;
                }    //正常的四个字母显示                                
                else { //当为0时,即为特殊字符
                    if(key>0) break;        //特殊字符是,1到9都有效,
                }//当为0时,即为特殊字符
                qdcx();
                goto bzpyinputyw2;      //不满足以上条件时,即为无效数字,长响,返回
            case 16:
                if(bzpy<2) bzpy++;
                else bzpy=0;   //如果小于2,则加1,否则为0,返回到数字输入                
                lcdx=2;lcdy=96;
                xsnkb(0);     //将后面的部分全部显示空格
                goto bzpyinput1;        //重新显示中文或英文
            case 17:                //取消键,清掉当前字母提示,返回秤新输入
                lcdx=2;lcdy=96;
                xsnkb(0);
                goto bzpyinputyw;       //返回去重新开始英文输入
音响方面的搭配,技术,安装,推荐等咨询请加我微信13808822286
阿锦
管理员
管理员
  • 金钱419320RMB
  • 威望212480点
  • 贡献值122点
  • CAV币0点
1楼#
发布于:2003-01-09 07:37
T9输入法主程序
接上:            
            case 18:                    //左方向键
                if(fxi>0) fxi--;
                else qdcx();            //如果到头,则不动
                goto bzpyinputyw1;       //回去重新选择
            case 19:                     //右方向键
                if((keyi==1)||(keyi==7)||(keyi==9)){            
                    if(fxi<4) fxi++;            //5字母提示,01234  
                    else fxi=0;
                }    //如果为5个显示字母                                                  
                else if(keyi>0) {  //不是第一种情况,且大于0,即是正常四个字母显示
                    if(fxi<3) fxi++;   //当为四个字母显示时,0 123      
                    else fxi=0;
                }    //正常的四个字母显示                                
                else { //当为0时,即为特殊字符
                    if(fxi<12) fxi++;    //0123456789 10 11 12
                    else fxi=0;
                }//当为0时,即为特殊字符                                                
                goto bzpyinputyw1;      //回去重新显,并显法标标位置
            case 20:                    //确认键,直接进入下一列模拟数字选择,修改KEY
                key=fxi+1;              //和数字键选择相当
                break;    
            default:
                qdcx();
                goto bzpyinputyw1;      //重新选择字母
        } //选择提示的字母
bzpyinputywz:          //正确选择字母后,作上屏显示结果结果在KEYI和key中        
        if(inputlen>len-1){ //如果已经输入够数,再按数字键,不予处理
            qdcx();                    
            lcdx=2;lcdy=96;
            xsnkb(0);      //将原来显示的提供信息清掉,进入下一个字母的显示            
            goto bzpyinputyw;
        } //如果已经输入够数,再按数字键,不予处理
        lcdx=x;lcdy=y;
        key--;
        if(keyi>0){//正常的数字键,不是特殊符号
            pbuf[inputlen]=*(pystry[keyi]+key);
            xsstr(pystry[keyi]+key,0,1);     //在指定位置显示        
        } //正常的数字键,不是特殊符号
        else { //特殊的数字符号
            pbuf[inputlen]=*(pyfhy+key);
            xsstr(pyfhy+key,0,1);               //显示特殊符号
        } //特殊的数字符号                                  
bzpyinputywz1:                    //用在+-*/.号的直接处理        
        x=lcdx;y=lcdy;        //重新取回输入的汉字            
        xszfhz('_',0);        //显示光标        
        inputlen++;           //记数自动加1      
        lcdx=2;lcdy=96;
        xsnkb(0);      //将原来显示的提供信息清掉,进入下一个字母的显示
        goto bzpyinputyw;   //进入下一个字母的选择
    }//为英输入法
    else {//当为2时,为拼音输入,如果以后增加,则改成else if
bzpyinputpy:                       //拼音输入跳转位    
        key=rbkey();
bzpyinputpyd:                      //动态显示汉字时,再输入字母        
        switch(key){               //拼音输入键处理
            case 0:                //特殊符号,直接进入汉字选择状态,和汉字一样处理
              pch=pyfh;            //显示符号将首指针找到,相相于拼音输入找到              
              pyi=1;               //保证按取消键时,清掉
              fxi=0;             //方向键初始化为0              
              fyi=0;             //分页键初始化为0              
              goto bzpyhz2;        //直接进入汉字选择状态            
            case 2:
            case 3:    
            case 4:
            case 5:    
            case 6:
            case 7:    
            case 8:
            case 9:              
              keyi=key;               //保存字母序列
              fxi=0;                  //初始化方向标志为0
              break;    
            case 16:
              if(bzpy<2) bzpy++;
              else bzpy=0;   //如果小于2,则加1,否则为0,返回到数字输入                
              goto bzpyinput1;     //重新显示中英文方式                          
            case 17:               //取消键,每按一次,当前位置的输入将删除
                lcdx=x;lcdy=y;
                xszfhz(' ',0);              //显示一个空格,将原来的光标清掉            
                if(inputlen<1) return 0;    //如果一个字母也没有输入,取消键退出
                inputlen--;                 //总长度自动减1
                if(pbuf[inputlen]>0xa0){
                    pbuf[inputlen]=0x20;        //给一个空格                              
                    inputlen--;
                    pbuf[inputlen]=0x20;        //给一个空格                              
                    if(x>1) x-=2;
                    else {
                        y-=16;
                        x=28;
                        key=1;
                        key=key<<(y/16);        //借用KEY暂存位比较值  因后面没有用KEY值
                        if(linestate&key){
                            x--;  //当有空格时,X值再减1
                            linestate=linestate^key;   //异或,清掉该位
                        } //清完一个后,且换行,有空位,清掉该标志
                    } //当换行时
                 lcdx=x;lcdy=y;
                 xszfhz('_',0);     //显示光标    
                 xszfhz(' ',0);
                 } //即要删除的是汉字
                 else {
                     pbuf[inputlen]=0x20;        //给一个空格                                    
                     if(x>0) x--;
                     else {
                         y-=16;
                         x=29;  
                         key=1;
                         key=key<<(y/16);        //借用KEY暂存位比较值  因后面没有用KEY值
                        if(linestate&key){
                            x--;  //当有空格时,X值再减1
                            linestate=linestate^key;   //异或,清掉该位
                        } //清完一个后,且换行,有空位,清掉该标志
                     } //当需要换行时  
                 lcdx=x;lcdy=y;
                 xszfhz('_',0);     //显示光标    
                 } //删除的是字母      
                goto bzpyinputpy;  //返回重新输入              
            case 20:                  //确认键处理,当输入拼音时,完成,当没有时,作编辑完成
              if(pyi>0) goto bzpyhz1; //字母输入完毕,开始查找汉字
              else{
                  return inputlen;    //返回输入长度  
               } //完成汉字输入,对输入汉字进行处理
            default:
            qdcx();
            goto bzpyinputpy;      //当不是有效键时,长响,重新输入          
        }                          //拼音输入键处理  
                                   //输入字母键,下面为选择字母
bzpyinputpy1:                      //拼音输入字母选择                                  
            lcdx=9;lcdy=96;
            xsnkb(16);             //字母选择前清掉
            lcdx=25;lcdy=96;
            xsstr(pystrp[keyi],0,4); //显示字母提供              
            lcdy=96;
            if((keyi==7)||(keyi==9)){
                lcdx=fxi+25;    
                xsstr(pystrp[keyi]+fxi,1,1);
            } //当为四个字母地,
            else {
                lcdx=fxi+26;    //三个字母,向后一个位置    
                xsstr(pystrp[keyi]+fxi+1,1,1);
            }//当为三个字母显示时                        
        key=rbkey();                 //有字母提供,按键选择                                  
        switch(key){//选择字母
            case 1:
            case 2:
            case 3:
            case 4:              
bzpyinputpy2:                    //通过确认键选择的,转到此处处理            
              if((keyi==7)||(keyi==9)) key--;    //当显示四个字母时,从0开始取地址,
              else if(key==4) {
                  qdcx();
                  goto bzpyinputpy1;             //重新选择数字键
                 } //当显示三个字母时,输入4无效,应长响              
              pybuf[pyi]=pystrp[keyi][key];  //取出输入的字母                            
              pyi++;  //下一次取字,就放在下一个位置
              lcdx=2;lcdy=96;
              xsstr(pybuf,0,6);        //显示输入字母
              lcdx=14;lcdy=96;
              xsnkb(0);                //将后面显示的清掉
              goto bzpyhz1;            //每输入一个字母,均进行一次比较,显示
            case 16:
              if(bzpy<2) bzpy++;
              else bzpy=0;   //如果小于2,则加1,否则为0,返回到数字输入                
              lcdx=2;lcdy=96;xsnkb(0);  //跳回之前将显示的提示清掉
              goto bzpyinput1;     //重新显示中英文方式                                      
            case 17:                   //当按取消键时,取消本次输入
              if(pyi<1){
                  lcdx=14;lcdy=96;xsnkb(0);  //清掉显示的字母提示
                  goto bzpyinputpy;          //清掉显示的字母,返回重新输入,            
               } //当按取消键时,一个字母也没有输入,则清掉,返回去重新显示
              else goto bzpyhz1;             //重新进入汉字提示状态  
            case 18:                     //向左方向键
                if(fxi>0) fxi--;
                else qdcx();
                goto bzpyinputpy1;        //回去重新选择字母                              
            case 19:                      //向右方向键                
                if((keyi==7)||(keyi==9)){
                    if(fxi<3) fxi++;      //实际显示的位置还是0123
                    else fxi=0;           //如果转一圈,则为1
                }//如果为四个字母显示
                else {                    
                    if(fxi<2) fxi++;      //实际显示的位置还是012
                    else fxi=0;                              
                } //三个字母显示                
              goto bzpyinputpy1;        //回去重新选择字母            
            case 20:                    //确认键,
                key=fxi+1;              //模拟数字选择                  
                goto bzpyinputpy2;      //和数字选择一样处理              
            default:
              qdcx();
              goto bzpyinputpy1;
        } //选择字母
bzpyhz1:                    //输入完字母组后,进行汉字查找                
        key=py_ime(&pch,pybuf);              
        if(key==0){
            lcdx=2;lcdy=96;
            xsstr(pycwcz,0,0);   //显示查无此字!
            yan1s();
            goto bzpyhzz;    //显示完了,从新开始汉字输入          
        } //当未查到时,显示查无此字
        else if(key<pyi){  //当输入两个字母时,如果KEY还等于1,说明后面不符合组合
            qdcx();     //长响一声,表明输入有误
            pyi--;      //输入字母数自动减1
            pybuf[pyi]=0x20;         //将刚才输入的字母清掉
            lcdx=2;lcdy=96;
            xsstr(pybuf,0,6);        //显示输入字母
            goto bzpyhz2;            //进入重新显示汉字状态
            } //没有这种字母组合,返回重新输入
        else {                 //字母有效
            fxi=0;             //方向键初始化为0
            fyi=0;             //分页键初始化为0
bzpyhz2:                       //如果汉字选择无效,返回重新选择,也是特殊符号入口            
            lcdx=9;lcdy=96;    //前面空半格,后面空半格,最多一屏显示13个汉字            
            xsstr(pch+fyi*20,0,20);   //显示输入汉字,最多显示13个,可通过数字选择
            if(lcdx>2) xsnkb(0);           //将余下部分显示为空格,如果有的话            
            lcdx=9+fxi*2;lcdy=96;        
            ibuf=fyi*20;    
            xsstr(pch+ibuf+fxi*2,1,2);   //反显一个汉字,表明当前所选汉字
            keyi=strlen(pch+ibuf);       //取出从当前页开始余下部分字符串的长度
            keyi--;                        //总长减1,得到正确长度,最后的不要
            key=rbkey();       //汉字提供完成后,
            switch(key){       //汉字提供完成后,开始选择汉字  
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                goto bzpyinputpyd;        //在汉字输入状态按数字键,转回拼音输入处理
bzpyhz5:                                  //通过确认键完成的选择,最终相当于数字键                
                    if(inputlen>len-1){ //当输入的汉字数达到一定数量时,提示信息
                        qdcx();
                        break;  
                    }  //当输入的数字超过指定的数字时,不再处理
                    lcdx=x;lcdy=y;
                    key--;
                    key*=2;
                    ibuf=key+fyi*20;
                    xsstr(pch+ibuf,0,2);   //显示一个汉字
                    x=lcdx;y=lcdy;        //重新取回输入的汉字            
                    xszfhz('_',0);        //显示光标
                    pbuf[inputlen]=*(pch+ibuf);
                    pbuf[inputlen+1]=*(pch+ibuf+1);
                    inputlen+=2;          //记数自动加2                    
                break;                    //正确选择汉字后,完成本部分
                case 13:                  //向左翻页
bzpyhz3:                                  //当方向键减少到0时,转入翻页                            

    
                    if(fyi>0){
                        fyi--;      //若翻到头,就翻不动
                        fxi=0;             //每翻一个新页,方向键为0
                    }  //翻页
                    else qdcx();          //不让翻页                    
                    goto bzpyhz2;         //再次选择汉字
                case 14:                  //向右翻面
bzpyhz4:                                  //当方向键增加到后面时,转入翻页处理                
                    if(keyi>20) fyi++;
                    else fyi=0;           //如果到头,则从新开始
                    fxi=0;
                    goto bzpyhz2;        //再次选择汉字
                case 16:    
                    if(bzpy<2) bzpy++;
                    else bzpy=0;   //如果小于2,则加1,否则为0,返回到数字输入                
                    lcdx=2;lcdy=96;xsnkb(0);  //跳回之前将显示的提示清掉
                    goto bzpyinput1;     //重新显示中英文方式                      
                case 17:                      
                    pyi--;      //输入字母数自动减1
                    pybuf[pyi]=0x20;         //将刚才输入的字母清掉
                    lcdx=2;lcdy=96;
                    xsstr(pybuf,0,6);        //显示输入字母
                    if(pyi<1){
                        lcdx=2;lcdy=96;
                        xsnkb(0);
                        goto bzpyinputpy;   //重新输入字母                    
                     } //当为0时,重新输入字母,并清屏
                    else goto bzpyhz1;            //重新查找汉字
                case 18:                       //左方向键
                    if(fxi>0) fxi--;
                    else goto bzpyhz3;        //当方向键减少到0时,转入翻页                
                    goto bzpyhz2;             //再次选择汉字                    
                case 19:                       //右方向键    
                    if((fxi<9)&&(fxi<keyi/2)) fxi++;   //当未到尾,且有效
                    else goto bzpyhz4;        //当方向键增加到后面时,转入翻页处理
                    goto bzpyhz2;        //再次选择汉字                    
               case 20:                       //确认键处理,模拟键值选择      
                    key=fxi+1;                //取出当前的位置
                    goto bzpyhz5;             //通过确认键完成的选择,最终相当于数字键            

                      
               default:
                   qdcx();
                   goto bzpyhz2;              //不是有效键时,返回,重新选择                      
           } //汉字提供完成后,开始选择汉字  
        } //查到汉字串,显示汉字串
        
bzpyhzz:
        lcdx=2;lcdy=96; xsnkb(0);   //清空信息提供行        
        pyi=0;                      //清空拼音输入行,下一次从头开始
        strto20h(pybuf,6);          //将输入字母空间清空
        goto bzpyinputpy;           //进行下一个汉字的输入
    }//为拼音输入法
    return inputlen;               //返回输入长度一个汉字算两个字节
} //输入法输入
音响方面的搭配,技术,安装,推荐等咨询请加我微信13808822286
jotis
二等列兵
二等列兵
  • 金钱122RMB
  • 威望0点
  • 贡献值0点
  • CAV币0点
2楼#
发布于:2006-03-16 06:45
<P>什么地方弄的?</P>
37923792
二等列兵
二等列兵
  • 金钱16RMB
  • 威望0点
  • 贡献值0点
  • CAV币0点
3楼#
发布于:2006-04-05 18:10
<img src="images/post/smile/dvbbs/em17.gif" />
游客

返回顶部