📄 mmicalculator.c
字号:
i=0;
memset(string,0,sizeof(string));
while( data->result[i]=='0'&&data->result[i+1]!='.' )
i++;
strcpy(string,data->result+i);
strcpy(data->result,string);
memset(string,0,sizeof(string));
if( data->result[0]=='.' )
{
strcpy(string,"0");
strcat(string,data->result);
strcpy(data->result,string);
}
i=0;
j=0;
k=strlen(data->result);
while( (data->result[i]!='.')&&(i<strlen(data->result)) )
i++;
if( i<strlen(data->result) )
{
for( j=i;j<=strlen(data->result);j++ )
{
if( data->result[j]!='0'&&data->result[j]!=0 )
k=j;
}
data->result[k+1]=0;
}
}
if( strlen(data->result)<=MAXLEN+3 )
{
data->continues=TRUE;
data->resultflag=TRUE;
winShow(win);
reset_calculator(data);
}
else
{
dialog_info_init(&display_info);
display_info.TextId2 =TxtError;
display_info.Time = FOREVER;
display_info.iconindex=REMIND_NORECORD;
display_info.Callback = (T_VOID_FUNC)NULL;
/*
* Call Info Screen
*/
info_dialog (win, &display_info);
SEND_EVENT(win, CALCULATOR_INIT, 0, 0);
}
}
break;
case KCD_HUP:
calculator_destroy(win);
break;
default:
break;
}
return MFW_EVENT_CONSUMED;
}
//extern const unsigned char icnMnuListBkg[];
void calcDisplay(CalcData* data)
{
#if (MAIN_LCD_SIZE==3)
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);
//display the bitmap
DRAW_ICON_SEL(ICON_CALCULATOR,2);
DRAW_ICON_SEL(ICON_CALCULATOR,0);
DRAW_ICON_SEL(ICON_CALCULATOR,1);
//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(26+94-strlen(string)*6, 16, DSPL_TXTATTR_TRANSPARENT, (char *)string, 0x000000);//jhxu 288 modify 6 to 16
}
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(26+94-strlen(string)*6, 16, DSPL_TXTATTR_TRANSPARENT, (char *)string, 0x000000);//jhxu 288 modify 6 to 16
}
else
{
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(26+94-strlen(data->operate_number1)*6, 16, DSPL_TXTATTR_TRANSPARENT, (char *)data->operate_number1, 0x000000);////jhxu 288 modify 6 to 16
}
}
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(4, 30, DSPL_TXTATTR_TRANSPARENT, (char*)data->opera, 0x000000);//jhxu 288 modify 20 to 30
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(26+94-strlen(data->operate_number2)*6, 30, DSPL_TXTATTR_TRANSPARENT, (char *)data->operate_number2, 0x000000);//jhxu 288 modify 20 to 30
//jhxu 288 modify 20 to 26
DrawLine(set_Line(2, 42 ,99+26, 42,line.color=0x000000));////jhxu 288 modify 32 to 42
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(26+94-13*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)string1, 0x000000);//jhxu 288 modify 34 to 44
}
else
{
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(26+94-12*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)string, 0x000000);//jhxu 288 modify 34 to 44
}
}
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(26+94-strlen(string1)*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)string1, 0x000000);//jhxu 288 modify 34 to 44
}
else
{
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(26+94-strlen(string)*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)string, 0x000000); //jhxu 288 modify 34 to 44
}
}
else
{
if((data->result[0]=='0')&&(strlen(data->result)<2))
{
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(26+94-strlen(data->result)*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)data->result, 0x000000);//jhxu 288 modify 34 to 44
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(26+94-strlen(string1)*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)string1, 0x000000);//jhxu 288 modify 34 to 40
}
else
{
set_font_type(UNI12X12_FONT);
dspl_colorTextOut(26+94-strlen(data->result)*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)data->result, 0x000000);//jhxu 288 modify 34 to 40
}
}
}
if(data->leftkey_indication==1)
memset(data->opera,0,sizeof(data->opera));
#elif ( MAIN_LCD_SIZE==4 )
extern GLOBAL int get_StringWidth(char *string);
game_Line line;
int old_color,i,j;
char s[3]= "0";
char *txt ;
char string[MAXLEN];
memset(string,0 ,sizeof(string) );
if( Mmi_getCurrentLanguage()==CHINESE_LANGUAGE )
dspl_colorTextOut(35, 0, DSPL_TXTATTR_TRANSPARENT,(char*)MmiRsrcGetText(TxtCalculator),0x000000);
else
dspl_colorTextOut(20, 0, DSPL_TXTATTR_TRANSPARENT,(char*)MmiRsrcGetText(TxtCalculator),0x000000);
//display the bitmap
/* 2004/06 sunsj modify for picture manage */
for( i=0 ; i< GET_ICONATTR_NUM(ICON_CALCULATE_OFF); i++ )
{
DRAW_ICON_SEL(ICON_CALCULATE_OFF, i);
/*
pdspl_BitBlt(icnCalcOptOffAttr[i].area.px+1,icnCalcOptOffAttr[i].area.py+5,
icnCalcOptOffAttr[i].area.sx,icnCalcOptOffAttr[i].area.sy, 0,
icnCalcOptOffAttr[i].icons,
0);
*/
//drawIconByIcnAttr((MfwIcnAttr *)&icnCalcOptOffAttr[i], 0);
}
if( data->opera[0] != 0x00 )
{
if( strcmp(data->opera, "+") == 0 )
{
DRAW_ICON_SEL(ICON_CALCULATE_ON, 0);
}
else if( strcmp(data->opera, "-") == 0 )
{
DRAW_ICON_SEL(ICON_CALCULATE_ON, 1);
}
else if( strcmp(data->opera, "*") == 0 )
{
DRAW_ICON_SEL(ICON_CALCULATE_ON, 2);
}
else if( strcmp(data->opera, "/") == 0 )
{
DRAW_ICON_SEL(ICON_CALCULATE_ON, 3);
}
}
/*
elseif
break;
case '-':
DRAW_ICON_SEL(ICON_CALCULATE_ON, 1);
break;
case '*':
DRAW_ICON_SEL(ICON_CALCULATE_ON, 2);
break;
case '/':
DRAW_ICON_SEL(ICON_CALCULATE_ON, 3);
break;
default:
break;
}
*/
old_color = dspl_SetBkgColor(0x000000);
dspl_fill_rectangle(20,29,108,70);
dspl_SetBkgColor(0x2fa6ff);
dspl_fill_rectangle(22,31,106,68);
dspl_SetBkgColor(old_color);
if( data->operate_number2[0] == 0 )
{
if( data->operate_number1[0] == 0 )
{
txt = (char*)s;
}
else
{
txt = (char*)data->operate_number1;
}
}
else if( data->resultflag ==0 )
{
txt = (char*)data->operate_number2;
}
else
{
txt = (char*)data->result;
if( !data->sig )
{
string[0] = '-';
}
if( strlen(data->result) > MAX_OPTNUMBER )
{
int k = 1;
i = j = -1;
while( *txt != 0 )
{
if( i == -1 )
{
if( *txt != '0' && *txt != '.' )
i = (int)txt - (int)data->result;
}
if( j == -1 )
{
if( *txt == '.' )
j = (int)txt - (int)(char *)data->result;
}
txt ++;
}
if( j == -1 )j = (int)txt - (int)(char *)data->result;
txt = (char*)data->result+i;
data->SpecialResult[0] = *txt++;
data->SpecialResult[1] = '.';
while( k <=2 && *txt !=0 )
{
if( *txt <= '9' && *txt>= '0' )
data->SpecialResult[1 + k++] = *txt;
txt++;
}
while( k<=2 )
data->SpecialResult[1 + k++] = '0';
if( i < j )
{
strcat(data->SpecialResult,"E+");
i = j - i -1;
}
else
{
strcat(data->SpecialResult,"E-");
i = i - j;
}
sprintf(s,"%02d",i);
strcat(data->SpecialResult,s);
strcat(string,data->SpecialResult);
}
else
{
strcat(string,data->result);
}
txt = (char*)string;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -