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

📄 infertt.c

📁 汉字在计算机内存放分为两种情况
💻 C
📖 第 1 页 / 共 3 页
字号:
  		 	     		 
  		 	     	}else if(tt_status == SYMBAL_ENTERNING || tt_status == ASC_ENTERNING)
  		 	     	{
  		 	     		
  		 	     		if(event.code + lrview1->baseindex <= lrview1->cellnum)	
  		 	     		MoveLrCursor(lrview1,event.code -lrview1->coursorx - 1,0 ); 
  		 	     		ShowLrList(lrview1);
  		 	     		
  		 	     		event.code = BUTTON_SELECT;
  		 	     		DTOS_DRV_SendMessage(MainTaskQueue,&event);
  		 	     	
  		 	     	}
  		 	   }break;
  		 	   case HZMODE:/*汉字操作*/
  		 	   {
 
  		 	     	if(tt_status == WAIT_ENTERN)
  		 	     	{

  		 	     		FreeLrListItems(lrview0);/*用那个就先清那个UNLOCK那个*/
  		 	     		UnLockLrList(lrview0);
  		 	     		SetCurPick(event.code);/*可以输入拼音或特殊字符*/
  		 	     		ProcessPick();	 
  		 	     		if(event.code == 1)
  		 	     		tt_status = SYMBAL_ENTERNING;
  		 	     		else 
  		 	     		{
  		 	     		  if(event.code != 0)
  		 	     		  {
  		 	     			tt_status = ASC_ENTERNING;
  		 	     			ShowLrList(lrview0);/*画出新的*/
  		 	     		  }
  		 	     		}       
				#ifdef TT_DEBUT
				FNTDrawText(rand() % 6, 0, 0, 200, "enterned WAIT_ENTERN!");
				#endif
  		 	     	}
  		 	     	else if(tt_status == HZ_ENTERNING ||tt_status == SYMBAL_ENTERNING)/*当前是挑选汉字的状态*/
  		 	     	{
  		 	     		/*将光标移到数字定义位置*/
  		 	     		
  		 	     		if(event.code + lrview1->baseindex <= lrview1->cellnum)	
  		 	     		MoveLrCursor(lrview1,event.code -lrview1->coursorx-1,0 );
  		 	     		ShowLrList(lrview1);
  		 	     		
  		 	     		if(event.code == 0)
  		 	     		{
  		 	     			SetCurPick(event.code);
  		 	     			ProcessPick();
  		 	     		}
  		 	     		
  		 	     		event.code = BUTTON_SELECT;
  		 	     		DTOS_DRV_SendMessage(MainTaskQueue,&event); 
  		 	     		   
				#ifdef TT_DEBUT
				FNTDrawText(rand() % 6, 0, 60, 220, "tt_status == HZ_ENTERNING ||tt_status == SYMBAL_ENTERNING");
				#endif
  		 	     		  
  		 	     	}else if(tt_status == ASC_ENTERNING)
  		 	     	{
  		 	     	       if(event.code != 1)/*输入拼音状态下不能输入特殊字符*/
  		 	     	       {	
  		 	     		SetCurPick(event.code);
  		 	     		ProcessPick();
  		 	     		if(event.code != 0) 
  		 	     		{
  		 	     	         	UnLockLrList(lrview0);
  		 	     	         	ShowLrList(lrview0);/*画出新的*/
  		 	     	        }
  		 	     	       }
  		 	     	      
  		 	     	       
				#ifdef TT_DEBUT
				FNTDrawText(rand() % 6, 0, 60, 180, "enterned asc!");
				#endif
  		 	     	}
  		 	     	 
  		 	   }break;
  		 	  
  		 	   case NUMMODE:
  		 	   {
  		 	   	char txt[2] ={0};
  		 	   	txt[0] = event.code + '0';
  		 	   	AddToCellView(cellview,txt);
  		 	   	DrawCellFrame(cellview);
  		 	   }
  		 	   break;	
  		 	}
  		 	
  		 }
  		       break;
	        	
	        }
	}
	
}



