⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t9.c

📁 T9 输入法. 可以方便地移值到单片机上使用. 可实验T9输入法.
💻 C
📖 第 1 页 / 共 3 页
字号:
    n=n-16;
    if(n<0)
     {
      m=0;
      n=0;
     }
    }
  /*     printf("m1=%d,",m);
   printf("n1=%d,",n);          */
  bar(105+m,155+n,105+8+m,155+16+n);
 }

/*------------------------------------------------------------------------------------*/
/*                              void cancel_data1()                                   */
/*  ---消除退格线子函数---                                                            */
/*  ---入口:无;返回:无---                                                          */
/*  ---功能:将输入框内的退格线取消---                                                */
/*------------------------------------------------------------------------------------*/

void cancel_data1()
 {

  m=m+8;

  if(m>416)
   {
    bar(105,155+n+16,105+8,155+32+n);
    m=424;
   }
  else
   {
/*        printf("m2=%d",m);
   printf("n2=%d,",n);       */
    bar(105+m,155+n,105+8+m,155+16+n);
   }
   m=m-8;

 }

/*------------------------------------------------------------------------------------*/
/*                            void cancel_data2()                                     */
/*  ---清除退格线子函数---                                                            */
/*  ---入口:无;返回:无---                                                          */
/*  ---功能:将输入框内的退格线取消---                                                */
/*------------------------------------------------------------------------------------*/

void cancel_data2()
 {

  bar(105+m,155+n,105+8+m,155+16+n);

 }

/*------------------------------------------------------------------------------------*/
/*                            void blueline()                                         */
/*  ---提前画线子函数---                                                              */
/*  ---入口:无;返回:无---                                                          */
/*  ---功能:将输入框内的退格线提前一格画出---                                        */
/*------------------------------------------------------------------------------------*/

void blueline(char bn)
 {
  if(m==416)
   {
    m=0;
    n=n+16;
   }

  output_other(105+m+8*bn,155+n,28,9,4);
 }



/*--------------------------------------------------------------------------------------*/
/*                          unsigned char *show_hz_clue(int a,int b)                    */
/*                                                                                      */
/*  ---字符数字提示子函数---                                                            */
/*  ---入口:a=i=第几次按键,b=k=hzk_index[][]的第几行(X轴);返回:无---                */
/*  ---功能:hzk_index[][]的第几行,找到第7列和第8列数据,求的hzk_bin[]中的字模代号,    */
/*           并由字模代号,算得字库相对应汉字的位置,送output去显示---                  */
/*--------------------------------------------------------------------------------------*/

unsigned char *show_hz_clue(int a,int b)
{
 int v2,v3,v4,n,v5,v6,j;
 int nh,nl,num_0=0,num_1=0,num_2=0;
 unsigned char *p2,pt[2];

 v2=hzk_index[b][6];                        /*v2为字母组合可能数,它位于索引表每行第7列*/
 p2=&hzk_index[b][6];
 temp_data[0]=v2*hzk_index[b][7]+v2*2;      /*保存某拼音组合的的字模个数*/
 for(j=0;j<=b;j++)
  {
   num_0=((hzk_index[j][6]*2)+(hzk_index[j][6]*hzk_index[j][7]));
   num_1=num_1+num_0;                       /*由hzk_index[][]的6,7列计算在hzk_bin[]中对应字模代码的起始位置地址,*/
   num_2=num_1-num_0;                       /*各列的定义见index.c*/
  }

 v3=num_2;
 temp_data[1]=v3;                           /*保存某拼音组合字模代码的起始位置*/
 v4=v3;
 nh=hzk_bin[v3];                            /*文字X轴的地址*/
 nl=hzk_bin[v3=v3+1];                       /*文字Y轴的地址*/



 bar(180,100,536,145);                      /*清空字母文字提示框*/

 for(n=0;n<v2;n++)                          /*显示数字和相对应的字母*/
  {
   output_other(183+n*64,103,n+1,7,3);
   for(v5=0;v5<=a;v5++)
    {
     output_other(193+n*64+v5*8,103,hzk_bin[((v4+v2*2)+(a+1)*n+v5)]-1,2,1);
    }
  }

                                             /*显示数字和相对应的汉字*/
 for(n=0;n<8;n++)
  {
    nl=nl+1;
   if(nl>94)                                 /*当Y轴的选择数字大于94,则跳到下一行,开始输出汉字*/
    {
     nh=nh+1;
     nl=nl-94;
    }
   output_other(183+n*32,125,n+1,7,3);
   output_hz(193+(n*2)*16,125,nh,nl-1,2);
  }
  return(p2);
}

/*------------------------------------------------------------------------------------*/
/*      void get_hz_data(unsigned int vn_h,unsigned int vn_l,unsigned char c1)        */
/*                                                                                    */
/*  ---取输入框中汉字子函数---                                                        */
/*  ---入口:vn_h=区位表x轴地址,vn_l=区位表y轴地址;返回:无---                      */
/*  ---功能:得到当前需要的汉字的区位表地址,送output_hz()函数---                     */
/*------------------------------------------------------------------------------------*/

void get_hz_data(unsigned int vn_h,unsigned int vn_l,unsigned char c1)
 {
  if(c1==9)
   {
    bar(180,100,536,145);              /*清空字母文字提示框*/
   }
  if(c1==1||c1==2||c1==3||c1==4||c1==5||c1==6||c1==7||c1==8)
   {
    vn_l=vn_l+c1;
    if(vn_l>94)
     {
      vn_l=vn_l-1;
      vn_h=vn_h+1;
     }
    bar(180,100,536,123);
    blueline(2);
    output_hz(105+m,155+n,vn_h,vn_l-8-1,2);
    m=m+16;
    if(m>416)
     {
      m=0;
      n=n+16;
     }
    if(n>80)
     {
      m=0;
      n=0;
      bar(105,155,536,255);
     }
   }
 }



/*-----------------------------------------------------------------------------------*/
/*       void get_hz_index(unsigned char n6,unsigned char n7,unsigned char *p4)      */
/*                                                                                   */
/*  ---取输入框中汉字子函数---                                                       */
/*  ---入口:n6=hzk_index[][6],n7=hzk_index[][7],p4=temp_d[];返回:无---            */
/*  ---功能:通过n6,n7,temp_d[]获得当前拼音组合的汉字提示---                         */
/*-----------------------------------------------------------------------------------*/

void get_hz_index(unsigned char n6,unsigned char n7,unsigned char *p4)
 {
  char op,lp,vn1,vn2,vn3,j,n,c2,v_n1,v_n3;
  unsigned char *p5,page1=0;
  p5=p4;
 /* printf("=00"); */
  lp=check_return(getch());
 /* printf("=01"); */
  for(op=1;op<n6+1;op++)
   {
    if(lp==9)
     {
      bar(180,100,536,145);              /*清空字母文字提示框*/
      break;
     }

    if(lp==op)
     {
      vn1=*(p5+(lp-1)*2);                /*汉字字模代码*/
      vn3=*(p5+(lp-1)*2+1);


   /*   printf("vn1=%d\n",vn1);

      printf("vn3=%d\n",vn3);   */
      bar(180,100,536,145);
      for(j=0;j<n7;j++)
      {
        vn2=*(p4+n6*2+(lp-1)*n7+j);      /*拼音字模代码*/
        output_other(183,103,1,7,3);
        output_other(193+j*8,103,vn2-1,2,1);
       }
      while(1)
       {
        if(c2==11&&page1<5)
         {
          page1=page1+1;
          vn3=vn3+8;
            bar(180,125,536,145);
            if(vn3>94)
           {
            vn3=vn3-94;
            vn1=vn1+1;
           }
         }
        if(c2==10&&page1>0)
         {
          page1=page1-1;
          vn3=vn3-8;
          bar(180,125,536,145);
          if(vn3<0)
           {
            vn3=94+vn3;
            vn1=vn1-1;
           }
         }
         for(n=0;n<8;n++)
           {
            if((vn3+n)>94)                        /*当Y轴的选择数字大于94,则跳到下一行,开始输出汉字*/
             {
              vn3=vn3-94;
              vn1=vn1+1;
             }
            output_other(183+n*32,125,n+1,7,3);
            output_hz(193+(n*2)*16,125,v_n1=vn1,v_n3=vn3+n,2);
           }
        c2=check_return(getch());

        if(c2==1||c2==2||c2==3||c2==4||c2==5||c2==6||c2==7||c2==8||c2==9)break;
      }
       page1=0;
       get_hz_data(v_n1,v_n3+1,c2);               /*==调用 取输入框中汉字子函数 */
     }
   }
 }


/*-------------------------------------------------------------------------------------*/
/*                    void show_other_clue(int vt,int qw,int sel)                      */
/*                                                                                     */
/*  ---其它输入提示子函数---                                                           */
/*  ---入口:vt=当前需显示的状态(字母or数字or标点等),qw=翻页一次加的值;             */
/*          sel=当前显示提示数字的号码;返回:无---                                    */
/*  ---功能:显示小写字母,大写字母,  数字,标点符号的提示---                         */
/*-------------------------------------------------------------------------------------*/

void show_other_clue(int vt,int qw,int sel)
 {
  unsigned int i;
  for(i=0;i<sel;i++)
   {
    output_other(183+(i*2)*16,125,i+1,7,3);
    output_other(193+(i*2)*16,125,i+qw,2,vt);
   }
 }

/*------------------------------------------------------------------------------------*/
/*                        void get_other_data(int dt,int vs,int sd)                   */
/*                                                                                    */
/*  ---得到数值子函数---                                                              */
/*  ---入口:dt=key按键返回值,vs=v_s当前输入法状态,sd=s1当前某字符地址;返回: ---  */
/*  ---功能:取得提示框内的字符,按数字几得到相对应的字符---                          */
/*------------------------------------------------------------------------------------*/

void get_other_data(int dt,int vs,int sd)
 {
  unsigned int gd;
  if(dt==1||dt==2||dt==3||dt==4||dt==5||dt==6||dt==7||dt==8)
   {
    cancel_data2();
    blueline(1);
    output_other(105+m,155+n,sd+dt-1,2,vs);
    m=m+8;                      /* 8*52=416点 */
    if(m>416)
     {
      m=0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -