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

version 1.21, 2011/06/21 07:45:20 version 1.73, 2020/01/10 11:15:39
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.0.prerelease.1    RPL/2 (R) version 4.1.32
   Copyright (C) 1989-2011 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"
   
   
 /*  /*
 ================================================================================  ================================================================================
   Analyseur syntaxique d'une expression algébrique    Analyseur syntaxique d'une expression algébrique
 ================================================================================  ================================================================================
   Entrées : chaîne de caractères comprenant l'expression algébrique    Entrées : chaîne de caractères comprenant l'expression algébrique
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
   Sorties : chaîne de caractères contenant l'expression convertie en    Sorties : chaîne de caractères contenant l'expression convertie en
     notation polonaise inverse et liste chaînée contenant les diverses      notation polonaise inverse et liste chaînée contenant les diverses
     fonctions.      fonctions.
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
   Effets de bord : néant    Effets de bord : néant
 ================================================================================  ================================================================================
 */  */
   
 unsigned char *  unsigned char *
 analyse_algebrique(struct_processus *s_etat_processus,  analyse_algebrique(struct_processus *s_etat_processus,
         unsigned char *chaine_algebrique, struct_liste_chainee **l_base_liste)          unsigned char *chaine_algebrique, struct_liste_chainee **l_base_liste)
 {  {
     struct_fonction                     *s_fonction;      struct_fonction                     *s_fonction;
   
     struct_liste_chainee                *l_element_courant;      struct_liste_chainee                *l_element_courant;
   
     logical1                            chaine_invalide;      logical1                            chaine_invalide;
     logical1                            drapeau_debut_zone_valide;      logical1                            drapeau_debut_zone_valide;
     logical1                            drapeau_elimination_parentheses;      logical1                            drapeau_elimination_parentheses;
     logical1                            drapeau_fin_boucle;      logical1                            drapeau_fin_boucle;
     logical1                            drapeau_fin_zone_valide;      logical1                            drapeau_fin_zone_valide;
     logical1                            drapeau_modification;      logical1                            drapeau_modification;
     logical1                            drapeau_priorite_entierement_traitee;      logical1                            drapeau_priorite_entierement_traitee;
     logical1                            fin_boucle_extraction;      logical1                            fin_boucle_extraction;
     logical1                            presence_chaine;      logical1                            presence_chaine;
     logical1                            presence_fonction;      logical1                            presence_fonction;
     logical1                            presence_liste;      logical1                            presence_liste;
   
     long                                k;      unsigned char                       *chaine_arguments;
       unsigned char                       *chaine_centrale;
     unsigned char                       *chaine_arguments;      unsigned char                       *chaine_droite;
     unsigned char                       *chaine_centrale;      unsigned char                       *chaine_fonction;
     unsigned char                       *chaine_droite;      unsigned char                       *chaine_gauche;
     unsigned char                       *chaine_fonction;      unsigned char                       *chaine_travail;
     unsigned char                       *chaine_gauche;      unsigned char                       *epilogue;
     unsigned char                       *chaine_travail;      unsigned char                       instruction_test[6];
     unsigned char                       *epilogue;      unsigned char                       *instruction_majuscule;
     unsigned char                       instruction_test[6];      unsigned char                       *prologue;
     unsigned char                       *instruction_majuscule;      unsigned char                       *ptr1;
     unsigned char                       *prologue;      unsigned char                       *ptr2;
     unsigned char                       *ptr1;      unsigned char                       *registre_instruction_courante;
     unsigned char                       *ptr2;      unsigned char                       registre_instruction_valide;
     unsigned char                       *registre_instruction_courante;      unsigned char                       registre_test;
     unsigned char                       registre_instruction_valide;      unsigned char                       *sous_chaine_droite;
     unsigned char                       registre_test;      unsigned char                       *sous_chaine_gauche;
     unsigned char                       *sous_chaine_droite;      unsigned char                       *tampon;
     unsigned char                       *sous_chaine_gauche;  
     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 char                       *tampon;  
       integer8                            debut_zone_algebrique;
     unsigned long                       debut_zone_algebrique;      integer8                            fin_zone_algebrique;
     unsigned long                       fin_zone_algebrique;      integer8                            i;
     unsigned long                       i;      integer8                            j;
     unsigned long                       j;      integer8                            k;
     unsigned long                       longueur_chaine;      integer8                            longueur_chaine;
     unsigned long                       longueur_tampon;      integer8                            longueur_tampon;
     unsigned long                       niveau;      integer8                            niveau;
     unsigned long                       niveau_liste;      integer8                            niveau_liste;
     unsigned long                       nombre_apostrophes;      integer8                            nombre_apostrophes;
     unsigned long                       nombre_arguments;      integer8                            nombre_arguments;
     unsigned long                       priorite;      integer8                            priorite;
   
     (*l_base_liste) = NULL;      (*l_base_liste) = NULL;
   
     /*      /*
      * Vérification de la chaîne. Celle-ci doit comporter au moins un       * Vérification de la chaîne. Celle-ci doit comporter au moins un
      * caractère entre les délimiteurs ''.       * caractère entre les délimiteurs ''.
      */       */
   
     presence_chaine = d_faux;      presence_chaine = d_faux;
     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] != ' ')
             chaine_invalide = d_faux;          {
         }              chaine_invalide = d_faux;
           }
         if (chaine_algebrique[i] == '"')  
         {          if (chaine_algebrique[i] == '"')
             presence_chaine = (presence_chaine == d_faux) ? d_vrai : d_faux;          {
         }              if (chaine_algebrique[i - 1] != '\\')
         else if (presence_chaine == d_faux)              {
         {                  presence_chaine = (presence_chaine == d_faux) ? d_vrai : d_faux;
             if (chaine_algebrique[i] == '{')              }
             {          }
                 presence_liste = d_vrai;          else if (presence_chaine == d_faux)
                 niveau_liste++;          {
             }              if (chaine_algebrique[i] == '{')
             else if (chaine_algebrique[i] == '}')              {
             {                  presence_liste = d_vrai;
                 presence_liste = d_vrai;                  niveau_liste++;
                 niveau_liste--;              }
             }              else if (chaine_algebrique[i] == '}')
         }              {
     }                  presence_liste = d_vrai;
                   niveau_liste--;
     if ((chaine_invalide == d_vrai) || (presence_chaine == d_vrai) ||              }
             (niveau_liste != 0) || (presence_liste == d_vrai))          }
     {      }
         (*s_etat_processus).erreur_execution = d_ex_expression_invalide;  
         return(NULL);      if ((chaine_invalide == d_vrai) || (presence_chaine == d_vrai) ||
     }              (niveau_liste != 0) || (presence_liste == d_vrai))
       {
     /*          (*s_etat_processus).erreur_execution = d_ex_expression_invalide;
      * Transformation des "**" en "^ "          return(NULL);
      */      }
   
     for(i = 1; i < strlen(chaine_algebrique) - 1; i++)      /*
     {       * Transformation des "**" en "^ "
         if (chaine_algebrique[i] == '*')       */
         {  
             if (chaine_algebrique[i + 1] == '*')      for(i = 1; i < ((integer8) strlen(chaine_algebrique)) - 1; i++)
             {      {
                 chaine_algebrique[i++] = '^';          if (chaine_algebrique[i] == '*')
                 chaine_algebrique[i] = ' ';          {
             }              if (chaine_algebrique[i + 1] == '*')
         }              {
     }                  chaine_algebrique[i++] = '^';
                   chaine_algebrique[i] = ' ';
     if ((chaine_travail = (unsigned char *) malloc((strlen(chaine_algebrique) +              }
             1) * sizeof(unsigned char))) == NULL)          }
     {      }
         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
         return(NULL);      if ((chaine_travail = (unsigned char *) malloc((strlen(chaine_algebrique) +
     }              1) * sizeof(unsigned char))) == NULL)
       {
     strcpy(chaine_travail, chaine_algebrique);          (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
           return(NULL);
     /*      }
      * Retrait des espaces dans l'expression algébrique  
      */      strcpy(chaine_travail, chaine_algebrique);
   
     ptr1 = chaine_travail;      /*
     ptr2 = chaine_travail;       * Retrait des espaces dans l'expression algébrique
     presence_chaine = d_faux;       */
   
     while((*ptr1) != d_code_fin_chaine)      ptr1 = chaine_travail;
     {      ptr2 = chaine_travail;
         if ((*ptr1) == '"')      presence_chaine = d_faux;
         {  
             if (presence_chaine == d_faux)      while((*ptr1) != d_code_fin_chaine)
             {      {
                 presence_chaine = d_vrai;          if ((*ptr1) == '"')
             }          {
             else              if (ptr1 != chaine_travail)
             {              { // Il existe un caractère précédent.
                 presence_chaine = d_faux;                  if ((*(ptr1 - 1)) != '\\')
             }                  {
         }                      if (presence_chaine == d_faux)
                       {
         if (presence_chaine == d_faux)                          presence_chaine = d_vrai;
         {                      }
             if ((*ptr1) != ' ')                      else
             {                      {
                 (*(ptr2++)) = (*ptr1);                          presence_chaine = d_faux;
             }                      }
             else                  }
             {              }
                 instruction_test[5] = d_code_fin_chaine;              else
               { // Il n'existe pas de caractère précédent.
                 instruction_majuscule = conversion_majuscule(strncpy(                  if (presence_chaine == d_faux)
                         instruction_test, ptr1, 5));                  {
                       presence_chaine = d_vrai;
                 if (instruction_majuscule == NULL)                  }
                 {                  else
                     (*s_etat_processus).erreur_systeme =                  {
                             d_es_allocation_memoire;                      presence_chaine = d_faux;
                     return(NULL);                  }
                 }              }
           }
                 /*  
                  * Repérer le premier espace ou la fin de la chaîne.          if (presence_chaine == d_faux)
                  */          {
               if ((*ptr1) != ' ')
                 if (strcmp(instruction_majuscule, " AND ") == 0)              {
                 {                  (*(ptr2++)) = (*ptr1);
                     for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++);              }
                     (*(ptr2++)) = (*ptr1);              else
                 }              {
                 else if (strcmp(instruction_majuscule, " XOR ") == 0)                  instruction_test[5] = d_code_fin_chaine;
                 {  
                     for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++);                  instruction_majuscule = conversion_majuscule(
                     (*(ptr2++)) = (*ptr1);                          s_etat_processus, strncpy(instruction_test, ptr1, 5));
                 }  
                 else if ((strncmp(instruction_majuscule, " OR ", 4) == 0) &&                  if (instruction_majuscule == NULL)
                         (strlen(instruction_majuscule) == 4))                  {
                 {                      (*s_etat_processus).erreur_systeme =
                     for(i = 0; i < 3; (*(ptr2++)) = (*(ptr1++)), i++);                              d_es_allocation_memoire;
                     (*(ptr2++)) = (*ptr1);                      return(NULL);
                 }                  }
   
                 free(instruction_majuscule);                  /*
             }                   * Repérer le premier espace ou la fin de la chaîne.
                               */
             ptr1++;  
         }                  if (strcmp(instruction_majuscule, " AND ") == 0)
         else                  {
         {                      for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++);
             (*(ptr2++)) = (*(ptr1++));                      (*(ptr2++)) = (*ptr1);
         }                  }
     }                  else if (strcmp(instruction_majuscule, " XOR ") == 0)
                   {
     (*ptr2) = d_code_fin_chaine;                      for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++);
                       (*(ptr2++)) = (*ptr1);
     do                  }
     {                  else if (strcmp(instruction_majuscule, " EQV ") == 0)
         i = 0;                  {
         drapeau_modification = d_faux;                      for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++);
                       (*(ptr2++)) = (*ptr1);
         do                  }
         {                  else if ((strcmp(instruction_majuscule, " OR ") == 0))
             presence_chaine = d_faux;                  {
             drapeau_debut_zone_valide = d_faux;                      for(i = 0; i < 3; (*(ptr2++)) = (*(ptr1++)), i++);
             debut_zone_algebrique = 0;                      (*(ptr2++)) = (*ptr1);
             drapeau_fin_boucle = d_faux;                  }
   
             do                  free(instruction_majuscule);
             {              }
                 if (chaine_travail[i] == d_code_fin_chaine)              
                 {              ptr1++;
                     drapeau_fin_boucle = d_vrai;          }
                 }          else
                 else if ((chaine_travail[i] == '\'') &&          {
                         (presence_chaine == d_faux))              (*(ptr2++)) = (*(ptr1++));
                 {          }
                     drapeau_fin_boucle = d_vrai;      }
                     debut_zone_algebrique = i;  
                     drapeau_debut_zone_valide = d_vrai;      (*ptr2) = d_code_fin_chaine;
                 }  
                 else if (chaine_travail[i] == '"')      do
                 {      {
                     presence_chaine = (presence_chaine == d_vrai)          i = 0;
                             ? d_faux : d_vrai;          drapeau_modification = d_faux;
                 }  
           do
                 i++;          {
             } while(drapeau_fin_boucle == d_faux);              presence_chaine = d_faux;
               drapeau_debut_zone_valide = d_faux;
             presence_chaine = 0;              debut_zone_algebrique = 0;
             drapeau_fin_zone_valide = d_faux;              drapeau_fin_boucle = d_faux;
   
             if (drapeau_debut_zone_valide == d_vrai)              do
             {              {
                 j = debut_zone_algebrique + 1;                  if (chaine_travail[i] == d_code_fin_chaine)
             }                  {
             else                      drapeau_fin_boucle = d_vrai;
             {                  }
                 j = 0;                  else if ((chaine_travail[i] == '\'') &&
             }                          (presence_chaine == d_faux))
                   {
             fin_zone_algebrique = 0;                      drapeau_fin_boucle = d_vrai;
             drapeau_fin_boucle = d_faux;                      debut_zone_algebrique = i;
                       drapeau_debut_zone_valide = d_vrai;
             do                  }
             {                  else if (chaine_travail[i] == '"')
                 if (chaine_travail[j] == 0)                  {
                 {                      if (i > 0)
                     drapeau_fin_boucle = d_vrai;                      {
                 }                          if (chaine_travail[i - 1] != '\\')
                           {
                 if ((chaine_travail[j] == '\'') && (presence_chaine == d_faux))                              presence_chaine = (presence_chaine == d_vrai)
                 {                                      ? d_faux : d_vrai;
                     drapeau_fin_boucle = d_vrai;                          }
                     fin_zone_algebrique = j;                      }
                     drapeau_fin_zone_valide = d_vrai;                      else
                 }                      {
                           presence_chaine = (presence_chaine == d_vrai)
                 if (chaine_travail[j] == '"')                                  ? d_faux : d_vrai;
                 {                      }
                     presence_chaine = (presence_chaine == d_vrai)                  }
                             ? d_faux : d_vrai;  
                 }                  i++;
               } while(drapeau_fin_boucle == d_faux);
                 j++;  
             } while(drapeau_fin_boucle == d_faux);              presence_chaine = 0;
               drapeau_fin_zone_valide = d_faux;
             if ((drapeau_debut_zone_valide == d_vrai) &&  
                     (drapeau_fin_zone_valide == d_vrai))              if (drapeau_debut_zone_valide == d_vrai)
             {              {
                 chaine_gauche = purification_chaine(                  j = debut_zone_algebrique + 1;
                         extraction_chaine(chaine_travail,              }
                         1, debut_zone_algebrique));              else
                 chaine_centrale = purification_chaine(              {
                         extraction_chaine(chaine_travail,                  j = 0;
                         debut_zone_algebrique + 1, fin_zone_algebrique + 1));              }
                 chaine_droite = purification_chaine(  
                         extraction_chaine(chaine_travail,              fin_zone_algebrique = 0;
                         fin_zone_algebrique + 2, strlen(chaine_travail)));              drapeau_fin_boucle = d_faux;
   
                 free(chaine_travail);              do
               {
                 if ((chaine_gauche == NULL) || (chaine_centrale == NULL) ||                  if (chaine_travail[j] == 0)
                         (chaine_droite == NULL))                  {
                 {                      drapeau_fin_boucle = d_vrai;
                     (*s_etat_processus).erreur_systeme =                  }
                             d_es_allocation_memoire;  
                     return(NULL);                  if ((chaine_travail[j] == '\'') && (presence_chaine == d_faux))
                 }                  {
                       drapeau_fin_boucle = d_vrai;
                 if ((strcmp(chaine_centrale, "''") == 0) ||                      fin_zone_algebrique = j;
                         (strcmp(chaine_centrale, "'()'") == 0))                      drapeau_fin_zone_valide = d_vrai;
                 {                  }
                     free(chaine_gauche);  
                     free(chaine_centrale);                  if (chaine_travail[j] == '"')
                     free(chaine_droite);                  {
                       if (j > 0)
                     (*s_etat_processus).erreur_execution =                      {
                             d_ex_expression_invalide;                          if (chaine_travail[j - 1] != '\\')
                     return(NULL);                          {
                 }                              presence_chaine = (presence_chaine == d_vrai)
                                       ? d_faux : d_vrai;
                 i = 1;                          }
                 niveau = 0;                      }
                 drapeau_elimination_parentheses = d_vrai;                      else
                 presence_chaine = d_faux;                      {
                           presence_chaine = (presence_chaine == d_vrai)
                 while(i < (strlen(chaine_centrale) - 1))                                  ? d_faux : d_vrai;
                 {                      }
                     if (chaine_centrale[i] == '"')                  }
                     {  
                         presence_chaine = (presence_chaine == d_faux)                  j++;
                                 ? d_vrai : d_faux;              } while(drapeau_fin_boucle == d_faux);
   
                         if (i == 1)              if ((drapeau_debut_zone_valide == d_vrai) &&
                         {                      (drapeau_fin_zone_valide == d_vrai))
                             drapeau_elimination_parentheses = d_faux;              {
                         }                  chaine_gauche = purification_chaine(s_etat_processus,
                     }                          extraction_chaine(s_etat_processus, chaine_travail,
                     else if (presence_chaine == d_faux)                          1, debut_zone_algebrique));
                     {                  chaine_centrale = purification_chaine(s_etat_processus,
                         if (chaine_centrale[i] == '(')                          extraction_chaine(s_etat_processus, chaine_travail,
                         {                          debut_zone_algebrique + 1, fin_zone_algebrique + 1));
                             niveau++;                  chaine_droite = purification_chaine(s_etat_processus,
                         }                          extraction_chaine(s_etat_processus, chaine_travail,
                           fin_zone_algebrique + 2,
                         if ((niveau == 0) || ((((test_cfsf(s_etat_processus,                          (integer8) strlen(chaine_travail)));
                                 48) == d_vrai) && (chaine_centrale[i] ==  
                                 '.')) || ((test_cfsf(s_etat_processus, 48)                  free(chaine_travail);
                                 == d_faux) && (chaine_centrale[i] == ',')))  
                                 && (niveau == 1)))                  if ((chaine_gauche == NULL) || (chaine_centrale == NULL) ||
                         {                          (chaine_droite == NULL))
                             drapeau_elimination_parentheses = d_faux;                  {
                         }                      (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                         if (chaine_centrale[i] == ')')                      return(NULL);
                         {                  }
                             niveau--;  
                         }                  if ((strcmp(chaine_centrale, "''") == 0) ||
                     }                          (strcmp(chaine_centrale, "'()'") == 0))
                   {
                     i++;                      free(chaine_gauche);
                 }                      free(chaine_centrale);
                       free(chaine_droite);
                 if (drapeau_elimination_parentheses == d_vrai)  
                 {                      (*s_etat_processus).erreur_execution =
                     tampon = chaine_centrale;                              d_ex_expression_invalide;
                       return(NULL);
                     if ((chaine_centrale = (unsigned char *) malloc(                  }
                             (strlen(tampon) - 1) * sizeof(unsigned char)))  
                             == NULL)                  i = 1;
                     {                  niveau = 0;
                         (*s_etat_processus).erreur_systeme =                  drapeau_elimination_parentheses = d_vrai;
                                 d_es_allocation_memoire;                  presence_chaine = d_faux;
                         return(NULL);  
                     }                  while(i < ((integer8) strlen(chaine_centrale)) - 1)
                   {
                     tampon[strlen(tampon) - 2] = d_code_fin_chaine;                      if (chaine_centrale[i] == '"')
                       {
                     sprintf(chaine_centrale, "'%s'", &(tampon[2]));                          if (i > 0)
                     free(tampon);                          {
                               if (chaine_centrale[i - 1] != '\\')
                     fin_zone_algebrique -= 2;                              {
                     drapeau_modification = d_vrai;                                  presence_chaine = (presence_chaine == d_faux)
                 }                                          ? d_vrai : d_faux;
                               }
                 if ((test_expression_rpn(chaine_centrale) == d_vrai) &&                          }
                         (fin_zone_algebrique - debut_zone_algebrique > 0))                          else
                 {                          {
                     if ((tampon = purification_chaine(                              presence_chaine = (presence_chaine == d_faux)
                             extraction_chaine(chaine_centrale, 2,                                      ? d_vrai : d_faux;
                             strlen(chaine_centrale) - 1))) == NULL)                          }
                     {  
                         (*s_etat_processus).erreur_systeme =                          if (i == 1)
                                 d_es_allocation_memoire;                          {
                         return(NULL);                              drapeau_elimination_parentheses = d_faux;
                     }                          }
                       }
                     /*                      else if (presence_chaine == d_faux)
                      * Si on tombe sur une fonction intrinsèque ou                      {
                      * extrinsèque, il doit y avoir des arguments passés                          if (chaine_centrale[i] == '(')
                      * entre parenthèses et on ne doit pas passer par ici !                          {
                      */                              niveau++;
                           }
                     registre_instruction_courante = (*s_etat_processus)  
                             .instruction_courante;                          if ((niveau == 0) || ((((test_cfsf(s_etat_processus,
                     registre_test = (*s_etat_processus).test_instruction;                                  48) == d_vrai) && (chaine_centrale[i] ==
                     registre_instruction_valide = (*s_etat_processus)                                  '.')) || ((test_cfsf(s_etat_processus, 48)
                             .instruction_valide;                                  == d_faux) && (chaine_centrale[i] == ',')))
                                   && (niveau == 1)))
                     (*s_etat_processus).test_instruction = 'Y';                          {
                     (*s_etat_processus).instruction_courante = tampon;                              drapeau_elimination_parentheses = d_faux;
                           }
                     analyse(s_etat_processus, NULL);  
                           if (chaine_centrale[i] == ')')
                     (*s_etat_processus).test_instruction = registre_test;                          {
                     (*s_etat_processus).instruction_courante =                              niveau--;
                             registre_instruction_courante;                          }
                       }
                     if (((*s_etat_processus).instruction_valide == 'Y') &&  
                             ((*s_etat_processus).constante_symbolique == 'N'))                      i++;
                     {                  }
                         free(chaine_gauche);  
                         free(chaine_centrale);                  if (drapeau_elimination_parentheses == d_vrai)
                         free(chaine_droite);                  {
                         free(tampon);                      tampon = chaine_centrale;
   
                         (*s_etat_processus).instruction_valide =                      if ((chaine_centrale = (unsigned char *) malloc(
                                 registre_instruction_valide;                              (strlen(tampon) - 1) * sizeof(unsigned char)))
                               == NULL)
                         (*s_etat_processus).erreur_execution =                      {
                                 d_ex_expression_invalide;                          (*s_etat_processus).erreur_systeme =
                         return(NULL);                                  d_es_allocation_memoire;
                     }                          return(NULL);
                       }
                     (*s_etat_processus).instruction_valide =  
                             registre_instruction_valide;                      tampon[strlen(tampon) - 2] = d_code_fin_chaine;
   
                     free(chaine_centrale);                      sprintf(chaine_centrale, "'%s'", &(tampon[2]));
                     chaine_centrale = tampon;                      free(tampon);
   
                     fin_zone_algebrique--;                      fin_zone_algebrique -= 2;
                     drapeau_modification = d_vrai;                      drapeau_modification = d_vrai;
                 }                  }
                 else if ((test_fonction(chaine_centrale) == d_vrai) &&  
                         (fin_zone_algebrique - debut_zone_algebrique > 0))                  if ((test_expression_rpn(chaine_centrale) == d_vrai) &&
                 {                          (fin_zone_algebrique - debut_zone_algebrique > 0))
                     i = 1;                  {
                     while((i < (strlen(chaine_centrale) - 1)) &&                      if ((tampon = purification_chaine(s_etat_processus,
                             (chaine_centrale[i] != '('))                              extraction_chaine(s_etat_processus,
                     {                              chaine_centrale, 2,
                         i++;                              ((integer8) strlen(chaine_centrale)) - 1))) == NULL)
                     }                      {
                           (*s_etat_processus).erreur_systeme =
                     j = strlen(chaine_centrale) - 1;                                  d_es_allocation_memoire;
                     while(chaine_centrale[j] != ')')                          return(NULL);
                     {                      }
                         j--;  
                     }                      /*
                        * Si on tombe sur une fonction intrinsèque ou
                     chaine_fonction = purification_chaine(                       * extrinsèque, il doit y avoir des arguments passés
                             extraction_chaine(chaine_centrale, 2, i));                       * entre parenthèses et on ne doit pas passer par ici !
                     chaine_arguments = purification_chaine(                       */
                             extraction_chaine(chaine_centrale, i + 2, j));  
                       registre_instruction_courante = (*s_etat_processus)
                     i = 0;                              .instruction_courante;
                     niveau = 0;                      registre_test = (*s_etat_processus).test_instruction;
                     nombre_arguments = 1;                      registre_instruction_valide = (*s_etat_processus)
                               .instruction_valide;
                     while(chaine_arguments[i] != d_code_fin_chaine)  
                     {                      (*s_etat_processus).test_instruction = 'Y';
                         if (chaine_arguments[i] == '(')                      (*s_etat_processus).instruction_courante = tampon;
                         {  
                             niveau++;                      analyse(s_etat_processus, NULL);
                         }  
                       (*s_etat_processus).test_instruction = registre_test;
                         if (chaine_arguments[i] == ')')                      (*s_etat_processus).instruction_courante =
                         {                              registre_instruction_courante;
                             niveau--;  
                         }                      if (((*s_etat_processus).instruction_valide == 'Y') &&
                               ((*s_etat_processus).constante_symbolique == 'N'))
                         if ((chaine_arguments[i] == ',') && (niveau == 0))                      {
                         {                          free(chaine_gauche);
                             sous_chaine_gauche = purification_chaine(                          free(chaine_centrale);
                                     extraction_chaine(chaine_arguments, 1, i));                          free(chaine_droite);
                             sous_chaine_droite = purification_chaine(                          free(tampon);
                                     extraction_chaine(chaine_arguments, i + 2,  
                                     strlen(chaine_arguments)));                          (*s_etat_processus).instruction_valide =
                                   registre_instruction_valide;
                             free(chaine_arguments);  
                           (*s_etat_processus).erreur_execution =
                             if ((chaine_arguments = (unsigned char *) malloc(                                  d_ex_expression_invalide;
                                     (strlen(sous_chaine_gauche) + strlen(                          return(NULL);
                                     sous_chaine_droite) + 3 + 1) * sizeof(                      }
                                     unsigned char))) == NULL)  
                             {                      (*s_etat_processus).instruction_valide =
                                 (*s_etat_processus).erreur_systeme =                              registre_instruction_valide;
                                         d_es_allocation_memoire;  
                                 return(NULL);                      free(chaine_centrale);
                             }                      chaine_centrale = tampon;
   
                             sprintf(chaine_arguments, "%s' '%s",                      fin_zone_algebrique--;
                                     sous_chaine_gauche, sous_chaine_droite);                      drapeau_modification = d_vrai;
                             i += 2;                  }
                   else if ((test_fonction(chaine_centrale) == d_vrai) &&
                             free(sous_chaine_gauche);                          (fin_zone_algebrique - debut_zone_algebrique > 0))
                             free(sous_chaine_droite);                  {
                       i = 1;
                             nombre_arguments++;                      while((i < ((integer8) strlen(chaine_centrale)) - 1) &&
                         }                              (chaine_centrale[i] != '('))
                       {
                         i++;                          i++;
                     }                      }
   
                     free(chaine_centrale);                      j = ((integer8) strlen(chaine_centrale)) - 1;
                       while(chaine_centrale[j] != ')')
                     l_element_courant = (*l_base_liste);                      {
                     presence_fonction = d_faux;                          j--;
                       }
                     while((l_element_courant != NULL) &&  
                             (presence_fonction == d_faux))                      chaine_fonction = purification_chaine(s_etat_processus,
                     {                              extraction_chaine(s_etat_processus,
                         if (strcmp((*((struct_fonction *) ((*l_element_courant)                              chaine_centrale, 2, i));
                                 .donnee))).nom_fonction, chaine_fonction) == 0)                      chaine_arguments = purification_chaine(s_etat_processus,
                         {                              extraction_chaine(s_etat_processus,
                             presence_fonction = d_vrai;                              chaine_centrale, i + 2, j));
                         }  
                         else                      i = 0;
                         {                      niveau = 0;
                             l_element_courant = (*l_element_courant).suivant;                      nombre_arguments = 1;
                         }  
                     }                      while(chaine_arguments[i] != d_code_fin_chaine)
                       {
                     if (presence_fonction == d_vrai)                          if (chaine_arguments[i] == '(')
                     {                          {
                         if ((*((struct_fonction *)                              niveau++;
                                 ((*l_element_courant).donnee)))                          }
                                 .nombre_arguments != nombre_arguments)  
                         {                          if (chaine_arguments[i] == ')')
                             (*s_etat_processus).erreur_execution =                          {
                                     d_ex_nombre_arguments;                              niveau--;
                           }
                             free(chaine_arguments);  
                             free(chaine_fonction);                          if ((chaine_arguments[i] == ',') && (niveau == 0))
                             free(chaine_gauche);                          {
                             free(chaine_droite);                              sous_chaine_gauche = purification_chaine(
                                       s_etat_processus,
                             return(NULL);                                      extraction_chaine(s_etat_processus,
                         }                                      chaine_arguments, 1, i));
                     }                              sous_chaine_droite = purification_chaine(
                     else                                      s_etat_processus,
                     {                                      extraction_chaine(s_etat_processus,
                         registre_instruction_courante = (*s_etat_processus)                                      chaine_arguments, i + 2,
                                 .instruction_courante;                                      ((integer8) strlen(chaine_arguments))));
                         registre_test = (*s_etat_processus).test_instruction;  
                         registre_instruction_valide = (*s_etat_processus)                              free(chaine_arguments);
                                 .instruction_valide;  
                               if ((chaine_arguments = (unsigned char *) malloc(
                         (*s_etat_processus).test_instruction = 'Y';                                      (strlen(sous_chaine_gauche) + strlen(
                         (*s_etat_processus).instruction_courante =                                      sous_chaine_droite) + 3 + 1) * sizeof(
                                 chaine_fonction;                                      unsigned char))) == NULL)
                               {
                         analyse(s_etat_processus, NULL);                                  (*s_etat_processus).erreur_systeme =
                                           d_es_allocation_memoire;
                         (*s_etat_processus).test_instruction = registre_test;                                  return(NULL);
                         (*s_etat_processus).instruction_courante =                              }
                                 registre_instruction_courante;  
                         (*s_etat_processus).instruction_valide =                              sprintf(chaine_arguments, "%s' '%s",
                                 registre_instruction_valide;                                      sous_chaine_gauche, sous_chaine_droite);
                               i += 2;
                         if (((unsigned long) (*s_etat_processus)  
                                 .nombre_arguments != nombre_arguments) &&                              free(sous_chaine_gauche);
                                 ((*s_etat_processus).nombre_arguments != -2))                              free(sous_chaine_droite);
                         {  
                             (*s_etat_processus).erreur_execution =                              nombre_arguments++;
                                     d_ex_nombre_arguments_fonction;                          }
   
                             free(chaine_arguments);                          i++;
                             free(chaine_fonction);                      }
                             free(chaine_gauche);  
                             free(chaine_droite);                      free(chaine_centrale);
   
                             return(NULL);                      l_element_courant = (*l_base_liste);
                         }                      presence_fonction = d_faux;
   
                         if ((l_element_courant = (struct_liste_chainee *)                      while((l_element_courant != NULL) &&
                                 malloc(sizeof(struct_liste_chainee))) == NULL)                              (presence_fonction == d_faux))
                         {                      {
                             (*s_etat_processus).erreur_systeme =                          if (strcmp((*((struct_fonction *) ((*l_element_courant)
                                     d_es_allocation_memoire;                                  .donnee))).nom_fonction, chaine_fonction) == 0)
                             return(NULL);                          {
                         }                              presence_fonction = d_vrai;
                           }
                         (*l_element_courant).suivant = (*l_base_liste);                          else
                         (*l_base_liste) = l_element_courant;                          {
                               l_element_courant = (*l_element_courant).suivant;
                         if ((s_fonction = malloc(sizeof(struct_fonction)))                          }
                                 == NULL)                      }
                         {  
                             (*s_etat_processus).erreur_systeme =                      if (presence_fonction == d_vrai)
                                     d_es_allocation_memoire;                      {
                             return(NULL);                          if ((*((struct_fonction *)
                         }                                  ((*l_element_courant).donnee)))
                                   .nombre_arguments != nombre_arguments)
                         if (((*s_fonction).nom_fonction = (unsigned char *)                          {
                                 malloc((strlen(chaine_fonction) + 1) *                              (*s_etat_processus).erreur_execution =
                                 sizeof(unsigned char))) == NULL)                                      d_ex_nombre_arguments;
                         {  
                             (*s_etat_processus).erreur_systeme =                              free(chaine_arguments);
                                     d_es_allocation_memoire;                              free(chaine_fonction);
                             return(NULL);                              free(chaine_gauche);
                         }                              free(chaine_droite);
   
                         strcpy((*s_fonction).nom_fonction, chaine_fonction);                              return(NULL);
                         (*s_fonction).nombre_arguments = nombre_arguments;                          }
                       }
                         (*(*l_base_liste)).donnee = (void *) s_fonction;                      else
                     }                      {
                           registre_instruction_courante = (*s_etat_processus)
                     if ((chaine_centrale = (unsigned char *) malloc((strlen(                                  .instruction_courante;
                             chaine_arguments) + 1 + strlen(chaine_fonction)                          registre_test = (*s_etat_processus).test_instruction;
                             + 1 + 2) * sizeof(unsigned char))) == NULL)                          registre_instruction_valide = (*s_etat_processus)
                     {                                  .instruction_valide;
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;                          (*s_etat_processus).test_instruction = 'Y';
                         return(NULL);                          (*s_etat_processus).instruction_courante =
                     }                                  chaine_fonction;
   
                     sprintf(chaine_centrale, "'%s' %s", chaine_arguments,                          analyse(s_etat_processus, NULL);
                             chaine_fonction);  
                     drapeau_modification = d_vrai;                          (*s_etat_processus).test_instruction = registre_test;
                           (*s_etat_processus).instruction_courante =
                     free(chaine_arguments);                                  registre_instruction_courante;
                     free(chaine_fonction);                          (*s_etat_processus).instruction_valide =
                 }                                  registre_instruction_valide;
                 else if ((chaine_centrale[1] == '+') ||  
                         (chaine_centrale[1] == '-'))                          if (((*s_etat_processus).nombre_arguments !=
                 {                                  nombre_arguments) &&
                     if (chaine_centrale[1] == '-')                                  ((*s_etat_processus).nombre_arguments != -2))
                     {                          {
                         tampon = chaine_centrale;                              (*s_etat_processus).erreur_execution =
                                       d_ex_nombre_arguments_fonction;
                         if ((chaine_centrale = (unsigned char *) malloc(  
                                 (strlen(tampon) + 5) * sizeof(unsigned char)))                              free(chaine_arguments);
                                 == NULL)                              free(chaine_fonction);
                         {                              free(chaine_gauche);
                             (*s_etat_processus).erreur_systeme =                              free(chaine_droite);
                                     d_es_allocation_memoire;  
                             return(NULL);                              return(NULL);
                         }                          }
   
                         tampon[strlen(tampon) - 1] = d_code_fin_chaine;                          if ((l_element_courant = (struct_liste_chainee *)
                         sprintf(chaine_centrale, "'NEG(%s)'", &(tampon[2]));                                  malloc(sizeof(struct_liste_chainee))) == NULL)
                         fin_zone_algebrique += 5;                          {
                         drapeau_modification = d_vrai;                              (*s_etat_processus).erreur_systeme =
                                       d_es_allocation_memoire;
                         free(tampon);                              return(NULL);
                     }                          }
                     else  
                     {                          (*l_element_courant).suivant = (*l_base_liste);
                         tampon = chaine_centrale;                          (*l_base_liste) = l_element_courant;
   
                         if ((chaine_centrale = (unsigned char *) malloc(                          if ((s_fonction = malloc(sizeof(struct_fonction)))
                                 (strlen(tampon) + 7) * sizeof(unsigned char)))                                  == NULL)
                                 == NULL)                          {
                         {                              (*s_etat_processus).erreur_systeme =
                             (*s_etat_processus).erreur_systeme =                                      d_es_allocation_memoire;
                                     d_es_allocation_memoire;                              return(NULL);
                             return(NULL);                          }
                         }  
                           if (((*s_fonction).nom_fonction = (unsigned char *)
                         tampon[strlen(tampon) - 1] = d_code_fin_chaine;                                  malloc((strlen(chaine_fonction) + 1) *
                         sprintf(chaine_centrale, "'RELAX(%s)'", &(tampon[2]));                                  sizeof(unsigned char))) == NULL)
                         fin_zone_algebrique += 7;                          {
                         drapeau_modification = d_vrai;                              (*s_etat_processus).erreur_systeme =
                                       d_es_allocation_memoire;
                         free(tampon);                              return(NULL);
                     }                          }
                 }  
                           strcpy((*s_fonction).nom_fonction, chaine_fonction);
                 if ((chaine_travail = (unsigned char *) malloc(                          (*s_fonction).nombre_arguments = nombre_arguments;
                         (strlen(chaine_gauche) + strlen(chaine_centrale) +  
                         strlen(chaine_droite) + 1 + 2) * sizeof(unsigned char)))                          (*(*l_base_liste)).donnee = (void *) s_fonction;
                         == NULL)                      }
                 {  
                     (*s_etat_processus).erreur_systeme =                      if ((chaine_centrale = (unsigned char *) malloc((strlen(
                             d_es_allocation_memoire;                              chaine_arguments) + 1 + strlen(chaine_fonction)
                     return(NULL);                              + 1 + 2) * sizeof(unsigned char))) == NULL)
                 }                      {
                           (*s_etat_processus).erreur_systeme =
                 sprintf(chaine_travail, "%s %s %s", chaine_gauche,                                  d_es_allocation_memoire;
                         chaine_centrale, chaine_droite);                          return(NULL);
                       }
                 free(chaine_gauche);  
                 free(chaine_centrale);                      sprintf(chaine_centrale, "'%s' %s", chaine_arguments,
                 free(chaine_droite);                              chaine_fonction);
             }                      drapeau_modification = d_vrai;
   
             i = fin_zone_algebrique + 1;                      free(chaine_arguments);
         } while((drapeau_debut_zone_valide == d_vrai)                      free(chaine_fonction);
                 && (drapeau_fin_zone_valide == d_vrai));                  }
                   else if ((chaine_centrale[1] == '+') ||
         for(longueur_chaine = strlen(chaine_travail),                          (chaine_centrale[1] == '-'))
                 i = nombre_apostrophes = 0; i < longueur_chaine;                  {
                 nombre_apostrophes += (chaine_travail[i++] == '\'') ? 1 : 0);                      if (chaine_centrale[1] == '-')
                       {
         if (nombre_apostrophes != 0)                          tampon = chaine_centrale;
         {  
             priorite = 1;                          if ((chaine_centrale = (unsigned char *) malloc(
                                   (strlen(tampon) + 5) * sizeof(unsigned char)))
             do                                  == NULL)
             {                          {
                 drapeau_priorite_entierement_traitee = d_vrai;                              (*s_etat_processus).erreur_systeme =
                                       d_es_allocation_memoire;
                 i = 0;                              return(NULL);
                 while((chaine_travail[i] != '\'') && (chaine_travail[i] != 0))                          }
                 {  
                     i++;                          tampon[strlen(tampon) - 1] = d_code_fin_chaine;
                 }                          sprintf(chaine_centrale, "'NEG(%s)'", &(tampon[2]));
                           fin_zone_algebrique += 5;
                 if (chaine_travail[i] == 0)                          drapeau_modification = d_vrai;
                 {  
                     i = 0;                          free(tampon);
                 }                      }
                       else
                 j = i + 1;                      {
                 while((chaine_travail[j] != '\'') && (chaine_travail[j] != 0))                          tampon = chaine_centrale;
                 {  
                     j++;                          if ((chaine_centrale = (unsigned char *) malloc(
                 }                                  (strlen(tampon) + 7) * sizeof(unsigned char)))
                                   == NULL)
                 if (chaine_travail[j] == 0)                          {
                 {                              (*s_etat_processus).erreur_systeme =
                     j = 0;                                      d_es_allocation_memoire;
                 }                              return(NULL);
                           }
                 if ((chaine_travail[i] != 0) && (j != 0))  
                 {                          tampon[strlen(tampon) - 1] = d_code_fin_chaine;
                     chaine_gauche = purification_chaine(                          sprintf(chaine_centrale, "'RELAX(%s)'", &(tampon[2]));
                             extraction_chaine(chaine_travail, 1, i));                          fin_zone_algebrique += 7;
                     chaine_centrale = purification_chaine(                          drapeau_modification = d_vrai;
                             extraction_chaine(chaine_travail,  
                             i + 1, j + 1));                          free(tampon);
                     chaine_droite = purification_chaine(                      }
                             extraction_chaine(chaine_travail, j + 2,                  }
                             strlen(chaine_travail)));  
                   if ((chaine_travail = (unsigned char *) malloc(
                     if ((chaine_gauche == NULL) || (chaine_centrale == NULL) ||                          (strlen(chaine_gauche) + strlen(chaine_centrale) +
                             (chaine_droite == NULL))                          strlen(chaine_droite) + 1 + 2) * sizeof(unsigned char)))
                     {                          == NULL)
                         (*s_etat_processus).erreur_systeme =                  {
                                 d_es_allocation_memoire;                      (*s_etat_processus).erreur_systeme =
                         return(NULL);                              d_es_allocation_memoire;
                     }                      return(NULL);
                   }
                     drapeau_elimination_parentheses = d_vrai;  
                   sprintf(chaine_travail, "%s %s %s", chaine_gauche,
                     if ((longueur_tampon = strlen(chaine_centrale)) != 0)                          chaine_centrale, chaine_droite);
                     {  
                         niveau = 0;                  free(chaine_gauche);
                   free(chaine_centrale);
                         for(i = 1; i < longueur_tampon - 1; i++)                  free(chaine_droite);
                         {              }
                             if (chaine_centrale[i] == '(')  
                             {              i = fin_zone_algebrique + 1;
                                 niveau++;          } while((drapeau_debut_zone_valide == d_vrai)
                             }                  && (drapeau_fin_zone_valide == d_vrai));
   
                             if ((niveau == 0) || ((((test_cfsf(s_etat_processus,          for(longueur_chaine = (integer8) strlen(chaine_travail),
                                     48) == d_vrai) && (chaine_centrale[i] ==                  i = nombre_apostrophes = 0; i < longueur_chaine;
                                     '.')) || ((test_cfsf(s_etat_processus, 48)                  nombre_apostrophes += (chaine_travail[i++] == '\'') ? 1 : 0);
                                     == d_faux) && (chaine_centrale[i] == ',')))  
                                     && (niveau == 1)))          if (nombre_apostrophes != 0)
                             {          {
                                 drapeau_elimination_parentheses = d_faux;              priorite = 1;
                             }  
               do
                             if (chaine_centrale[i] == ')')              {
                             {                  drapeau_priorite_entierement_traitee = d_vrai;
                                 niveau--;  
                             }                  i = 0;
                         }                  while((chaine_travail[i] != '\'') && (chaine_travail[i] != 0))
                   {
                         if (drapeau_elimination_parentheses == d_vrai)                      i++;
                         {                  }
                             if ((tampon = (unsigned char *) malloc(  
                                     ((longueur_tampon = strlen(                  if (chaine_travail[i] == 0)
                                     chaine_centrale)) + 1) * sizeof(                  {
                                     unsigned char))) == NULL)                      i = 0;
                             {                  }
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;                  j = i + 1;
                                 return(NULL);                  while((chaine_travail[j] != '\'') && (chaine_travail[j] != 0))
                             }                  {
                       j++;
                             chaine_centrale[longueur_tampon - 2] =                  }
                                     d_code_fin_chaine;  
                             sprintf(tampon, "'%s'", &(chaine_centrale[2]));                  if (chaine_travail[j] == 0)
                             free(chaine_centrale);                  {
                             chaine_centrale = tampon;                      j = 0;
                             drapeau_modification = d_vrai;                  }
                         }  
                     }                  if ((chaine_travail[i] != 0) && (j != 0))
                   {
                     if ((tampon = (unsigned char *) malloc(sizeof(                      chaine_gauche = purification_chaine(s_etat_processus,
                             unsigned char))) == NULL)                              extraction_chaine(s_etat_processus,
                     {                              chaine_travail, 1, i));
                         (*s_etat_processus).erreur_systeme =                      chaine_centrale = purification_chaine(s_etat_processus,
                                 d_es_allocation_memoire;                              extraction_chaine(s_etat_processus, chaine_travail,
                         return(NULL);                              i + 1, j + 1));
                     }                      chaine_droite = purification_chaine(s_etat_processus,
                               extraction_chaine(s_etat_processus, chaine_travail,
                     tampon[0] = d_code_fin_chaine;                              j + 2, ((integer8) strlen(chaine_travail))));
                     longueur_chaine = strlen(chaine_centrale);  
                     niveau = 0;                      if ((chaine_gauche == NULL) || (chaine_centrale == NULL) ||
                     k = strlen(chaine_centrale) - 1;                              (chaine_droite == NULL))
                     fin_boucle_extraction = d_faux;                      {
                           (*s_etat_processus).erreur_systeme =
                     while((k >= 0) && (fin_boucle_extraction ==                                  d_es_allocation_memoire;
                             d_faux))                          return(NULL);
                     {                      }
                         t0 = ((size_t) k < strlen(chaine_centrale))  
                                 ? chaine_centrale[k + 1] : ' ';                      drapeau_elimination_parentheses = d_vrai;
                         t1 = chaine_centrale[k];  
                         t2 = (k < 1) ? ' ' : chaine_centrale[k - 1];                      if ((longueur_tampon = ((integer8) strlen(chaine_centrale)))
                         t3 = (k < 2) ? ' ' : chaine_centrale[k - 2];                              != 0)
                         t4 = (k < 3) ? ' ' : chaine_centrale[k - 3];                      {
                           niveau = 0;
                         if ((t0 >= 'a') && (t0 <= 'z'))  
                         {                          for(i = 1; i < longueur_tampon - 1; i++)
                             t0 = t0 + ('A' - 'a');                          {
                         }                              if (chaine_centrale[i] == '(')
                               {
                         if ((t1 >= 'a') && (t1 <= 'z'))                                  niveau++;
                         {                              }
                             t1 = t1 + ('A' - 'a');  
                         }                              if ((niveau == 0) || ((((test_cfsf(s_etat_processus,
                                       48) == d_vrai) && (chaine_centrale[i] ==
                         if ((t2 >= 'a') && (t2 <= 'z'))                                      '.')) || ((test_cfsf(s_etat_processus, 48)
                         {                                      == d_faux) && (chaine_centrale[i] == ',')))
                             t2 = t2 + ('A' - 'a');                                      && (niveau == 1)))
                         }                              {
                                   drapeau_elimination_parentheses = d_faux;
                         if ((t3 >= 'a') && (t3 <= 'z'))                              }
                         {  
                             t3 = t3 + ('A' - 'a');                              if (chaine_centrale[i] == ')')
                         }                              {
                                   niveau--;
                         if ((t4 >= 'a') && (t4 <= 'z'))                              }
                         {                          }
                             t4 = t4 + ('A' - 'a');  
                         }                          if (drapeau_elimination_parentheses == d_vrai)
                           {
                         if (t1 == '(')                              if ((tampon = (unsigned char *) malloc(((size_t)
                         {                                      ((longueur_tampon = (integer8) strlen(
                             niveau++;                                      chaine_centrale)) + 1)) * sizeof(
                         }                                      unsigned char))) == NULL)
                               {
                         if (niveau == 0)                                  (*s_etat_processus).erreur_systeme =
                         {                                          d_es_allocation_memoire;
                             prologue = purification_chaine(                                  return(NULL);
                                     extraction_chaine(chaine_centrale, 1, k));                              }
                             epilogue = purification_chaine(  
                                     extraction_chaine(chaine_centrale,                              chaine_centrale[longueur_tampon - 2] =
                                     k + 2, longueur_chaine));                                      d_code_fin_chaine;
                               sprintf(tampon, "'%s'", &(chaine_centrale[2]));
                             if ((prologue == NULL) || (epilogue == NULL))                              free(chaine_centrale);
                             {                              chaine_centrale = tampon;
                                 (*s_etat_processus).erreur_systeme =                              drapeau_modification = d_vrai;
                                         d_es_allocation_memoire;                          }
                                 return(NULL);                      }
                             }  
                       if ((tampon = (unsigned char *) malloc(sizeof(
     /*                              unsigned char))) == NULL)
      * Priorité = 1 : traitement des fonctions les plus prioritaires                      {
      */                          (*s_etat_processus).erreur_systeme =
                                   d_es_allocation_memoire;
                             if (((priorite == 4) && (((t1 == '<') && (t0 != '=')                          return(NULL);
                                     && (t2 != '=')) || ((t1 == '>') &&                      }
                                     (t0 != '=') && (t2 != '=')) ||  
                                     ((t1 == '=') && (t0 != '=') && (t0 != '<')                      tampon[0] = d_code_fin_chaine;
                                     && (t0 != '>') && (t2 != '<') && (t2 != '>')                      longueur_chaine = (integer8) strlen(chaine_centrale);
                                     && (t2 != '=')))) ||                      k = ((integer8) strlen(chaine_centrale)) - 1;
                                     ((t1 == '+') && (priorite == 5) &&                      niveau = 0;
                                     (t2 != '\'') && (!(((t2 == '(')                      fin_boucle_extraction = d_faux;
                                     || (t2 == '\'') || (t2 == 'e')  
                                     || (t2 == 'E')) && (((t3 >= '0')                      while((k >= 0) && (fin_boucle_extraction == d_faux))
                                     && (t3 <= '9')) || (t3 == '.'))))) ||                      {
                                     ((t1 == '-') && (priorite == 6) &&                          t0 = (k < ((integer8) strlen(chaine_centrale)))
                                     (t2 != '\'') && (!(((t2 == '(')                                  ? chaine_centrale[k + 1] : ' ';
                                     || (t2 == '\'') || (t2 == 'e')                          t1 = chaine_centrale[k];
                                     || (t2 == 'E')) && (((t3 >= '0')                          t2 = (k < 1) ? ' ' : chaine_centrale[k - 1];
                                     && (t3 <= '9')) || (t3 == '.')))))                          t3 = (k < 2) ? ' ' : chaine_centrale[k - 2];
                                     || ((t1 == '*') && (priorite == 7))                          t4 = (k < 3) ? ' ' : chaine_centrale[k - 3];
                                     || ((t1 == '/') && (priorite == 8)) ||  
                                     ((t1 == '^') && (priorite == 9)))                          if ((t0 >= 'a') && (t0 <= 'z'))
                             {                          {
                                 drapeau_priorite_entierement_traitee = d_faux;                              t0 = t0 + ('A' - 'a');
                                 fin_boucle_extraction = d_vrai;                          }
   
                                 free(tampon);                          if ((t1 >= 'a') && (t1 <= 'z'))
                           {
                                 if ((tampon = (unsigned char *)                              t1 = t1 + ('A' - 'a');
                                         malloc((strlen(prologue) +                          }
                                         strlen(epilogue) + 6) *  
                                         sizeof(unsigned char))) == NULL)                          if ((t2 >= 'a') && (t2 <= 'z'))
                                 {                          {
                                     (*s_etat_processus).erreur_systeme =                              t2 = t2 + ('A' - 'a');
                                             d_es_allocation_memoire;                          }
                                     return(NULL);  
                                 }                          if ((t3 >= 'a') && (t3 <= 'z'))
                           {
                                 sprintf(tampon, "%s' '%s %c",                              t3 = t3 + ('A' - 'a');
                                         prologue, epilogue, t1);                          }
                                 drapeau_modification = d_vrai;  
                             }                          if ((t4 >= 'a') && (t4 <= 'z'))
                             else if (((priorite == 4) && (((t1 == '<') &&                          {
                                     (t2 == '=')) || ((t1 == '=') &&                              t4 = t4 + ('A' - 'a');
                                     (t2 == '<')) || ((t1 == '>') &&                          }
                                     (t2 == '<')) || (((t1 == '>') &&  
                                     (t2 == '=')) || ((t1 == '=') &&                          if (t1 == '(')
                                     (t2 == '>')) || ((t1 == '=') &&                          {
                                     (t2 == '='))))) || ((priorite == 1) &&                              niveau++;
                                     (t1 == 'R') && (t2 == 'O') && (t3 == ' ')                          }
                                     && (t0 == ' ')))  
                             {                          if (niveau == 0)
                                 drapeau_priorite_entierement_traitee = d_faux;                          {
                                 fin_boucle_extraction = d_vrai;                              prologue = purification_chaine(s_etat_processus,
                                       extraction_chaine(s_etat_processus,
                                 free(tampon);                                      chaine_centrale, 1, k));
                               epilogue = purification_chaine(s_etat_processus,
                                 if ((tampon = (unsigned char *)                                      extraction_chaine(s_etat_processus,
                                         malloc((strlen(prologue) +                                      chaine_centrale, k + 2, longueur_chaine));
                                         strlen(epilogue) + 6) *  
                                         sizeof(unsigned char))) == NULL)                              if ((prologue == NULL) || (epilogue == NULL))
                                 {                              {
                                     (*s_etat_processus).erreur_systeme =                                  (*s_etat_processus).erreur_systeme =
                                             d_es_allocation_memoire;                                          d_es_allocation_memoire;
                                     return(NULL);                                  return(NULL);
                                 }                              }
   
                                 prologue[strlen(prologue) - 1] =      /*
                                         d_code_fin_chaine;       * Priorité = 1 : traitement des fonctions les plus prioritaires
        */
                                 sprintf(tampon, "%s' '%s %c%c", prologue,  
                                         epilogue, t2, t1);                              if (((priorite == 4) && (((t1 == '<') && (t0 != '=')
                                 drapeau_modification = d_vrai;                                      && (t2 != '=')) || ((t1 == '>') &&
                             }                                      (t0 != '=') && (t2 != '=')) ||
                             else if (((priorite == 1) && (t4 == ' ') &&                                      ((t1 == '=') && (t0 != '=') && (t0 != '<')
                                     (t3 == 'X') && (t2 == 'O') && (t1 == 'R')                                      && (t0 != '>') && (t2 != '<') && (t2 != '>')
                                     && (t0 == ' ')) || ((priorite == 2) &&                                      && (t2 != '=')))) ||
                                     (t4 == ' ') && (t3 == 'A') && (t2 == 'N')                                      ((t1 == '+') && (priorite == 5) &&
                                     && (t1 == 'D') && (t0 == ' ')))                                      (t2 != '\'') && (!(((t2 == '(')
                             {                                      || (t2 == '\'') || (t2 == 'e')
                                 drapeau_priorite_entierement_traitee = d_faux;                                      || (t2 == 'E')) && (((t3 >= '0')
                                 fin_boucle_extraction = d_vrai;                                      && (t3 <= '9')) || (t3 == '.'))))) ||
                                       ((t1 == '-') && (priorite == 6) &&
                                 free(tampon);                                      (t2 != '\'') && (!(((t2 == '(')
                                       || (t2 == '\'') || (t2 == 'e')
                                 if ((tampon = (unsigned char *)                                      || (t2 == 'E')) && (((t3 >= '0')
                                         malloc((strlen(prologue) +                                      && (t3 <= '9')) || (t3 == '.')))))
                                         strlen(epilogue) + 5) *                                      || ((t1 == '*') && (priorite == 7))
                                         sizeof(unsigned char))) == NULL)                                      || ((t1 == '/') && (priorite == 8)) ||
                                 {                                      ((t1 == '^') && (priorite == 9)))
                                     (*s_etat_processus).erreur_systeme =                              {
                                             d_es_allocation_memoire;                                  drapeau_priorite_entierement_traitee = d_faux;
                                     return(NULL);                                  fin_boucle_extraction = d_vrai;
                                 }  
                                   free(tampon);
                                 prologue[strlen(prologue) - 3] =  
                                         d_code_fin_chaine;                                  if ((tampon = (unsigned char *)
                                           malloc((strlen(prologue) +
                                 sprintf(tampon, "%s' '%s %c%c%c", prologue,                                          strlen(epilogue) + 6) *
                                         epilogue, t3, t2, t1);                                          sizeof(unsigned char))) == NULL)
                                 drapeau_modification = d_vrai;                                  {
                             }                                      (*s_etat_processus).erreur_systeme =
                                               d_es_allocation_memoire;
                             free(prologue);                                      return(NULL);
                             free(epilogue);                                  }
                         }  
                                   sprintf(tampon, "%s' '%s %c",
                         if (t1 == ')')                                          prologue, epilogue, t1);
                         {                                  drapeau_modification = d_vrai;
                             niveau--;                              }
                         }                              else if (((priorite == 4) && (((t1 == '<') &&
                                       (t2 == '=')) || ((t1 == '=') &&
                         k--;                                      (t2 == '<')) || ((t1 == '>') &&
                     }                                      (t2 == '<')) || (((t1 == '>') &&
                                       (t2 == '=')) || ((t1 == '=') &&
                     if (drapeau_priorite_entierement_traitee == d_vrai)                                      (t2 == '>')) || ((t1 == '=') &&
                     {                                      (t2 == '='))))) || ((priorite == 1) &&
                         free(tampon);                                      (t1 == 'R') && (t2 == 'O') && (t3 == ' ')
                                       && (t0 == ' ')))
                         if ((tampon = (unsigned char *) malloc(                              {
                                 (strlen(chaine_centrale) + 1) *                                  drapeau_priorite_entierement_traitee = d_faux;
                                 sizeof(unsigned char))) == NULL)                                  fin_boucle_extraction = d_vrai;
                         {  
                             (*s_etat_processus).erreur_systeme =                                  free(tampon);
                                     d_es_allocation_memoire;  
                             return(NULL);                                  if ((tampon = (unsigned char *)
                         }                                          malloc((strlen(prologue) +
                                           strlen(epilogue) + 6) *
                         strcpy(tampon, chaine_centrale);                                          sizeof(unsigned char))) == NULL)
                     }                                  {
                                       (*s_etat_processus).erreur_systeme =
                     free(chaine_centrale);                                              d_es_allocation_memoire;
                     free(chaine_travail);                                      return(NULL);
                                   }
                     if ((chaine_travail = (unsigned char *) malloc(  
                             (strlen(chaine_gauche) + strlen(tampon)                                  prologue[strlen(prologue) - 1] =
                             + strlen(chaine_droite) + 1 + 2)                                          d_code_fin_chaine;
                             * sizeof(unsigned char))) == NULL)  
                     {                                  sprintf(tampon, "%s' '%s %c%c", prologue,
                         (*s_etat_processus).erreur_systeme =                                          epilogue, t2, t1);
                                 d_es_allocation_memoire;                                  drapeau_modification = d_vrai;
                         return(NULL);                              }
                     }                              else if (((priorite == 1) && (t4 == ' ') &&
                                       (((t3 == 'X') && (t2 == 'O') && (t1 == 'R'))
                     sprintf(chaine_travail, "%s %s %s", chaine_gauche,                                      || ((t3 == 'E') && (t2 == 'Q') &&
                             tampon, chaine_droite);                                      (t1 == 'V'))) && (t0 == ' '))
                                       || ((priorite == 2) &&
                     free(chaine_gauche);                                      (t4 == ' ') && (t3 == 'A') && (t2 == 'N')
                     free(tampon);                                      && (t1 == 'D') && (t0 == ' ')))
                     free(chaine_droite);                              {
                 }                                  drapeau_priorite_entierement_traitee = d_faux;
                                   fin_boucle_extraction = d_vrai;
                 if (drapeau_priorite_entierement_traitee == d_vrai)  
                 {                                  free(tampon);
                     priorite++;  
                 }                                  if ((tampon = (unsigned char *)
                 else                                          malloc((strlen(prologue) +
                 {                                          strlen(epilogue) + 5) *
                     priorite = 1;                                          sizeof(unsigned char))) == NULL)
                 }                                  {
             } while(priorite < 10);                                      (*s_etat_processus).erreur_systeme =
                                               d_es_allocation_memoire;
             /*                                      return(NULL);
              * Aucune modification n'a pu être faite sur l'expression                                  }
              * algébrique.  
              */                                  prologue[strlen(prologue) - 3] =
                                           d_code_fin_chaine;
             if (drapeau_modification == d_faux)  
             {                                  sprintf(tampon, "%s' '%s %c%c%c", prologue,
                 free(chaine_travail);                                          epilogue, t3, t2, t1);
                                   drapeau_modification = d_vrai;
                 (*s_etat_processus).erreur_execution = d_ex_syntaxe;                              }
                 return(NULL);  
             }                              free(prologue);
         }                              free(epilogue);
     } while(nombre_apostrophes != 0);                          }
   
     tampon = chaine_travail;                          if (t1 == ')')
                           {
     if ((chaine_travail = (unsigned char *) malloc((strlen(tampon) + 1 + 6) *                              niveau--;
             sizeof(unsigned char))) == NULL)                          }
     {  
         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                          k--;
         return(NULL);                      }
     }  
                       if (drapeau_priorite_entierement_traitee == d_vrai)
     sprintf(chaine_travail, "<< %s >>", tampon);                      {
     free(tampon);                          free(tampon);
   
     return(chaine_travail);                          if ((tampon = (unsigned char *) malloc(
 }                                  (strlen(chaine_centrale) + 1) *
                                   sizeof(unsigned char))) == NULL)
                           {
 unsigned char *                              (*s_etat_processus).erreur_systeme =
 purification_chaine(unsigned char *chaine)                                      d_es_allocation_memoire;
 {                              return(NULL);
     long                        i;                          }
     long                        j;  
                           strcpy(tampon, chaine_centrale);
     unsigned char               *chaine_purifiee;                      }
   
     i = 0;                      free(chaine_centrale);
     j = strlen(chaine) - 1;                      free(chaine_travail);
   
     while(chaine[i] == ' ')                      if ((chaine_travail = (unsigned char *) malloc(
     {                              (strlen(chaine_gauche) + strlen(tampon)
         if ((i++) > j)                              + strlen(chaine_droite) + 1 + 2)
         {                              * sizeof(unsigned char))) == NULL)
             i = j;                      {
             break;                          (*s_etat_processus).erreur_systeme =
         }                                  d_es_allocation_memoire;
     }                          return(NULL);
                          }
     if (j >= 0)  
     {                      sprintf(chaine_travail, "%s %s %s", chaine_gauche,
         while(chaine[j] == ' ')                              tampon, chaine_droite);
         {  
             if ((--j) < 0)                      free(chaine_gauche);
             {                      free(tampon);
                 j = 0;                      free(chaine_droite);
                 break;                  }
             }  
         }                  if (drapeau_priorite_entierement_traitee == d_vrai)
     }                  {
                       priorite++;
     chaine_purifiee = extraction_chaine(chaine, i + 1, j + 1);                  }
     free(chaine);                  else
                   {
     return(chaine_purifiee);                      priorite = 1;
 }                  }
               } while(priorite < 10);
   
 logical1              /*
 test_expression_rpn(unsigned char *chaine)               * Aucune modification n'a pu être faite sur l'expression
 {               * algébrique.
     long                    j;               */
   
     unsigned char           t;              if (drapeau_modification == d_faux)
     unsigned char           t0;              {
     unsigned char           t1;                  free(chaine_travail);
     unsigned char           t2;  
     unsigned char           t3;                  (*s_etat_processus).erreur_execution = d_ex_syntaxe;
     unsigned char           t4;                  return(NULL);
               }
     unsigned long           compteur;          }
     unsigned long           longueur_chaine;      } while(nombre_apostrophes != 0);
     unsigned long           i;  
     unsigned long           niveau;      tampon = chaine_travail;
   
     /*      if ((chaine_travail = (unsigned char *) malloc((strlen(tampon) + 1 + 6) *
      * On teste d'abord la chaîne pour vérifier qu'il n'y a pas de fonction              sizeof(unsigned char))) == NULL)
      * utilisant la notation infixe.      {
      */          (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
           return(NULL);
     compteur = 0;      }
   
     for(longueur_chaine = strlen(chaine), i = 1; i < longueur_chaine; i++)      sprintf(chaine_travail, "<< %s >>", tampon);
     {      free(tampon);
         /*  
          * On saute les chaînes de caractères      return(chaine_travail);
          */  }
   
         if (chaine[i - 1] == '"')  
         {  unsigned char *
             i++;  purification_chaine(struct_processus *s_etat_processus, unsigned char *chaine)
             while(chaine[i - 1] != '"')  {
             {      integer8                    i;
                 i++;      integer8                    j;
             }  
         }      unsigned char               *chaine_purifiee;
   
         j = ((long) i) - 2;      if (chaine == NULL)
         t0 = (i >= 2) ? chaine[i - 2] : '?';      {
         t1 = chaine[i - 1];          return(NULL);
         t2 = chaine[i];      }
         t3 = ((i + 1) < strlen(chaine)) ? chaine[i + 1] : '?';  
         t4 = ((i + 2) < strlen(chaine)) ? chaine[i + 2] : '?';      i = 0;
       j = ((integer8) strlen(chaine)) - 1;
         /*  
          * Ouverture d'une parenthèse signalant une fonction      while(chaine[i] == ' ')
          */      {
           if ((i++) > j)
         if ((t1 != '+') && (t1 != '-') && (t1 != '*') && (t1 != '/')          {
                 && (t1 != '\'') && (t2 == '('))              i = j;
         {              break;
             niveau = 0;          }
       }
             do      
             {      if (j >= 0)
                 if ((t = chaine[i++]) == '(')      {
                 {          while(chaine[j] == ' ')
                     niveau++;          {
                 }              if ((--j) < 0)
                 else if (t == ')')              {
                 {                  j = 0;
                     niveau--;                  break;
                 }              }
             } while(((niveau != 0) || (t != ')')) && (i < longueur_chaine));          }
       }
             if (i < longueur_chaine)  
             {      chaine_purifiee = extraction_chaine(s_etat_processus, chaine, i + 1, j + 1);
                 t2 = chaine[i];      free(chaine);
             }  
             else      return(chaine_purifiee);
             {  }
                 t2 = ' ';  
             }  
         }  logical1
   test_expression_rpn(unsigned char *chaine)
         /*  {
          * Signalement de l'une des quatre opérations et des fonctions      int                     t;
          * infixes traditionnelles      int                     t0;
          */      int                     t1;
       int                     t2;
         if ((t2 == '+') || (t2 == '-') || (t2 == '*') || (t2 == '/')      int                     t3;
                 || (t2 == '^') || (t2 == '<') || (t2 == '>') || (t2 == '=')      int                     t4;
                 || ((t0 == ' ') && ((t1 == 'A') || (t1 == 'a')) &&  
                 ((t2 == 'N') || (t2 == 'n')) && ((t3 == 'D') || (t3 == 'd'))      integer8                compteur;
                 && (t4 == ' ')) ||      integer8                longueur_chaine;
                 ((t0 == ' ') && ((t1 == 'O') || (t1 == 'o')) &&      integer8                i;
                 ((t2 == 'R') || (t2 == 'r')) && (t3 == ' ')) ||      integer8                j;
                 ((t0 == ' ') && ((t1 == 'X') || (t1 == 'x')) &&      integer8                niveau;
                 ((t2 == 'O') || (t2 == 'o')) && ((t3 == 'R') || (t3 == 'r'))  
                 && (t4 == ' ')))      /*
         {       * On teste d'abord la chaîne pour vérifier qu'il n'y a pas de fonction
             compteur++;       * utilisant la notation infixe.
         }       */
   
         /*      compteur = 0;
          * Signalement d'un nombre  
          */      for(longueur_chaine = ((integer8) strlen(chaine)), i = 1;
               i < longueur_chaine; i++)
         if (((t2 == '+') || (t2 == '-')) && ((t1 == '(')      {
                 || ((t1 == 'e') || (t1 == 'E') || (t1 == '\'')))          /*
                 && (((t0 >= '0') && (t0 <= '9')) || (t0 == '.')))           * On saute les chaînes de caractères
         {           */
             compteur--;  
         }          if (chaine[i - 1] == '"')
         else if (((t2 == '+') || (t2 == '-')) && (t1 == '\'') && (j < 0)          {
                 && (((t3 >= '0') && (t3 <= '9')) || (t3 == '.')))              i++;
         {              while(!((chaine[i - 1] == '"') && (chaine[i - 2] != '\\')))
             compteur--;              {
         }                  i++;
     }              }
           }
     return(((compteur == 0) && (test_fonction(chaine) == d_faux))  
             ? d_vrai : d_faux);          j = i - 2;
 }          t0 = (i >= 2) ? chaine[i - 2] : '?';
           t1 = chaine[i - 1];
           t2 = chaine[i];
 logical1          t3 = ((i + 1) < ((integer8) strlen(chaine))) ? chaine[i + 1] : '?';
 test_fonction(unsigned char *chaine)          t4 = ((i + 2) < ((integer8) strlen(chaine))) ? chaine[i + 2] : '?';
 {  
     logical1                drapeau_fonction;          /*
            * Ouverture d'une parenthèse signalant une fonction
     unsigned char           t;           */
   
     unsigned long           compteur;          if ((t1 != '+') && (t1 != '-') && (t1 != '*') && (t1 != '/')
     unsigned long           i;                  && (t1 != '\'') && (t2 == '('))
     unsigned long           longueur_chaine;          {
               niveau = 0;
     longueur_chaine = strlen(chaine);  
     i = 1;              do
               {
     while(((t = chaine[i]) != '(') && (i < (longueur_chaine - 1)))                  if ((t = chaine[i++]) == '(')
     {                  {
         if ((t == '+') || (t == '-') || (t == '*') ||                      niveau++;
                 (t == '/') || (t == '^') || (t == '>') || (t == '<') ||                  }
                 (t == '='))                  else if (t == ')')
         {                  {
             i = longueur_chaine - 1;                      niveau--;
         }                  }
         else              } while(((niveau != 0) || (t != ')')) && (i < longueur_chaine));
         {  
             i++;              if (i < longueur_chaine)
         }              {
     }                  t2 = chaine[i];
               }
     compteur = 1;              else
     drapeau_fonction = ((i < (longueur_chaine - 1)) && (i != 1))              {
             ? d_vrai : d_faux;                  t2 = ' ';
               }
     for(i++; i < (longueur_chaine - 2); i++)          }
     {  
         if ((t = chaine[i]) == '(')          /*
         {           * Signalement de l'une des quatre opérations et des fonctions
             compteur++;           * infixes traditionnelles
         }           */
         else if (t == ')')  
         {          if ((t2 == '+') || (t2 == '-') || (t2 == '*') || (t2 == '/')
             compteur--;                  || (t2 == '^') || (t2 == '<') || (t2 == '>') || (t2 == '=')
         }                  || ((t0 == ' ') && ((t1 == 'A') || (t1 == 'a')) &&
                   ((t2 == 'N') || (t2 == 'n')) && ((t3 == 'D') || (t3 == 'd'))
         if (compteur == 0)                  && (t4 == ' ')) ||
         {                  ((t0 == ' ') && ((t1 == 'E') || (t1 == 'e')) &&
             drapeau_fonction = d_faux;                  ((t2 == 'Q') || (t2 == 'q')) && ((t3 == 'V') || (t3 == 'v'))
         }                  && (t4 == ' ')) ||
     }                  ((t0 == ' ') && ((t1 == 'O') || (t1 == 'o')) &&
                   ((t2 == 'R') || (t2 == 'r')) && (t3 == ' ')) ||
     return drapeau_fonction;                  ((t0 == ' ') && ((t1 == 'X') || (t1 == 'x')) &&
 }                  ((t2 == 'O') || (t2 == 'o')) && ((t3 == 'R') || (t3 == 'r'))
                   && (t4 == ' ')))
           {
 unsigned char *              compteur++;
 extraction_chaine(unsigned char *chaine, unsigned long position_1,          }
         unsigned long position_2)  
 {          /*
     long                    i;           * Signalement d'un nombre
            */
     unsigned char           *pointeur_ecriture;  
     unsigned char           *pointeur_lecture;          if (((t2 == '+') || (t2 == '-')) && ((t1 == '(')
     unsigned char           *sous_chaine;                  || ((t1 == 'e') || (t1 == 'E') || (t1 == '\'')))
                   && (((t0 >= '0') && (t0 <= '9')) || (t0 == '.')))
     if ((position_1 < 1) || (position_2 < position_1) ||          {
             (position_2 > strlen(chaine)))              compteur--;
     {          }
         if ((sous_chaine = (unsigned char *) malloc(sizeof(unsigned char)))          else if (((t2 == '+') || (t2 == '-')) && (t1 == '\'') && (j < 0)
                 == NULL)                  && (((t3 >= '0') && (t3 <= '9')) || (t3 == '.')))
         {          {
             return(NULL);              compteur--;
         }          }
       }
         (*sous_chaine) = d_code_fin_chaine;  
         return(sous_chaine);      return(((compteur == 0) && (test_fonction(chaine) == d_faux))
     }              ? d_vrai : d_faux);
   }
     if ((sous_chaine = (unsigned char *)  
             malloc((position_2 - position_1 + 2) * sizeof(unsigned char)))  
             == NULL)  logical1
     {  test_fonction(unsigned char *chaine)
         return(NULL);  {
     }      logical1                drapeau_fonction;
   
     pointeur_lecture = &(chaine[position_1 - 1]);      int                     t;
     pointeur_ecriture = sous_chaine;  
       integer8                compteur;
     for(sous_chaine[i = position_2 - position_1 + 1] = 0; (--i) >= 0;      integer8                i;
             *(pointeur_ecriture++) = *(pointeur_lecture++));      integer8                longueur_chaine;
   
     return(sous_chaine);      longueur_chaine = (integer8) strlen(chaine);
 }      i = 1;
   
 // vim: ts=4      while(((t = chaine[i]) != '(') && (i < (longueur_chaine - 1)))
       {
           if ((t == '+') || (t == '-') || (t == '*') ||
                   (t == '/') || (t == '^') || (t == '>') || (t == '<') ||
                   (t == '='))
           {
               i = longueur_chaine - 1;
           }
           else
           {
               i++;
           }
       }
   
       compteur = 1;
       drapeau_fonction = ((i < (longueur_chaine - 1)) && (i != 1))
               ? d_vrai : d_faux;
   
       for(i++; i < (longueur_chaine - 2); i++)
       {
           if ((t = chaine[i]) == '(')
           {
               compteur++;
           }
           else if (t == ')')
           {
               compteur--;
           }
   
           if (compteur == 0)
           {
               drapeau_fonction = d_faux;
           }
       }
   
       return drapeau_fonction;
   }
   
   
   unsigned char *
   extraction_chaine(struct_processus *s_etat_processus,
           unsigned char *chaine, integer8 position_1, integer8 position_2)
   {
       integer8                i;
   
       unsigned char           *pointeur_ecriture;
       unsigned char           *pointeur_lecture;
       unsigned char           *sous_chaine;
   
       if ((position_1 < 1) || (position_2 < position_1) ||
               (position_2 > ((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 ((sous_chaine = (unsigned char *)
               malloc(((size_t) (position_2 - position_1 + 2)) *
               sizeof(unsigned char))) == NULL)
       {
           (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
           return(NULL);
       }
   
       pointeur_lecture = &(chaine[position_1 - 1]);
       pointeur_ecriture = sous_chaine;
   
       for(sous_chaine[i = position_2 - position_1 + 1] = 0; (--i) >= 0;
               *(pointeur_ecriture++) = *(pointeur_lecture++));
   
       return(sous_chaine);
   }
   
   // vim: ts=4

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


CVSweb interface <joel.bertrand@systella.fr>