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

📄 control.c.svn-base

📁 keilC底层软件,能够结合硬件产生加解密密文,具有安全保护功能.
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
			if(SerialNum[1]==0x30) {
				SerialNum[1]=0x20;		
			}
			ZDHDrawTab(PersonPointer->ListBoxX1+2,DisplayYAdd+2,2,0x00,&SerialNum[1]);
		}
		/*留下滚动栏位置*/
		KeyValidFg = PersonPointer->ListBoxX2-1;
		if (TotalPerson > DisplayTotalLine) {
			KeyValidFg=PersonPointer->ListBoxX2-7;
		}
		/*反白当前行*/
		if (PersonPointer->NowFocus%DisplayTotalLine == TempByte) {	
			YJHReverseRectangle(PersonPointer->ListBoxX1+1,DisplayYAdd+1,
			KeyValidFg,DisplayYAdd+17);
		}
		/*恢复原来光标*/
		if ((HistoryFocus != 0xff)&&
		(HistoryFocus%DisplayTotalLine == TempByte)&&
		(HistoryFocus != PersonPointer->NowFocus)&&
		RefreshFlag!=1) {
			TempByte1 = PersonPointer->ListBoxY1+2+(HistoryFocus%DisplayTotalLine)*(PersonPointer->LineInterval+12);
			YJHReverseRectangle(PersonPointer->ListBoxX1+1,TempByte1+1,KeyValidFg,TempByte1+17);
		}
		DisplayYAdd = DisplayYAdd+PersonPointer->LineInterval+12;
	}
	return(KeyValue);
}

////history down
//涵数说明:两字符比较大小
//入口参数:两字符指针*pstr1,*pstr2和比较长度strlen
//返回值:=0 相等;=1大于;=2小于
uchar	strcmp1(ucharx *pstr1,ucharx *pstr2,uchar strlen)
{
	uchar	i;

	for(i=0;i<strlen;i++)
	{
		if(*(pstr1+i)>*(pstr2+i))return(1);
		else if(*(pstr1+i)<*(pstr2+i))return(2);
	}
	return(0);
}


//======================================================================//
//涵数说明:将一个整型数转为ASCII型字符串(定长 3字节,不足高端填 0x30)
//入口参数:查询方式和条件存在于结构 findhistory 中
//出口参数:无
void	IntToAsc(uint num,ucharx *pAsc)
{
	uchar	i,j;
	
	i=num/100;
	*pAsc=i|0x30;
	j=(num-i*100)/10;
	*(pAsc+1)=j|0x30;
	*(pAsc+2)=((num-i*100-j*10)/1)|0x30;
}

//涵数说明:将一个BCD数转为ASCII型字符串,BCD数长strlen字节,转换后的长度为 2*strlen字节
//入口参数:BCD数存放指针 pzhm,BCD数长strlen,ASCII型字符串指针 dsppzhm
//出口参数:无
void	BcdToAsc(ucharx *pzhm,ucharx *dsppzhm,uchar strlen)
{
	uchar	i;
	
	for(i=0;i<strlen;i++)
	{
		*(dsppzhm+2*i)=(*(pzhm+i))>>4&0x0f|0x30;
		*(dsppzhm+2*i+1)=(*(pzhm+i))&0x0f|0x30;
	}
}


uchar	batch_ctrl(findhistoryx *p_ctrl,uchar	key)
{
  ucharx	*p_history;
  ucharx	*p_bmp;
	uintx	oldfirst;
	uintx	oldsecond;
	ucharx	oldcurrline;
	uintx	oldfirstlabel;
	uintx	oldsecondlabel;
	uintx	oldcurrlinelabel;
  uint    nums;
  uchar	  i,y;
  ucharx	  oldcurr=0;
  ucharx	labelno[3];
  ucharx	dsppzhm[8];
  uchar	  f_refresh=0;	//整个列表框刷新标志(refrsh,select,pageup,pagedn)
  uchar	  f_headref=1;
  uchar	  f_headrev=0;	//选择框反白标志
  uchar	  f_cursor=0;		//光标条上下移动(选择框中文本刷新)标志
	ucharx 	old_flag=0;
    uintx   old_records;
  if(key==KEYESC)return(KEYESC);
 if(p_ctrl->records!=0)		//至少有一条以上的记录时才处理键
  {
    switch(key)
    {
    case KEYREFRSH:		//初始化刷新下查 p_ctrl->maxdspline 条
      {
		oldcurrline=p_ctrl->currline;
		oldfirstlabel=p_ctrl->ppzhm[0].label;
		oldsecondlabel=p_ctrl->ppzhm[1].label;
		old_records=p_ctrl->records;
		oldfirst=p_ctrl->ppzhm[0].offset;
		oldsecond=p_ctrl->ppzhm[1].offset;
		oldcurrlinelabel=p_ctrl->ppzhm[oldcurrline-1].label;


		if((IsDoInit==2)&&(p_ctrl->mode==6))
		{
			old_flag=1;
			IsDoInit=0;
		}
        if((IsDoInit==0)||(IsDoInit==1))
        {
          p_ctrl->ppzhm[0].offset=0;
          p_ctrl->ppzhm[0].label=1;
          
          if(p_ctrl->mode==6)
          {
            p_ctrl->records=SearchAll(p_ctrl,(ucharx *)PLJL_START,PLJL_MAX_LEN);			//批量记录            //计算列表框内可以显示的行数(此项属性p_ctrl->maxdspline不受控,由外框尺寸计算而修改)
            if(p_ctrl->records==0)
            {
              //YJHClearWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x00);
              //YJHDrawRectangle(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x03);
              return(NOKEY);
            }
            p_ctrl->maxdspline=(p_ctrl->box_bottom-p_ctrl->box_top-2)/(p_ctrl->lineinter);	
            if((p_ctrl->maxdspline)>(p_ctrl->records)) p_ctrl->maxdspline=(uchar)(p_ctrl->records);	//实际显示的行数
//            SearchNow(p_ctrl,(ucharx *)PLJL_START,((p_ctrl->maxdspline)|0x80),0x0,PLJL_MAX_LEN);
            SearchNow(p_ctrl,(ucharx *)PLJL_END,((p_ctrl->maxdspline)|0x80),0x0,PLJL_MAX_LEN);

			if(old_flag==1)
			{
				
				if(oldcurrline>(p_ctrl->records))	p_ctrl->currline=(uchar)p_ctrl->records;

				if((p_ctrl->records)>(p_ctrl->maxdspline))
				{
					
//					if(oldfirstlabel>(p_ctrl->records))	oldfirstlabel=p_ctrl->records;
//					if((oldfirstlabel+p_ctrl->maxdspline-1)>p_ctrl->records)
//						p_ctrl->ppzhm[0].label=p_ctrl->records-p_ctrl->maxdspline+1;

					p_ctrl->ppzhm[0].label=oldfirstlabel;
					p_ctrl->ppzhm[0].offset=oldfirst;
					if((oldcurrline==1)&&(old_records>p_ctrl->records))
					{
						p_ctrl->ppzhm[0].offset=oldsecond;
						p_ctrl->ppzhm[0].label=oldsecondlabel;		
					}
					if((p_ctrl->ppzhm[0].label>oldcurrlinelabel)&&(old_records>p_ctrl->records))	p_ctrl->ppzhm[0].label--; 


	                SearchNow(p_ctrl,(ucharx *)PLJL_END,((p_ctrl->maxdspline)|0x80),0x0,PLJL_MAX_LEN);
         		}
		  	}
          }
          else
          {
            p_ctrl->records=SearchAll(p_ctrl,(ucharx *)HISTORY_START,550);	//历史记录            //计算列表框内可以显示的行数(此项属性p_ctrl->maxdspline不受控,由外框尺寸计算而修改)
            if(p_ctrl->records==0)
            {
              //YJHClearWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x00);
              //YJHDrawRectangle(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x03);
              return(NOKEY);
            }
            p_ctrl->maxdspline=(p_ctrl->box_bottom-p_ctrl->box_top-2)/(p_ctrl->lineinter);	
            if((p_ctrl->maxdspline)>(p_ctrl->records)) p_ctrl->maxdspline=(uchar)(p_ctrl->records);	//实际显示的行数
//            SearchNow(p_ctrl,(ucharx *)HISTORY_START,((p_ctrl->maxdspline)|0x80),0x0,HISTORY_MAX_LEN);
            SearchNow(p_ctrl,(ucharx *)HISTORY_END,((p_ctrl->maxdspline)|0x80),0x0,HISTORY_MAX_LEN);
          }
        }
        
        else
        {
//          if(p_ctrl->mode==6)
//          {
//          	SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline)|0x80,0x0,PLJL_MAX_LEN);	//顺序上查 p_ctrl->maxdspline 条      
//          	SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline)|0x80,0x0,PLJL_MAX_LEN);	//顺序上查 p_ctrl->maxdspline 条      
//          }
//          else
//          {
//          	SearchNow(p_ctrl,(ucharx *)HISTORY_START,((p_ctrl->maxdspline)|0x80),0x0,HISTORY_MAX_LEN);
          	SearchNow(p_ctrl,(ucharx *)HISTORY_END,((p_ctrl->maxdspline)|0x80),0x0,HISTORY_MAX_LEN);
//          }
        }
        f_refresh=1;
      }break;
    case KEYUP:
      {

////////xht add        
		if((p_ctrl->currline==1)&&(p_ctrl->records<=p_ctrl->maxdspline))
        {
          oldcurr=p_ctrl->currline;
          p_ctrl->currline=(unsigned char)p_ctrl->records;
          f_cursor=1;
           break; 
        }                   
        
/////////end xht add        
        if(p_ctrl->currline==1)		//如果当前行=首行
        {
          if(p_ctrl->mode==6)
          {
//            SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline)&0x7f,0x1,PLJL_MAX_LEN);	//顺序上查 p_ctrl->maxdspline 条
            SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline)&0x7f,0x1,PLJL_MAX_LEN);	//顺序上查 p_ctrl->maxdspline 条
          }
          else
          {
//            SearchNow(p_ctrl,(ucharx *)HISTORY_START,(p_ctrl->maxdspline)&0x7f,0x1,HISTORY_MAX_LEN);
            SearchNow(p_ctrl,(ucharx *)HISTORY_END,(p_ctrl->maxdspline)&0x7f,0x1,HISTORY_MAX_LEN);
          }
          f_refresh=1;
        }
        else
        {
          oldcurr=p_ctrl->currline;
          p_ctrl->currline--;
          f_cursor=1;
        }
         TimerType=TimerKeyOn;
     }break;
    case KEYDOWN:
      {

        
///////////xht add 		
		
		if((p_ctrl->currline==p_ctrl->records)&&(p_ctrl->records<=p_ctrl->maxdspline))
        {
          oldcurr=p_ctrl->currline;
          p_ctrl->currline=1;
          f_cursor=1;
           break; 
        }                   
       
//////////end of xht add        
        if(p_ctrl->currline==p_ctrl->maxdspline)		//如果当前行=尾行
        {
          if(p_ctrl->mode==6)
          {
//            SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline)|0x80,0x1,PLJL_MAX_LEN);	//顺序上查 p_ctrl->maxdspline 条
            SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline)|0x80,0x1,PLJL_MAX_LEN);	//顺序上查 p_ctrl->maxdspline 条
          }
          else
          {
//            SearchNow(p_ctrl,(ucharx *)HISTORY_START,(p_ctrl->maxdspline)|0x80,0x1,HISTORY_MAX_LEN);
            SearchNow(p_ctrl,(ucharx *)HISTORY_END,(p_ctrl->maxdspline)|0x80,0x1,HISTORY_MAX_LEN);
          }
          f_refresh=1;
        }
        else
        {
          oldcurr=p_ctrl->currline;
          p_ctrl->currline++;
          f_cursor=1;
        }
        TimerType=TimerKeyOn;
      }break;
    case KEYPAGEUP:
      {
    		if((p_ctrl->records)<=(p_ctrl->maxdspline)) break;
        if(p_ctrl->mode==6)
        {
//          SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline-1)&0x7f,(p_ctrl->maxdspline-1),PLJL_MAX_LEN);	//顺序上查 p_ctrl->maxdspline 条
//          SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline)&0x7f,1,PLJL_MAX_LEN);
          SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline-1)&0x7f,(p_ctrl->maxdspline-1),PLJL_MAX_LEN);	//顺序上查 p_ctrl->maxdspline 条
          SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline)&0x7f,1,PLJL_MAX_LEN);
        }
        else
        {
//          SearchNow(p_ctrl,(ucharx *)HISTORY_START,(p_ctrl->maxdspline-1)&0x7f,(p_ctrl->maxdspline-1),HISTORY_MAX_LEN);
//          SearchNow(p_ctrl,(ucharx *)HISTORY_START,(p_ctrl->maxdspline)&0x7f,1,HISTORY_MAX_LEN);
          SearchNow(p_ctrl,(ucharx *)HISTORY_END,(p_ctrl->maxdspline-1)&0x7f,(p_ctrl->maxdspline-1),HISTORY_MAX_LEN);
          SearchNow(p_ctrl,(ucharx *)HISTORY_END,(p_ctrl->maxdspline)&0x7f,1,HISTORY_MAX_LEN);
        }
        f_refresh=1;
        TimerType=TimerKeyOn;
      }break;
    case KEYPAGEDOWN:
      {
    		if((p_ctrl->records)<=(p_ctrl->maxdspline)) break;
        if(p_ctrl->mode==6)
        {
//          SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline-1)|0x80,(p_ctrl->maxdspline-1),PLJL_MAX_LEN);	//顺序上查 p_ctrl->maxdspline 条
//          SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline)|0x80,1,PLJL_MAX_LEN);
          SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline-1)|0x80,(p_ctrl->maxdspline-1),PLJL_MAX_LEN);	//顺序上查 p_ctrl->maxdspline 条
          SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline)|0x80,1,PLJL_MAX_LEN);
        }
        else
        {
//          SearchNow(p_ctrl,(ucharx *)HISTORY_START,(p_ctrl->maxdspline-1)|0x80,(p_ctrl->maxdspline-1),HISTORY_MAX_LEN);
//          SearchNow(p_ctrl,(ucharx *)HISTORY_START,(p_ctrl->maxdspline)|0x80,1,HISTORY_MAX_LEN);
          SearchNow(p_ctrl,(ucharx *)HISTORY_END,(p_ctrl->maxdspline-1)|0x80,(p_ctrl->maxdspline-1),HISTORY_MAX_LEN);
          SearchNow(p_ctrl,(ucharx *)HISTORY_END,(p_ctrl->maxdspline)|0x80,1,HISTORY_MAX_LEN);
        }
        f_refresh=1;
        TimerType=TimerKeyOn;
      }break;
    case KEYENTER:
      {
        Save_RestoreHistory(&(p_ctrl->properties_len),&TEMPSTART[0],111);
        if(p_ctrl->listvalid==1) 
        {
          YJHClearWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x00);
          p_ctrl->listvalid=0;
          //					YJHRestoreWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x1,&pwindow[0]);
        }
        
        i=p_ctrl->currline;		//当前光标行所在的历史记录在总条数中的绝对同步
        RecordOffset=p_ctrl->ppzhm[i-1].offset;
        p_history=(ucharx *)(HISTORY_START+RecordOffset*HISTORY_LEN);	//找到该条历史记录的起始地址
        if(p_ctrl->mode==6)
        {
          p_history=(ucharx *)(PLJL_START+RecordOffset*HISTORY_LEN);	//开始读当前光标行所在的历史记录
        }

