/******************************************************************** 版权所有: 文件版本: V1.00 文件名称: fmt.c 生成日期: 2007年04月26日 作 者:xxxxxx 使用范围: 功 能: 菜单内容格式分析 更新信息: 更新日志1: 修改者: 修改日期: 修改内容: 修改原因: *********************************************************************/ #include #include "head.h" MODIFY_DEF g_tModify; /* 修改数据的结构*/ static void itoa1(short int value,char *pbuf) { sprintf(pbuf,"%i",value); } /************************************************************************** 函数名称:itoa 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:完成函数itoa的功能,将整数转为字符串 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ static void itoa2(int value,char *pbuf) { // %i 输出整数 sprintf(pbuf,"%i",value); } /************************************************************************** 函数名称:ltoa 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:将长整数转为字符串 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ #if 0 static void ltoa(long value,char *pbuf) { sprintf(pbuf,"%ld",value); } #endif /************************************************************************** 函数名称:itostr 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:将长整数按格式转换为字符串 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ static void itostr(unsigned int value,char *pbuf,char basetype) { switch(basetype) { case 8: sprintf(pbuf,"%o",value); break; case 10: sprintf(pbuf,"%u",value); break; case 16: sprintf(pbuf,"%x",value); break; case 17: sprintf(pbuf,"%X",value); break; default: strcpy(pbuf,"Format error!"); break; } } /************************************************************************** 函数名称:stostr 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:将短整数按格式转换为字符串 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ static void stostr(unsigned short value,char *pbuf,char basetype) { switch(basetype) { case 8: sprintf(pbuf,"%o",value); break; case 10: sprintf(pbuf,"%u",value); break; case 16: sprintf(pbuf,"%x",value); break; case 17: sprintf(pbuf,"%X",value); break; default: strcpy(pbuf,"Format error!"); /**/ break; } } /************************************************************************** 函数名称:ltostr 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:将无符号长整数按格式转换为字符串 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ #if 0 static void ltostr(unsigned long int value,char *pbuf,char basetype) { switch(basetype) { case 10: sprintf(pbuf,"%lu",value); break; case 16: sprintf(pbuf,"%lx",value); break; case 17: sprintf(pbuf,"%lX",value); break; default: sprintf(pbuf,"%lu",value); break; } } #endif /************************************************************************** 函数名称:ftoa 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:将浮点数按格式转换为字符串 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ static void ftoa(float value,char *pbuf,char basetype,char precison) { basetype=basetype; switch(precison) { case 0: sprintf(pbuf,"%.0f",value);/*Right?*/ break; case 1: sprintf(pbuf,"%.1f",value); break; case 2: sprintf(pbuf,"%.2f",value); break; case 3: sprintf(pbuf,"%.3f",value); break; case 4: sprintf(pbuf,"%.4f",value); break; default: sprintf(pbuf,"%.3f",value); break; } } /************************************************************************** 函数名称:atof1 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:将字符串转为浮点数 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ float atof1(char *str) // 将字符串转为浮点数 { float ff; char fstr[20]; int dot,dignum,num,divn; dot=-1; num=0; dignum=0; for(;*str!='\0';str++) { if(*str=='-'||*str=='+') { fstr[num++]=*str; if(num>19)break; } else if(*str>='0'&&*str<='9') { fstr[num++]=*str; dignum++; if(num>19)break; } else if(*str=='.')// 小数点位置 { dot=dignum; } } fstr[num]=0; ff=(float)atol(fstr); // 取得没有小数点的数字 if(dot==-1||dot==dignum) // 没有小数点或小数点在最后面 { return ff; } divn=1; dot=dignum-dot; for(;dot>0;dot--) { divn*=10; } return (ff/divn); } /*************************************************************************** ** 功能: 对一个浮点数值的字符串进行转换后处理,即给任何格式(f,e,E,g,G)的 ** ** 不带小数点的浮点数字符串加上小数点 ** ** 入口: TempPtr是被处理浮点数字符串的指针 ** ** Precision是被处理浮点数字符串的显示精度 ** ** 出口: 处理后浮点数字符串的指针是TempPtr ** ***************************************************************************/ static void AddDotsFloat(char *TempPtr,unsigned char Precision) { char Temp; if(Precision==0){ for(;*TempPtr!='e'&&*TempPtr!='E'&&*TempPtr!='\0';TempPtr++){} Temp=*TempPtr; for(;*TempPtr!='\0';TempPtr++){} *(TempPtr+1)='\0'; for(;*TempPtr!=Temp;TempPtr--) *TempPtr=*(TempPtr-1); *TempPtr='.'; } } /*************************************************************************** ** 功能: 将一个任何格式(f,e,E,g,G)的显示精度为零的带小数点的浮点数字符串 ** ** 的小数点删除 ** ** 入口: TempPtr是被处理浮点数字符串的指针 ** ** 出口: 处理后浮点数字符串的指针是TempPtr ** ***************************************************************************/ static void DelDotsFloat(char *TempPtr) { for(;*TempPtr!='e'&&*TempPtr!='E'&&*TempPtr!='\0';TempPtr++){} TempPtr--; if(*TempPtr=='.') { for(;*TempPtr!='\0';TempPtr++) *TempPtr=*(TempPtr+1); *TempPtr='\0'; } } /*************************************************************************** ** 功能: 将与带符号整数和浮点数相对应的具有缺省格式的字符串转变成给定格 ** ** 式的字符串 ** ** 入口: Flags是标志字符序列指针 ** ** Width是输出字符串的最小宽度 ** ** TempStr是具有缺省格式的字符串的指针 ** ** 出口: 返回输出字符串的长度 ** ** 输出字符串在TempStr指向的字符数组中 ** ***************************************************************************/ static void SignedFormatOut(char *Flags,unsigned char Width,char *TempStr) { char *TempPtr; char NFlags; int i; int ii; i=0; /*处理浮点数的小数点(在浮点数没有小数的时候)*/ TempPtr=Flags; for(;*TempPtr!='#'&&*TempPtr!='\0';TempPtr++){} if(*TempPtr=='\0') DelDotsFloat(TempStr); /*预处理数值符号*/ if(*TempStr=='-') { TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++) *TempPtr=*(TempPtr+1); *TempPtr='\0'; ii--; NFlags=1; } else { TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} NFlags=0; } /*检查标志字符序列中是否有'+'*/ TempPtr=Flags; for(;*TempPtr!='+'&&*TempPtr!='\0';TempPtr++){} if(*TempPtr=='+') { i=(int)Width-ii-1; if(i>0) { /*检查标志字符序列中是否有'*'*/ TempPtr=Flags; for(;*TempPtr!='*'&&*TempPtr!='\0';TempPtr++){} if(*TempPtr=='*') { /*在临时字符串中写'0'*/ TempPtr=TempStr; for(;*TempPtr!='\0';TempPtr++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+i)=*TempPtr; TempPtr++; for(ii=i;ii>0;ii--) *TempPtr++='0'; /*在临时字符串中写符号标志*/ TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+1)=*TempPtr; TempPtr++; if(NFlags) *TempPtr='-'; else *TempPtr=' '; } else { /*在临时字符串中写符号标志*/ TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+1)=*TempPtr; TempPtr++; if(NFlags) *TempPtr='-'; else *TempPtr=' '; /*检查标志字符序列中是否有'-'*/ TempPtr=Flags; for(;*TempPtr!='-'&&*TempPtr!='\0';TempPtr++){} if(*TempPtr=='-') { /*如果是左对齐,在临时字符串右端写' '*/ TempPtr=TempStr; for(;*TempPtr!='\0';TempPtr++){} for(ii=i;ii>0;ii--) *TempPtr++=' '; *TempPtr='\0'; } else { /*在临时字符串左端写' '*/ TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+i)=*TempPtr; TempPtr++; for(ii=i;ii>0;ii--) *TempPtr++=' '; } } } else { /*在临时字符串中写符号标志*/ TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+1)=*TempPtr; TempPtr++; if(NFlags) *TempPtr='-'; else *TempPtr=' '; } i='+'; } if(i!='+') { if(NFlags) { i=(int)Width-ii-1; if(i>0) { /*检查标志字符序列中是否有'*'*/ TempPtr=Flags; for(;*TempPtr!='*'&&*TempPtr!='\0';TempPtr++){} if(*TempPtr=='*') { /*在临时字符串中写'-'和'0'*/ TempPtr=TempStr; for(;*TempPtr!='\0';TempPtr++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+i+1)=*TempPtr; TempPtr++; *TempPtr++='-'; for(ii=i;ii>0;ii--) *TempPtr++='0'; } else { /*在临时字符串中填' '*/ /*在临时字符串中写'-'*/ TempPtr=TempStr; for(;*TempPtr!='\0';TempPtr++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+1)=*TempPtr; TempPtr++; *TempPtr='-'; /*判断对齐方式*/ TempPtr=Flags; for(;*TempPtr!='-'&&*TempPtr!='\0';TempPtr++){} if(*TempPtr=='-') { /*如果是左对齐,在临时字符串右端写' '*/ TempPtr=TempStr; for(;*TempPtr!='\0';TempPtr++){} for(ii=i;ii>0;ii--) *TempPtr++=' '; *TempPtr='\0'; } else { /*在临时字符串左端写' '*/ TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+i)=*TempPtr; TempPtr++; for(ii=i;ii>0;ii--) *TempPtr++=' '; } } } else { /*在临时字符串中写'-'*/ TempPtr=TempStr; for(;*TempPtr!='\0';TempPtr++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+1)=*TempPtr; TempPtr++; *TempPtr='-'; } } else { i=(int)Width-ii; if(i>0) { /*检查标志字符序列中是否有'*'*/ TempPtr=Flags; for(;*TempPtr!='*'&&*TempPtr!='\0';TempPtr++){} if(*TempPtr=='*') { /*在临时字符串中写'0'*/ TempPtr=TempStr; for(;*TempPtr!='\0';TempPtr++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+i)=*TempPtr; TempPtr++; for(ii=i;ii>0;ii--) *TempPtr++='0'; } else { /*在临时字符串中填' '*/ /*判断对齐方式*/ TempPtr=Flags; for(;*TempPtr!='-'&&*TempPtr!='\0';TempPtr++){} if(*TempPtr=='-') { /*如果是左对齐,在临时字符串右端写' '*/ TempPtr=TempStr; for(;*TempPtr!='\0';TempPtr++){} for(ii=i;ii>0;ii--) *TempPtr++=' '; *TempPtr='\0'; } else { /*在临时字符串左端写' '*/ TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+i)=*TempPtr; TempPtr++; for(ii=i;ii>0;ii--) *TempPtr++=' '; } } } } } /*增加判断超出范围的的处理方法*/ if(Width==0) /*没有长度限制 */ { TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} } else /*有长度限制*/ { TempPtr=TempStr; TempPtr[Width]='\0'; /*截断后面的显示*/ i=Width; } } /*************************************************************************** ** 功能: 将与无符号整数相对应的具有缺省格式的字符串转变成给定格式的 ** ** 字符串 ** ** 入口: Flags是标志字符序列指针 ** ** Width是输出字符串的最小宽度 ** ** TempStr是具有缺省格式的字符串的指针 ** ** CountBase数制计数基值 ** ** 出口: 返回输出字符串的长度 ** ** 输出字符串在TempStr指向的字符数组中 ** ***************************************************************************/ static void UnsignedFormatOut(char *Flags,unsigned char Width,char *TempStr,unsigned char CountBase) { char *TempPtr; int i; int ii; i=0; TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} /*检查标志字符序列中是否有'#'*/ TempPtr=Flags; for(;*TempPtr!='#'&&*TempPtr!='\0';TempPtr++){} #if 0 if(*TempPtr=='#') { i=(int)Width-ii-2; if(i>0) { /*检查标志字符序列中是否有'*'*/ TempPtr=Flags; for(;*TempPtr!='*'&&*TempPtr!='\0';TempPtr++){} if(*TempPtr=='*') { /*在临时字符串中写'0'*/ TempPtr=TempStr; for(;*TempPtr!='\0';TempPtr++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+i)=*TempPtr; TempPtr++; for(ii=i;ii>0;ii--) *TempPtr++='0'; /*在临时字符串中写进位计数制头标志*/ TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} if(CountBase==8) { /*在临时字符串中写'0o'*/ for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+2)=*TempPtr; TempPtr++; *TempPtr++='0'; *TempPtr='o'; } if(CountBase==16) { /*在临时字符串中写'0o'*/ for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+2)=*TempPtr; TempPtr++; *TempPtr++='0'; *TempPtr='x'; } } else { /*在临时字符串中写进位计数制头标志*/ TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} if(CountBase==8) { /*在临时字符串中写'0o'*/ for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+2)=*TempPtr; TempPtr++; *TempPtr++='0'; *TempPtr='o'; } if(CountBase==16) { /*在临时字符串中写'0o'*/ for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+2)=*TempPtr; TempPtr++; *TempPtr++='0'; *TempPtr='x'; } /*检查标志字符序列中是否有'-'*/ TempPtr=Flags; for(;*TempPtr!='-'&&*TempPtr!='\0';TempPtr++){} if(*TempPtr=='-') { /*如果是左对齐,在临时字符串右端写' '*/ TempPtr=TempStr; for(;*TempPtr!='\0';TempPtr++){} for(ii=i;ii>0;ii--) *TempPtr++=' '; *TempPtr='\0'; } else { /*在临时字符串中写'0'*/ TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+i)=*TempPtr; TempPtr++; for(ii=i;ii>0;ii--) *TempPtr++=' '; } } } else { /*在临时字符串中写进位计数制头标志*/ TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} if(CountBase==8) { /*在临时字符串中写'0o'*/ for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+2)=*TempPtr; TempPtr++; *TempPtr++='0'; *TempPtr='o'; } if(CountBase==16) { /*在临时字符串中写'0o'*/ for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+2)=*TempPtr; TempPtr++; *TempPtr++='0'; *TempPtr='x'; } } i='#'; } #endif if(i!='#') { i=(int)Width-ii; if(i>0) { /*检查标志字符序列中是否有'*'*/ TempPtr=Flags; for(;*TempPtr!='*'&&*TempPtr!='\0';TempPtr++){} if(*TempPtr=='*') { /*在临时字符串中写'0'*/ TempPtr=TempStr; for(;*TempPtr!='\0';TempPtr++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+i)=*TempPtr; TempPtr++; for(ii=i;ii>0;ii--) *TempPtr++='0'; } else { /*检查标志字符序列中是否有'-'*/ TempPtr=Flags; for(;*TempPtr!='-'&&*TempPtr!='\0';TempPtr++){} if(*TempPtr=='-') { /*如果是左对齐,在临时字符串右端写' '*/ TempPtr=TempStr; for(;*TempPtr!='\0';TempPtr++){} for(ii=i;ii>0;ii--) *TempPtr++=' '; *TempPtr='\0'; } else { /*在临时字符串中写'0'*/ TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} for(ii++;ii>0;ii--,TempPtr--) *(TempPtr+i)=*TempPtr; TempPtr++; for(ii=i;ii>0;ii--) *TempPtr++=' '; } } } } if(Width==0) /*没有长度限制 */ { TempPtr=TempStr; for(ii=0;*TempPtr!='\0';TempPtr++,ii++){} } else /*有长度限制*/ { TempPtr=TempStr; TempPtr[Width]='\0'; /*截断后面的显示*/ i=Width; } } /*************************************************************************** ** 功能: 将从参数表中取出的指针,并将它所指向的值转变成给定格式的字符串 ** ** 入口: ap是参数表的参数指针,注意: 参数表中的参数均应为void * ** ** FmtStr是输出字符串格式描述串的指针 ** ** Str是输出字符串的指针 ** ** 出口: 返回输出字符串的长度 ** ** 输出字符串在Str指向的字符数组中 ** ***************************************************************************/ unsigned char ValuePtrToStr(char *Str,char *FmtStr,va_list ap) { char *TempPtr; char Temp[4]; char TempStr[64]; //xbtong char i; int i; /************************定义数据格式串的数据结构****************************/ char Flags[5]; // 存放格式的标志 u8 Width=0; // 存放格式的宽度 u8 Precision=6; // 存放格式的精度 char Type[3]; // 存放格式的类型 /*****************************分解数据格式串*********************************/ // 格式字符串:%[标志][输入数据宽度][.精度][长度]类型 /*分解出%号*/ FmtStr++; /*=%*/ TempPtr=(char *)FmtStr; /*分解出标志字符序列*/ for(; *TempPtr<'0'; TempPtr++){} /*+ - * # .*/ for(i=0; FmtStr='0'); TempPtr++){}/*0~9 change by wjj old:(*TempPtr<':'&&*TempPtr>'/')*/ for(i=0; FmtStr='0';TempPtr++){}/*0~9 change by wjj */ for(i=0;FmtStr'/';TempPtr++){} for(i=0;FmtStr'/';TempPtr++){} for(i=0;FmtStr'/';TempPtr++){} for(i=0;FmtStr'/';TempPtr++,FmtStr++){} } /*分解出数据的类型 */ Type[0]=*FmtStr; if(Type[0]=='h')FmtStr++; /*读到最后的描述字符为止 */ if(Type[0]=='s')/*字符串显示 取字符串的长度*/ { TempPtr=(char *)pd; lenth+=strlen(TempPtr); } else { lenth+=width; } } else /*刷新整个字符串*/ { lenth++; } FmtStr++; } return lenth; } /************************************************************************** 函数名称:fmt_StrPrintf 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:将字符串存入发送缓冲区 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ void fmt_StrPrintf(short sx,short sy,short bytes,char model,const char *str) { BYTE mode,len; BYTE *pd=(BYTE *)str; if(model==MMI_FOCUS_NORMAL)mode=1; else mode=0; len=0; while(*pd++!='\0')len++; Add_Continue_Data(sx,sy,(BYTE *)str, len, mode); } /************************************************************************** 函数名称:fmt_InitModify 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:进入修改模式,初始化函数 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ void fmt_InitModify(BYTE index,short x,short y,void *p,char flag,const char *FmtStr,...) { int i; char postart=0; bool bhave_no=true; /* %号只分析一次 */ va_list ap; //定义字符指针 MODIFY_DEF *pt=&g_tModify; pt->Fmtstr[0]='\0'; pt->Valstr[0]='\0'; pt->Type='u'; pt->Current=0; pt->Lenth=0; pt->x=x; pt->y=y; pt->pValue=(void*)p; if(flag)pt->bModify=false; /*要不要编辑,标志位*/ else pt->bModify=true; // 获取可变参数列表的第一个参数的地址(ap是类型为va_list的指针,FmtStr是可变参数最左边的参数) va_start(ap,FmtStr); for(;*FmtStr!='\0';) { if(*FmtStr=='%'&&bhave_no) { pt->x=x+postart; // 复制数值格式描述串,并获取描述所占长度 i=ScanFmtStr(&pt->Type,FmtStr,pt->Fmtstr); if(index<0xff&&pt->Type=='f') { pt->bFmtstr=true; pt->pFmtstr=(void*)FmtStr; pt->index=index; } else { pt->bFmtstr=false; pt->pFmtstr=NULL; } if(i) { // 从格式描述串中略过数值格式描述串,以便从list中取得定值指针 FmtStr+=i; // 将格式描述与数据对接,获得按格式打印数据的效果,并将数据转为字符串存入Valstr,返回长度给Lenth pt->Lenth=ValuePtrToStr(pt->Valstr,pt->Fmtstr,ap); } bhave_no=false; } else { FmtStr++; } postart++; } // 清空va_list可变参数列表 va_end(ap); // 要编辑符号的话,先跳过符号位,即正负位 if(pt->Type=='f'||pt->Type=='d'||pt->Type=='i') { pt->Current=1; } // 数据不要编辑,反显所有数据 if(!g_tModify.bModify) { pt->Current=0; fmt_StrPrintf(g_tModify.x,g_tModify.y,g_tModify.Lenth, MMI_FOCUS_NORMAL,g_tModify.Valstr); } } /************************************************************************** 函数名称:fmt_ClearCursor 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明: 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ #if 0 static void fmt_ClearCursor(void) { #if 0 short pointer; int i; char byte; pointer=g_tModify.y*BYTES_PER_LINE+g_tModify.x+g_tModify.Current; for(i=0;i<16;i++) { lcd_WriteRAM(pointer+BYTES_PER_LINE*i,lcd_ReadRAM(pointer+BYTES_PER_LINE*i)&0xFE); } #endif } #endif /************************************************************************** 函数名称:fmt_CursorOff 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:关闭光标显示 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ void fmt_CursorOff(void) { BYTE model=MMI_FOCUS_NORMAL; if(g_tModify.bModify)model=MMI_FOCUS_NO; fmt_StrPrintf(g_tModify.x,g_tModify.y,g_tModify.Lenth, model,g_tModify.Valstr); } /************************************************************************** 函数名称:fmt_CursorOn 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:打开光标显示 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ void fmt_CursorOn(void) { char str[3]; if(!g_tModify.bModify)return; str[0]=g_tModify.Valstr[(int)g_tModify.Current]; if(str[0]&0x80) /*汉字显示反显2个字节*/ { str[1]=g_tModify.Valstr[g_tModify.Current+1]; str[2]='\0'; fmt_StrPrintf(g_tModify.x+g_tModify.Current,g_tModify.y,2, MMI_FOCUS_NORMAL,str); } else { str[1]='\0'; fmt_StrPrintf(g_tModify.x+g_tModify.Current,g_tModify.y,1, MMI_FOCUS_NORMAL,str); } } /************************************************************************** 函数名称:fmt_CursorFlush 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:光标闪烁 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ void fmt_CursorFlush(void) { #if 0 static bool bFlag=false; static char TimeCnt=0; short pointer; unsigned char byte; int i; if(!g_tModify.bModify)return; if(TimeCnt++<1) /*闪烁频率*/ { return; } TimeCnt=0; bFlag=!bFlag; if(g_tModify.Valstr[g_tModify.Current]&0x80)/*汉字修改显示*/ { pointer=g_tModify.y*BYTES_PER_LINE+g_tModify.x+g_tModify.Current+1; } else { pointer=g_tModify.y*BYTES_PER_LINE+g_tModify.x+g_tModify.Current; } for(i=0;i<16;i++) { byte=(lcd_ReadRAM(pointer+BYTES_PER_LINE*i)&0xFE)+bFlag; lcd_WriteRAM(pointer+BYTES_PER_LINE*i,byte); } #endif } /************************************************************************** 函数名称:fmt_CursorLeft 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:修改模式下,左键功能,编辑数据左移一位 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ bool fmt_CursorLeft(void) { if(!g_tModify.bModify)return true; if(g_tModify.Lenth<=0)return true; fmt_CursorOff(); if(g_tModify.Current<=0) { g_tModify.Current=g_tModify.Lenth-1; if(g_tModify.Valstr[(int)g_tModify.Current]=='.'&&g_tModify.Type=='F') { g_tModify.Current-=1; } if(g_tModify.Valstr[(int)g_tModify.Current]&0x80)g_tModify.Current-=1; fmt_CursorOn(); return true; } else { g_tModify.Current--; if(g_tModify.Valstr[(int)g_tModify.Current]=='.'&&g_tModify.Type=='F') { g_tModify.Current-=1; } if(g_tModify.Valstr[(int)g_tModify.Current]&0x80)/*当前还是汉字*/ g_tModify.Current--; } fmt_CursorOn(); return false; } /************************************************************************** 函数名称:fmt_CursorRight 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:修改模式下,右键功能,编辑数据右移一位 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ bool fmt_CursorRight(void) /*到最右边,返回true;*/ { if(!g_tModify.bModify)return true; if(g_tModify.Lenth<=0)return true; fmt_CursorOff(); if(g_tModify.Valstr[(int)g_tModify.Current]&0x80) { if(g_tModify.Current>=g_tModify.Lenth-2) { g_tModify.Current=0; /*到最右边*/ fmt_CursorOn(); return true; } else { g_tModify.Current+=2; } } else { if(g_tModify.Current>=g_tModify.Lenth-1) { g_tModify.Current=0; /*到最右边*/ fmt_CursorOn(); return true; } else { g_tModify.Current+=1; if(g_tModify.Valstr[(int)g_tModify.Current]=='.'&&g_tModify.Type=='F') { g_tModify.Current+=1; } } } fmt_CursorOn(); return false; } /************************************************************************** 函数名称:fmt_IsHavePoint 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:判断是否有小数点 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ static bool fmt_IsHavePoint(void) { unsigned char cnt; for(cnt=0;cnt=g_tModify.Lenth-1)point=1; /*到最右边*/ else point++; } else { if(point<=1)point=g_tModify.Lenth-1; /*到最左边*/ else point--; } p=TempStr; for(cnt=0;cnt'7')dat='0'; break; case 'u': /*无符号数*/ if(dat=='9')dat='0';else dat++; if(dat>'9')dat='0'; break; case 'x': /*16进制小写*/ switch(dat) { case '9': dat='a'; break; case 'f': dat='0'; break; default: dat++; break; } break; case 'X': /*16进制大写*/ switch(dat) { case '9': dat='A'; break; case 'F': dat='0'; break; default: dat++; break; } break; case 'c': if(dat=='9')dat='0';else dat++; if(dat>'9')dat='0'; break; case 'B': case 'b': if(dat=='1')dat='0';else dat='1'; break; case 'd': /*有符号数*/ case 'i': if(g_tModify.Current==0) { dat=' '; } else { switch(dat) { case '9': dat='0';break; default: dat++; break; } if(dat<'0'||dat>'9')dat='0'; } break; case 'f': /*浮点数*/ case 'F': /*浮点数*/ if(g_tModify.Current==0) { dat=' '; } else { switch(dat) { case '9': if((g_tModify.Current==g_tModify.Lenth-1)&&(!fmt_IsHavePoint())) { dat='.'; /*防止没有小数点的情况出现*/ } else { dat='0'; } break; case '.': fmt_MovePoint(1);break; default: if(dat>='0'&&dat<='9')dat++; else dat='0'; break; } } break; default: dat='0'; break; } if(dat!='.')g_tModify.Valstr[(int)g_tModify.Current]=dat; /*取当前修改字符*/ } fmt_CursorOn(); } /************************************************************************** 函数名称:fmt_CursorSubb 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:编辑模式下,减键功能 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ void fmt_CursorSubb(void) { char dat; if(!g_tModify.bModify)return; fmt_CursorOff(); dat=g_tModify.Valstr[(int)g_tModify.Current]; /*取当前修改字符*/ if(g_tModify.Type!='s') /*不是汉字修改*/ { switch(g_tModify.Type) { case 'o': if(dat=='0')dat='7';else dat--; if(dat>'7')dat='0'; break; case 'u': /*无符号数*/ if(dat=='0')dat='9';else dat--; if(dat>'9')dat='0'; break; case 'x': /*16进制小写*/ switch(dat) { case 'a': dat='9'; break; case '0': dat='f'; break; default: dat--; break; } break; case 'X': /*16进制大写*/ switch(dat) { case 'A': dat='9'; break; case '0': dat='F'; break; default: dat--; break; } break; case 'c': if(dat=='0')dat='9';else dat++; if(dat>'9')dat='0'; break; case 'B': case 'b': if(dat=='1')dat='0';else dat='1'; break; case 'd': /*有符号数*/ case 'i': if(g_tModify.Current==0) { dat='-'; } else { switch(dat) { case '0': dat='9';break; default: dat--; break; } if(dat<'0'||dat>'9')dat='0'; } break; case 'f': /*浮点数*/ case 'F': /*浮点数*/ if(g_tModify.Current==0) { dat='-'; } else { switch(dat) { case '0': if((g_tModify.Current==g_tModify.Lenth-1)&&(!fmt_IsHavePoint())) { dat='.'; /*防止没有小数点的情况出现*/ } else { dat='9'; } break; case '.': fmt_MovePoint(0);break; default: if(dat>='0'&&dat<='9')dat--; else dat='0'; break; } } break; default: dat='0'; break; } if(dat!='.')g_tModify.Valstr[(int)g_tModify.Current]=dat; /*取当前修改字符*/ } fmt_CursorOn(); } /************************************************************************** 函数名称:fmt_GetModifyValue_Single 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:取得编辑的数据的值 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ void fmt_GetModifyValue_Single(void) { StrToValue(g_tModify.Valstr,g_tModify.Fmtstr,g_tModify.pValue); } /************************************************************************** 函数名称:fmt_GetModifyType 函数版本:1.00 作者: 创建日期:2008.9.1 函数功能说明:获取当前的编辑状态 输入参数: 输出参数: 返回值: 更新信息: 更新日志1: 日期: 修改者: 修改内容: 修改原因: ***************************************************************************/ bool fmt_GetModifyType(void) { return (g_tModify.bModify); } /****************************************************************** file end ******************************************************************/