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

📄 afce_zi.c

📁 用于嵌入式系统的输入法程序 里面有完整的系统实现原码
💻 C
📖 第 1 页 / 共 5 页
字号:



























static Boolean  
afImeClearEvent      ( chiEditContext   *chiContext_p,
                       SignalBuffer  *signalBuffer_p)
{
   Boolean keyValid = TRUE;
   switch (chiContext_p->imeState)
   {
   	case IME_STATE_PY_INPUT:/*在输入选择的状态,按了CLEAR键*/
   	case IME_STATE_BISHUN_INPUT:
   	case IME_STATE_COMPONENT_INPUT:
   	    /*清除一个输入*/
         keyValid = afClearInput(chiContext_p);
         //chiContext_p->currentHzInfo.currentHzIndex=0;         
         break;
         
      case IME_STATE_PY_HZ_SELECT:/*此处处理从选字状态的C键重新回到拼音选择状态*/                
          /*输入拼音的时候,如果按了删除键,则重新取上一组的拼音内容,将表置空*/                    
          keyValid = afGetPyGroup(chiContext_p);
          //keyValid = afGetPyHzGroup(chiContext_p);
          chiContext_p->imeState=IME_STATE_PY_INPUT;
          
          #if 0
          /*先在inputValue中填一个空格,后面在afClearInput中会统一减去*/             
          chiContext_p->inputValue[chiContext_p->inputSerial]=0x20;
          chiContext_p->inputSerial++;
          chiContext_p->inputValue[chiContext_p->inputSerial]=0;                             
          keyValid = afClearInput(chiContext_p);                     
          #endif
         // chiContext_p->currentHzInfo.currentHzIndex=0;          
          break;
            
       case IME_STATE_SE_INPUT:/*此处处理SE下按C键*/
           #if 0
           chiContext_p->inputValue[chiContext_p->inputSerial]=0x20;
           chiContext_p->inputSerial++;
           chiContext_p->inputValue[chiContext_p->inputSerial]=0;                             
           #endif
           keyValid = afClearInput(chiContext_p);           
           break;
            
       case IME_STATE_ASSOCIATION_SELECT:/*此处处理从联想状态返回*/
           hzExitDataBody.handlerIsUnloaded = TRUE;
           hzExitDataBody.inputChineseFlag = TRUE;
           afglSendHandlerExitSig(chiContext_p->myHandlerId,
                                  chiContext_p->parentHandlerId,
                                  sizeof(AfHzExitDataBody),
                                  &hzExitDataBody);
           afshUnloadHandler(chiContext_p->myHandlerId);		  
           break;
           
       default:
           keyValid = FALSE;
           break;
    } 
    return keyValid;
}

/***************************************************************************
*  function:     afClearInput
*  Description:  清除最后一个按键输入
****************************************************************************/
Boolean afClearInput(chiEditContext *chiContext_p)
{
    Boolean  retVal = TRUE;

    /*输入部件以后,选择的还是部件,然后按C键*/
    if(( Zi8IsComponent(elementBuffer[0]))&& chiContext_p->currentPyBsh[1]==0)
    {
       /*clear the elementBuffer*/
        memset (&elementBuffer[0], '\0', sizeof(elementBuffer));
        hzExitDataBody.handlerIsUnloaded = TRUE;
        hzExitDataBody.inputChineseFlag = TRUE;
        afglSendHandlerExitSig(chiContext_p->myHandlerId,
                               chiContext_p->parentHandlerId,
                               sizeof(AfHzExitDataBody),
                               &hzExitDataBody);
        afshUnloadHandler(chiContext_p->myHandlerId);
    }

    if(chiContext_p->inputSerial>0)
    {
 	    chiContext_p->inputValue[--(chiContext_p->inputSerial)]='\0';
        if(chiContext_p->inputSerial ==0)
        {
            /*如果是部件输入法,开始输入然后选择,可能选的还是一个部件,也可能就是一个字,如果选择的是一个
            部件,后面还可能继续输入。在删除的时候,删到最后,将后来输入的全部删除了,chiContext_p->inputSerial ==0
            但是还会剩下一个原来选择的部件,就是这里了*/
            if(( Zi8IsComponent(elementBuffer[0])))
            {
     	        retVal = afGetStrokeHzInfo(chiContext_p);
            } 
            /*除去上面这种特殊的情况,就是真的全都删空了,退出*/
            else
            {
     	        hzExitDataBody.handlerIsUnloaded = TRUE;
     	        hzExitDataBody.inputChineseFlag = TRUE;
     	        afglSendHandlerExitSig(chiContext_p->myHandlerId,
                                       chiContext_p->parentHandlerId,
                                       sizeof(AfHzExitDataBody),
                                       &hzExitDataBody);
     	        afshUnloadHandler(chiContext_p->myHandlerId);
            }
        }
        else/*还剩有输入的内容*/
        {
            switch (chiContext_p->imeState)
            {        
                case IME_STATE_PY_INPUT: /*正在输入拼音*/
                /*输入拼音的时候,如果按了删除键,则重新取上一组的拼音内容,将表置空*/
                    memset(&chiContext_p->pyOrSEgroupNumTable[0],'\0',
                          sizeof(chiContext_p->pyOrSEgroupNumTable));
                    chiContext_p->pyOrSEcurrentPageNo = 0;
                    retVal = afGetPyGroup(chiContext_p);
                    /*重新取上一组拼音以后,应该将当前拼音位置设为第一个拼音的位置*/
                    chiContext_p->currentPyOrSEGroupInfo.currentPosInLib =
                       chiContext_p->currentPyOrSEGroupInfo.firstPosInLib;
                    memset(&chiContext_p->currentHzGroupInfo,'\0',
                           sizeof(chiContext_p->currentHzGroupInfo));
                    retVal = afGetPyHzGroup(chiContext_p);
                    
                    break;
    	
                case IME_STATE_BISHUN_INPUT: /*正在输入部件*/
                    memset(&chiContext_p->currentHzGroupInfo,'\0',
                          sizeof(chiContext_p->currentHzGroupInfo));                    
    	            retVal = afGetBhHzInfo(chiContext_p);            
                    break;
   	     
   	            case IME_STATE_COMPONENT_INPUT: /*正在输入部件*/
   	                memset(&chiContext_p->currentHzGroupInfo,'\0',
                          sizeof(chiContext_p->currentHzGroupInfo));                    
                    retVal = afGetStrokeHzInfo(chiContext_p);
   	                break; 
   	        
                case IME_STATE_SE_INPUT: /*正在输入SE*/
                    memset(&chiContext_p->pyOrSEgroupNumTable[0],'\0',
                          sizeof(chiContext_p->pyOrSEgroupNumTable));
                    chiContext_p->pyOrSEcurrentPageNo = 0;
                    retVal = afGetSmartEnGroup(chiContext_p);
                    chiContext_p->currentPyOrSEGroupInfo.currentPosInLib =
                       chiContext_p->currentPyOrSEGroupInfo.firstPosInLib;
                    break;
        
                default:
                    retVal = FALSE;		      
                    break;            
            }   
        }
    }
    else
    {
        retVal = FALSE;
    }
    return(retVal);
}










