#include <stdio.h>
#include <stdlib.h>
#include "structure.h"
#include "conio.h"

void calculatrice(ptr_pile *lapile)
{
    
  double leNombre,val1,val2,resultat,valeur;
  long menu,a;
  int test;
  long nb_element;
  int register k;
  char *chaine;
  int compteur=0;
   
  printf("\n");
  printf(" ***************************\n");
  printf(" ***   CALCULATRICE HP   ***\n"); 
  printf(" ***************************\n");
  printf("\n\n\n\n");
  
  
  printf("1- lancement du programme\n");
  printf("2- remerciment\n");
  
  
  do
  {
      menu=getch();
  }     
  while (menu!='1' && menu!='2');
  clrscr();
  

  switch (menu){
            
            case '1':
          
                chaine=(char *)malloc(10*sizeof(char));
                 do
                 {
                     fflush(stdin);
                      scanf ("%s",chaine); 
                      
                      switch(*chaine){
                                case '*' : 
                                    if((*lapile)->nb_element>=2 && strlen(chaine)==1)
                                    {
                                        test=depiler(&lapile,&val1);
                                        if (test==0)
                                        {
                                            test=depiler(&lapile,&val2);
                                            if(test==0)
                                            {
                                                resultat=val1*val2;
                                                printf("%lf %c %lf = %lf\n",val1,*chaine,val2,resultat);
                                                empiler(&lapile,resultat);
                                            }    
                                        }       
                                    }
                                    break;
                               
                                case '/':
                                     
                                    if((*lapile)->nb_element>=2 && strlen(chaine)==1)
                                    {	
                                        test=renvoyer(lapile, 2,&valeur);
                                        if(test== 0 && valeur!=0)
                                        {
                                            test=depiler(&lapile,&val1);
                                            printf("%lf \n",val1);
                                            if (test==0)
                                            {
                                                test=depiler(&lapile,&val2);
                                                
                                                if(test==0 && val2!=0)
                                                {
                                                    resultat= val1/val2;
                                                    printf("%lf %c %lf = %lf\n",val1,*chaine,val2,resultat);
                                                    empiler(&lapile,resultat);
                                                }    
                                            }    
                                        }
                                        else
                                        {
                                           printf("Operation impossible\n");  
                                        }       
                                    }
                                    break;
                             
                                case '+':  
                                    if((*lapile)->nb_element>=2 && strlen(chaine)==1)
                                    {
                                        test=depiler(&lapile,&val1);
                                        if (test==0){
                                            test=depiler(&lapile,&val2);
                                            if(test==0)
                                            {
                                                resultat=val1+val2;
                                                printf("%lf %c %lf = %lf\n",val1,*chaine,val2,resultat);
                                                empiler(&lapile,resultat);
                                            }    
                                        }       
                                    }
                                    break;
                                case '-':
                                //Pour entrer, une valeur negative
                                 if(strlen(chaine)==1)
                                 {
                                    if((*lapile)->nb_element>=2)
                                    {
                                        test=depiler(&lapile,&val1);
                                        if (test==0)
                                        {
                                            test=depiler(&lapile,&val2);
                                            if(test==0)
                                            {
                                                resultat=val1-val2;
                                                printf("%lf %c %lf = %lf\n",val1,*chaine,val2,resultat);
                                                empiler(&lapile,resultat);
                                            }    
                                        }       
                                    }
                                    break;
                                 }  
                                default :    
                                    test=0;
                                    compteur=0;
                                    //On verifie que la chaine entrée est bien un nombre
                                    //printf ("uiejegejhegekjge");
                                    if(chaine[0]=='-')
                                    {
                                          for(a=1; a<strlen(chaine) ;a++)
                                          {
                                             
                                              if (chaine[a]>='0' && chaine[a]<='9' || chaine[a]=='.')
                                              {
                                                  if (chaine[a]=='.')
                                                  {
                                                      compteur++;
                                                  }       
                                              }
                                              else
                                              {
                                                  test++;
                                              } 
                                          }  
                                    }else{
                                          for(a=0; a<strlen(chaine) ;a++)
                                          {
                                              if (chaine[a]>='0' && chaine[a]<='9' || chaine[a]=='.')
                                              {
                                                  if (chaine[a]=='.')
                                                  {
                                                      compteur++;
                                                  }       
                                              }
                                              else
                                              {
                                                  test++;
                                              }        
                                          }
                                    }
                                    //Si test!=0 alors la chaine n'est pas un nombre
                                    //Compteur indique le nombre de point      
                                    if (test == 0 && compteur<2)
                                    {
                                        sscanf( chaine, "%lf\n",&leNombre);
                                        empiler(&lapile,leNombre);
                                    }   
                                    else
                                    {
                                        printf ("ERREUR DE SAISIE\n");
                                    }       
                                    break;  
                            }  
                            
                 }while (1);
            case '2':
            printf ("\n\nBalmes regis\n");
            printf ("Becker sebastien\n\n\n\n\n\n\n");
            break;
   }
}