/*****************************************************************************\

以下为TT绘画函数模块

\******************************************************************************/
static  void ShowTTFrame(void)
{
  	/*
  	Colors_clear,  
	Colors_white, 
	Colors_black,
	Colors_dtred,    
	Colors_thkgreen,  	/*深绿  */
	/*Colors_weakgreen, 	/*浅绿  */
	/*Colors_thkblue1, 	/*深蓝1 */
	/*Colors_thkblue2,	/*深蓝2 */
	/*Colors_thkblue3,	/*深蓝3 */
	/*Colors_weakblue1,	/*浅蓝1 */
	/*Colors_weakblue2,	/*浅蓝2 */
	/*Colors_weakpurple,	/*浅紫  */
	/*Colors_orange,		/*橙色  */
	/*Colors_midyellow,	/*中黄  */
	/*Colors_lemyellow,	/*柠檬黄*/
	/*Colors_gray,
	/*COLOR_MAX
	(120,60,100,30)
	(120,100,240*2 ,240);
 	(120,340,240*2,80)
	(120,340,240*2,80)
  	*/
  	/*  GFMDrawRectangle(100,60,240*2+40,440,COLOR_blue_gray, 1);
  	  
  	  GFMDrawRectangle(120,120,100,20,COLOR_blue_gray, 1);
  	  
  	  GFMDrawRectangle(100,60,240*2+40,2,Colors_weakpurple, 1);
          GFMDrawRectangle(100,60,2,440,Colors_weakpurple, 1);
          FNTDrawText(0, 0, 120,  120, "当前模式:汉字输入");
          
          FNTDrawText(0, 0, 290,  120, "F3/#键切换输入模式");	
          FNTDrawText(0, 0, 490,  120, "菜单键删除");
  	 
  	 
  	  
  	  FNTDrawText(0, 1, 260,  80, "东太拼音输入法");
  	  
  	  GFMDrawRectangle( 120,140,240*2,240,Colors_weakpurple, 1);/*绘画编辑区*/
  	   
  	  ShowLrList(lrview0);
  	 /* GFMDrawRectangle(120,120,150,20,COLOR_blue_gray, 1);*/
          FNTDrawText(0, 0, 270,  INF_TXT_TOP,"当前模式:汉字输入" );	
          FNTDrawText(0, 0, 125,  INF_TXT_TOP, "OK键确定");
          FNTDrawText(0, 0, 460,  INF_TXT_TOP, "退出/返回键取消");
          
	  DrawCellFrame(cellview);
        	
         
}



