Diff for /rpl/src/analyse_notation_algebrique.c between versions 1.11 and 1.73

version 1.11, 2010/07/14 14:19:32 version 1.73, 2020/01/10 11:15:39
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.18    RPL/2 (R) version 4.1.32
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2020 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 20 Line 20
 */  */
   
   
 #include "rpl.conv.h"  #include "rpl-conv.h"
   
   
 /*  /*
Line 57  analyse_algebrique(struct_processus *s_e Line 57  analyse_algebrique(struct_processus *s_e
     logical1                            presence_fonction;      logical1                            presence_fonction;
     logical1                            presence_liste;      logical1                            presence_liste;
   
     long                                k;  
   
     unsigned char                       *chaine_arguments;      unsigned char                       *chaine_arguments;
     unsigned char                       *chaine_centrale;      unsigned char                       *chaine_centrale;
     unsigned char                       *chaine_droite;      unsigned char                       *chaine_droite;
Line 76  analyse_algebrique(struct_processus *s_e Line 74  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                            k;
       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 106  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 115  analyse_algebrique(struct_processus *s_e Line 116  analyse_algebrique(struct_processus *s_e
   
         if (chaine_algebrique[i] == '"')          if (chaine_algebrique[i] == '"')
         {          {
             presence_chaine = (presence_chaine == d_faux) ? d_vrai : d_faux;              if (chaine_algebrique[i - 1] != '\\')
               {
                   presence_chaine = (presence_chaine == d_faux) ? d_vrai : d_faux;
               }
         }          }
         else if (presence_chaine == d_faux)          else if (presence_chaine == d_faux)
         {          {
Line 143  analyse_algebrique(struct_processus *s_e Line 147  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 176  analyse_algebrique(struct_processus *s_e Line 180  analyse_algebrique(struct_processus *s_e
     {      {
         if ((*ptr1) == '"')          if ((*ptr1) == '"')
         {          {
             if (presence_chaine == d_faux)              if (ptr1 != chaine_travail)
             {              { // Il existe un caractère précédent.
                 presence_chaine = d_vrai;                  if ((*(ptr1 - 1)) != '\\')
                   {
                       if (presence_chaine == d_faux)
                       {
                           presence_chaine = d_vrai;
                       }
                       else
                       {
                           presence_chaine = d_faux;
                       }
                   }
             }              }
             else              else
             {              { // Il n'existe pas de caractère précédent.
                 presence_chaine = d_faux;                  if (presence_chaine == d_faux)
                   {
                       presence_chaine = d_vrai;
                   }
                   else
                   {
                       presence_chaine = d_faux;
                   }
             }              }
         }          }
   
Line 196  analyse_algebrique(struct_processus *s_e Line 217  analyse_algebrique(struct_processus *s_e
             {              {
                 instruction_test[5] = d_code_fin_chaine;                  instruction_test[5] = d_code_fin_chaine;
   
                 instruction_majuscule = conversion_majuscule(strncpy(                  instruction_majuscule = conversion_majuscule(
                         instruction_test, ptr1, 5));                          s_etat_processus, strncpy(instruction_test, ptr1, 5));
   
                 if (instruction_majuscule == NULL)                  if (instruction_majuscule == NULL)
                 {                  {
Line 220  analyse_algebrique(struct_processus *s_e Line 241  analyse_algebrique(struct_processus *s_e
                     for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++);                      for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++);
                     (*(ptr2++)) = (*ptr1);                      (*(ptr2++)) = (*ptr1);
                 }                  }
                 else if ((strncmp(instruction_majuscule, " OR ", 4) == 0) &&                  else if (strcmp(instruction_majuscule, " EQV ") == 0)
                         (strlen(instruction_majuscule) == 4))                  {
                       for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++);
                       (*(ptr2++)) = (*ptr1);
                   }
                   else if ((strcmp(instruction_majuscule, " OR ") == 0))
                 {                  {
                     for(i = 0; i < 3; (*(ptr2++)) = (*(ptr1++)), i++);                      for(i = 0; i < 3; (*(ptr2++)) = (*(ptr1++)), i++);
                     (*(ptr2++)) = (*ptr1);                      (*(ptr2++)) = (*ptr1);
Line 267  analyse_algebrique(struct_processus *s_e Line 292  analyse_algebrique(struct_processus *s_e
                 }                  }
                 else if (chaine_travail[i] == '"')                  else if (chaine_travail[i] == '"')
                 {                  {
                     presence_chaine = (presence_chaine == d_vrai)                      if (i > 0)
                             ? d_faux : d_vrai;                      {
                           if (chaine_travail[i - 1] != '\\')
                           {
                               presence_chaine = (presence_chaine == d_vrai)
                                       ? d_faux : d_vrai;
                           }
                       }
                       else
                       {
                           presence_chaine = (presence_chaine == d_vrai)
                                   ? d_faux : d_vrai;
                       }
                 }                  }
   
                 i++;                  i++;
Line 305  analyse_algebrique(struct_processus *s_e Line 341  analyse_algebrique(struct_processus *s_e
   
                 if (chaine_travail[j] == '"')                  if (chaine_travail[j] == '"')
                 {                  {
                     presence_chaine = (presence_chaine == d_vrai)                      if (j > 0)
                             ? d_faux : d_vrai;                      {
                           if (chaine_travail[j - 1] != '\\')
                           {
                               presence_chaine = (presence_chaine == d_vrai)
                                       ? d_faux : d_vrai;
                           }
                       }
                       else
                       {
                           presence_chaine = (presence_chaine == d_vrai)
                                   ? d_faux : d_vrai;
                       }
                 }                  }
   
                 j++;                  j++;
Line 315  analyse_algebrique(struct_processus *s_e Line 362  analyse_algebrique(struct_processus *s_e
             if ((drapeau_debut_zone_valide == d_vrai) &&              if ((drapeau_debut_zone_valide == d_vrai) &&
                     (drapeau_fin_zone_valide == d_vrai))                      (drapeau_fin_zone_valide == d_vrai))
             {              {
                 chaine_gauche = purification_chaine(                  chaine_gauche = purification_chaine(s_etat_processus,
                         extraction_chaine(chaine_travail,                          extraction_chaine(s_etat_processus, chaine_travail,
                         1, debut_zone_algebrique));                          1, debut_zone_algebrique));
                 chaine_centrale = purification_chaine(                  chaine_centrale = purification_chaine(s_etat_processus,
                         extraction_chaine(chaine_travail,                          extraction_chaine(s_etat_processus, chaine_travail,
                         debut_zone_algebrique + 1, fin_zone_algebrique + 1));                          debut_zone_algebrique + 1, fin_zone_algebrique + 1));
                 chaine_droite = purification_chaine(                  chaine_droite = purification_chaine(s_etat_processus,
                         extraction_chaine(chaine_travail,                          extraction_chaine(s_etat_processus, 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 400  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] == '"')
                     {                      {
                         presence_chaine = (presence_chaine == d_faux)                          if (i > 0)
                                 ? d_vrai : d_faux;                          {
                               if (chaine_centrale[i - 1] != '\\')
                               {
                                   presence_chaine = (presence_chaine == d_faux)
                                           ? d_vrai : d_faux;
                               }
                           }
                           else
                           {
                               presence_chaine = (presence_chaine == d_faux)
                                       ? d_vrai : d_faux;
                           }
   
                         if (i == 1)                          if (i == 1)
                         {                          {
Line 414  analyse_algebrique(struct_processus *s_e Line 473  analyse_algebrique(struct_processus *s_e
                 if ((test_expression_rpn(chaine_centrale) == d_vrai) &&                  if ((test_expression_rpn(chaine_centrale) == d_vrai) &&
                         (fin_zone_algebrique - debut_zone_algebrique > 0))                          (fin_zone_algebrique - debut_zone_algebrique > 0))
                 {                  {
                     if ((tampon = purification_chaine(                      if ((tampon = purification_chaine(s_etat_processus,
                             extraction_chaine(chaine_centrale, 2,                              extraction_chaine(s_etat_processus,
                             strlen(chaine_centrale) - 1))) == NULL)                              chaine_centrale, 2,
                               ((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 533  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--;
                     }                      }
   
                     chaine_fonction = purification_chaine(                      chaine_fonction = purification_chaine(s_etat_processus,
                             extraction_chaine(chaine_centrale, 2, i));                              extraction_chaine(s_etat_processus,
                     chaine_arguments = purification_chaine(                              chaine_centrale, 2, i));
                             extraction_chaine(chaine_centrale, i + 2, j));                      chaine_arguments = purification_chaine(s_etat_processus,
                               extraction_chaine(s_etat_processus,
                               chaine_centrale, i + 2, j));
   
                     i = 0;                      i = 0;
                     niveau = 0;                      niveau = 0;
Line 509  analyse_algebrique(struct_processus *s_e Line 571  analyse_algebrique(struct_processus *s_e
                         if ((chaine_arguments[i] == ',') && (niveau == 0))                          if ((chaine_arguments[i] == ',') && (niveau == 0))
                         {                          {
                             sous_chaine_gauche = purification_chaine(                              sous_chaine_gauche = purification_chaine(
                                     extraction_chaine(chaine_arguments, 1, i));                                      s_etat_processus,
                                       extraction_chaine(s_etat_processus,
                                       chaine_arguments, 1, i));
                             sous_chaine_droite = purification_chaine(                              sous_chaine_droite = purification_chaine(
                                     extraction_chaine(chaine_arguments, i + 2,                                      s_etat_processus,
                                     strlen(chaine_arguments)));                                      extraction_chaine(s_etat_processus,
                                       chaine_arguments, i + 2,
                                       ((integer8) strlen(chaine_arguments))));
   
                             free(chaine_arguments);                              free(chaine_arguments);
   
Line 595  analyse_algebrique(struct_processus *s_e Line 661  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 793  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 763  analyse_algebrique(struct_processus *s_e Line 829  analyse_algebrique(struct_processus *s_e
   
                 if ((chaine_travail[i] != 0) && (j != 0))                  if ((chaine_travail[i] != 0) && (j != 0))
                 {                  {
                     chaine_gauche = purification_chaine(                      chaine_gauche = purification_chaine(s_etat_processus,
                             extraction_chaine(chaine_travail, 1, i));                              extraction_chaine(s_etat_processus,
                     chaine_centrale = purification_chaine(                              chaine_travail, 1, i));
                             extraction_chaine(chaine_travail,                      chaine_centrale = purification_chaine(s_etat_processus,
                               extraction_chaine(s_etat_processus, chaine_travail,
                             i + 1, j + 1));                              i + 1, j + 1));
                     chaine_droite = purification_chaine(                      chaine_droite = purification_chaine(s_etat_processus,
                             extraction_chaine(chaine_travail, j + 2,                              extraction_chaine(s_etat_processus, chaine_travail,
                             strlen(chaine_travail)));                              j + 2, ((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 849  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 878  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 906  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 885  analyse_algebrique(struct_processus *s_e Line 952  analyse_algebrique(struct_processus *s_e
   
                         if (niveau == 0)                          if (niveau == 0)
                         {                          {
                             prologue = purification_chaine(                              prologue = purification_chaine(s_etat_processus,
                                     extraction_chaine(chaine_centrale, 1, k));                                      extraction_chaine(s_etat_processus,
                             epilogue = purification_chaine(                                      chaine_centrale, 1, k));
                                     extraction_chaine(chaine_centrale,                              epilogue = purification_chaine(s_etat_processus,
                                     k + 2, longueur_chaine));                                      extraction_chaine(s_etat_processus,
                                       chaine_centrale, k + 2, longueur_chaine));
   
                             if ((prologue == NULL) || (epilogue == NULL))                              if ((prologue == NULL) || (epilogue == NULL))
                             {                              {
Line 974  analyse_algebrique(struct_processus *s_e Line 1042  analyse_algebrique(struct_processus *s_e
                                 drapeau_modification = d_vrai;                                  drapeau_modification = d_vrai;
                             }                              }
                             else if (((priorite == 1) && (t4 == ' ') &&                              else if (((priorite == 1) && (t4 == ' ') &&
                                     (t3 == 'X') && (t2 == 'O') && (t1 == 'R')                                      (((t3 == 'X') && (t2 == 'O') && (t1 == 'R'))
                                     && (t0 == ' ')) || ((priorite == 2) &&                                      || ((t3 == 'E') && (t2 == 'Q') &&
                                       (t1 == 'V'))) && (t0 == ' '))
                                       || ((priorite == 2) &&
                                     (t4 == ' ') && (t3 == 'A') && (t2 == 'N')                                      (t4 == ' ') && (t3 == 'A') && (t2 == 'N')
                                     && (t1 == 'D') && (t0 == ' ')))                                      && (t1 == 'D') && (t0 == ' ')))
                             {                              {
Line 1093  analyse_algebrique(struct_processus *s_e Line 1163  analyse_algebrique(struct_processus *s_e
   
   
 unsigned char *  unsigned char *
 purification_chaine(unsigned char *chaine)  purification_chaine(struct_processus *s_etat_processus, unsigned char *chaine)
 {  {
     long                        i;      integer8                    i;
     long                        j;      integer8                    j;
   
     unsigned char               *chaine_purifiee;      unsigned char               *chaine_purifiee;
   
       if (chaine == NULL)
       {
           return(NULL);
       }
   
     i = 0;      i = 0;
     j = strlen(chaine) - 1;      j = ((integer8) strlen(chaine)) - 1;
   
     while(chaine[i] == ' ')      while(chaine[i] == ' ')
     {      {
Line 1124  purification_chaine(unsigned char *chain Line 1199  purification_chaine(unsigned char *chain
         }          }
     }      }
   
     chaine_purifiee = extraction_chaine(chaine, i + 1, j + 1);      chaine_purifiee = extraction_chaine(s_etat_processus, chaine, i + 1, j + 1);
     free(chaine);      free(chaine);
   
     return(chaine_purifiee);      return(chaine_purifiee);
Line 1134  purification_chaine(unsigned char *chain Line 1209  purification_chaine(unsigned char *chain
 logical1  logical1
 test_expression_rpn(unsigned char *chaine)  test_expression_rpn(unsigned char *chaine)
 {  {
     long                    j;      int                     t;
       int                     t0;
     unsigned char           t;      int                     t1;
     unsigned char           t0;      int                     t2;
     unsigned char           t1;      int                     t3;
     unsigned char           t2;      int                     t4;
     unsigned char           t3;  
     unsigned char           t4;      integer8                compteur;
       integer8                longueur_chaine;
     unsigned long           compteur;      integer8                i;
     unsigned long           longueur_chaine;      integer8                j;
     unsigned long           i;      integer8                niveau;
     unsigned long           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 1229  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 1164  test_expression_rpn(unsigned char *chain Line 1239  test_expression_rpn(unsigned char *chain
         if (chaine[i - 1] == '"')          if (chaine[i - 1] == '"')
         {          {
             i++;              i++;
             while(chaine[i - 1] != '"')              while(!((chaine[i - 1] == '"') && (chaine[i - 2] != '\\')))
             {              {
                 i++;                  i++;
             }              }
         }          }
   
         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 1218  test_expression_rpn(unsigned char *chain Line 1293  test_expression_rpn(unsigned char *chain
                 || ((t0 == ' ') && ((t1 == 'A') || (t1 == 'a')) &&                  || ((t0 == ' ') && ((t1 == 'A') || (t1 == 'a')) &&
                 ((t2 == 'N') || (t2 == 'n')) && ((t3 == 'D') || (t3 == 'd'))                  ((t2 == 'N') || (t2 == 'n')) && ((t3 == 'D') || (t3 == 'd'))
                 && (t4 == ' ')) ||                  && (t4 == ' ')) ||
                   ((t0 == ' ') && ((t1 == 'E') || (t1 == 'e')) &&
                   ((t2 == 'Q') || (t2 == 'q')) && ((t3 == 'V') || (t3 == 'v'))
                   && (t4 == ' ')) ||
                 ((t0 == ' ') && ((t1 == 'O') || (t1 == 'o')) &&                  ((t0 == ' ') && ((t1 == 'O') || (t1 == 'o')) &&
                 ((t2 == 'R') || (t2 == 'r')) && (t3 == ' ')) ||                  ((t2 == 'R') || (t2 == 'r')) && (t3 == ' ')) ||
                 ((t0 == ' ') && ((t1 == 'X') || (t1 == 'x')) &&                  ((t0 == ' ') && ((t1 == 'X') || (t1 == 'x')) &&
Line 1254  test_fonction(unsigned char *chaine) Line 1332  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 1381  test_fonction(unsigned char *chaine)
   
   
 unsigned char *  unsigned char *
 extraction_chaine(unsigned char *chaine, unsigned long position_1,  extraction_chaine(struct_processus *s_etat_processus,
         unsigned long position_2)          unsigned char *chaine, integer8 position_1, 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_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 1404  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)
     {      {
           (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
         return(NULL);          return(NULL);
     }      }
   

Removed from v.1.11  
changed lines
  Added in v.1.73


CVSweb interface <joel.bertrand@systella.fr>