Diff for /rpl/src/analyse_notation_algebrique.c between versions 1.42 and 1.43

version 1.42, 2013/02/27 17:11:39 version 1.43, 2013/03/20 17:11:43
Line 76  analyse_algebrique(struct_processus *s_e Line 76  analyse_algebrique(struct_processus *s_e
     unsigned char                       registre_test;      unsigned char                       registre_test;
     unsigned char                       *sous_chaine_droite;      unsigned char                       *sous_chaine_droite;
     unsigned char                       *sous_chaine_gauche;      unsigned char                       *sous_chaine_gauche;
     unsigned char                       t0;  
     unsigned char                       t1;  
     unsigned char                       t2;  
     unsigned char                       t3;  
     unsigned char                       t4;  
     unsigned char                       *tampon;      unsigned char                       *tampon;
   
     unsigned long                       debut_zone_algebrique;      int                                 t0;
     unsigned long                       fin_zone_algebrique;      int                                 t1;
     unsigned long                       i;      int                                 t2;
     unsigned long                       j;      int                                 t3;
     unsigned long                       longueur_chaine;      int                                 t4;
     unsigned long                       longueur_tampon;  
     unsigned long                       niveau;      integer8                            debut_zone_algebrique;
     unsigned long                       niveau_liste;      integer8                            fin_zone_algebrique;
     unsigned long                       nombre_apostrophes;      integer8                            i;
     unsigned long                       nombre_arguments;      integer8                            j;
     unsigned long                       priorite;      integer8                            longueur_chaine;
       integer8                            longueur_tampon;
       integer8                            niveau;
       integer8                            niveau_liste;
       integer8                            nombre_apostrophes;
       integer8                            nombre_arguments;
       integer8                            priorite;
   
     (*l_base_liste) = NULL;      (*l_base_liste) = NULL;
   
Line 106  analyse_algebrique(struct_processus *s_e Line 107  analyse_algebrique(struct_processus *s_e
     presence_liste = d_faux;      presence_liste = d_faux;
     niveau_liste = 0;      niveau_liste = 0;
   
     for(i = 1, chaine_invalide = d_vrai; i < strlen(chaine_algebrique) - 1; i++)      for(i = 1, chaine_invalide = d_vrai; i < ((integer8)
               strlen(chaine_algebrique)) - 1; i++)
     {      {
         if (chaine_algebrique[i] != ' ')          if (chaine_algebrique[i] != ' ')
         {          {
Line 143  analyse_algebrique(struct_processus *s_e Line 145  analyse_algebrique(struct_processus *s_e
      * Transformation des "**" en "^ "       * Transformation des "**" en "^ "
      */       */
   
     for(i = 1; i < strlen(chaine_algebrique) - 1; i++)      for(i = 1; i < ((integer8) strlen(chaine_algebrique)) - 1; i++)
     {      {
         if (chaine_algebrique[i] == '*')          if (chaine_algebrique[i] == '*')
         {          {
Line 323  analyse_algebrique(struct_processus *s_e Line 325  analyse_algebrique(struct_processus *s_e
                         debut_zone_algebrique + 1, fin_zone_algebrique + 1));                          debut_zone_algebrique + 1, fin_zone_algebrique + 1));
                 chaine_droite = purification_chaine(                  chaine_droite = purification_chaine(
                         extraction_chaine(chaine_travail,                          extraction_chaine(chaine_travail,
                         fin_zone_algebrique + 2, strlen(chaine_travail)));                          fin_zone_algebrique + 2,
                           (integer8) strlen(chaine_travail)));
   
                 free(chaine_travail);                  free(chaine_travail);
   
Line 352  analyse_algebrique(struct_processus *s_e Line 355  analyse_algebrique(struct_processus *s_e
                 drapeau_elimination_parentheses = d_vrai;                  drapeau_elimination_parentheses = d_vrai;
                 presence_chaine = d_faux;                  presence_chaine = d_faux;
   
                 while(i < (strlen(chaine_centrale) - 1))                  while(i < ((integer8) strlen(chaine_centrale)) - 1)
                 {                  {
                     if (chaine_centrale[i] == '"')                      if (chaine_centrale[i] == '"')
                     {                      {
Line 416  analyse_algebrique(struct_processus *s_e Line 419  analyse_algebrique(struct_processus *s_e
                 {                  {
                     if ((tampon = purification_chaine(                      if ((tampon = purification_chaine(
                             extraction_chaine(chaine_centrale, 2,                              extraction_chaine(chaine_centrale, 2,
                             strlen(chaine_centrale) - 1))) == NULL)                              ((integer8) strlen(chaine_centrale)) - 1))) == NULL)
                     {                      {
                         (*s_etat_processus).erreur_systeme =                          (*s_etat_processus).erreur_systeme =
                                 d_es_allocation_memoire;                                  d_es_allocation_memoire;
Line 473  analyse_algebrique(struct_processus *s_e Line 476  analyse_algebrique(struct_processus *s_e
                         (fin_zone_algebrique - debut_zone_algebrique > 0))                          (fin_zone_algebrique - debut_zone_algebrique > 0))
                 {                  {
                     i = 1;                      i = 1;
                     while((i < (strlen(chaine_centrale) - 1)) &&                      while((i < ((integer8) strlen(chaine_centrale)) - 1) &&
                             (chaine_centrale[i] != '('))                              (chaine_centrale[i] != '('))
                     {                      {
                         i++;                          i++;
                     }                      }
   
                     j = strlen(chaine_centrale) - 1;                      j = ((integer8) strlen(chaine_centrale)) - 1;
                     while(chaine_centrale[j] != ')')                      while(chaine_centrale[j] != ')')
                     {                      {
                         j--;                          j--;
Line 512  analyse_algebrique(struct_processus *s_e Line 515  analyse_algebrique(struct_processus *s_e
                                     extraction_chaine(chaine_arguments, 1, i));                                      extraction_chaine(chaine_arguments, 1, i));
                             sous_chaine_droite = purification_chaine(                              sous_chaine_droite = purification_chaine(
                                     extraction_chaine(chaine_arguments, i + 2,                                      extraction_chaine(chaine_arguments, i + 2,
                                     strlen(chaine_arguments)));                                      ((integer8) strlen(chaine_arguments))));
   
                             free(chaine_arguments);                              free(chaine_arguments);
   
Line 595  analyse_algebrique(struct_processus *s_e Line 598  analyse_algebrique(struct_processus *s_e
                         (*s_etat_processus).instruction_valide =                          (*s_etat_processus).instruction_valide =
                                 registre_instruction_valide;                                  registre_instruction_valide;
   
                         if (((unsigned long) (*s_etat_processus)                          if (((*s_etat_processus).nombre_arguments !=
                                 .nombre_arguments != nombre_arguments) &&                                  nombre_arguments) &&
                                 ((*s_etat_processus).nombre_arguments != -2))                                  ((*s_etat_processus).nombre_arguments != -2))
                         {                          {
                             (*s_etat_processus).erreur_execution =                              (*s_etat_processus).erreur_execution =
Line 727  analyse_algebrique(struct_processus *s_e Line 730  analyse_algebrique(struct_processus *s_e
         } while((drapeau_debut_zone_valide == d_vrai)          } while((drapeau_debut_zone_valide == d_vrai)
                 && (drapeau_fin_zone_valide == d_vrai));                  && (drapeau_fin_zone_valide == d_vrai));
   
         for(longueur_chaine = strlen(chaine_travail),          for(longueur_chaine = (integer8) strlen(chaine_travail),
                 i = nombre_apostrophes = 0; i < longueur_chaine;                  i = nombre_apostrophes = 0; i < longueur_chaine;
                 nombre_apostrophes += (chaine_travail[i++] == '\'') ? 1 : 0);                  nombre_apostrophes += (chaine_travail[i++] == '\'') ? 1 : 0);
   
Line 770  analyse_algebrique(struct_processus *s_e Line 773  analyse_algebrique(struct_processus *s_e
                             i + 1, j + 1));                              i + 1, j + 1));
                     chaine_droite = purification_chaine(                      chaine_droite = purification_chaine(
                             extraction_chaine(chaine_travail, j + 2,                              extraction_chaine(chaine_travail, j + 2,
                             strlen(chaine_travail)));                              ((integer8) strlen(chaine_travail))));
   
                     if ((chaine_gauche == NULL) || (chaine_centrale == NULL) ||                      if ((chaine_gauche == NULL) || (chaine_centrale == NULL) ||
                             (chaine_droite == NULL))                              (chaine_droite == NULL))
Line 782  analyse_algebrique(struct_processus *s_e Line 785  analyse_algebrique(struct_processus *s_e
   
                     drapeau_elimination_parentheses = d_vrai;                      drapeau_elimination_parentheses = d_vrai;
   
                     if ((longueur_tampon = strlen(chaine_centrale)) != 0)                      if ((longueur_tampon = ((integer8) strlen(chaine_centrale)))
                               != 0)
                     {                      {
                         niveau = 0;                          niveau = 0;
   
Line 810  analyse_algebrique(struct_processus *s_e Line 814  analyse_algebrique(struct_processus *s_e
   
                         if (drapeau_elimination_parentheses == d_vrai)                          if (drapeau_elimination_parentheses == d_vrai)
                         {                          {
                             if ((tampon = (unsigned char *) malloc(                              if ((tampon = (unsigned char *) malloc(((size_t)
                                     ((longueur_tampon = strlen(                                      ((longueur_tampon = (integer8) strlen(
                                     chaine_centrale)) + 1) * sizeof(                                      chaine_centrale)) + 1)) * sizeof(
                                     unsigned char))) == NULL)                                      unsigned char))) == NULL)
                             {                              {
                                 (*s_etat_processus).erreur_systeme =                                  (*s_etat_processus).erreur_systeme =
Line 838  analyse_algebrique(struct_processus *s_e Line 842  analyse_algebrique(struct_processus *s_e
                     }                      }
   
                     tampon[0] = d_code_fin_chaine;                      tampon[0] = d_code_fin_chaine;
                     longueur_chaine = strlen(chaine_centrale);                      longueur_chaine = (integer8) strlen(chaine_centrale);
                       k = ((integer8) strlen(chaine_centrale)) - 1;
                     niveau = 0;                      niveau = 0;
                     k = strlen(chaine_centrale) - 1;  
                     fin_boucle_extraction = d_faux;                      fin_boucle_extraction = d_faux;
   
                     while((k >= 0) && (fin_boucle_extraction ==                      while((k >= 0) && (fin_boucle_extraction == d_faux))
                             d_faux))  
                     {                      {
                         t0 = ((size_t) k < strlen(chaine_centrale))                          t0 = (k < ((integer8) strlen(chaine_centrale)))
                                 ? chaine_centrale[k + 1] : ' ';                                  ? chaine_centrale[k + 1] : ' ';
                         t1 = chaine_centrale[k];                          t1 = chaine_centrale[k];
                         t2 = (k < 1) ? ' ' : chaine_centrale[k - 1];                          t2 = (k < 1) ? ' ' : chaine_centrale[k - 1];
Line 1101  purification_chaine(unsigned char *chain Line 1104  purification_chaine(unsigned char *chain
     unsigned char               *chaine_purifiee;      unsigned char               *chaine_purifiee;
   
     i = 0;      i = 0;
     j = strlen(chaine) - 1;      j = ((integer8) strlen(chaine)) - 1;
   
     while(chaine[i] == ' ')      while(chaine[i] == ' ')
     {      {
Line 1136  test_expression_rpn(unsigned char *chain Line 1139  test_expression_rpn(unsigned char *chain
 {  {
     long                    j;      long                    j;
   
     unsigned char           t;      int                     t;
     unsigned char           t0;      int                     t0;
     unsigned char           t1;      int                     t1;
     unsigned char           t2;      int                     t2;
     unsigned char           t3;      int                     t3;
     unsigned char           t4;      int                     t4;
   
     unsigned long           compteur;      integer8                compteur;
     unsigned long           longueur_chaine;      integer8                longueur_chaine;
     unsigned long           i;      integer8                i;
     unsigned long           niveau;      integer8                niveau;
   
     /*      /*
      * On teste d'abord la chaîne pour vérifier qu'il n'y a pas de fonction       * On teste d'abord la chaîne pour vérifier qu'il n'y a pas de fonction
Line 1155  test_expression_rpn(unsigned char *chain Line 1158  test_expression_rpn(unsigned char *chain
   
     compteur = 0;      compteur = 0;
   
     for(longueur_chaine = strlen(chaine), i = 1; i < longueur_chaine; i++)      for(longueur_chaine = ((integer8) strlen(chaine)), i = 1;
               i < longueur_chaine; i++)
     {      {
         /*          /*
          * On saute les chaînes de caractères           * On saute les chaînes de caractères
Line 1170  test_expression_rpn(unsigned char *chain Line 1174  test_expression_rpn(unsigned char *chain
             }              }
         }          }
   
         j = ((long) i) - 2;          j = i - 2;
         t0 = (i >= 2) ? chaine[i - 2] : '?';          t0 = (i >= 2) ? chaine[i - 2] : '?';
         t1 = chaine[i - 1];          t1 = chaine[i - 1];
         t2 = chaine[i];          t2 = chaine[i];
         t3 = ((i + 1) < strlen(chaine)) ? chaine[i + 1] : '?';          t3 = ((i + 1) < ((integer8) strlen(chaine))) ? chaine[i + 1] : '?';
         t4 = ((i + 2) < strlen(chaine)) ? chaine[i + 2] : '?';          t4 = ((i + 2) < ((integer8) strlen(chaine))) ? chaine[i + 2] : '?';
   
         /*          /*
          * Ouverture d'une parenthèse signalant une fonction           * Ouverture d'une parenthèse signalant une fonction
Line 1254  test_fonction(unsigned char *chaine) Line 1258  test_fonction(unsigned char *chaine)
 {  {
     logical1                drapeau_fonction;      logical1                drapeau_fonction;
   
     unsigned char           t;      int                     t;
   
     unsigned long           compteur;      integer8                compteur;
     unsigned long           i;      integer8                i;
     unsigned long           longueur_chaine;      integer8                longueur_chaine;
   
     longueur_chaine = strlen(chaine);      longueur_chaine = (integer8) strlen(chaine);
     i = 1;      i = 1;
   
     while(((t = chaine[i]) != '(') && (i < (longueur_chaine - 1)))      while(((t = chaine[i]) != '(') && (i < (longueur_chaine - 1)))
Line 1303  test_fonction(unsigned char *chaine) Line 1307  test_fonction(unsigned char *chaine)
   
   
 unsigned char *  unsigned char *
 extraction_chaine(unsigned char *chaine, unsigned long position_1,  extraction_chaine(unsigned char *chaine, integer8 position_1,
         unsigned long position_2)          integer8 position_2)
 {  {
     long                    i;      integer8                i;
   
     unsigned char           *pointeur_ecriture;      unsigned char           *pointeur_ecriture;
     unsigned char           *pointeur_lecture;      unsigned char           *pointeur_lecture;
     unsigned char           *sous_chaine;      unsigned char           *sous_chaine;
   
     if ((position_1 < 1) || (position_2 < position_1) ||      if ((position_1 < 1) || (position_2 < position_1) ||
             (position_2 > strlen(chaine)))              (position_1 > ((integer8) strlen(chaine))))
       {
           if ((sous_chaine = (unsigned char *) malloc(sizeof(unsigned char)))
                   == NULL)
           {
               return(NULL);
           }
   
           (*sous_chaine) = d_code_fin_chaine;
           return(sous_chaine);
       }
   
       if (position_2 > ((integer8) strlen(chaine)))
     {      {
         if ((sous_chaine = (unsigned char *) malloc(sizeof(unsigned char)))          if ((sous_chaine = (unsigned char *) malloc(sizeof(unsigned char)))
                 == NULL)                  == NULL)
Line 1326  extraction_chaine(unsigned char *chaine, Line 1342  extraction_chaine(unsigned char *chaine,
     }      }
   
     if ((sous_chaine = (unsigned char *)      if ((sous_chaine = (unsigned char *)
             malloc((position_2 - position_1 + 2) * sizeof(unsigned char)))              malloc(((size_t) (position_2 - position_1 + 2)) *
             == NULL)              sizeof(unsigned char))) == NULL)
     {      {
         return(NULL);          return(NULL);
     }      }

Removed from v.1.42  
changed lines
  Added in v.1.43


CVSweb interface <joel.bertrand@systella.fr>