/*lr0,lr1复用此绘画框架,*/
 static void DrawLr0Frame(void *p)
 { 
 	pLRVIEW pview = (pLRVIEW )p;
 	int i;
 	int drawstartx;
	void (*DrawCellFunc)(void * ,int ,int ,int ,int ,int ,int );
	
	
        
        drawstartx = pview->localx + LR_CELL_WIDTH / 2;
	/*if(pview->OwnerDrawCell)*/
	DrawCellFunc = pview->OwnerDrawCell;
	
#ifdef _WIN32
	
     	 CDC *dc = AfxGetApp()->GetMainWnd()->GetDC();
	
    
	 /*绘画框架*/
	 dc->FillRect(CRect(pview->localx,pview->localy  ,
		 pview->localx + pview->width,pview->localy + pview->high + 20),
		 &CBrush(RGB(161,161,161)));
#else 
         GFMDrawRectangle(pview->localx,pview->localy, pview->width, pview->high,Colors_weakpurple,1);
#endif

	 /*绘画单元*/
	 for( i = 0 ;i < pview->ospnum;i++)
	 {
		 if( i == pview->coursorx)
		  (*DrawCellFunc)(pview,i * LR_CELL_WIDTH + drawstartx,pview->localy + pview->high /2 - LR_CELL_HIGH / 2,/*	焦点状态CELL*/
		  drawstartx +  (i+1) * LR_CELL_WIDTH,pview->high /2 + LR_CELL_HIGH / 2,pview->baseindex + i,0);
		 else if(pview->baseindex + i >= pview->cellnum)/*消除不存再的单元画面*/
			  GFMDrawRectangle( i * LR_CELL_WIDTH + drawstartx + 30,pview->localy + pview->high /2 - LR_CELL_HIGH / 2,/*	焦点状态CELL*/
			  LR_CELL_WIDTH,  LR_CELL_HIGH ,Colors_weakpurple,1); 
		 else
		  (*DrawCellFunc)(pview,i * LR_CELL_WIDTH + drawstartx,pview->localy + pview->high /2 - LR_CELL_HIGH / 2,/*一般状态CELL*/
		  drawstartx + (i+1) * LR_CELL_WIDTH, pview->high /2 + LR_CELL_HIGH / 2,pview->baseindex + i,0); 
	 }
     
	 /*绘画指示箭头*/
	if(!pview->locked  )
		DrawLrArows( pview);
#ifdef _WIN32
	 AfxGetApp()->GetMainWnd()->ReleaseDC(dc);
#endif


}

 
static void DrawLr0Cell(void *p,int x,int y,int right,int bottom,int index,int color)
 {
 	 pLRVIEW pview = (pLRVIEW )p;
	 if(pview->locked || pview->cellnum <=0 ) return ;
#ifdef _WIN32
	
	 CDC *dc = AfxGetApp()->GetMainWnd()->GetDC();
	 CBrush  brush(color);
	
	 dc->SelectObject(brush);

	 dc->Rectangle(CRect(x,y,right,bottom));
#else
	
	 if(pview->cellnum <=0) return ;
	 if(index - pview->baseindex == pview->coursorx)
	   DrawLr0Text(pview,x,y, index,Colors_white);
	 else
	   DrawLr0Text(pview,x,y , index,Colors_thkblue1);
#endif
#ifdef _WIN32
	 AfxGetApp()->GetMainWnd()->ReleaseDC(dc);
#endif

 }

 
static  void DrawLr0Text(void *pt,int x,int y ,int index,int color)
{
	  pLRVIEW pview = (pLRVIEW )pt;
	 char *p = GetLrListData(pview,index);
	 char buf[3];
	 int startx;
	 int i;
#ifdef _WIN32
	 CDC *dc = AfxGetApp()->GetMainWnd()->GetDC();
	 dc->SetBkMode(0);
	 dc->SetTextColor(color);
	 if(p)
		 dc->TextOut(x,y,p);
#else
         if(p)
        	FNTDrawText(color,0,x + 30,y,p);/*0:画16位字体,1:24位字体*/
         else
         	return;
#endif
	 if(index - pview->baseindex == pview->coursorx)
	 {
	 	memset(hzbuf,0,HZBUF_LEN);
		GetHzRangeBySpell(p,hzbuf);
		buf[2] = 0;
		
		 startx = x - pview->coursorx * LR_CELL_WIDTH;
		for( i = 0;i < pview->ospnum;i++)
		{
		  buf[0] = hzbuf[i*2];
		  buf[1] = hzbuf[i*2+ 1];
		  
#ifdef _WIN32
 		  dc->TextOut(startx,y + 25,buf);
#else
		  FNTDrawText(color,1,startx + 30,y + 25,buf);/*0:画16位字体,1:24位字体*/
#endif

		  startx += LR_CELL_WIDTH;
		}
	 }
#ifdef _WIN32
	 AfxGetApp()->GetMainWnd()->ReleaseDC(dc);
#endif
     
}


 
static void DrawLr1Cell(void *p,int x,int y,int right,int bottom,int index,int color)
 {
 	
 	 pLRVIEW pview = (pLRVIEW )p;
	 if(pview->locked || pview->cellnum <=0 ) return ;
#ifdef _WIN32
	
	 CDC *dc = AfxGetApp()->GetMainWnd()->GetDC();
	 CBrush  brush(color);
	
	 dc->SelectObject(brush);

	 dc->Rectangle(CRect(x,y,right,bottom));
#else
	
#endif 
         if(pview->cellnum <=0) return ;
	 if(index - pview->baseindex == pview->coursorx)
	   DrawLr1Text(pview,x,y, index,Colors_white);
	 else
	   DrawLr1Text(pview,x,y , index,Colors_thkblue1);

#ifdef _WIN32
	 AfxGetApp()->GetMainWnd()->ReleaseDC(dc);
#endif

}


