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

📄 mmicalculator.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    }
    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 + -