📄 mmicalculator.c
字号:
}
set_font_type(UNI12X12_FONT);
i = get_StringWidth(txt);
dspl_colorTextOut(105 - i, 52 , DSPL_TXTATTR_TRANSPARENT, txt,0x000000);
/* 2004/05/18 yhf modify */
#elif ( MAIN_LCD_SIZE==2 )
game_Line line;
int old_color,i,j;
char string[MAXLEN],string1[MAXLEN+1],s[3];
TRACE_EVENT("calcDisplay");
memset(string,0,MAXLEN);
memset(string1,0,MAXLEN+1);
memset(s,0,3);
dspl_BitBlt(0, 0, 102, 65, 0, (void *)icnMnuListBkg, 0);
dspl_BitBlt(0, 49, 102, 31, 0, (void *)calculatorbmp, 0);
//draw a rectangle ,it's left top coordinate is (5,63) right bottom coordinate is (115,130)
// DrawLine(set_Line(5, 65, 115, 65, line.color=0x0000ff));
// DrawLine(set_Line(5, 65, 5, 132, line.color=0x0000ff));
// DrawLine(set_Line(5, 132, 115, 132, line.color=0x0000ff));
// DrawLine(set_Line(115, 132, 115, 65, line.color=0x0000ff));
//display the operate number
string[0]=0;
i=0;
while( (data->operate_number1[i]!='.')&&(i<strlen(data->operate_number1)) )
i++;
if( i>14 )
{
if( data->operate_number1[0]=='-' )
{
string[0]=data->operate_number1[0];
string[1]=data->operate_number1[1];
string[2]='.';
strncat(string,data->operate_number1+2,6);
if( data->result[8]>'4' )
string[8]=data->operate_number1[7]+1;
else
string[8]=data->operate_number1[7];
}
else
{
string[0]=data->operate_number1[0];
string[1]='.';
strncat(string,data->operate_number1+1,6);
if( data->result[7]>'4' )
string[7]=data->operate_number1[6]+1;
else
string[7]=data->operate_number1[6];
}
strcat(string,"E+");
if( data->operate_number1[0]=='-' )
sprintf(s,"%02d",i-2);
else
sprintf(s,"%02d",i-1);
strcat(string,s);
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(94-strlen(string)*6, 6, DSPL_TXTATTR_TRANSPARENT, (char *)string, 0x000000);
}
else
{
i=0;
while( ((data->operate_number1[i]<'1')||(data->operate_number1[i]>'9'))&&(i<strlen(data->operate_number1)) )
i++;
if( i>14 )
{
if( data->operate_number1[0]=='-' )
strncpy(string,data->operate_number1,2);
else strncpy(string,data->operate_number1,1);
strcat(string,".");
if( strlen(data->operate_number1)-i )
strncat(string,data->operate_number1+i+1,6);
else strcat(string,"0");
// if(data->result[strlen(data->result)]>'4')
// string[6]=data->result[i+5]+1;
// else
// string[6]=data->result[i+5];
strcat(string,"E-");
sprintf(s,"%02d",i);
strcat(string,s);
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(94-strlen(string)*6, 6, DSPL_TXTATTR_TRANSPARENT, (char *)string, 0x000000);
}
else
{
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(94-strlen(data->operate_number1)*6, 6, DSPL_TXTATTR_TRANSPARENT, (char *)data->operate_number1, 0x000000);
}
}
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(4, 20, DSPL_TXTATTR_TRANSPARENT, (char*)data->opera, 0x000000);
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(94-strlen(data->operate_number2)*6, 20, DSPL_TXTATTR_TRANSPARENT, (char *)data->operate_number2, 0x000000);
DrawLine(set_Line(2, 32 ,99, 32,line.color=0x000000));
TRACE_EVENT("data->result=:");
TRACE_EVENT(data->result);
memset(string,0,sizeof(string));
i=0;
while( (data->result[i]!='.')&&(i<strlen(data->result)) )
i++;
if( (i>0)&&(i==strlen(data->result)-1) )
data->result[strlen(data->result)-1]=0;
if( i>=8 )
{
string[0]=data->result[0];
string[1]='.';
strncat(string,data->result+1,6);
if( data->result[7]>'4' )
{
if( data->result[6]!='9' )
string[7]=data->result[6]+1;
else string[7]=data->result[6];
}
else
string[7]=data->result[6];
strcat(string,"E+");
sprintf(s,"%02d",i-1);
strcat(string,s);
string[12]=0;
TRACE_EVENT(string);
memset(data->SpecialResult,0,MAXLEN+MAXLEN);
strcpy(data->SpecialResult,string);
if( !data->sig )
{
strcpy(string1,"-");
strcat(string1,string);
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(94-13*6, 34, DSPL_TXTATTR_TRANSPARENT, (char *)string1, 0x000000);
}
else
{
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(94-12*6, 34, DSPL_TXTATTR_TRANSPARENT, (char *)string, 0x000000);
}
}
else
{
i=0;
while( ((data->result[i]<'1')||(data->result[i]>'9'))&&(i<strlen(data->result)) )
i++;
TraceInt(i);
if( i>14 )
{
string[0]=data->result[i];
string[1]='.';
if( strlen(data->result)-i )
{
if( (strlen(data->result)-i)<7 )
strncat(string,data->result+i+1,strlen(data->result)-i);
else strncat(string,data->result+i+1,6);
}
else strcat(string,"0");
// if(data->result[strlen(data->result)]>'4')
// string[6]=data->result[i+5]+1;
// else
// string[6]=data->result[i+5];
strcat(string,"E-");
sprintf(s,"%02d",i);
strcat(string,s);
memset(data->SpecialResult,0,MAXLEN+MAXLEN);
strcpy(data->SpecialResult,string);
if( !data->sig )
{
strcpy(string1,"-");
strcat(string1,string);
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(94-strlen(string1)*6, 34, DSPL_TXTATTR_TRANSPARENT, (char *)string1, 0x000000);
}
else
{
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(94-strlen(string)*6, 34, DSPL_TXTATTR_TRANSPARENT, (char *)string, 0x000000);
}
}
else
{
if( (data->result[0]=='0')&&(strlen(data->result)<2) )
{
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(94-strlen(data->result)*6, 34, DSPL_TXTATTR_TRANSPARENT, (char *)data->result, 0x000000);
return;
}
i=0;
j=0;
while( data->result[i]!='.' )
i++;
if( i )
for( j=i;j<strlen(data->result);j++ );
if( i+j>17 )
data->result[i+j]=0;
if( (!data->sig)&&strlen(data->result) )
{
strcpy(string1,"-");
strcat(string1,data->result);
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(94-strlen(string1)*6, 34, DSPL_TXTATTR_TRANSPARENT, (char *)string1, 0x000000);
}
else
{
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(94-strlen(data->result)*6, 34, DSPL_TXTATTR_TRANSPARENT, (char *)data->result, 0x000000);
}
}
}
#endif
}
/*void calculate(char str1[MAXLEN],char str2[MAXLEN],char mark[2],char result_s[MAXLEN+MAXLEN])
{
float number1=0,number2=0,result=0,r,t;
int resultint;
int negative=0;
float resultpoint;
int divisor=1,multiplyer=1;
int index=0;
int pointflag=0;
int i=0;
for(i=0;i<strlen(str1);i++)
{
if(str1[i]=='-')
{
negative=1;
}
else
{
if(pointflag==0)
{
if(str1[i]!='.')
{
number1=number1*10+(int)str1[i]-48;
}
else
{
pointflag=1;
}
}
else
{
divisor=divisor*10;
r=(int)str1[i]-48;
number1=number1+r/divisor;
}
}
}
if(negative)
{
number1=number1*(-1);
negative=0;
}
divisor=1;
pointflag=0;
for(i=0;i<strlen(str2);i++)
{
if(str2[i]=='-')
{
negative=1;
}
else
{
if(pointflag==0)
{
if(str2[i]!='.')
{
number2=number2*10+(int)str2[i]-48;
}
else
{
pointflag=1;
}
}
else
{
divisor=divisor*10;
r=(int)str2[i]-48;
number2=number2+r/divisor;
}
}
}
if(negative)
{
number2=number2*(-1);
negative=0;
}
switch(mark[0])
{
case '+':
result=number1+number2;
break;
case '-':
result=number1-number2;
break;
case '*':
result=number1*number2;
break;
case '/':
result=number1/number2;
break;
}
if(result<0)
{
result_s[index]='-';
index++;
result=result*(-1);
}
r=result;
resultpoint=r-(int)result;
resultint=(int)r;
t=resultint;
divisor=1;
while(t>=10)
{
t/=10;
divisor=divisor*10;
}
while(divisor>0)
{
t=resultint/divisor;
result_s[index]=(char)(t+48);
resultint%=divisor;
divisor/=10;
index++;
}
r=resultpoint*100;
if((resultpoint*100-(int)r)>=0.5)
resultpoint+=0.01;
if(resultpoint>0)
{
result_s[index]='.';
index++;
for(i=0;i<2;i++)
{
multiplyer=multiplyer*10;
t=resultpoint*multiplyer;
result_s[index]=(char)((int)t+48);
resultpoint=(resultpoint*10-(int)t)/10;
index++;
}
}
TRACE_EVENT(result_s);
}*/
#if 0
char getoperator(int c)
{
switch( c )
{
case CALCULATOR_PLUS: return '+'; break;
case CALCULATOR_MINUS: return '-'; break;
case CALCULATOR_MULTIPLY: return '*'; break;
case CALCULATOR_DIVIDE: return '/'; break;
default: return '\0'; break;
}
}
#endif
game_Line set_Line(int x1,int y1,int x2,int y2,int color)
{
game_Line l;
l.x1=x1;
l.y1=y1;
l.x2=x2;
l.y2=y2;
l.color=color;
return l;
}
void reset_calculator(CalcData* data)
{
memset((char*)data->operate_number1,0,sizeof(data->operate_number1));
memset((char*)data->operate_number2,0,sizeof(data->operate_number2));
/*2004/05/19 yhf modify*/
memset((char*)data->result,0,sizeof(data->result));
memset((char*)data->opera,0,sizeof(data->opera));
/* end yhf */
//memset((char*)data->result,0,sizeof(data->result));
/*2004/05/19 yhf modify*/
//strcpy((char*)data->operate_number1,"0");
//strcpy((char*)data->operate_number2,"0");
/* end yhf */
data->flag=FALSE;
data->index=0;
data->pointflag=FALSE;
data->afterpoint=0;
data->leftkey_indication=0;
}
int calculate1(char str1[MAXLEN],char str2[MAXLEN],char mark[2],char *result_s)
{
int i,j;
int off,amp,k,carry=0,signal=1,shr;
char temp_mark[2];
char fi[MAXLEN],ff[MAXLEN],si[MAXLEN],sf[MAXLEN],s[MAXLEN],t[MAXLEN],sTemp[MAXLEN+MAXLEN];
long v1,v2;
memset(fi,0,MAXLEN);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -