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

📄 mmicalculator.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
            {
                data->operate_number2[data->index]='-';
                data->index++;
            }
            else
            {
                memset(tem_str,0,sizeof(tem_str));
                if( data->operate_number2[0]=='-' )
                {
                    strcpy( tem_str,data->operate_number2+1);
                    strcpy(data->operate_number2,tem_str);
                    data->index--;
                }
                else
                {
                    strcpy(tem_str,"-");
                    strcat(tem_str,data->operate_number2);
                    strcpy(data->operate_number2,tem_str);
                    data->index++;
                }                 
            }
        }           
        winShow(win);
        break;
    case KCD_HASH:
        if( data->pointflag )
            break;
        if( !data->pointflag )
        {
            if( !data->flag )
            {
                if( (data->operate_number1[0]=='-')&&((strlen(data->operate_number1)==1)||(data->operate_number1[1]=='0')) )
                    break;
                if( data->continues==TRUE )
                {
                    data->continues=FALSE;
                    memset((char*)data->result,0,sizeof(data->result));
                }
                if( strlen(data->operate_number1) )
                {
                    if( !data->index )
                        data->index++;
                    data->operate_number1[data->index]='.';
                    data->index++;
                    data->pointflag=TRUE;
                }
            }
            else
            {
                if( (data->operate_number2[0]=='-')&&((strlen(data->operate_number2)==1)||(data->operate_number2[1]='0')) )
                    break;
                if( strlen(data->operate_number2) )
                {
                    if( !data->index )
                        data->index++;
                    data->operate_number2[data->index]='.';
                    data->index++;
                    data->pointflag=TRUE;
                }
            }

        }
        winShow(win);
        break;
    case KCD_MNUUP:
        if( strlen(data->opera) )
            break;
        TRACE_EVENT("KCD_MNUUP");
        if( (data->continues==TRUE)&&(!data->operaflag) )
        {
            if( strlen(data->SpecialResult) )
            {
                if( !data->sig )
                {
                    strcpy((char*)data->operate_number1,"-");
                    strncat((char*)data->operate_number1,(char*)data->SpecialResult,MAXLEN);
                }
                else
                    strcpy((char*)data->operate_number1,(char*)data->SpecialResult);
            }
            else
            {
                if( !data->sig )
                {
                    strcpy((char*)data->operate_number1,"-");
                    strncat((char*)data->operate_number1,(char*)data->result,MAXLEN); 
                }
                else
                    strcpy((char*)data->operate_number1,(char*)data->result); 
            }           
        }
        memset((char*)data->result,0,sizeof(data->result));
        memset((char*)data->opera,0,sizeof(data->opera));
        //data->opera='\0';
        TRACE_EVENT(data->operate_number1);
        if( (strlen(data->operate_number1)>1)||((strlen(data->operate_number1)==1)&&(data->operate_number1[0]!='0')) )
        {
            strcpy((char*)data->opera,"+");
            data->pointflag=FALSE;
            data->afterpoint=0;
            data->flag=TRUE;
            data->index=0;
            data->resultflag=FALSE;
            data->operaflag=TRUE;
            winShow(win);
        }
        break;
    case KCD_MNUDOWN:
        if( strlen(data->opera) )
            break;
        if( (data->continues==TRUE)&&(!data->operaflag) )
        {
            if( strlen(data->SpecialResult) )
            {
                if( !data->sig )
                {
                    strcpy((char*)data->operate_number1,"-");
                    strncat((char*)data->operate_number1,(char*)data->SpecialResult,MAXLEN);
                }
                else
                {
                    TRACE_EVENT("KCD_MNUDOWN");
                    strcpy((char*)data->operate_number1,(char*)data->result); 
                    TRACE_EVENT(data->operate_number1);
                }
            }
            else
            {
                if( !data->sig )
                {
                    strcpy((char*)data->operate_number1,"-");
                    strncat((char*)data->operate_number1,(char*)data->result,MAXLEN); 
                }
                else
                    strcpy((char*)data->operate_number1,(char*)data->result); 
            }             
        }
        memset((char*)data->result,0,sizeof(data->result));
        memset((char*)data->opera,0,sizeof(data->opera));
        //data->opera='\0';
        if( (strlen(data->operate_number1)>1)||((strlen(data->operate_number1)==1)&&(data->operate_number1[0]!='0')) )
        {
            strcpy((char*)data->opera,"-");
            data->pointflag=FALSE;
            data->afterpoint=0;
            data->flag=TRUE;
            data->index=0;
            data->resultflag=FALSE;
            data->operaflag=TRUE;
            winShow(win);
        }
        break;
    case KCD_MNURIGHT:
        if( strlen(data->opera) )
            break;
        if( (data->continues==TRUE)&&(!data->operaflag) )
        {
            if( strlen(data->SpecialResult) )
            {
                if( !data->sig )
                {
                    strcpy((char*)data->operate_number1,"-");
                    strncat((char*)data->operate_number1,(char*)data->SpecialResult,MAXLEN);
                }
                else
                    strcpy((char*)data->operate_number1,(char*)data->result); 
            }
            else
            {
                if( !data->sig )
                {
                    strcpy((char*)data->operate_number1,"-");
                    strncat((char*)data->operate_number1,(char*)data->result,MAXLEN); 
                }
                else
                    strcpy((char*)data->operate_number1,(char*)data->result); 
            }                         
        }
        memset((char*)data->result,0,sizeof(data->result));
        memset((char*)data->opera,0,sizeof(data->opera));
        //data->opera='\0';
        if( (strlen(data->operate_number1)>1)||((strlen(data->operate_number1)==1)&&(data->operate_number1[0]!='0')) )
        {
            strcpy((char*)data->opera,"/");
            data->pointflag=FALSE;
            data->afterpoint=0;
            data->flag=TRUE;
            data->index=0;
            data->resultflag=FALSE;
            data->operaflag=TRUE;
            winShow(win);
        }
        break;
    case KCD_MNULEFT:
        if( strlen(data->opera) )
            break;
        if( (data->continues==TRUE)&&(!data->operaflag) )
        {
            if( strlen(data->SpecialResult) )
            {
                if( !data->sig )
                {
                    strcpy((char*)data->operate_number1,"-");
                    strncat((char*)data->operate_number1,(char*)data->SpecialResult,MAXLEN);
                }
                else
                    strcpy((char*)data->operate_number1,(char*)data->result); 
            }
            else
            {
                if( !data->sig )
                {
                    strcpy((char*)data->operate_number1,"-");
                    strncat((char*)data->operate_number1,(char*)data->result,MAXLEN); 
                }
                else
                    strcpy((char*)data->operate_number1,(char*)data->result); 
            }                         
        }
        memset((char*)data->result,0,sizeof(data->result));
        memset((char*)data->opera,0,sizeof(data->opera));
        //data->opera='\0';
        if( (strlen(data->operate_number1)>1)||((strlen(data->operate_number1)==1)&&(data->operate_number1[0]!='0')) )
        {
            strcpy((char*)data->opera,"*");
            data->pointflag=FALSE;
            data->afterpoint=0;
            data->flag=TRUE;
            data->index=0;
            data->resultflag=FALSE;
            data->operaflag=TRUE;
            winShow(win); 
        }
        break;
    case KCD_RIGHT:
        if( !data->flag )
        {
            if( (strlen(data->operate_number1)==1)&&(data->operate_number1[0]=='0') )
            {
                calculator_destroy(win);
                break;
            }
        }
        if( data->result[0]=='0' )
        {
            l=0;
        }
        else
        {
            l=strlen((char*)data->result);
        }
        if( strlen((char*)data->operate_number1)&&!l )
        {
            if( !data->flag )
            {
                if( strlen(data->SpecialResult) )
                    break;
                data->afterpoint--; 
                if( data->afterpoint<0 )
                    data->afterpoint=0;
                if( data->operate_number1[strlen((char*)data->operate_number1)-1]=='.' )
                {
                    data->pointflag=FALSE;                          
                }
                data->operate_number1[strlen((char*)data->operate_number1)-1]='\0';
                data->index=strlen((char*)data->operate_number1);               
            }
            else
            {
                if( strlen((char*)data->operate_number2)>1||!((strlen(data->operate_number1)==1)&&(data->operate_number1[0]=='0')) )
                {
                    if( data->pointflag )
                        data->afterpoint--;
                    if( data->operate_number2[strlen((char*)data->operate_number2)-1]=='.' )
                    {
                        data->pointflag=FALSE;                     
                    }
                    data->operate_number2[strlen((char*)data->operate_number2)-1]='\0';
                    data->index=strlen((char*)data->operate_number2);                        
                }
                else
                {
                    strcpy(data->operate_number2,"0");
                    data->index=0;
                    memset((char*)data->opera,0,sizeof(data->opera));
                    TraceInt(strlen(data->SpecialResult));
                    if( strlen(data->SpecialResult) )
                    {
                        winShow(win);
                        break;
                    }
                    data->flag=!data->flag;
                }                   
            }
            if( !strlen(data->operate_number1) )
            {
                strcpy(data->operate_number1,"0");
                data->index=0;
            }
            winShow(win);
        }
        else
        {
            calculator_destroy(win);
        }
        break;
    case KCD_OK:
    case KCD_LEFT:  
        if( !strlen(data->opera) )
            break;
        data->leftkey_indication=1;
        memset(data->SpecialResult,0,MAXLEN+MAXLEN);
        if( strlen(data->operate_number1)&&strlen(data->operate_number2)&&(!data->resultflag) )
        {
            if( (data->opera[0]=='/')&&(strlen(data->operate_number2)==1)&&(data->operate_number2[0]=='0') )
            {
                dialog_info_init(&display_info);
                display_info.TextId2     =TxtOverflow;//overflow                      
                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);
            }
            else
            {
                TRACE_EVENT("Special expression");
                memset(data->result,0,sizeof(data->result));
                memset(string,0,sizeof(string));
                data->sig=1;
                TRACE_EVENT(data->operate_number1);
                convert(data->operate_number1,string);
                TRACE_EVENT(string);
                /* i=0;
                 while((data->operate_number1[i]!='E')&&(i<strlen(data->operate_number1)))
                   i++;
                 TraceInt(strlen(data->operate_number1));
                 TraceInt(i);   	        		 
                 if(i<strlen(data->operate_number1))
                   {
                   if(data->operate_number1[i+1]=='+')
                       {
                       strncpy(string,data->operate_number1,1);
                       strncat(string,data->operate_number1+2,i-2);
                       exponent[0]=0;   	        		  	
                       strcpy(exponent,data->operate_number1+i+2);
                       TRACE_EVENT(exponent);
                       l=atoi(exponent);
                       TraceInt(l);
                       for(j=0;j<l-i;j++)
                       strcat(string,"0");
                       TRACE_EVENT(string);   */                           
                if( strlen(string)>MAXLEN )
                {
                    dialog_info_init(&display_info);
                    display_info.TextId2     =TxtOverflow;//overflow                      
                    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);
                }
                else
                {
                    strcpy(data->operate_number1,string);
                }                         
                /*	else
                      {
                      memset(exponent,0,2);   	        		  	
                      strcpy(exponent,data->operate_number1+i+2);
                      TRACE_EVENT(exponent);
                      l=atoi(exponent);
                      TraceInt(l);
                      strcpy(string,"0.");
                      for(j=0;j<l-1;j++)
                          strcat(string,"0");
                      strncat(string,data->operate_number1,1);
                      strncat(string,data->operate_number1+2,i-2);
                      TRACE_EVENT(string);
                      strcpy(data->operate_number1,string);
                      }
                  }   */  
                memset(data->result,0,MAXLEN+MAXLEN);
                data->sig=calculate1(data->operate_number1,data->operate_number2,data->opera,data->result);
                TRACE_EVENT(data->result);  
                if( data->result[0]!='0' )
                {
                    i=0;
                    j=0;
                    EndOfPoint=0;
                    while( data->result[i]!='.' )
                        i++;
                    if( i<strlen(data->result) )
                    {
                        while( (data->result[i]!='\0')&&(!EndOfPoint) )
                        {
                            i++;
                            j++;
                            if( j>5 )
                            {
                                EndOfPoint=1;
                                data->result[i]=0;
                            }
                        }
                    }
                }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -