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

📄 selebox.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
📖 第 1 页 / 共 2 页
字号:
           OptFunc = selectbox->optfunc;
           if (OptFunc != NULL) {
              (*OptFunc)();
           }
        }
        return TRUE;
     }
}

void InitSelectBox(SELECTBOX *selectbox)
{
     INT8U i;
     selectbox->cursor = 0;
     selectbox->line   = 0;
     selectbox->textlen = 0;
     for (i=0;i<6;i++)  selectbox->asciichar[i]=0;
     LetterInit();//y
}
//y
void DestroySelectBox(SELECTBOX *selectbox)
{
     selectbox = selectbox;
     StopTmr(KeyInTmr);
     RemoveTmr(KeyInTmr);
}
//y
void CreateSelectBox(SELECTBOX *selectbox)
{
     LockOutBox(selectbox->box);
     ReadSelectBoxPara(selectbox);
     ShowSelectBoxText(selectbox,0);
}

void IndicateSelectBox(SELECTBOX *selectbox)
{
     INT8U TempFlag;
     LockOutBox(selectbox->box);
     selectbox->line = 0;
     ReadSelectBoxPara(selectbox);
     ShowSelectBoxText(selectbox,1);
     TempFlag = SelMode;
     if(SignFlag==TRUE) SelMode = 1;
     if (selectbox->textlen > 0) {
        ReverseSelectBoxCursor(selectbox,1);
     }
     SelMode = TempFlag;
}

void UnIndicateSelectBox(SELECTBOX * selectbox)
{
     LockOutBox(selectbox->box);
     selectbox->line = 0;
     selectbox->textlen = 0;
     memset(selectbox->asciichar,0,sizeof(selectbox->asciichar));//清空asciichar
     memset(selectbox->seltext, ' ',sizeof(selectbox->seltext));
     ReadSelectBoxPara(selectbox);
     ShowSelectBoxText(selectbox,1);
}

void SetSelectionMode(SELECTBOX *selectbox, INT8U mode)
{
     if (mode > CHINESESELECTMODE) mode = CHINESESELECTMODE;
     selectbox->selmode = mode;
}

INT8U GetSeletionMode(SELECTBOX *selectbox)
{
     return selectbox->selmode;
}
//将textptr的内容拷贝到selebox中,以及设置输入法为selmode
void  AddDplyTextToSelectBox(SELECTBOX *selectbox,INT8U *textptr,INT16U textlen,INT8U selmode)
{
     if (textlen > MAXSELECTTEXTLEN) {
        textlen = MAXSELECTTEXTLEN;
     }
     memcpy(selectbox->seltext,textptr,textlen);
     selectbox->textlen = textlen;
     SetSelectionMode(selectbox,selmode);
}
//返回当前光标的字
INT8U *GetSelectedText(SELECTBOX *selectbox)
{
     INT8U index;
     LockOutBox(selectbox->box);
     ReadSelectBoxPara(selectbox);
     index = LineLen * selectbox->line + selectbox->cursor;
     return  &selectbox->seltext[index];
}
//将备选汉字显示到selebox中
void DplyHZText(SELECTBOX *selectbox)
{ 
     GetChineseMessage(P_Y_index[(selectbox->cursor)/2 + (selectbox->line)*8], &maptable);
     wordaddrbase = PYMatchAddr[(selectbox->cursor+16*selectbox->line)];
     wordaddrbase = (wordaddrbase<<8) + PYMatchAddr[selectbox->cursor+1+(selectbox->line)*16];
     memset(selectbox->seltext, NULL, sizeof(selectbox->seltext));
     AddDplyTextToSelectBox(selectbox,maptable.chinese, maptable.chlen * 2,CHINESESELECTMODE);
}