/*
        for(i=0;i<13;i++)
        {
          YJHReadFlashToExterMem(0x2,HistoryLen[i],p_history+PhistoryOffset[i],(ucharx *)(&NowMM.Account[0]+PNowmmOffset[i]));
        }
        MakeDataToAsc();		//将NomMM中的有关BCD码数据转换为ASCII数据
*/
        return(KEYENTER);
      }break;
      
    case KEYSELECT:
      {
        /*
        f_headref=0;
        if(p_ctrl->kind!=0)		//如果带选择框
        {
          if(p_ctrl->listvalid==0)
          {
            p_ctrl->listvalid=1;
            YJHSaveWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,&LCD_Bffer[0]);
            f_refresh=1;
          }
          else
          {
            p_ctrl->listvalid=0;
            YJHClearWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x00);
            RestoreWindow((ucharx *)&LCD_Bffer[0]);
            i=p_ctrl->currline;		//当前光标行所在的历史记录在总条数中的绝对同步
            RecordOffset=p_ctrl->ppzhm[i-1].offset;
            p_history=(ucharx *)(HISTORY_START+RecordOffset*HISTORY_LEN);	//找到该条历史记录的起始地址
            if(p_ctrl->mode==6)
            {
              p_history=(ucharx *)(PLJL_START+RecordOffset*HISTORY_LEN);	//开始读当前光标行所在的历史记录
            }
            for(i=0;i<13;i++)
            {
              YJHReadFlashToExterMem(0x2,HistoryLen[i],p_history+PhistoryOffset[i],(ucharx *)(&NowMM.Account[0]+PNowmmOffset[i]));
            }
            MakeDataToAsc();		//将NomMM中的有关BCD码数据转换为ASCII数据
            f_refresh=0;
            f_headrev=1;
				        return(KEYSELECT);
          }
        }
        */
        return(KEYSELECT);
      }break;
      
    case KEYREV:
      {	
        f_headrev=1;
      }break;
      
    case KEYESC:
      {
        return(KEYESC);
      }break;
      
    default:
      {
        return(NOKEY);
        break;
      }
    }
  }
  
  if(f_refresh==1)
  {	
    if(p_ctrl->listvalid==1)	//如果列表框部分有效才显示
    {
      YJHClearWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x00);
      YJHDrawRectangle(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x03);
      
      y=p_ctrl->first_y;
      for(i=0;i<(p_ctrl->maxdspline);i++)
      {
        IntToAsc(p_ctrl->ppzhm[i].label,&labelno[0]);	//整型数转为可直接显示的字符串
//        DrawTab(p_ctrl->firstlable_x, y, 2, &labelno[1]);
		if(labelno[0]=='0')
		{
			if(labelno[1]=='0')
	        	DrawTab(p_ctrl->firstlable_x+6, y, 1, &labelno[2]);
			else
	        	DrawTab(p_ctrl->firstlable_x+3, y, 2, &labelno[1]);
		}
		else

⌨️ 快捷键说明

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