static  void DrawLr1Text(void * pt,int x,int y ,int index,int color)
{
	 pLRVIEW pview = (pLRVIEW )pt;
	 char *p = GetLrListData(pview,index);
	 char buf[3];
	 
#ifdef _WIN32
	 CDC *dc = AfxGetApp()->GetMainWnd()->GetDC();
	 dc->SetBkMode(0);
	 dc->SetTextColor(color);
	 if(p)
		 dc->TextOut(x,y +25,p);
	 
#else
         if(p)
         {
        	FNTDrawText(color,1,x + 24,y+25,p);/*0:画16位字体,1:24位字体*/
        	sprintf(buf,"%d",index - pview->baseindex + 1);
        	FNTDrawText(color,0,x + 30,y,buf);/*0:画16位字体,1:24位字体*/
         }
#endif
	 
#ifdef _WIN32
	 AfxGetApp()->GetMainWnd()->ReleaseDC(dc);
#endif
     

}


/*****************************************************************************\

以下为TT逻辑函数模块,包括输入规则过滤,单词组合,验证等

\******************************************************************************/


static  void AddHzToLr(pLRVIEW lr,char *str)/*把内码加入某个LR*/
{
     	int len = strlen(str);
     	char txt[4] = {0};
     	int i;
     	for(i = 0;i < len;i+=2)
     	{ 
     		
     	   txt[0] = str[i];
     	   txt[1] = str[i+1];
     	   
     	   AddToLrList(lr,txt);	
     	}
}

static   void AddPickToList(void)/*用户输入加入LR1或cellview*/
{
    char txt[3] = {0};
    
    switch(curpick[0])
    {
      case ' ':/*加入空格到编辑区*/
      	 AddToCellView(cellview," "); 
      	 DrawCellFrame(cellview);
      break;
      case ',':
      {
        /*加入特殊字符到LR1*/
         /*LockLrList(lrview0);*/ 
         /*FreeStrListItems(lrview1);*/
        int len = strlen(curpick);
        int i,j;
      
        FreeLrListItems(lrview1);
        
        for(i = 0;i < len;i++)
        {
        	
        	
           if((curpick[i] & 0x80)== 0x80)	
           {
             txt[0] = curpick[i];
             i++;
             txt[1] = curpick[i];	
           }
           txt[0] = curpick[i];
           txt[1] = 0;
           AddToLrList(lrview1,txt);
        }  
         
#ifdef TT_DEBUT
		FNTDrawText(0,rand() % 6, 60, 200, "enterned AddPickToList!case ','");
#endif
        UnLockLrList(lrview1);
        ShowLrList(lrview1);	
      }	
      break;
      default:/*输入ABC处理*/
      {
      	int len = strlen(curpick);
        int i,j;
      
        
        for(i = 0;i < len;i++)
        {
        	
       
           txt[0] = curpick[i];
           txt[1] = 0;
           AddToLrList(lrview1,txt);
           txt[0] -= 32;
           AddToLrList(lrview1,txt);
        }  
      	
      }
    }
    	
}

/*
  加入字母的反向操作
*/
void decopt(void)
{
  picklen--;
  
#ifdef TT_DEBUT
		FNTDrawText(rand() % 6, 0, 60, 400, "void decopt(void)");
#endif
		      	 
  if(picklen > 0)
  {
	  memset(cmatrix[picklen],0,6);
	  ProcessDic();
  }
  else
  {
	 picklen = 0;
         tt_status = WAIT_ENTERN;
         			       
	#ifdef TT_DEBUT
	FNTDrawText(rand() % 6, 0, 60, 260, "decopt:  tt_status = WAIT_ENTERN;");
	#endif
  }
  
  
}

void SetCurPick(int num)
{
  if(0<=num && num <= 9)
	curpick =  BtnDef[num];
}

/*
type :当前输入法类型
#define  HZMODE  0
#define  ASCMODE 1
#define  NUMMODE 2
*/
#if 0
void  OkOnLrView0(int type,int status)/*发生在lrview上的OK事件处理*/
{
    switch(type)
   {
	case HZMODE:
	   break;
	case ASCMODE:
	   break;
	case NUMMODE:
	   break;
   }                  
}
void  OkOnLrView1(int type)/*发生在lrview1上的OK事件处理*/
{
   switch(type)
   {
	case HZMODE:
	   break;
	case ASCMODE:
	   break;
	case NUMMODE:
	   break;
   }
}
#endif
/*
 推测 ->求证->取码->确定
 对于用户输入的拼音来讲,进行语法分析判断正确与否是最好的办法,这里采用比较笨的办法,把
 应该语法分析的部分变为一个搜索过程。

 1。这里要做的事情是第一是首先根据用户输入的第一组字符推断出1-2位的正确的拼音,并把它们保存到
 LR列表中,然后从缓冲中取出默认的几个汉字绘画出。
 2。第二次的输入处理在第一组的基础上推断出2-3位的正确输入,并把它们保存入LR列表中,此时拼音组
 的范围应该减少了,重复汉字加入动作。
 3。第。。。递归以上的过程,直到用户把所有的拼音输完。
 4。用户在LR中选中某项按下OK键后把相应拼音的所有汉字加入LR2中,然后操作落于LR2上,用户在此选择
*/

/*词推测抛弃抛弃原则*/

/* g原则:对阶四的输入若发现上阶存在G则立即全部抛掉该输入,对三阶输入,若上层没有N则丢掉该阶的g,有N则丢掉上阶N之外的单词*/
/*n原则:2阶输入若上阶没有存在A或E立即抛掉*/
/*n原则:3阶输入若上界没有存在A,E,I,O立即抛掉*/
/*a原则:三阶输入若上阶不是H立即抛掉*/
/*i原则:三阶输入,若上阶没有E或A,C立即抛掉I*/
/*e原则:三阶输入若上阶没有i立即抛掉*/
/*o原则:三阶输入若上阶不是A或U立即抛掉*/
/*U原则:三阶输入若上阶不是o立即抛掉*/

/*阶四 :立抛原则 + g原则 */
/*阶三 :可出现在第三节的单词 + 立抛原则 */
/*可以出现第二阶的单词 + 立抛原则*/

/*阶上升原则:若经过以上规则过滤后,上阶屡空,则提升该阶到上阶*/
static  int FindC(char *str,char c)
{
  int len = strlen(str);
  while(--len >= 0)
	  if(str[len] == c)
		  return 1;
  return 0;
}
 
static  int InCbc6(char c)
{
	char cbc6[] = "g";
	if(cbc6[0] == c)
		return 1;
	return 0;

}

static  int InCbc5(char c)
{
	char cbc5[] = "ing";
	int i = 3;
	while(--i>=0)
		if(c == cbc5[i])
		return 1;
	return 0;
}
 
static  int InCbc4(char c)
{
	char cbc4[] = "aiougn";
	int i = 6;
	while(--i>=0)
	  if(c == cbc4[i])
	  return 1;
	return  0;
}

 
static  int InCbc3(char c)
{
  char cbc3[] = "aeioung";
  int i = 7;
  while(--i>=0)
	  if(c == cbc3[i])
	  return 1;
  return  0;
}

 
static  int InCbc2(char c)
{
  char cbc2[] ="aeiounh";
  int i = 7;
  while(--i>=0)
	  if(c == cbc2[i])
	  return 1;
  return  0;
}


static  int InCbc1(char c)
{
  char cbc1[]= "iuv";/*不能出现在第一阶的单词*/
  int i = 3;
  while(--i>=0)

⌨️ 快捷键说明

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