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

📄 control.c.svn-base

📁 keilC底层软件,能够结合硬件产生加解密密文,具有安全保护功能.
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
	{
		PersonType=2;
		MoneyFlag=1;						//MoneyFlag==1所有授权员不检查授权金额
	}
	
	switch(PersonType)
	{
	case 0:								//搜索合法签发员总数
	{
		for(Counter1=0;Counter1<PersonTotalNum;Counter1++)
		{
			TempAddress=PersonType*PersonTotalNum+Counter1;
			TempAddress*=OnePersonLength;
			TempAddress+=FirstPersonAdd;
			ZDHReadFlashToInterMem(ConfigFilePage,1,TempAddress,(ucharx *)(&Flag[0]));

			if(Flag[0]==0x55)
			{
			Pointer->PersonTable[Counter].SerialNum=Counter1;//记录人员索引号
			YJHReadFlashToExterMem(ConfigFilePage,NameLen,(ucharx *)(TempAddress+3),&(Pointer->PersonTable[Counter].Name[0]));//记录人员姓名
			PersonNumber+=1;
			Counter+=1;

			}
			TempAddress+=OnePersonLength;
		}
		break;
	}
	
	case 1:									//搜索合法审核员总数
	{
		for(Counter1=0;Counter1<PersonTotalNum;Counter1++)
		{
			TempAddress=PersonType*PersonTotalNum+Counter1;
			TempAddress*=OnePersonLength;
			TempAddress+=FirstPersonAdd;
			ZDHReadFlashToInterMem(ConfigFilePage,1,TempAddress,(ucharx *)(&Flag[0]));	//读取人员标志

			if(Flag[0]==0x55)				//人员有效?
			{
				ZDHReadFlashToInterMem(ConfigFilePage,1,TempAddress+15+PersonPointer->AcctIndex,(ucharx *)(&Flag[1]));//读取人员账号标志

				if(IsQuickQF!=1) 
					Flag[1]=0x55;		//快速签发时过滤账号,否则不过滤
					
				if(Flag[1]==0x55)			//人员授权?
				{
					Pointer->PersonTable[Counter].SerialNum=Counter1;	//记录人员索引号
					YJHReadFlashToExterMem(ConfigFilePage,NameLen,(ucharx *)(TempAddress+3),&(Pointer->PersonTable[Counter].Name[0]));//记录人员姓名
					PersonNumber+=1;
					Counter+=1;
				}
			}
		}
		break;
	}
	case 2:
	{								//搜索合法授权员总数
		for(Counter1=0;Counter1<PersonTotalNum;Counter1++)
		{
			TempAddress=PersonType*PersonTotalNum+Counter1;
			TempAddress*=OnePersonLength;
			TempAddress+=FirstPersonAdd;
			ZDHReadFlashToInterMem(ConfigFilePage,1,TempAddress,(ucharx *)(&Flag[0]));//读取人员标志
			
			if(Flag[0]==0x55)
			{
				ZDHReadFlashToInterMem(ConfigFilePage,1,TempAddress+15+PersonPointer->AcctIndex,(ucharx *)(&Flag[1]));//读取人员账号权限标志

				if(IsQuickQF!=1) 
					Flag[1]=0x55;		//快速签发时过滤账号,否则不过滤
				Flag[2]=0;
				
				if(MoneyFlag!=1)
				{
					YJHReadFlashToExterMem(ConfigFilePage,8,(ucharx *)(AuthorMoneyAdd+Counter1*9),&MoneyBuffer[0]);	//读取每个授权员的授权金额
					Flag[2]=XramStringCompare((ucharx *)&(PersonPointer->MoneyLimit[0][0]),(ucharx *)(&MoneyBuffer[0]),8);//比较授权金额和当前金额
				}
				
				if((Flag[1]==0x55)&&(Flag[2]!=2))
				{
					Pointer->PersonTable[Counter].SerialNum=Counter1;	//记录人员索引号
					YJHReadFlashToExterMem(ConfigFilePage,NameLen,(ucharx *)(TempAddress+3),&(Pointer->PersonTable[Counter].Name[0]));//记录人员姓名
					PersonNumber+=1;
					Counter+=1;
				}
			}
		}			
		break;
	}
	
	default:	break;
	}
	
	return(PersonNumber);
	
}


uchar PersonSearch(PersonSelx *PersonPointer,uchar KeyValue)		//控件返回人员序号
{
	uchar TempByte,TempByte1;
	uchar HistoryFocus = 0xff,KeyValidFg = 0;
	uchar NowPageDispLine,DisplayTotalLine;
	uchar RefreshFlag = 1,TotalPerson,DisplayYAdd;
	ucharx SerialNum[3];
	ucharx TempBuffer[sizeof(PersonList)];
	PersonListx *PPointer = (PersonListx *)&TempBuffer[0];

	TimerType = TimerKeyOn;
	/*返回*/
	if (KeyValue == KEYESC||KeyValue == KEYCLEAR) {
		return(KeyValue);
	}
	/*得到人员列表*/
	if(PersonPointer->PersonType>2)
	{
		TotalPerson=GetPersonNum(PPointer,PersonPointer,4);	//获取可选择人员总数,不比较授权金额
	}
	else
	{
		TotalPerson=GetPersonNum(PPointer,PersonPointer,PersonPointer->PersonType);//获取可选择人员总数,比较授权金额
	}

	/*得到列表框最大显示行*/
	DisplayTotalLine = 
	((PersonPointer->ListBoxY2)-(PersonPointer->ListBoxY1)-4)/((PersonPointer->LineInterval)+12);//计算当前条件下可以显示的总行数
	/*设置当前显示行数*/
	if (TotalPerson >= DisplayTotalLine) {
		NowPageDispLine = DisplayTotalLine;
	}
	else {
		NowPageDispLine = TotalPerson;				
	}
	/*一页显示完毕则不刷新整屏*/
	if (TotalPerson < DisplayTotalLine) {
		RefreshFlag = 0;			
	}
	/*如果光标超限则置到合法范围内*/
	TempByte = (TotalPerson-(PersonPointer->StartOfNumber+1));
	TempByte = TempByte%(DisplayTotalLine+1);
	TempByte1 = (TotalPerson/DisplayTotalLine)*DisplayTotalLine;
	if (((PersonPointer->NowFocus+1) > TempByte)&&
	(PersonPointer->StartOfNumber > TempByte1)) {
		PersonPointer->NowFocus = TempByte;			
	}
	/*允许弹出下拉菜单*/	
	if (PersonPointer->PopUpFlag==1) {					
		switch(KeyValue) {
			case KEYDOWN:		//下翻一条
				/*只有一条记录时不移动光标*/
				if (TotalPerson == 1) {
					break;		
				}
				/*保存上一次光标位置*/
				KeyValidFg = 1;
				HistoryFocus = PersonPointer->NowFocus;
				/*如果是最后一条,设置到第一条*/
				if (PersonPointer->StartOfNumber+PersonPointer->NowFocus >= 
				(TotalPerson-1)) {
					PersonPointer->NowFocus = 0;
					PersonPointer->StartOfNumber = 0;
				}
				/*如果光标是最后那么移动开始行位置*/
				else if((PersonPointer->NowFocus+1)%DisplayTotalLine == 0) {
					PersonPointer->StartOfNumber += 1;
				}
				/*只移动光标位置不刷新整个屏幕*/
				else {
					RefreshFlag = 0;
					PersonPointer->NowFocus += 1;
				}
				break;
			case KEYUP:		//上翻一条
				/*只有一条记录时不移动光标*/
				if (TotalPerson == 1) {
					break;		
				}
				/*保存上一次光标位置*/
				KeyValidFg = 1;
				HistoryFocus = PersonPointer->NowFocus;
				/*如果是第一条,设置到最后一条*/
				if ((PersonPointer->StartOfNumber == 0)&&
				(PersonPointer->NowFocus == 0)) {
					if (TotalPerson <= NowPageDispLine) {
						PersonPointer->NowFocus = TotalPerson-1;//指向最后一条
					}
					else {
						PersonPointer->NowFocus = TotalPerson%DisplayTotalLine-1;	//指向最后一条
					}
					if (TotalPerson <= DisplayTotalLine) {
						PersonPointer->StartOfNumber = 0;
					}
					else if (TotalPerson%DisplayTotalLine == 0) {
						PersonPointer->NowFocus = DisplayTotalLine-1;//指向最后一条
						PersonPointer->StartOfNumber = (TotalPerson/DisplayTotalLine)*DisplayTotalLine-DisplayTotalLine;
					}
					else {
						PersonPointer->StartOfNumber = (TotalPerson/DisplayTotalLine)*DisplayTotalLine;//指向最后一页的起始位置
					}
				}
				/*如果光标是最前那么移动开始行位置*/
				else if (PersonPointer->NowFocus == 0) {
					PersonPointer->StartOfNumber -= 1;
				}
				/*只移动光标位置不刷新整个屏幕*/
				else {
					RefreshFlag = 0;
					PersonPointer->NowFocus -= 1;
				}
				break;
			case KEYPAGEDOWN:	//下翻一页		//tjzdh 2003.9.28
				KeyValidFg = 1;
				/*如果只有一页,不操作*/
				if (DisplayTotalLine>TotalPerson) {
					return(NOKEY);
				}
				/*执行翻页*/
				if ((PersonPointer->StartOfNumber+DisplayTotalLine) < TotalPerson) {
					PersonPointer->StartOfNumber += DisplayTotalLine;
					/*翻到最后一页,光标位置超出范围移到最后一行*/
					if (TotalPerson-PersonPointer->StartOfNumber < DisplayTotalLine) {
						if (PersonPointer->NowFocus >= (TotalPerson-PersonPointer->StartOfNumber-1)%DisplayTotalLine) {
							PersonPointer->NowFocus = TotalPerson-PersonPointer->StartOfNumber-1;
						}
					}
				}
				/*执行最后一页翻页操作,光标位置不变。开始行置为第一行*/
				else if ((PersonPointer->StartOfNumber) == (TotalPerson%DisplayTotalLine)) {
					PersonPointer->StartOfNumber = 0;
				}
				else if (PersonPointer->StartOfNumber >= (TotalPerson/DisplayTotalLine-1)*DisplayTotalLine) {
					PersonPointer->StartOfNumber = 0;
				}
				break;
			case KEYPAGEUP:		//上翻一页
				KeyValidFg = 1;
				/*如果只有一页,不操作*/
				if (DisplayTotalLine > TotalPerson) {
					return(NOKEY);
				}
				/*如果是第一页,指向最后一页*/
				if (PersonPointer->StartOfNumber == 0) {
					TempByte = (TotalPerson/DisplayTotalLine)*DisplayTotalLine;
					if (TotalPerson%DisplayTotalLine == 0) {
						PersonPointer->StartOfNumber = TempByte-NowPageDispLine;
					}
					else {
						PersonPointer->StartOfNumber = TempByte;
					}
					/*光标超出范围,把光标移到最后一行*/
					TempByte = (TotalPerson%DisplayTotalLine-1);
					if(PersonPointer->NowFocus > TempByte) {
						PersonPointer->NowFocus = TempByte;	//指向最后一条
					}
				}
				/*执行翻页操作*/
				else if ((PersonPointer->StartOfNumber) > DisplayTotalLine) {
					PersonPointer->StartOfNumber -= DisplayTotalLine;
				}
				/*如果前面不够一页,指向第一页*/
				else if (PersonPointer->StartOfNumber <= DisplayTotalLine) {
					PersonPointer->StartOfNumber = 0;
				}
				break;
			default:
				break;
		}
	}
	/*得到当前光标所指序号*/
	TempByte = PersonPointer->StartOfNumber+PersonPointer->NowFocus;
	PersonPointer->BackPerson = PPointer->PersonTable[TempByte].SerialNum;  //zdhyy 2003.01.06
	TempByte1 = PersonPointer->ListBoxX2-1;
	/*留下滚动栏位置*/
	if (TotalPerson > DisplayTotalLine) {
		TempByte1 = PersonPointer->ListBoxX2-7;
	}
	TempByte = PersonPointer->ListBoxY1+3+
	PersonPointer->NowFocus*(PersonPointer->LineInterval+12);
	switch(KeyValue) {
		case KEYFOCUSLIGHT: 
			/*由黑变坏*/
			ZDHReverseRectangle(PersonPointer->ListBoxX1+21,TempByte,
			TempByte1,TempByte+16,0x00);
			return(KeyValue);
		case KEYFOCUSBLACK:
			/*由灰变黑*/
			ZDHReverseRectangle(PersonPointer->ListBoxX1+21,TempByte,
			TempByte1,TempByte+16,0x01);
			return(KeyValue);
		case KEYREV:
			/*翻转*/
			YJHReverseRectangle(PersonPointer->PopDownX1+1,PersonPointer->PopDownY1+1,
			PersonPointer->PopDownX2-8,PersonPointer->PopDownY2);
			return(KeyValue);
		case KEYSINGLEREFRSH:
		case KEYREFRSH:		
			/*强制刷新*/
			KeyValidFg = 1;
			RefreshFlag = 1;
			break;
		case KEYENTER:
			KeyValidFg = 1;
			if (PersonPointer->PopUpFlag == 1) {
				/*如果要关闭下拉菜单则恢复窗口*/
				if (PersonPointer->PopDispFlag == 1) {
					PersonPointer->PopUpFlag = 0;
					/*反白下拉菜单*/
					YJHReverseRectangle(PersonPointer->PopDownX1+1,PersonPointer->PopDownY1+1,
					PersonPointer->PopDownX2-8,PersonPointer->PopDownY2);
					RestoreWindow((ucharx *)&LCD_Bffer[0]);	
				}
				else {
					return(KeyValue);
				}
			}
			break;
		case KEYSELECT: 
			KeyValidFg = 1;
			/*如果要展开下拉菜单则保存LCD原内容*/
			if (PersonPointer->PopUpFlag==0) {			
				PersonPointer->PopUpFlag = 1;
				YJHSaveWindow(PersonPointer->ListBoxX1,
				PersonPointer->ListBoxY1, PersonPointer->ListBoxX2,
				PersonPointer->ListBoxY2, &LCD_Bffer[0]);
				YJHClearWindow(PersonPointer->ListBoxX1,
				PersonPointer->ListBoxY1, PersonPointer->ListBoxX2,
				PersonPointer->ListBoxY2, 0x04);
				RefreshFlag = 1;
				break;
			}
			/*如果要关闭下拉菜单则恢复窗口*/
			else if (PersonPointer->PopDispFlag == 1) {
				PersonPointer->PopUpFlag = 0;
				RestoreWindow((ucharx *)&LCD_Bffer[0]);	
				/*反白下拉菜单*/
				YJHReverseRectangle(PersonPointer->PopDownX1+1,
				PersonPointer->PopDownY1+1, PersonPointer->PopDownX2-8,
				PersonPointer->PopDownY2);
				return(NOKEY);
			}
			else {
				return(NOKEY);
			}
	}
	/*如果列表框不显示,按KEYDOWN KEYUP翻转下拉菜单*/
	if (PersonPointer->PopUpFlag == 0) {
		if ((KeyValue == KEYDOWN)||(KeyValue == KEYUP)) {
			YJHReverseRectangle(PersonPointer->PopDownX1+1,
			PersonPointer->PopDownY1+1, PersonPointer->PopDownX2-8,
			PersonPointer->PopDownY2);
			return(KEYNEXTDOWN);
		}
	}
	/*无效按键返回*/
	if (KeyValidFg == 0) {
		return(NOKEY);					
	}
	/*显示下拉菜单*/
	if (PersonPointer->PopDispFlag == 1) {
		/*显示下拉图标*/
		DrawDownBox(PersonPointer->PopDownX1, PersonPointer->PopDownY1,
		PersonPointer->PopDownX2, PersonPointer->PopDownY2, 0x42, 0x03,
		TotalPerson);
		/*如果有人数,显示当前光标所指到的人名*/
		if (TotalPerson != 0) {
			TempByte = PersonPointer->StartOfNumber+PersonPointer->NowFocus;
			/*获取姓名长度*/
			TempByte1 = Remove_0xff(&PPointer->PersonTable[TempByte].Name[0],NameLen);
			TempByte1 = get_textlen(&PPointer->PersonTable[TempByte].Name[0],TempByte1);
			/*显示人名*/
			YJHStringDisplay(PersonPointer->PopDownX1+2, PersonPointer->PopDownY1+3,
			0x45, 0x03, &(PPointer->PersonTable[TempByte].Name[0]), TempByte1);
		}
	}
	/*不需要展开列表框则返回*/
	if (PersonPointer->PopUpFlag == 0) {
		return(KeyValue);		
	}
	/*刷新时显示下拉框*/
	if (RefreshFlag == 1) {						//展开下拉菜单
		/*显示下拉框*/
		YJHDrawRectangle(PersonPointer->ListBoxX1, PersonPointer->ListBoxY1,
		PersonPointer->ListBoxX2, PersonPointer->ListBoxY2, 0x42);
		/*判断是否显示滚动栏*/
		if (DisplayTotalLine < TotalPerson) {
			YJHDrawLine(PersonPointer->ListBoxX2-6, PersonPointer->ListBoxY1,
			PersonPointer->ListBoxX2-6, PersonPointer->ListBoxY2, 0x02);
		}
		DrawRollbar(PersonPointer->ListBoxX2-5, PersonPointer->ListBoxY1+1,
		PersonPointer->ListBoxY2, PersonPointer->StartOfNumber+1,
		DisplayTotalLine, TotalPerson);
	}
	DisplayYAdd = PersonPointer->ListBoxY1+2;
	for (TempByte = 0; TempByte < NowPageDispLine; TempByte++) {
		/*刷新时显示序号,人名*/
		if (RefreshFlag == 1) {
			/*过了最后一行,返回*/
			if (PersonPointer->StartOfNumber+TempByte == TotalPerson) {
				break;
			}
			/*得到姓名*/
			TempByte1 = Remove_0xff(&PPointer->PersonTable[PersonPointer->StartOfNumber+TempByte].Name[0],NameLen);
			TempByte1 = get_textlen(&PPointer->PersonTable[PersonPointer->StartOfNumber+TempByte].Name[0],TempByte1);//获取姓名长度
			/*显示姓名*/
			YJHStringDisplay(PersonPointer->ListBoxX1+28,DisplayYAdd+3,
			0x45,0x03,&PPointer->PersonTable[PersonPointer->StartOfNumber+TempByte].Name[0],TempByte1);
			/*显示序号*/
			IntToAsc(PersonPointer->StartOfNumber+TempByte+1,&SerialNum[0]);

⌨️ 快捷键说明

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