static Boolean
afImeSelectEvent      ( chiEditContext   *chiContext_p,
                        SignalBuffer  *signalBuffer_p)
{
	Boolean keyValid = TRUE;
    int i=0;
	switch (chiContext_p->imeState)
    {
      case IME_STATE_SE_INPUT:              /*智能英语状态*/
         /*智能英文选择时,要判断是否为*号。如果是,则不让选择*/
         /*否则很简单,直接将英文放回,并退出输入法*/      
         if(chiContext_p->currentPyBsh[0]==0x002A)/*确保输入有内容*/
         {
          	keyValid = FALSE;
          	break;          	
         }
         else
         {
         Int8 selectSEIndex = chiContext_p->currentPyOrSEGroupInfo.currentPosInLib - \
                              chiContext_p->currentPyOrSEGroupInfo.firstPosInLib ;
         memset(&chiContext_p->inputValue[0],'\0',sizeof(chiContext_p->inputValue));
         while(chiContext_p->currentPyOrSEGroupInfo.groupData[selectSEIndex][i]!=0)
         {	 hzExitDataBody.hzUniCode=
         	    (Int16)chiContext_p->currentPyOrSEGroupInfo.groupData[selectSEIndex][i];
         	 hzExitDataBody.handlerIsUnloaded = FALSE;
         	 hzExitDataBody.inputChineseFlag = FALSE;
         	 afglSendHandlerExitSig(chiContext_p->myHandlerId,
         	   			           chiContext_p->parentHandlerId,
                                   sizeof(AfHzExitDataBody),
                                   &hzExitDataBody);		          
             chiContext_p->currentPyBsh[i]=0;
             i++;
         }
      /*added by wangqing 2001/05/28 add a blank for every word
       and move unloadhandler out of while*/
         hzExitDataBody.hzUniCode= 0x20;
         hzExitDataBody.handlerIsUnloaded = TRUE;
         hzExitDataBody.inputChineseFlag = FALSE;
         afglSendHandlerExitSig(chiContext_p->myHandlerId,
                                chiContext_p->parentHandlerId,
                                sizeof(AfHzExitDataBody),
                                &hzExitDataBody);
         afshUnloadHandler(chiContext_p->myHandlerId);
      /*added by wangqing 2001/05/28 end*/
         }
         break;
         
      case IME_STATE_PY_INPUT:              /*拼音输入状态*/
          if(chiContext_p->currentHzGroupInfo.currentSelHz[0]==0)/*确保输入有内容*/
          {
	              keyValid = FALSE;
	 		        break;
          }
          /*拼音(或笔顺或部件)输入完了,确定时焦点来到选字区*/
          chiContext_p->imeState = IME_STATE_PY_HZ_SELECT;
         // chiContext_p->currentHzGroupInfo.currentHzIndex=0;
	       /*将选中的这个拼音COPY到currentPyBsh*/
	       {
	          
	           Int8 i;
	           i =chiContext_p->currentPyOrSEGroupInfo.currentPosInLib 
	               - chiContext_p->currentPyOrSEGroupInfo.firstPosInLib;	              
	           utStrcpyUcs2(chiContext_p->currentPyBsh,
	             chiContext_p->currentPyOrSEGroupInfo.groupData[i]);
	       }
          break;

      case IME_STATE_BISHUN_INPUT:          /*笔顺输入状态,和汉字选择状态在一起*/
      case IME_STATE_COMPONENT_INPUT:       /*部件输入状态,和汉字选择状态在一起*/
          /*拼音(或笔顺或部件)输入完了,确定时焦点来到选字区*/
          chiContext_p->imeState = IME_STATE_ASSOCIATION_SELECT;
          afSelHz(chiContext_p);
          break;
      
      case IME_STATE_PY_HZ_SELECT:          /*拼音输入后汉字选择状态*/
          chiContext_p->imeState = IME_STATE_ASSOCIATION_SELECT;
      case IME_STATE_ASSOCIATION_SELECT:    /*选字以后的联想状态*/ 
          afSelHz(chiContext_p);
          /*选了字以后,要将拼音的内容清空*/
           chiContext_p->pyOrSEcurrentPageNo = 0;          
	      break;    
	  default:
           keyValid = FALSE;
           break;    
	     
    }
    return keyValid;
	
}

static Boolean 
afImeScrollUpEvent      ( chiEditContext   *chiContext_p,
                          SignalBuffer  *signalBuffer_p)
{
	Boolean keyValid = TRUE;
	switch (chiContext_p->imeState)
    {
        case IME_STATE_SE_INPUT:              /*智能英语状态*/                     
            if (chiContext_p->pyOrSEcurrentPageNo==0)
            {
            	keyValid = FALSE;
            }
            else
            {
                chiContext_p->pyOrSEcurrentPageNo--; 
                keyValid = afGetSmartEnGroup(chiContext_p);
                  /*重新取上一组se以后,应该将当前se位置设为第一个se的位置*/
                chiContext_p->currentPyOrSEGroupInfo.currentPosInLib =
                       chiContext_p->currentPyOrSEGroupInfo.firstPosInLib;
	   	    }
            break;   
            
        case IME_STATE_PY_INPUT:              /*拼音输入状态*/
            if (chiContext_p->pyOrSEcurrentPageNo==0)
            {
            	keyValid = FALSE;
            }
            else
            {
                chiContext_p->pyOrSEcurrentPageNo--; 
                keyValid = afGetPyGroup(chiContext_p);
                 /*重新取上一组拼音以后,应该将当前拼音位置设为第一个拼音的位置*/
                chiContext_p->currentPyOrSEGroupInfo.currentPosInLib =
                       chiContext_p->currentPyOrSEGroupInfo.firstPosInLib;
                memset(&chiContext_p->currentHzGroupInfo,'\0',
                    sizeof(chiContext_p->curren

⌨️ 快捷键说明

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