void DplyPHRText(SELECTBOX * selectbox)
{
     INT8U NumofPHR = 0,i;
     BOOLEAN TEMPBOOL;

     memset(PHRMatchAddr, 0x00, sizeof(PHRMatchAddr));
     TEMPBOOL = SearchPhraseByWord(wordaddrbase+(selectbox->cursor)+(selectbox->line)*16, PHRMatchAddr, &NumofPHR);
     memset(selectbox->seltext, NULL, sizeof(selectbox->seltext));
     if(TEMPBOOL==FALSE) return;//error
     if(NumofPHR==0) {//该字无词组
	 memcpy(PHRMatchAddr, (INT8U*)PHRASEUSUAL_BASE, 16);//常用字
	 NumofPHR = 16;
	 for(i=0;i<(NumofPHR/2);i++) {
	    usualword[2*i] = *(INT8U*)(GBCODE_BASE + (INT16U)(PHRMatchAddr[2*i])*0x100+PHRMatchAddr[2*i+1]);
	    usualword[2*i+1] = *(INT8U*)(GBCODE_BASE + (INT16U)(PHRMatchAddr[2*i])*0x100+PHRMatchAddr[2*i+1]+1);
	 }
         AddDplyTextToSelectBox(selectbox, usualword, NumofPHR, CHINESESELECTMODE);//加对无词组的处理
     }else{
	 memcpy(&(PHRMatchAddr[NumofPHR]), (INT8U*)PHRASEUSUAL_BASE, 16);//常用字
	 NumofPHR += 16;
	 for(i = 0;i<(NumofPHR / 2);i++) {
	    pinyin_string[2*i]   = *(INT8U*)(GBCODE_BASE + (INT16U)(PHRMatchAddr[2*i])*0x100+PHRMatchAddr[2*i+1]);
	    pinyin_string[2*i+1] = *(INT8U*)(GBCODE_BASE + (INT16U)(PHRMatchAddr[2*i])*0x100+PHRMatchAddr[2*i+1]+1);
       	 }
         AddDplyTextToSelectBox(selectbox,pinyin_string,NumofPHR,CHINESESELECTMODE);
     }
}

void DplyPHRText2(SELECTBOX * selectbox)
{
     INT8U NumofPHR = 0,i;
     BOOLEAN TEMPBOOL;
     INT16U  TEMPADDRS;

     TEMPADDRS = PHRMatchAddr[(selectbox->cursor)+(selectbox->line)*16];
     TEMPADDRS = (TEMPADDRS<<8) + PHRMatchAddr[(selectbox->cursor)+1+(selectbox->line)*16];
     memset(PHRMatchAddr, 0x00, sizeof(PHRMatchAddr));
     TEMPBOOL = SearchPhraseByWord(TEMPADDRS, PHRMatchAddr, &NumofPHR);
     memset(selectbox->seltext, NULL, sizeof(selectbox->seltext));
     if(TEMPBOOL==FALSE) return;//error
     if(NumofPHR==0) {//该字无词组
	 memcpy(PHRMatchAddr, (INT8U*)PHRASEUSUAL_BASE, 16);//常用字
	 NumofPHR = 16;
	 for(i=0;i<(NumofPHR/2);i++) {
	    usualword[2*i] = *(INT8U*)(GBCODE_BASE + (INT16U)(PHRMatchAddr[2*i])*0x100+PHRMatchAddr[2*i+1]);
	    usualword[2*i+1] = *(INT8U*)(GBCODE_BASE + (INT16U)(PHRMatchAddr[2*i])*0x100+PHRMatchAddr[2*i+1]+1);
	 }
         AddDplyTextToSelectBox(selectbox, usualword, NumofPHR, CHINESESELECTMODE);//加对无词组的处理
     }else{
         memcpy(&(PHRMatchAddr[NumofPHR]), (INT8U*)PHRASEUSUAL_BASE, 16);//常用字
	 NumofPHR += 16;
	 for(i = 0;i<(NumofPHR / 2);i++) {
	    pinyin_string[2*i]   = *(INT8U*)(GBCODE_BASE + (INT16U)(PHRMatchAddr[2*i])*0x100+PHRMatchAddr[2*i+1]);
	    pinyin_string[2*i+1] = *(INT8U*)(GBCODE_BASE + (INT16U)(PHRMatchAddr[2*i])*0x100+PHRMatchAddr[2*i+1]+1);
       	 }
         AddDplyTextToSelectBox(selectbox,pinyin_string,NumofPHR,CHINESESELECTMODE);
     }
}
static void UsualWordInput(SELECTBOX* selectbox)
{
     INT8U i;
     INPUTSTATE = PHRASESELECTSTATE;
     memcpy(PHRMatchAddr, (INT8U*)PHRASEUSUAL_BASE, 16);//常用字
     for(i=0;i<(16/2);i++) {
         usualword[2*i] = *(INT8U*)(GBCODE_BASE + (INT16U)(PHRMatchAddr[2*i])*0x100+PHRMatchAddr[2*i+1]);
         usualword[2*i+1] = *(INT8U*)(GBCODE_BASE + (INT16U)(PHRMatchAddr[2*i])*0x100+PHRMatchAddr[2*i+1]+1);
     }
     AddDplyTextToSelectBox(selectbox, usualword, 16, CHINESESELECTMODE);
}

