Ejemplo n.º 1
0
/************************************光标在备注处菜单**********************************************/
static char PhoneHandleBeiZhu(char *msg)
{
	FILE *fp;
	u8 dispbuff[30];
	int numPhone;

	clear_lcd();
	fp=fopen("PhoneBook","rb");
	if(fp!=NULL){		//如果有记录,则先把记录读到phonebuff 。
		#ifdef DEBUG_PRINTF
		printf("open PhoneBook success!!\n");
		#endif
		fread(dispbuff,10,1,fp);
	}else{
		text_out_to_row_x_Language2(2,40,"没有记录","没有记录");
		goto tuichu;
	}

	numPhone=*msg;		//如果msg==NULL,则会引起segmentation  fault。
	fseek(fp,10+numPhone*98+12+18+18+20,SEEK_SET);
	fread(dispbuff,sizeof(dispbuff),1,fp);
	fclose(fp);
	
	text_out_to_row_x_Language2(0,40,"【备注】","【备注】");
	my_DisplayBuff(dispbuff,1,2);

	tuichu:
	SetBLOverTime(10);
	SetAutoExitTime(10);
	WaitkeyAndAutoExit(10);
	return 0;
}
Ejemplo n.º 2
0
static char PhoneHandleNameDelete(char *msg)
{
	char temp;

	#ifdef DEBUG_PRINTF
	printf("msg=%d\n",*msg);
	#endif

	temp=PhoneDeleteARecord(*msg);
	clear_lcd();
	if(temp==RIGHT_return){
		text_out_to_row_x_Language2(2,46,"已删除","Deleted");
	}else{
		text_out_to_row_x_Language2(2,40,"删除失败","Delete failure");
	}

	return (WaitkeyAndAutoExit(10));
}
Ejemplo n.º 3
0
static char PhoneExplorer(char *msg)
{
	EFILE efile;
	u8 dispbuff[50];
	int i;
	struct OperateDisplay disp={0,0, 0,0,MaxRowOneScr ,1};
	unsigned char keyval;

	loop:
	clear_lcd();
	keyval=EepromFile_ReadData(dispbuff,10,file_phonebook);
	if(keyval==EepromFile_ReadOk){		//如果有记录,则先把记录读到phonebuff 。
		disp.MenuTotal=atoi((sc8*)dispbuff);
		if(disp.MenuTotal==0){
			text_out_to_row_x_Language2(40,2,"没有记录","No record");
			goto tuichu;
		}
	}else{
		text_out_to_row_x_Language2(2,40,"没有记录","No record");
		goto tuichu;
	}

	keyval=EepromFile_Open(file_phonebook,&efile);

	while(1){
		if(disp.flashflag){
			disp.flashflag=0;
			
			for(i=disp.StartLine;i<disp.EndLine&&i<disp.MenuTotal+disp.StartLine;i++){
				EepromFile_Seek(&efile,10+(disp.Menucnt-disp.curFlashRow+i)*98,EepromFile_SEEK_SET);
				EepromFile_read(dispbuff,12,&efile);
				steaddraw_pic_to_row_x(PhoneNameIco,0,i,12,12);
				text_out_to_row_x_fillSpace(i,16,dispbuff);
			}

			DispHighLightRow_to_x(16,disp.curFlashRow);			//高亮
		}

		keyval=GetKeyValue();
		if(keyval == KEY_NONE) continue;

		KeyEventPost();
		switch(keyval){ 
			case KEY_UP:
			my_OperateDisplay_KEY_UP(&disp);
			break;

			case KEY_DOWN:
			my_OperateDisplay_KEY_DOWN(&disp);
			break;

			case KEY_Enter:
			case KEY_RIGHT:
			if(HandlePhoneSelection(disp.Menucnt)==KEY_ReturnInitInterface){return KEY_ReturnInitInterface;}
			disp.flashflag=1;
			//fclose(fp);
			goto loop;

			case KEY_ReturnPrevious:
			case KEY_ReturnInitInterface:
			case KEY_WaitTimeout:
			//fclose(fp);
			return keyval;
		}

	}

	tuichu:
	return (WaitkeyAndAutoExit(10));
}
Ejemplo n.º 4
0
/************************************记录详情**********************************************/
static char HandlePhoneSelection(char numPhone)
{
	static u8 PhoneNumber[18],PhoneName[12],PhoneZuoJi[18],PhoneEmail[20],PhoneBeiZhu[30];

	EFILE efile;
	char dispbuff[11];
	u8 retval;
	static struct FunctionMenuAddIco2 Menu[5]={
		{PhoneNameIco,	PhoneName,	PhoneHandleName},
		{PhoneNumberIco,PhoneNumber,PhoneHandleNumber},
		{PhoneZuoJiIco,	PhoneZuoJi,	PhoneHandleZuoJi},
		{PhoneEmailIco,	PhoneEmail,	PhoneHandleEmail},
		{PhoneBeiZhuIco,PhoneBeiZhu,PhoneHandleBeiZhu},
	};
	struct OperateAddIco2 MenuOp={Menu,5,0 ,0,0,MaxRowOneScr, 1,0,0};

	if(Language[0]==LOCAL_LANGUAGE){
		strcpy((char *)PhoneNumber,(const char *)con_Chinese_PhoneNumber);
		strcpy((char *)PhoneName,(const char *)con_Chinese_PhoneName);
		strcpy((char *)PhoneZuoJi,(const char *)con_Chinese_PhoneZuoJi);
		strcpy((char *)PhoneEmail,(const char *)con_Chinese_PhoneEmail);
		strcpy((char *)PhoneBeiZhu,(const char *)con_Chinese_PhoneBeiZhu);
		//strcpy((char *)PhoneSave,(const char *)con_Chinese_PhoneSave);
	}
	else{
		strcpy((char *)PhoneNumber,(const char *)con_English_PhoneNumber);
		strcpy((char *)PhoneName,(const char *)con_English_PhoneName);
		strcpy((char *)PhoneZuoJi,(const char *)con_English_PhoneZuoJi);
		strcpy((char *)PhoneEmail,(const char *)con_English_PhoneEmail);
		strcpy((char *)PhoneBeiZhu,(const char *)con_English_PhoneBeiZhu);
		//strcpy((char *)PhoneSave,(const char *)con_English_PhoneSave);
	}

	loop:
	retval=EepromFile_ReadData((unsigned char *)dispbuff,10,file_phonebook);
	if(retval!=EepromFile_ReadOk){		//如果有记录,则先把记录读到phonebuff 。
		clear_lcd();
		text_out_to_row_x_Language2(2,40,"没有记录","No record");
		return WaitkeyAndAutoExit(10);
	}

	retval=EepromFile_Open(file_phonebook,&efile);

	EepromFile_Seek(&efile,10+numPhone*98,EepromFile_SEEK_SET);
	EepromFile_read(PhoneName,PhoneNameSize,&efile);
	EepromFile_read(PhoneNumber,PhoneNumberSize,&efile);
	EepromFile_read(PhoneZuoJi,PhoneZuoJiSize,&efile);
	EepromFile_read(PhoneEmail,PhoneEmailSize,&efile);
	EepromFile_read(PhoneBeiZhu,PhoneBeiZhuSize,&efile);

	while(1){
		MenuHandler_AddIco2(&MenuOp);
		if(MenuOp.RetVal==KEY_Enter){
			MenuOp.FucRetVal=MenuOp.Menu->MenuFuc(&numPhone);
			if(MenuOp.FucRetVal==KEY_WaitTimeout||MenuOp.FucRetVal==KEY_ReturnInitInterface){CurProc=CurProc_Return;return MenuOp.FucRetVal;}  
			else{
				clear_lcd();
				MenuOp.flashflag=1;
				goto loop;
			}
		}else{
			return MenuOp.RetVal;
		}
	}

	#undef PhoneNumber
	#undef PhoneName
	#undef PhoneZuoJi
	#undef PhoneEmail
	#undef PhoneBeiZhu
	//#undef PhoneSave
}
Ejemplo n.º 5
0
/************************************光标在姓名处菜单**********************************************/
static s8 PhoneHandleNameXiuGai(s8 *msg)
{
	static u8 PhoneNumber[18],PhoneName[12],PhoneZuoJi[18],PhoneEmail[20],PhoneBeiZhu[30],PhoneSave[5];
	char temp[50];
	int numPhone;
	EFILE efile;

	static struct FunctionMenuAddIco Menu[6]={
		{PhoneNameIco,	PhoneName,	PhoneNameSize,	PhoneAddName},
		{PhoneNumberIco,PhoneNumber,PhoneNumberSize,PhoneAddNumber},
		{PhoneZuoJiIco,	PhoneZuoJi,	PhoneZuoJiSize,	PhoneAddZuoJi},
		{PhoneEmailIco,	PhoneEmail,	PhoneEmailSize,	PhoneAddEmail},
		{PhoneBeiZhuIco,PhoneBeiZhu,PhoneBeiZhuSize,PhoneAddBeiZhu},
		{PhoneSaveIco,	PhoneSave,	PhoneSaveSize,	PhoneAddSave}
	};
	
	struct OperateAddIco MenuOp={Menu,6,0,0,0,MaxRowOneScr,1,0};

	if(Language[0]==LOCAL_LANGUAGE){
		strcpy((char *)PhoneNumber,(const char *)con_Chinese_PhoneNumber);
		strcpy((char *)PhoneName,(const char *)con_Chinese_PhoneName);
		strcpy((char *)PhoneZuoJi,(const char *)con_Chinese_PhoneZuoJi);
		strcpy((char *)PhoneEmail,(const char *)con_Chinese_PhoneEmail);
		strcpy((char *)PhoneBeiZhu,(const char *)con_Chinese_PhoneBeiZhu);
		strcpy((char *)PhoneSave,(const char *)con_Chinese_PhoneSave);
	}
	else{
		strcpy((char *)PhoneNumber,(const char *)con_English_PhoneNumber);
		strcpy((char *)PhoneName,(const char *)con_English_PhoneName);
		strcpy((char *)PhoneZuoJi,(const char *)con_English_PhoneZuoJi);
		strcpy((char *)PhoneEmail,(const char *)con_English_PhoneEmail);
		strcpy((char *)PhoneBeiZhu,(const char *)con_English_PhoneBeiZhu);
		strcpy((char *)PhoneSave,(const char *)con_English_PhoneSave);
	}

	clear_lcd();
	temp[0]=EepromFile_ReadData((unsigned char *)temp,10,file_phonebook);
	if(temp[0]!=EepromFile_ReadOk){		//如果有记录,则先把记录读到phonebuff 。
		clear_lcd();
		text_out_to_row_x_Language2(2,40,"没有记录","No record");
		return KEY_ReturnPrevious;
	}

	EepromFile_Open(file_phonebook,&efile);
	numPhone=*msg;		//如果msg==NULL,则会引起segmentation  fault。
	EepromFile_Seek(&efile,10+numPhone*98,EepromFile_SEEK_SET);
	EepromFile_read(PhoneName,PhoneNameSize,&efile);
	EepromFile_read(PhoneNumber,PhoneNumberSize,&efile);
	EepromFile_read(PhoneZuoJi,PhoneZuoJiSize,&efile);
	EepromFile_read(PhoneEmail,PhoneEmailSize,&efile);
	EepromFile_read(PhoneBeiZhu,PhoneBeiZhuSize,&efile);

	while(1){
		MenuHandler_AddIco(&MenuOp);
		if(MenuOp.RetVal==KEY_Enter){
			if(MenuOp.Menucnt==MenuOp.MenuTotal-1){
				if(PhoneDeleteARecord(numPhone)==RIGHT_return){
					MenuOp.FucRetVal=MenuOp.Menu->MenuFuc((u8 *)Menu,0);
				}
				
				return MenuOp.FucRetVal;
			}else{
				strcpy(temp,(sc8*)(MenuOp.Menu->MenuStr));

				MenuOp.FucRetVal=MenuOp.Menu->MenuFuc(MenuOp.Menu->MenuStr,MenuOp.Menu->size);

				if(strlen((sc8*)(MenuOp.Menu->MenuStr))==0){
					strcpy((s8*)(MenuOp.Menu->MenuStr),temp);
				}
			}
			if(MenuOp.FucRetVal==KEY_WaitTimeout||MenuOp.FucRetVal==KEY_ReturnInitInterface){CurProc=CurProc_Return;return MenuOp.FucRetVal;} 
			else{clear_lcd();MenuOp.flashflag=1;}
		}else{
			return MenuOp.RetVal;
		}
	}

	#undef PhoneNumber
	#undef PhoneName
	#undef PhoneZuoJi
	#undef PhoneEmail
	#undef PhoneBeiZhu
	#undef PhoneSave
}
Ejemplo n.º 6
0
//按拼音排序保存一个记录
static u8 PhoneAddSave(u8 *receive,u16 size)
{
	char phonebuff[4096],*pphonebuff,*endphonebuff;
	char bufftemp[100];
	struct FunctionMenuAddIco *MenuPhoneAdd;
	int num;
	int i;

	clear_lcd();
	DrawTitle_to_row_Language2(2,"正在保存...","saving...");
	MenuPhoneAdd=(struct FunctionMenuAddIco *)receive;

	EepromFile_ReadData((unsigned char *)phonebuff,sizeof(phonebuff)-1,file_phonebook);

	pphonebuff=phonebuff;
	memset(bufftemp,0,sizeof(bufftemp));
	memcpy(bufftemp,pphonebuff,10);
	pphonebuff+=10;
	num=atoi((sc8*)bufftemp);
	endphonebuff=pphonebuff+num*98;	//endphonebuff  指向最后一条记录后面的空白处
	if(endphonebuff>&phonebuff[sizeof(phonebuff)-200]){
		text_out_to_row_x_Language2(3,40,"电话本已满","Phone book full");
		goto tuichu;
	}

	memset(bufftemp,0,50);	//按拼音次序找到要写入记录的位置
	for(i=0;i<num;i++){
		memcpy(bufftemp,pphonebuff,12);
		if(strcmp(bufftemp,(sc8*)MenuPhoneAdd->MenuStr)>0)break;
		pphonebuff+=98;
	}

	while(endphonebuff>pphonebuff){		//把要写入记录位置处的所有记录向后移一个记录的位置
		memcpy(bufftemp,endphonebuff-98,98);
		memcpy(endphonebuff,bufftemp,98);
		endphonebuff-=98;
	}

	memcpy(pphonebuff,MenuPhoneAdd->MenuStr,12);	//读入要写入记录的信息
	MenuPhoneAdd++;pphonebuff+=12;
	memcpy(pphonebuff,MenuPhoneAdd->MenuStr,18);
	MenuPhoneAdd++;pphonebuff+=18;
	memcpy(pphonebuff,MenuPhoneAdd->MenuStr,18);
	MenuPhoneAdd++;pphonebuff+=18;
	memcpy(pphonebuff,MenuPhoneAdd->MenuStr,20);
	MenuPhoneAdd++;pphonebuff+=20;
	memcpy(pphonebuff,MenuPhoneAdd->MenuStr,30);

	num++;
	memset(bufftemp,0,10);
	sprintf(bufftemp,"%d",num);
	memcpy(phonebuff,bufftemp,10);

	i=EepromFile_WriteData((unsigned char*)phonebuff,num*99+100,file_phonebook);
	if(i==EepromFile_WriteOk){
		DrawTitle_to_row_Language2(3,"电话记录保存成功","save success");
	}else{
		DrawTitle_to_row_Language2(3,"电话记录保存失败","save failure");
	}

	tuichu:
	return (WaitkeyAndAutoExit(10));
}
Ejemplo n.º 7
0
static char Calculator(char *msg)//2.计算器
{
	unsigned char abuff[50];	//因为abuff  要做结果存储,所以要申请大一点,否则如果数值太大,会segmentation fault
	unsigned char bbuff[22];
	signed char jjcc[2]={0,0};
	signed char input09,inputcnt;
	signed char inputFlag;
	unsigned char keyval;
	
	enum {WaitFirst,WaitFirst_inputed,WaitSecond,WaitSecond_inputed}ope;

	ope=WaitFirst;
	inputcnt=0;
	clear_lcd();
	text_out_to_row_x_Language2(0,34,"【计算器】","Calculator");
	draw_line(0,12,132,12,1);
	draw_line(0,11,132,11,1);
	text_out_to_row_fillSpace(1,"0");

	while(1){
		keyval=GetKeyValue();
		if(keyval==0)continue;
		KeyEventPost();
		inputFlag=0;
		switch(keyval){
			case KEY0:		inputFlag=1;	input09= '0';break;			//号码键
			case KEY1:		inputFlag=1;	input09= '1';break;	
			case KEY2:		inputFlag=1;	input09= '2';break;
			case KEY3:		inputFlag=1;	input09= '3';break;
			case KEY4:		inputFlag=1;	input09= '4';break;
			case KEY5:		inputFlag=1;	input09= '5';break;
			case KEY6:		inputFlag=1;	input09= '6';break;
			case KEY7:		inputFlag=1;	input09= '7';break;
			case KEY8:		inputFlag=1;	input09= '8';break;
			case KEY9:		inputFlag=1;	input09= '9';break;
			case KEYJING:	inputFlag=1;	input09= '.';break;			//小数点键

			case KEY_UP:		inputFlag=2;	input09= '+';break;			//加
			case KEY_DOWN:		inputFlag=2;	input09= '-';break;			//减
			case KEY_LEFT:		inputFlag=2;	input09= '*';break;			//乘
			case KEY_RIGHT:		inputFlag=2;	input09= '/';break;			//除
			case KEYXING:	inputFlag=2;	input09= '&';break;

			case KEY_Enter:	//等于键
			if(ope==WaitSecond_inputed){
				if(strlen((char const *)abuff)<sizeof(bbuff)-3){
					calculate_result(abuff,(char const *)bbuff,(char const *)jjcc);
				}else{
					clear_area_to_row(1,3);
					text_out_to_row_fillSpace(2,"数据太大!无法计算!");
				}
				ope=WaitFirst_inputed;
				inputcnt=0;
			}else{				//如果只是输入了第一个数据,按确认则清0。
				clear_area_to_row(1,3);
				text_out_to_row_fillSpace(1,"0");
				ope=WaitFirst;
				inputcnt=0;
			}
			break;

			case KEY_DEL:	//删除返回键
			if(inputcnt){
				inputcnt--;
				if(ope==WaitFirst_inputed){abuff[inputcnt]=0;text_out_to_row_fillSpace(1,abuff);}
				else if(ope==WaitSecond_inputed){bbuff[inputcnt]=0;text_out_to_row_fillSpace(3,bbuff);}
			}else{
				//return 1;
			}

			case KEY_ReturnInitInterface:
			case KEY_ReturnPrevious:
			KeyIsResponse();
			return keyval;
		}

		if(inputFlag==1&&inputcnt<sizeof(bbuff)-3){			//如果有0到9.输入并且没有超过规定的位数
			if(inputcnt==0&&input09=='.'){
				if(ope==WaitFirst||ope==WaitFirst_inputed){ope=WaitFirst_inputed;abuff[inputcnt++]='0';abuff[inputcnt++]='.';abuff[inputcnt]=0;text_out_to_row_fillSpace(1,abuff);}
				else if(ope==WaitSecond||ope==WaitSecond_inputed){ope=WaitSecond_inputed;bbuff[inputcnt++]='0';bbuff[inputcnt++]='.';bbuff[inputcnt]=0;text_out_to_row_fillSpace(3,bbuff);}
			}else if(inputcnt!=0||input09!='0'){				//如果输入的第一个数不为0
				if(ope==WaitFirst||ope==WaitFirst_inputed){ope=WaitFirst_inputed;abuff[inputcnt++]=input09;abuff[inputcnt]=0;text_out_to_row_fillSpace(1,abuff);}
				else if(ope==WaitSecond||ope==WaitSecond_inputed){ope=WaitSecond_inputed;bbuff[inputcnt++]=input09;bbuff[inputcnt]=0;text_out_to_row_fillSpace(3,bbuff);}
			}
		}

		if(inputFlag==2){
			if(ope==WaitFirst_inputed||ope==WaitSecond){				//如果输入了第一个并在等待第二个时,可以更换运算符。
				if(input09=='&'){if(jjcc[0]=='+')jjcc[0]='-';else if(jjcc[0]=='-')jjcc[0]='*';else if(jjcc[0]=='*')jjcc[0]='/';else jjcc[0]='+';}
				else jjcc[0]=input09;
				text_out_to_row_x_fillSpace(2,6,(unsigned char const *)jjcc);
				ope=WaitSecond;
				inputcnt=0;
			}else if(ope==WaitSecond_inputed){				//如果输入了第二个数据,则计算出结果,并可以连算。
				calculate_result(abuff,(char const *)bbuff,(char const *)jjcc);
				if(input09=='&')jjcc[0]='+';
				else jjcc[0]=input09;
				text_out_to_row_x_fillSpace(2,6,(unsigned char const *)jjcc);
				ope=WaitSecond;
				inputcnt=0;
			}
		}

		#ifdef DEBUG_PRINTF
		printf("inputFlag=%d, inputcnt=%d\n",inputFlag,inputcnt);
		#endif

		KeyIsResponse();
	}
}