static void SignInput(SELECTBOX* selectbox)
{
     SignFlag = TRUE;
     INPUTSTATE = EDITINPUTSTATE;
     KeyFlag = FirstKey;
     LockOutBox(selectbox->box);
     ReadSelectBoxPara(selectbox);
     StopTmr(KeyInTmr);
     memset(selectbox->asciichar, 0x00, sizeof(selectbox->asciichar));
     AddDplyTextToSelectBox(selectbox, ENG_BD,strlen((INT8S*)ENG_BD), selectbox->selmode);
     ClearPyBox();
     IndicateSelectBox(selectbox);
}
/*
********************************************************************************
                       PYBOX SETTING
********************************************************************************
*/
void ShowPYBoxText(SELECTBOX *selectbox, TEXTBOX *pybox)
{
     pybox->textlen = 6;
     pybox->text = matchpy[(selectbox->cursor) / 2 + selectbox->line * 8];
     RefreshTextBox(pybox);
}
static BOOLEAN CheckKeyValue(INT8U keyvalue)
{           
    if(IsInRange(keyvalue, KEY_0, KEY_9)) return TRUE;
    if((KEY_UP == keyvalue) || (KEY_DOWN == keyvalue) || (KEY_XING == keyvalue) || (KEY_ACK == keyvalue) 
       || (KEY_NCK == keyvalue) || (KEY_CLR == keyvalue) || (KEY_JING == keyvalue)) return TRUE;
    return FALSE;
}
BOOLEAN SelectBox_HdlKey(SELECTBOX * selectbox)	  
 {
     void    (*ExecFunc)(void);
     void    (*OptFunc)(void);
     INT8U  key;

     key = GetCurLcdKey();
     if(!CheckKeyValue(key)) return TRUE;
     if((key!=KEY_UP)&&(key!=KEY_DOWN)&&(key!=KEY_XING)&&(key!=KEY_ACK)&&(key!=KEY_CLR)&&(key!=KEY_0)&&(key!=KEY_1)) 
     {
        SignFlag = FALSE;
      //	key  = 	GetInputValue();
     }

    // Printu("key:\n");              
    // Printu("%x  ",key);
         
     switch (key) {
        case KEY_UP:
           MovUpSelection(selectbox,SignFlag);
	   if((selectbox->selmode==ASCIISELECTMODE)&&(SignFlag==FALSE)) {
	       StopTmr(KeyInTmr);
	       StartTmr(KeyInTmr, SECOND, 2);
	   }
	   if(INPUTSTATE == PINYININPUTSTATE) RefreshCurPY();
           return TRUE;
        case KEY_DOWN:
           MovDownSelection(selectbox,SignFlag);
	   if((selectbox->selmode==ASCIISELECTMODE)&&(SignFlag==FALSE)) {
	       StopTmr(KeyInTmr);
	       StartTmr(KeyInTmr, SECOND, 2);
	   }
	   if(INPUTSTATE == PINYININPUTSTATE) RefreshCurPY();
           return TRUE;
        case KEY_ACK:
	   if ((selectbox->selmode==ASCIISELECTMODE)||(SignFlag==TRUE)) {//E文输入状态
	      DplyLetter();
	      StopTmr(KeyInTmr);
	      KeyFlag = FirstKey;
	      SWITCHFLAG = TRUE;//焦点切换而不删除editbox当前光标的内容
	      SignFlag = FALSE;
	      INPUTSTATE = EDITINPUTSTATE;
	      return FALSE;
	   }
	   if (INPUTSTATE == EDITINPUTSTATE) {//中文输入状态
	      return FALSE;
	   } else {
//              if (INPUTSTATE == PINYININPUTSTATE) DsplayHZText();
              ExecFunc = selectbox->execfunc;
              if (ExecFunc != NULL) (*ExecFunc)();
              return TRUE;
	   }
        case KEY_NCK:
	   return FALSE;
        case KEY_CLR:
           if((selectbox->selmode==ASCIISELECTMODE)||(SignFlag==TRUE)) {//E文输入状态
	      UnIndicateSelectBox(selectbox);//清空selebox
	      StopTmr(KeyInTmr);
	      KeyFlag = FirstKey;
	      SWITCHFLAG = TRUE;
	      SignFlag = FALSE;
	      INPUTSTATE = EDITINPUTSTATE;
	      return FALSE;
	   }
           if (INPUTSTATE == PINYININPUTSTATE) {
              if (DelAsciiChar(selectbox)==FALSE) {
                  SWITCHFLAG = TRUE;
                  return FALSE;
	      } else return TRUE;
           } else {
	      INPUTSTATE = EDITINPUTSTATE;
	      SWITCHFLAG = TRUE;
	      ExecFunc = selectbox->emptyfunc;
	      if (ExecFunc != NULL) {
                 (*ExecFunc)();
              }
	      //RefreshCurPY();
              return FALSE;//焦点转移
	   }
        case KEY_2:
        case KEY_3:
        case KEY_4:
        case KEY_5:
        case KEY_6:
        case KEY_7:
        case KEY_8:
        case KEY_9:
           if(selectbox->selmode==ASCIISELECTMODE) return SeleLetter(selectbox, key);
	   if((selectbox->selmode==CHINESESELECTMODE)&&((INPUTSTATE==PINYINSELECTSTATE)||(INPUTSTATE==PHRASESELECTSTATE))) {
	      memset(selectbox->asciichar,0,sizeof(selectbox->asciichar));
	   }
	   return InputAsciiChar(selectbox,key);
        case KEY_1:
	   if(selectbox->selmode==ASCIISELECTMODE) {
	       if(SignFlag==TRUE){
	          SignFlag = FALSE;
		  KeyFlag = RepeatKey;
	       }
               return DplySpace();
	   }
	   SignFlag = FALSE;
	   UsualWordInput(selectbox);
	   OptFunc = selectbox->optfunc;
           if (OptFunc != NULL) (*OptFunc)();
	   return TRUE;
        case KEY_0:
	   if(selectbox->selmode==ASCIISELECTMODE) {
	       if(SignFlag==TRUE){
	          SignFlag = FALSE;
		  KeyFlag = RepeatKey;
	       }
               return DplySpace();
	   }else {
  	       if(INPUTSTATE==EDITINPUTSTATE) return FALSE;
  	       else return TRUE;
	   }
	case KEY_XING://标点输入
           SignInput(selectbox);
           return TRUE;
	case KEY_JING:
	   return FALSE;
        default:
           return FALSE;
     }
}

⌨️ 快捷键说明

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