Diff for /rpl/src/analyse_notation_algebrique.c between versions 1.12 and 1.45

version 1.12, 2010/08/06 15:26:43 version 1.45, 2013/03/23 16:14:39
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.18    RPL/2 (R) version 4.1.13
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2013 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
   RPL/2 is free software; you can redistribute it and/or modify it    RPL/2 is free software; you can redistribute it and/or modify it
   under the terms of the CeCILL V2 License as published by the french    under the terms of the CeCILL V2 License as published by the french
   CEA, CNRS and INRIA.    CEA, CNRS and INRIA.
     
   RPL/2 is distributed in the hope that it will be useful, but WITHOUT    RPL/2 is distributed in the hope that it will be useful, but WITHOUT
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License    FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License
   for more details.    for more details.
     
   You should have received a copy of the CeCILL License    You should have received a copy of the CeCILL License
   along with RPL/2. If not, write to info@cecill.info.    along with RPL/2. If not, write to info@cecill.info.
 ================================================================================  ================================================================================
 */  */
   
   
 #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;          {
         }              presence_chaine = (presence_chaine == d_faux) ? d_vrai : d_faux;
         else if (presence_chaine == d_faux)          }
         {          else if (presence_chaine == d_faux)
             if (chaine_algebrique[i] == '{')          {
             {              if (chaine_algebrique[i] == '{')
                 presence_liste = d_vrai;              {
                 niveau_liste++;                  presence_liste = d_vrai;
             }                  niveau_liste++;
             else if (chaine_algebrique[i] == '}')              }
             {              else if (chaine_algebrique[i] == '}')
                 presence_liste = d_vrai;              {
                 niveau_liste--;                  presence_liste = d_vrai;
             }                  niveau_liste--;
         }              }
     }          }
       }
     if ((chaine_invalide == d_vrai) || (presence_chaine == d_vrai) ||  
             (niveau_liste != 0) || (presence_liste == d_vrai))      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);          (*s_etat_processus).erreur_execution = d_ex_expression_invalide;
     }          return(NULL);
       }
     /*  
      * Transformation des "**" en "^ "      /*
      */       * Transformation des "**" en "^ "
        */
     for(i = 1; i < strlen(chaine_algebrique) - 1; i++)  
     {      for(i = 1; i < ((integer8) strlen(chaine_algebrique)) - 1; i++)
         if (chaine_algebrique[i] == '*')      {
         {          if (chaine_algebrique[i] == '*')
             if (chaine_algebrique[i + 1] == '*')          {
             {              if (chaine_algebrique[i + 1] == '*')
                 chaine_algebrique[i++] = '^';              {
                 chaine_algebrique[i] = ' ';                  chaine_algebrique[i++] = '^';
             }                  chaine_algebrique[i] = ' ';
         }              }
     }          }
       }
     if ((chaine_travail = (unsigned char *) malloc((strlen(chaine_algebrique) +  
             1) * sizeof(unsigned char))) == NULL)      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);          (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
     }          return(NULL);
       }
     strcpy(chaine_travail, chaine_algebrique);  
       strcpy(chaine_travail, chaine_algebrique);
     /*  
      * Retrait des espaces dans l'expression algébrique      /*
      */       * Retrait des espaces dans l'expression algébrique
        */
     ptr1 = chaine_travail;  
     ptr2 = chaine_travail;      ptr1 = chaine_travail;
     presence_chaine = d_faux;      ptr2 = chaine_travail;
       presence_chaine = d_faux;
     while((*ptr1) != d_code_fin_chaine)  
     {      while((*ptr1) != d_code_fin_chaine)
         if ((*ptr1) == '"')      {
         {          if ((*ptr1) == '"')
             if (presence_chaine == d_faux)          {
             {              if (ptr1 != chaine_travail)
                 presence_chaine = d_vrai;              { // Il existe un caractère précédent.
             }                  if ((*(ptr1 - 1)) != '\\')
             else                  {
             {                      if (presence_chaine == d_faux)
                 presence_chaine = d_faux;                      {
             }                          presence_chaine = d_vrai;
         }                      }
                       else
         if (presence_chaine == d_faux)                      {
         {                          presence_chaine = d_faux;
             if ((*ptr1) != ' ')                      }
             {                  }
                 (*(ptr2++)) = (*ptr1);              }
             }              else
             else              { // Il n'existe pas de caractère précédent.
             {                  if (presence_chaine == d_faux)
                 instruction_test[5] = d_code_fin_chaine;                  {
                       presence_chaine = d_vrai;
                 instruction_majuscule = conversion_majuscule(strncpy(                  }
                         instruction_test, ptr1, 5));                  else
                   {
                 if (instruction_majuscule == NULL)                      presence_chaine = d_faux;
                 {                  }
                     (*s_etat_processus).erreur_systeme =              }
                             d_es_allocation_memoire;          }
                     return(NULL);  
                 }          if (presence_chaine == d_faux)
           {
                 /*              if ((*ptr1) != ' ')
                  * Repérer le premier espace ou la fin de la chaîne.              {
                  */                  (*(ptr2++)) = (*ptr1);
               }
                 if (strcmp(instruction_majuscule, " AND ") == 0)              else
                 {              {
                     for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++);                  instruction_test[5] = d_code_fin_chaine;
                     (*(ptr2++)) = (*ptr1);  
                 }                  instruction_majuscule = conversion_majuscule(strncpy(
                 else if (strcmp(instruction_majuscule, " XOR ") == 0)                          instruction_test, ptr1, 5));
                 {  
                     for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++);                  if (instruction_majuscule == NULL)
                     (*(ptr2++)) = (*ptr1);                  {
                 }                      (*s_etat_processus).erreur_systeme =
                 else if ((strncmp(instruction_majuscule, " OR ", 4) == 0) &&                              d_es_allocation_memoire;
                         (strlen(instruction_majuscule) == 4))                      return(NULL);
                 {                  }
                     for(i = 0; i < 3; (*(ptr2++)) = (*(ptr1++)), i++);  
                     (*(ptr2++)) = (*ptr1);                  /*
                 }                   * Repérer le premier espace ou la fin de la chaîne.
                    */
                 free(instruction_majuscule);  
             }                  if (strcmp(instruction_majuscule, " AND ") == 0)
                              {
             ptr1++;                      for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++);
         }                      (*(ptr2++)) = (*ptr1);
         else                  }
         {                  else if (strcmp(instruction_majuscule, " XOR ") == 0)
             (*(ptr2++)) = (*(ptr1++));                  {
         }                      for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++);
     }                      (*(ptr2++)) = (*ptr1);
                   }
     (*ptr2) = d_code_fin_chaine;                  else if ((strncmp(instruction_majuscule, " OR ", 4) == 0) &&
                           (strlen(instruction_majuscule) == 4))
     do                  {
     {                      for(i = 0; i < 3; (*(ptr2++)) = (*(ptr1++)), i++);
         i = 0;                      (*(ptr2++)) = (*ptr1);
         drapeau_modification = d_faux;                  }
   
         do                  free(instruction_majuscule);
         {              }
             presence_chaine = d_faux;              
             drapeau_debut_zone_valide = d_faux;              ptr1++;
             debut_zone_algebrique = 0;          }
             drapeau_fin_boucle = d_faux;          else
           {
             do              (*(ptr2++)) = (*(ptr1++));
             {          }
                 if (chaine_travail[i] == d_code_fin_chaine)      }
                 {  
                     drapeau_fin_boucle = d_vrai;      (*ptr2) = d_code_fin_chaine;
                 }  
                 else if ((chaine_travail[i] == '\'') &&      do
                         (presence_chaine == d_faux))      {
                 {          i = 0;
                     drapeau_fin_boucle = d_vrai;          drapeau_modification = d_faux;
                     debut_zone_algebrique = i;  
                     drapeau_debut_zone_valide = d_vrai;          do
                 }          {
                 else if (chaine_travail[i] == '"')              presence_chaine = d_faux;
                 {              drapeau_debut_zone_valide = d_faux;
                     presence_chaine = (presence_chaine == d_vrai)              debut_zone_algebrique = 0;
                             ? d_faux : d_vrai;              drapeau_fin_boucle = d_faux;
                 }  
               do
                 i++;              {
             } while(drapeau_fin_boucle == d_faux);                  if (chaine_travail[i] == d_code_fin_chaine)
                   {
             presence_chaine = 0;                      drapeau_fin_boucle = d_vrai;
             drapeau_fin_zone_valide = d_faux;                  }
                   else if ((chaine_travail[i] == '\'') &&
             if (drapeau_debut_zone_valide == d_vrai)                          (presence_chaine == d_faux))
             {                  {
                 j = debut_zone_algebrique + 1;                      drapeau_fin_boucle = d_vrai;
             }                      debut_zone_algebrique = i;
             else                      drapeau_debut_zone_valide = d_vrai;
             {                  }
                 j = 0;                  else if (chaine_travail[i] == '"')
             }                  {
                       presence_chaine = (presence_chaine == d_vrai)
             fin_zone_algebrique = 0;                              ? d_faux : d_vrai;
             drapeau_fin_boucle = d_faux;                  }
   
             do                  i++;
             {              } while(drapeau_fin_boucle == d_faux);
                 if (chaine_travail[j] == 0)  
                 {              presence_chaine = 0;
                     drapeau_fin_boucle = d_vrai;              drapeau_fin_zone_valide = d_faux;
                 }  
               if (drapeau_debut_zone_valide == d_vrai)
                 if ((chaine_travail[j] == '\'') && (presence_chaine == d_faux))              {
                 {                  j = debut_zone_algebrique + 1;
                     drapeau_fin_boucle = d_vrai;              }
                     fin_zone_algebrique = j;              else
                     drapeau_fin_zone_valide = d_vrai;              {
                 }                  j = 0;
               }
                 if (chaine_travail[j] == '"')  
                 {              fin_zone_algebrique = 0;
                     presence_chaine = (presence_chaine == d_vrai)              drapeau_fin_boucle = d_faux;
                             ? d_faux : d_vrai;  
                 }              do
               {
                 j++;                  if (chaine_travail[j] == 0)
             } while(drapeau_fin_boucle == d_faux);                  {
                       drapeau_fin_boucle = d_vrai;
             if ((drapeau_debut_zone_valide == d_vrai) &&                  }
                     (drapeau_fin_zone_valide == d_vrai))  
             {                  if ((chaine_travail[j] == '\'') && (presence_chaine == d_faux))
                 chaine_gauche = purification_chaine(                  {
                         extraction_chaine(chaine_travail,                      drapeau_fin_boucle = d_vrai;
                         1, debut_zone_algebrique));                      fin_zone_algebrique = j;
                 chaine_centrale = purification_chaine(                      drapeau_fin_zone_valide = d_vrai;
                         extraction_chaine(chaine_travail,                  }
                         debut_zone_algebrique + 1, fin_zone_algebrique + 1));  
                 chaine_droite = purification_chaine(                  if (chaine_travail[j] == '"')
                         extraction_chaine(chaine_travail,                  {
                         fin_zone_algebrique + 2, strlen(chaine_travail)));                      presence_chaine = (presence_chaine == d_vrai)
                               ? d_faux : d_vrai;
                 free(chaine_travail);                  }
   
                 if ((chaine_gauche == NULL) || (chaine_centrale == NULL) ||                  j++;
                         (chaine_droite == NULL))              } while(drapeau_fin_boucle == d_faux);
                 {  
                     (*s_etat_processus).erreur_systeme =              if ((drapeau_debut_zone_valide == d_vrai) &&
                             d_es_allocation_memoire;                      (drapeau_fin_zone_valide == d_vrai))
                     return(NULL);              {
                 }                  chaine_gauche = purification_chaine(
                           extraction_chaine(chaine_travail,
                 if ((strcmp(chaine_centrale, "''") == 0) ||                          1, debut_zone_algebrique));
                         (strcmp(chaine_centrale, "'()'") == 0))                  chaine_centrale = purification_chaine(
                 {                          extraction_chaine(chaine_travail,
                     free(chaine_gauche);                          debut_zone_algebrique + 1, fin_zone_algebrique + 1));
                     free(chaine_centrale);                  chaine_droite = purification_chaine(
                     free(chaine_droite);                          extraction_chaine(chaine_travail,
                           fin_zone_algebrique + 2,
                     (*s_etat_processus).erreur_execution =                          (integer8) strlen(chaine_travail)));
                             d_ex_expression_invalide;  
                     return(NULL);                  free(chaine_travail);
                 }  
                   if ((chaine_gauche == NULL) || (chaine_centrale == NULL) ||
                 i = 1;                          (chaine_droite == NULL))
                 niveau = 0;                  {
                 drapeau_elimination_parentheses = d_vrai;                      (*s_etat_processus).erreur_systeme =
                 presence_chaine = d_faux;                              d_es_allocation_memoire;
                       return(NULL);
                 while(i < (strlen(chaine_centrale) - 1))                  }
                 {  
                     if (chaine_centrale[i] == '"')                  if ((strcmp(chaine_centrale, "''") == 0) ||
                     {                          (strcmp(chaine_centrale, "'()'") == 0))
                         presence_chaine = (presence_chaine == d_faux)                  {
                                 ? d_vrai : d_faux;                      free(chaine_gauche);
                       free(chaine_centrale);
                         if (i == 1)                      free(chaine_droite);
                         {  
                             drapeau_elimination_parentheses = d_faux;                      (*s_etat_processus).erreur_execution =
                         }                              d_ex_expression_invalide;
                     }                      return(NULL);
                     else if (presence_chaine == d_faux)                  }
                     {  
                         if (chaine_centrale[i] == '(')                  i = 1;
                         {                  niveau = 0;
                             niveau++;                  drapeau_elimination_parentheses = d_vrai;
                         }                  presence_chaine = d_faux;
   
                         if ((niveau == 0) || ((((test_cfsf(s_etat_processus,                  while(i < ((integer8) strlen(chaine_centrale)) - 1)
                                 48) == d_vrai) && (chaine_centrale[i] ==                  {
                                 '.')) || ((test_cfsf(s_etat_processus, 48)                      if (chaine_centrale[i] == '"')
                                 == d_faux) && (chaine_centrale[i] == ',')))                      {
                                 && (niveau == 1)))                          presence_chaine = (presence_chaine == d_faux)
                         {                                  ? d_vrai : d_faux;
                             drapeau_elimination_parentheses = d_faux;  
                         }                          if (i == 1)
                           {
                         if (chaine_centrale[i] == ')')                              drapeau_elimination_parentheses = d_faux;
                         {                          }
                             niveau--;                      }
                         }                      else if (presence_chaine == d_faux)
                     }                      {
                           if (chaine_centrale[i] == '(')
                     i++;                          {
                 }                              niveau++;
                           }
                 if (drapeau_elimination_parentheses == d_vrai)  
                 {                          if ((niveau == 0) || ((((test_cfsf(s_etat_processus,
                     tampon = chaine_centrale;                                  48) == d_vrai) && (chaine_centrale[i] ==
                                   '.')) || ((test_cfsf(s_etat_processus, 48)
                     if ((chaine_centrale = (unsigned char *) malloc(                                  == d_faux) && (chaine_centrale[i] == ',')))
                             (strlen(tampon) - 1) * sizeof(unsigned char)))                                  && (niveau == 1)))
                             == NULL)                          {
                     {                              drapeau_elimination_parentheses = d_faux;
                         (*s_etat_processus).erreur_systeme =                          }
                                 d_es_allocation_memoire;  
                         return(NULL);                          if (chaine_centrale[i] == ')')
                     }                          {
                               niveau--;
                     tampon[strlen(tampon) - 2] = d_code_fin_chaine;                          }
                       }
                     sprintf(chaine_centrale, "'%s'", &(tampon[2]));  
                     free(tampon);                      i++;
                   }
                     fin_zone_algebrique -= 2;  
                     drapeau_modification = d_vrai;                  if (drapeau_elimination_parentheses == d_vrai)
                 }                  {
                       tampon = chaine_centrale;
                 if ((test_expression_rpn(chaine_centrale) == d_vrai) &&  
                         (fin_zone_algebrique - debut_zone_algebrique > 0))                      if ((chaine_centrale = (unsigned char *) malloc(
                 {                              (strlen(tampon) - 1) * sizeof(unsigned char)))
                     if ((tampon = purification_chaine(                              == NULL)
                             extraction_chaine(chaine_centrale, 2,                      {
                             strlen(chaine_centrale) - 1))) == NULL)                          (*s_etat_processus).erreur_systeme =
                     {                                  d_es_allocation_memoire;
                         (*s_etat_processus).erreur_systeme =                          return(NULL);
                                 d_es_allocation_memoire;                      }
                         return(NULL);  
                     }                      tampon[strlen(tampon) - 2] = d_code_fin_chaine;
   
                     /*                      sprintf(chaine_centrale, "'%s'", &(tampon[2]));
                      * Si on tombe sur une fonction intrinsèque ou                      free(tampon);
                      * extrinsèque, il doit y avoir des arguments passés  
                      * entre parenthèses et on ne doit pas passer par ici !                      fin_zone_algebrique -= 2;
                      */                      drapeau_modification = d_vrai;
                   }
                     registre_instruction_courante = (*s_etat_processus)  
                             .instruction_courante;                  if ((test_expression_rpn(chaine_centrale) == d_vrai) &&
                     registre_test = (*s_etat_processus).test_instruction;                          (fin_zone_algebrique - debut_zone_algebrique > 0))
                     registre_instruction_valide = (*s_etat_processus)                  {
                             .instruction_valide;                      if ((tampon = purification_chaine(
                               extraction_chaine(chaine_centrale, 2,
                     (*s_etat_processus).test_instruction = 'Y';                              ((integer8) strlen(chaine_centrale)) - 1))) == NULL)
                     (*s_etat_processus).instruction_courante = tampon;                      {
                           (*s_etat_processus).erreur_systeme =
                     analyse(s_etat_processus, NULL);                                  d_es_allocation_memoire;
                           return(NULL);
                     (*s_etat_processus).test_instruction = registre_test;                      }
                     (*s_etat_processus).instruction_courante =  
                             registre_instruction_courante;                      /*
                        * Si on tombe sur une fonction intrinsèque ou
                     if (((*s_etat_processus).instruction_valide == 'Y') &&                       * extrinsèque, il doit y avoir des arguments passés
                             ((*s_etat_processus).constante_symbolique == 'N'))                       * entre parenthèses et on ne doit pas passer par ici !
                     {                       */
                         free(chaine_gauche);  
                         free(chaine_centrale);                      registre_instruction_courante = (*s_etat_processus)
                         free(chaine_droite);                              .instruction_courante;
                         free(tampon);                      registre_test = (*s_etat_processus).test_instruction;
                       registre_instruction_valide = (*s_etat_processus)
                         (*s_etat_processus).instruction_valide =                              .instruction_valide;
                                 registre_instruction_valide;  
                       (*s_etat_processus).test_instruction = 'Y';
                         (*s_etat_processus).erreur_execution =                      (*s_etat_processus).instruction_courante = tampon;
                                 d_ex_expression_invalide;  
                         return(NULL);                      analyse(s_etat_processus, NULL);
                     }  
                       (*s_etat_processus).test_instruction = registre_test;
                     (*s_etat_processus).instruction_valide =                      (*s_etat_processus).instruction_courante =
                             registre_instruction_valide;                              registre_instruction_courante;
   
                     free(chaine_centrale);                      if (((*s_etat_processus).instruction_valide == 'Y') &&
                     chaine_centrale = tampon;                              ((*s_etat_processus).constante_symbolique == 'N'))
                       {
                     fin_zone_algebrique--;                          free(chaine_gauche);
                     drapeau_modification = d_vrai;                          free(chaine_centrale);
                 }                          free(chaine_droite);
                 else if ((test_fonction(chaine_centrale) == d_vrai) &&                          free(tampon);
                         (fin_zone_algebrique - debut_zone_algebrique > 0))  
                 {                          (*s_etat_processus).instruction_valide =
                     i = 1;                                  registre_instruction_valide;
                     while((i < (strlen(chaine_centrale) - 1)) &&  
                             (chaine_centrale[i] != '('))                          (*s_etat_processus).erreur_execution =
                     {                                  d_ex_expression_invalide;
                         i++;                          return(NULL);
                     }                      }
   
                     j = strlen(chaine_centrale) - 1;                      (*s_etat_processus).instruction_valide =
                     while(chaine_centrale[j] != ')')                              registre_instruction_valide;
                     {  
                         j--;                      free(chaine_centrale);
                     }                      chaine_centrale = tampon;
   
                     chaine_fonction = purification_chaine(                      fin_zone_algebrique--;
                             extraction_chaine(chaine_centrale, 2, i));                      drapeau_modification = d_vrai;
                     chaine_arguments = purification_chaine(                  }
                             extraction_chaine(chaine_centrale, i + 2, j));                  else if ((test_fonction(chaine_centrale) == d_vrai) &&
                           (fin_zone_algebrique - debut_zone_algebrique > 0))
                     i = 0;                  {
                     niveau = 0;                      i = 1;
                     nombre_arguments = 1;                      while((i < ((integer8) strlen(chaine_centrale)) - 1) &&
                               (chaine_centrale[i] != '('))
                     while(chaine_arguments[i] != d_code_fin_chaine)                      {
                     {                          i++;
                         if (chaine_arguments[i] == '(')                      }
                         {  
                             niveau++;                      j = ((integer8) strlen(chaine_centrale)) - 1;
                         }                      while(chaine_centrale[j] != ')')
                       {
                         if (chaine_arguments[i] == ')')                          j--;
                         {                      }
                             niveau--;  
                         }                      chaine_fonction = purification_chaine(
                               extraction_chaine(chaine_centrale, 2, i));
                         if ((chaine_arguments[i] == ',') && (niveau == 0))                      chaine_arguments = purification_chaine(
                         {                              extraction_chaine(chaine_centrale, i + 2, j));
                             sous_chaine_gauche = purification_chaine(  
                                     extraction_chaine(chaine_arguments, 1, i));                      i = 0;
                             sous_chaine_droite = purification_chaine(                      niveau = 0;
                                     extraction_chaine(chaine_arguments, i + 2,                      nombre_arguments = 1;
                                     strlen(chaine_arguments)));  
                       while(chaine_arguments[i] != d_code_fin_chaine)
                             free(chaine_arguments);                      {
                           if (chaine_arguments[i] == '(')
                             if ((chaine_arguments = (unsigned char *) malloc(                          {
                                     (strlen(sous_chaine_gauche) + strlen(                              niveau++;
                                     sous_chaine_droite) + 3 + 1) * sizeof(                          }
                                     unsigned char))) == NULL)  
                             {                          if (chaine_arguments[i] == ')')
                                 (*s_etat_processus).erreur_systeme =                          {
                                         d_es_allocation_memoire;                              niveau--;
                                 return(NULL);                          }
                             }  
                           if ((chaine_arguments[i] == ',') && (niveau == 0))
                             sprintf(chaine_arguments, "%s' '%s",                          {
                                     sous_chaine_gauche, sous_chaine_droite);                              sous_chaine_gauche = purification_chaine(
                             i += 2;                                      extraction_chaine(chaine_arguments, 1, i));
                               sous_chaine_droite = purification_chaine(
                             free(sous_chaine_gauche);                                      extraction_chaine(chaine_arguments, i + 2,
                             free(sous_chaine_droite);                                      ((integer8) strlen(chaine_arguments))));
   
                             nombre_arguments++;                              free(chaine_arguments);
                         }  
                               if ((chaine_arguments = (unsigned char *) malloc(
                         i++;                                      (strlen(sous_chaine_gauche) + strlen(
                     }                                      sous_chaine_droite) + 3 + 1) * sizeof(
                                       unsigned char))) == NULL)
                     free(chaine_centrale);                              {
                                   (*s_etat_processus).erreur_systeme =
                     l_element_courant = (*l_base_liste);                                          d_es_allocation_memoire;
                     presence_fonction = d_faux;                                  return(NULL);
                               }
                     while((l_element_courant != NULL) &&  
                             (presence_fonction == d_faux))                              sprintf(chaine_arguments, "%s' '%s",
                     {                                      sous_chaine_gauche, sous_chaine_droite);
                         if (strcmp((*((struct_fonction *) ((*l_element_courant)                              i += 2;
                                 .donnee))).nom_fonction, chaine_fonction) == 0)  
                         {                              free(sous_chaine_gauche);
                             presence_fonction = d_vrai;                              free(sous_chaine_droite);
                         }  
                         else                              nombre_arguments++;
                         {                          }
                             l_element_courant = (*l_element_courant).suivant;  
                         }                          i++;
                     }                      }
   
                     if (presence_fonction == d_vrai)                      free(chaine_centrale);
                     {  
                         if ((*((struct_fonction *)                      l_element_courant = (*l_base_liste);
                                 ((*l_element_courant).donnee)))                      presence_fonction = d_faux;
                                 .nombre_arguments != nombre_arguments)  
                         {                      while((l_element_courant != NULL) &&
                             (*s_etat_processus).erreur_execution =                              (presence_fonction == d_faux))
                                     d_ex_nombre_arguments;                      {
                           if (strcmp((*((struct_fonction *) ((*l_element_courant)
                             free(chaine_arguments);                                  .donnee))).nom_fonction, chaine_fonction) == 0)
                             free(chaine_fonction);                          {
                             free(chaine_gauche);                              presence_fonction = d_vrai;
                             free(chaine_droite);                          }
                           else
                             return(NULL);                          {
                         }                              l_element_courant = (*l_element_courant).suivant;
                     }                          }
                     else                      }
                     {  
                         registre_instruction_courante = (*s_etat_processus)                      if (presence_fonction == d_vrai)
                                 .instruction_courante;                      {
                         registre_test = (*s_etat_processus).test_instruction;                          if ((*((struct_fonction *)
                         registre_instruction_valide = (*s_etat_processus)                                  ((*l_element_courant).donnee)))
                                 .instruction_valide;                                  .nombre_arguments != nombre_arguments)
                           {
                         (*s_etat_processus).test_instruction = 'Y';                              (*s_etat_processus).erreur_execution =
                         (*s_etat_processus).instruction_courante =                                      d_ex_nombre_arguments;
                                 chaine_fonction;  
                               free(chaine_arguments);
                         analyse(s_etat_processus, NULL);                              free(chaine_fonction);
                               free(chaine_gauche);
                         (*s_etat_processus).test_instruction = registre_test;                              free(chaine_droite);
                         (*s_etat_processus).instruction_courante =  
                                 registre_instruction_courante;                              return(NULL);
                         (*s_etat_processus).instruction_valide =                          }
                                 registre_instruction_valide;                      }
                       else
                         if (((unsigned long) (*s_etat_processus)                      {
                                 .nombre_arguments != nombre_arguments) &&                          registre_instruction_courante = (*s_etat_processus)
                                 ((*s_etat_processus).nombre_arguments != -2))                                  .instruction_courante;
                         {                          registre_test = (*s_etat_processus).test_instruction;
                             (*s_etat_processus).erreur_execution =                          registre_instruction_valide = (*s_etat_processus)
                                     d_ex_nombre_arguments_fonction;                                  .instruction_valide;
   
                             free(chaine_arguments);                          (*s_etat_processus).test_instruction = 'Y';
                             free(chaine_fonction);                          (*s_etat_processus).instruction_courante =
                             free(chaine_gauche);                                  chaine_fonction;
                             free(chaine_droite);  
                           analyse(s_etat_processus, NULL);
                             return(NULL);  
                         }                          (*s_etat_processus).test_instruction = registre_test;
                           (*s_etat_processus).instruction_courante =
                         if ((l_element_courant = (struct_liste_chainee *)                                  registre_instruction_courante;
                                 malloc(sizeof(struct_liste_chainee))) == NULL)                          (*s_etat_processus).instruction_valide =
                         {                                  registre_instruction_valide;
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;                          if (((*s_etat_processus).nombre_arguments !=
                             return(NULL);                                  nombre_arguments) &&
                         }                                  ((*s_etat_processus).nombre_arguments != -2))
                           {
                         (*l_element_courant).suivant = (*l_base_liste);                              (*s_etat_processus).erreur_execution =
                         (*l_base_liste) = l_element_courant;                                      d_ex_nombre_arguments_fonction;
   
                         if ((s_fonction = malloc(sizeof(struct_fonction)))                              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);
                         }                          }
   
                         if (((*s_fonction).nom_fonction = (unsigned char *)                          if ((l_element_courant = (struct_liste_chainee *)
                                 malloc((strlen(chaine_fonction) + 1) *                                  malloc(sizeof(struct_liste_chainee))) == NULL)
                                 sizeof(unsigned char))) == NULL)                          {
                         {                              (*s_etat_processus).erreur_systeme =
                             (*s_etat_processus).erreur_systeme =                                      d_es_allocation_memoire;
                                     d_es_allocation_memoire;                              return(NULL);
                             return(NULL);                          }
                         }  
                           (*l_element_courant).suivant = (*l_base_liste);
                         strcpy((*s_fonction).nom_fonction, chaine_fonction);                          (*l_base_liste) = l_element_courant;
                         (*s_fonction).nombre_arguments = nombre_arguments;  
                           if ((s_fonction = malloc(sizeof(struct_fonction)))
                         (*(*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 =                          if (((*s_fonction).nom_fonction = (unsigned char *)
                                 d_es_allocation_memoire;                                  malloc((strlen(chaine_fonction) + 1) *
                         return(NULL);                                  sizeof(unsigned char))) == NULL)
                     }                          {
                               (*s_etat_processus).erreur_systeme =
                     sprintf(chaine_centrale, "'%s' %s", chaine_arguments,                                      d_es_allocation_memoire;
                             chaine_fonction);                              return(NULL);
                     drapeau_modification = d_vrai;                          }
   
                     free(chaine_arguments);                          strcpy((*s_fonction).nom_fonction, chaine_fonction);
                     free(chaine_fonction);                          (*s_fonction).nombre_arguments = nombre_arguments;
                 }  
                 else if ((chaine_centrale[1] == '+') ||                          (*(*l_base_liste)).donnee = (void *) s_fonction;
                         (chaine_centrale[1] == '-'))                      }
                 {  
                     if (chaine_centrale[1] == '-')                      if ((chaine_centrale = (unsigned char *) malloc((strlen(
                     {                              chaine_arguments) + 1 + strlen(chaine_fonction)
                         tampon = chaine_centrale;                              + 1 + 2) * sizeof(unsigned char))) == NULL)
                       {
                         if ((chaine_centrale = (unsigned char *) malloc(                          (*s_etat_processus).erreur_systeme =
                                 (strlen(tampon) + 5) * sizeof(unsigned char)))                                  d_es_allocation_memoire;
                                 == NULL)                          return(NULL);
                         {                      }
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;                      sprintf(chaine_centrale, "'%s' %s", chaine_arguments,
                             return(NULL);                              chaine_fonction);
                         }                      drapeau_modification = d_vrai;
   
                         tampon[strlen(tampon) - 1] = d_code_fin_chaine;                      free(chaine_arguments);
                         sprintf(chaine_centrale, "'NEG(%s)'", &(tampon[2]));                      free(chaine_fonction);
                         fin_zone_algebrique += 5;                  }
                         drapeau_modification = d_vrai;                  else if ((chaine_centrale[1] == '+') ||
                           (chaine_centrale[1] == '-'))
                         free(tampon);                  {
                     }                      if (chaine_centrale[1] == '-')
                     else                      {
                     {                          tampon = chaine_centrale;
                         tampon = chaine_centrale;  
                           if ((chaine_centrale = (unsigned char *) malloc(
                         if ((chaine_centrale = (unsigned char *) malloc(                                  (strlen(tampon) + 5) * sizeof(unsigned char)))
                                 (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);                          }
                         }  
                           tampon[strlen(tampon) - 1] = d_code_fin_chaine;
                         tampon[strlen(tampon) - 1] = d_code_fin_chaine;                          sprintf(chaine_centrale, "'NEG(%s)'", &(tampon[2]));
                         sprintf(chaine_centrale, "'RELAX(%s)'", &(tampon[2]));                          fin_zone_algebrique += 5;
                         fin_zone_algebrique += 7;                          drapeau_modification = d_vrai;
                         drapeau_modification = d_vrai;  
                           free(tampon);
                         free(tampon);                      }
                     }                      else
                 }                      {
                           tampon = chaine_centrale;
                 if ((chaine_travail = (unsigned char *) malloc(  
                         (strlen(chaine_gauche) + strlen(chaine_centrale) +                          if ((chaine_centrale = (unsigned char *) malloc(
                         strlen(chaine_droite) + 1 + 2) * sizeof(unsigned char)))                                  (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);
                 }                          }
   
                 sprintf(chaine_travail, "%s %s %s", chaine_gauche,                          tampon[strlen(tampon) - 1] = d_code_fin_chaine;
                         chaine_centrale, chaine_droite);                          sprintf(chaine_centrale, "'RELAX(%s)'", &(tampon[2]));
                           fin_zone_algebrique += 7;
                 free(chaine_gauche);                          drapeau_modification = d_vrai;
                 free(chaine_centrale);  
                 free(chaine_droite);                          free(tampon);
             }                      }
                   }
             i = fin_zone_algebrique + 1;  
         } while((drapeau_debut_zone_valide == d_vrai)                  if ((chaine_travail = (unsigned char *) malloc(
                 && (drapeau_fin_zone_valide == d_vrai));                          (strlen(chaine_gauche) + strlen(chaine_centrale) +
                           strlen(chaine_droite) + 1 + 2) * sizeof(unsigned char)))
         for(longueur_chaine = strlen(chaine_travail),                          == NULL)
                 i = nombre_apostrophes = 0; i < longueur_chaine;                  {
                 nombre_apostrophes += (chaine_travail[i++] == '\'') ? 1 : 0);                      (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
         if (nombre_apostrophes != 0)                      return(NULL);
         {                  }
             priorite = 1;  
                   sprintf(chaine_travail, "%s %s %s", chaine_gauche,
             do                          chaine_centrale, chaine_droite);
             {  
                 drapeau_priorite_entierement_traitee = d_vrai;                  free(chaine_gauche);
                   free(chaine_centrale);
                 i = 0;                  free(chaine_droite);
                 while((chaine_travail[i] != '\'') && (chaine_travail[i] != 0))              }
                 {  
                     i++;              i = fin_zone_algebrique + 1;
                 }          } while((drapeau_debut_zone_valide == d_vrai)
                   && (drapeau_fin_zone_valide == d_vrai));
                 if (chaine_travail[i] == 0)  
                 {          for(longueur_chaine = (integer8) strlen(chaine_travail),
                     i = 0;                  i = nombre_apostrophes = 0; i < longueur_chaine;
                 }                  nombre_apostrophes += (chaine_travail[i++] == '\'') ? 1 : 0);
   
                 j = i + 1;          if (nombre_apostrophes != 0)
                 while((chaine_travail[j] != '\'') && (chaine_travail[j] != 0))          {
                 {              priorite = 1;
                     j++;  
                 }              do
               {
                 if (chaine_travail[j] == 0)                  drapeau_priorite_entierement_traitee = d_vrai;
                 {  
                     j = 0;                  i = 0;
                 }                  while((chaine_travail[i] != '\'') && (chaine_travail[i] != 0))
                   {
                 if ((chaine_travail[i] != 0) && (j != 0))                      i++;
                 {                  }
                     chaine_gauche = purification_chaine(  
                             extraction_chaine(chaine_travail, 1, i));                  if (chaine_travail[i] == 0)
                     chaine_centrale = purification_chaine(                  {
                             extraction_chaine(chaine_travail,                      i = 0;
                             i + 1, j + 1));                  }
                     chaine_droite = purification_chaine(  
                             extraction_chaine(chaine_travail, j + 2,                  j = i + 1;
                             strlen(chaine_travail)));                  while((chaine_travail[j] != '\'') && (chaine_travail[j] != 0))
                   {
                     if ((chaine_gauche == NULL) || (chaine_centrale == NULL) ||                      j++;
                             (chaine_droite == NULL))                  }
                     {  
                         (*s_etat_processus).erreur_systeme =                  if (chaine_travail[j] == 0)
                                 d_es_allocation_memoire;                  {
                         return(NULL);                      j = 0;
                     }                  }
   
                     drapeau_elimination_parentheses = d_vrai;                  if ((chaine_travail[i] != 0) && (j != 0))
                   {
                     if ((longueur_tampon = strlen(chaine_centrale)) != 0)                      chaine_gauche = purification_chaine(
                     {                              extraction_chaine(chaine_travail, 1, i));
                         niveau = 0;                      chaine_centrale = purification_chaine(
                               extraction_chaine(chaine_travail,
                         for(i = 1; i < longueur_tampon - 1; i++)                              i + 1, j + 1));
                         {                      chaine_droite = purification_chaine(
                             if (chaine_centrale[i] == '(')                              extraction_chaine(chaine_travail, j + 2,
                             {                              ((integer8) strlen(chaine_travail))));
                                 niveau++;  
                             }                      if ((chaine_gauche == NULL) || (chaine_centrale == NULL) ||
                               (chaine_droite == NULL))
                             if ((niveau == 0) || ((((test_cfsf(s_etat_processus,                      {
                                     48) == d_vrai) && (chaine_centrale[i] ==                          (*s_etat_processus).erreur_systeme =
                                     '.')) || ((test_cfsf(s_etat_processus, 48)                                  d_es_allocation_memoire;
                                     == d_faux) && (chaine_centrale[i] == ',')))                          return(NULL);
                                     && (niveau == 1)))                      }
                             {  
                                 drapeau_elimination_parentheses = d_faux;                      drapeau_elimination_parentheses = d_vrai;
                             }  
                       if ((longueur_tampon = ((integer8) strlen(chaine_centrale)))
                             if (chaine_centrale[i] == ')')                              != 0)
                             {                      {
                                 niveau--;                          niveau = 0;
                             }  
                         }                          for(i = 1; i < longueur_tampon - 1; i++)
                           {
                         if (drapeau_elimination_parentheses == d_vrai)                              if (chaine_centrale[i] == '(')
                         {                              {
                             if ((tampon = (unsigned char *) malloc(                                  niveau++;
                                     ((longueur_tampon = strlen(                              }
                                     chaine_centrale)) + 1) * sizeof(  
                                     unsigned char))) == NULL)                              if ((niveau == 0) || ((((test_cfsf(s_etat_processus,
                             {                                      48) == d_vrai) && (chaine_centrale[i] ==
                                 (*s_etat_processus).erreur_systeme =                                      '.')) || ((test_cfsf(s_etat_processus, 48)
                                         d_es_allocation_memoire;                                      == d_faux) && (chaine_centrale[i] == ',')))
                                 return(NULL);                                      && (niveau == 1)))
                             }                              {
                                   drapeau_elimination_parentheses = d_faux;
                             chaine_centrale[longueur_tampon - 2] =                              }
                                     d_code_fin_chaine;  
                             sprintf(tampon, "'%s'", &(chaine_centrale[2]));                              if (chaine_centrale[i] == ')')
                             free(chaine_centrale);                              {
                             chaine_centrale = tampon;                                  niveau--;
                             drapeau_modification = d_vrai;                              }
                         }                          }
                     }  
                           if (drapeau_elimination_parentheses == d_vrai)
                     if ((tampon = (unsigned char *) malloc(sizeof(                          {
                             unsigned char))) == NULL)                              if ((tampon = (unsigned char *) malloc(((size_t)
                     {                                      ((longueur_tampon = (integer8) strlen(
                         (*s_etat_processus).erreur_systeme =                                      chaine_centrale)) + 1)) * sizeof(
                                 d_es_allocation_memoire;                                      unsigned char))) == NULL)
                         return(NULL);                              {
                     }                                  (*s_etat_processus).erreur_systeme =
                                           d_es_allocation_memoire;
                     tampon[0] = d_code_fin_chaine;                                  return(NULL);
                     longueur_chaine = strlen(chaine_centrale);                              }
                     niveau = 0;  
                     k = strlen(chaine_centrale) - 1;                              chaine_centrale[longueur_tampon - 2] =
                     fin_boucle_extraction = d_faux;                                      d_code_fin_chaine;
                               sprintf(tampon, "'%s'", &(chaine_centrale[2]));
                     while((k >= 0) && (fin_boucle_extraction ==                              free(chaine_centrale);
                             d_faux))                              chaine_centrale = tampon;
                     {                              drapeau_modification = d_vrai;
                         t0 = ((size_t) k < strlen(chaine_centrale))                          }
                                 ? chaine_centrale[k + 1] : ' ';                      }
                         t1 = chaine_centrale[k];  
                         t2 = (k < 1) ? ' ' : chaine_centrale[k - 1];                      if ((tampon = (unsigned char *) malloc(sizeof(
                         t3 = (k < 2) ? ' ' : chaine_centrale[k - 2];                              unsigned char))) == NULL)
                         t4 = (k < 3) ? ' ' : chaine_centrale[k - 3];                      {
                           (*s_etat_processus).erreur_systeme =
                         if ((t0 >= 'a') && (t0 <= 'z'))                                  d_es_allocation_memoire;
                         {                          return(NULL);
                             t0 = t0 + ('A' - 'a');                      }
                         }  
                       tampon[0] = d_code_fin_chaine;
                         if ((t1 >= 'a') && (t1 <= 'z'))                      longueur_chaine = (integer8) strlen(chaine_centrale);
                         {                      k = ((integer8) strlen(chaine_centrale)) - 1;
                             t1 = t1 + ('A' - 'a');                      niveau = 0;
                         }                      fin_boucle_extraction = d_faux;
   
                         if ((t2 >= 'a') && (t2 <= 'z'))                      while((k >= 0) && (fin_boucle_extraction == d_faux))
                         {                      {
                             t2 = t2 + ('A' - 'a');                          t0 = (k < ((integer8) strlen(chaine_centrale)))
                         }                                  ? chaine_centrale[k + 1] : ' ';
                           t1 = chaine_centrale[k];
                         if ((t3 >= 'a') && (t3 <= 'z'))                          t2 = (k < 1) ? ' ' : chaine_centrale[k - 1];
                         {                          t3 = (k < 2) ? ' ' : chaine_centrale[k - 2];
                             t3 = t3 + ('A' - 'a');                          t4 = (k < 3) ? ' ' : chaine_centrale[k - 3];
                         }  
                           if ((t0 >= 'a') && (t0 <= 'z'))
                         if ((t4 >= 'a') && (t4 <= 'z'))                          {
                         {                              t0 = t0 + ('A' - 'a');
                             t4 = t4 + ('A' - 'a');                          }
                         }  
                           if ((t1 >= 'a') && (t1 <= 'z'))
                         if (t1 == '(')                          {
                         {                              t1 = t1 + ('A' - 'a');
                             niveau++;                          }
                         }  
                           if ((t2 >= 'a') && (t2 <= 'z'))
                         if (niveau == 0)                          {
                         {                              t2 = t2 + ('A' - 'a');
                             prologue = purification_chaine(                          }
                                     extraction_chaine(chaine_centrale, 1, k));  
                             epilogue = purification_chaine(                          if ((t3 >= 'a') && (t3 <= 'z'))
                                     extraction_chaine(chaine_centrale,                          {
                                     k + 2, longueur_chaine));                              t3 = t3 + ('A' - 'a');
                           }
                             if ((prologue == NULL) || (epilogue == NULL))  
                             {                          if ((t4 >= 'a') && (t4 <= 'z'))
                                 (*s_etat_processus).erreur_systeme =                          {
                                         d_es_allocation_memoire;                              t4 = t4 + ('A' - 'a');
                                 return(NULL);                          }
                             }  
                           if (t1 == '(')
     /*                          {
      * Priorité = 1 : traitement des fonctions les plus prioritaires                              niveau++;
      */                          }
   
                             if (((priorite == 4) && (((t1 == '<') && (t0 != '=')                          if (niveau == 0)
                                     && (t2 != '=')) || ((t1 == '>') &&                          {
                                     (t0 != '=') && (t2 != '=')) ||                              prologue = purification_chaine(
                                     ((t1 == '=') && (t0 != '=') && (t0 != '<')                                      extraction_chaine(chaine_centrale, 1, k));
                                     && (t0 != '>') && (t2 != '<') && (t2 != '>')                              epilogue = purification_chaine(
                                     && (t2 != '=')))) ||                                      extraction_chaine(chaine_centrale,
                                     ((t1 == '+') && (priorite == 5) &&                                      k + 2, longueur_chaine));
                                     (t2 != '\'') && (!(((t2 == '(')  
                                     || (t2 == '\'') || (t2 == 'e')                              if ((prologue == NULL) || (epilogue == NULL))
                                     || (t2 == 'E')) && (((t3 >= '0')                              {
                                     && (t3 <= '9')) || (t3 == '.'))))) ||                                  (*s_etat_processus).erreur_systeme =
                                     ((t1 == '-') && (priorite == 6) &&                                          d_es_allocation_memoire;
                                     (t2 != '\'') && (!(((t2 == '(')                                  return(NULL);
                                     || (t2 == '\'') || (t2 == 'e')                              }
                                     || (t2 == 'E')) && (((t3 >= '0')  
                                     && (t3 <= '9')) || (t3 == '.')))))      /*
                                     || ((t1 == '*') && (priorite == 7))       * Priorité = 1 : traitement des fonctions les plus prioritaires
                                     || ((t1 == '/') && (priorite == 8)) ||       */
                                     ((t1 == '^') && (priorite == 9)))  
                             {                              if (((priorite == 4) && (((t1 == '<') && (t0 != '=')
                                 drapeau_priorite_entierement_traitee = d_faux;                                      && (t2 != '=')) || ((t1 == '>') &&
                                 fin_boucle_extraction = d_vrai;                                      (t0 != '=') && (t2 != '=')) ||
                                       ((t1 == '=') && (t0 != '=') && (t0 != '<')
                                 free(tampon);                                      && (t0 != '>') && (t2 != '<') && (t2 != '>')
                                       && (t2 != '=')))) ||
                                 if ((tampon = (unsigned char *)                                      ((t1 == '+') && (priorite == 5) &&
                                         malloc((strlen(prologue) +                                      (t2 != '\'') && (!(((t2 == '(')
                                         strlen(epilogue) + 6) *                                      || (t2 == '\'') || (t2 == 'e')
                                         sizeof(unsigned char))) == NULL)                                      || (t2 == 'E')) && (((t3 >= '0')
                                 {                                      && (t3 <= '9')) || (t3 == '.'))))) ||
                                     (*s_etat_processus).erreur_systeme =                                      ((t1 == '-') && (priorite == 6) &&
                                             d_es_allocation_memoire;                                      (t2 != '\'') && (!(((t2 == '(')
                                     return(NULL);                                      || (t2 == '\'') || (t2 == 'e')
                                 }                                      || (t2 == 'E')) && (((t3 >= '0')
                                       && (t3 <= '9')) || (t3 == '.')))))
                                 sprintf(tampon, "%s' '%s %c",                                      || ((t1 == '*') && (priorite == 7))
                                         prologue, epilogue, t1);                                      || ((t1 == '/') && (priorite == 8)) ||
                                 drapeau_modification = d_vrai;                                      ((t1 == '^') && (priorite == 9)))
                             }                              {
                             else if (((priorite == 4) && (((t1 == '<') &&                                  drapeau_priorite_entierement_traitee = d_faux;
                                     (t2 == '=')) || ((t1 == '=') &&                                  fin_boucle_extraction = d_vrai;
                                     (t2 == '<')) || ((t1 == '>') &&  
                                     (t2 == '<')) || (((t1 == '>') &&                                  free(tampon);
                                     (t2 == '=')) || ((t1 == '=') &&  
                                     (t2 == '>')) || ((t1 == '=') &&                                  if ((tampon = (unsigned char *)
                                     (t2 == '='))))) || ((priorite == 1) &&                                          malloc((strlen(prologue) +
                                     (t1 == 'R') && (t2 == 'O') && (t3 == ' ')                                          strlen(epilogue) + 6) *
                                     && (t0 == ' ')))                                          sizeof(unsigned char))) == NULL)
                             {                                  {
                                 drapeau_priorite_entierement_traitee = d_faux;                                      (*s_etat_processus).erreur_systeme =
                                 fin_boucle_extraction = d_vrai;                                              d_es_allocation_memoire;
                                       return(NULL);
                                 free(tampon);                                  }
   
                                 if ((tampon = (unsigned char *)                                  sprintf(tampon, "%s' '%s %c",
                                         malloc((strlen(prologue) +                                          prologue, epilogue, t1);
                                         strlen(epilogue) + 6) *                                  drapeau_modification = d_vrai;
                                         sizeof(unsigned char))) == NULL)                              }
                                 {                              else if (((priorite == 4) && (((t1 == '<') &&
                                     (*s_etat_processus).erreur_systeme =                                      (t2 == '=')) || ((t1 == '=') &&
                                             d_es_allocation_memoire;                                      (t2 == '<')) || ((t1 == '>') &&
                                     return(NULL);                                      (t2 == '<')) || (((t1 == '>') &&
                                 }                                      (t2 == '=')) || ((t1 == '=') &&
                                       (t2 == '>')) || ((t1 == '=') &&
                                 prologue[strlen(prologue) - 1] =                                      (t2 == '='))))) || ((priorite == 1) &&
                                         d_code_fin_chaine;                                      (t1 == 'R') && (t2 == 'O') && (t3 == ' ')
                                       && (t0 == ' ')))
                                 sprintf(tampon, "%s' '%s %c%c", prologue,                              {
                                         epilogue, t2, t1);                                  drapeau_priorite_entierement_traitee = d_faux;
                                 drapeau_modification = d_vrai;                                  fin_boucle_extraction = d_vrai;
                             }  
                             else if (((priorite == 1) && (t4 == ' ') &&                                  free(tampon);
                                     (t3 == 'X') && (t2 == 'O') && (t1 == 'R')  
                                     && (t0 == ' ')) || ((priorite == 2) &&                                  if ((tampon = (unsigned char *)
                                     (t4 == ' ') && (t3 == 'A') && (t2 == 'N')                                          malloc((strlen(prologue) +
                                     && (t1 == 'D') && (t0 == ' ')))                                          strlen(epilogue) + 6) *
                             {                                          sizeof(unsigned char))) == NULL)
                                 drapeau_priorite_entierement_traitee = d_faux;                                  {
                                 fin_boucle_extraction = d_vrai;                                      (*s_etat_processus).erreur_systeme =
                                               d_es_allocation_memoire;
                                 free(tampon);                                      return(NULL);
                                   }
                                 if ((tampon = (unsigned char *)  
                                         malloc((strlen(prologue) +                                  prologue[strlen(prologue) - 1] =
                                         strlen(epilogue) + 5) *                                          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')
                                 prologue[strlen(prologue) - 3] =                                      && (t0 == ' ')) || ((priorite == 2) &&
                                         d_code_fin_chaine;                                      (t4 == ' ') && (t3 == 'A') && (t2 == 'N')
                                       && (t1 == 'D') && (t0 == ' ')))
                                 sprintf(tampon, "%s' '%s %c%c%c", prologue,                              {
                                         epilogue, t3, t2, t1);                                  drapeau_priorite_entierement_traitee = d_faux;
                                 drapeau_modification = d_vrai;                                  fin_boucle_extraction = d_vrai;
                             }  
                                   free(tampon);
                             free(prologue);  
                             free(epilogue);                                  if ((tampon = (unsigned char *)
                         }                                          malloc((strlen(prologue) +
                                           strlen(epilogue) + 5) *
                         if (t1 == ')')                                          sizeof(unsigned char))) == NULL)
                         {                                  {
                             niveau--;                                      (*s_etat_processus).erreur_systeme =
                         }                                              d_es_allocation_memoire;
                                       return(NULL);
                         k--;                                  }
                     }  
                                   prologue[strlen(prologue) - 3] =
                     if (drapeau_priorite_entierement_traitee == d_vrai)                                          d_code_fin_chaine;
                     {  
                         free(tampon);                                  sprintf(tampon, "%s' '%s %c%c%c", prologue,
                                           epilogue, t3, t2, t1);
                         if ((tampon = (unsigned char *) malloc(                                  drapeau_modification = d_vrai;
                                 (strlen(chaine_centrale) + 1) *                              }
                                 sizeof(unsigned char))) == NULL)  
                         {                              free(prologue);
                             (*s_etat_processus).erreur_systeme =                              free(epilogue);
                                     d_es_allocation_memoire;                          }
                             return(NULL);  
                         }                          if (t1 == ')')
                           {
                         strcpy(tampon, chaine_centrale);                              niveau--;
                     }                          }
   
                     free(chaine_centrale);                          k--;
                     free(chaine_travail);                      }
   
                     if ((chaine_travail = (unsigned char *) malloc(                      if (drapeau_priorite_entierement_traitee == d_vrai)
                             (strlen(chaine_gauche) + strlen(tampon)                      {
                             + strlen(chaine_droite) + 1 + 2)                          free(tampon);
                             * sizeof(unsigned char))) == NULL)  
                     {                          if ((tampon = (unsigned char *) malloc(
                         (*s_etat_processus).erreur_systeme =                                  (strlen(chaine_centrale) + 1) *
                                 d_es_allocation_memoire;                                  sizeof(unsigned char))) == NULL)
                         return(NULL);                          {
                     }                              (*s_etat_processus).erreur_systeme =
                                       d_es_allocation_memoire;
                     sprintf(chaine_travail, "%s %s %s", chaine_gauche,                              return(NULL);
                             tampon, chaine_droite);                          }
   
                     free(chaine_gauche);                          strcpy(tampon, chaine_centrale);
                     free(tampon);                      }
                     free(chaine_droite);  
                 }                      free(chaine_centrale);
                       free(chaine_travail);
                 if (drapeau_priorite_entierement_traitee == d_vrai)  
                 {                      if ((chaine_travail = (unsigned char *) malloc(
                     priorite++;                              (strlen(chaine_gauche) + strlen(tampon)
                 }                              + strlen(chaine_droite) + 1 + 2)
                 else                              * sizeof(unsigned char))) == NULL)
                 {                      {
                     priorite = 1;                          (*s_etat_processus).erreur_systeme =
                 }                                  d_es_allocation_memoire;
             } while(priorite < 10);                          return(NULL);
                       }
             /*  
              * Aucune modification n'a pu être faite sur l'expression                      sprintf(chaine_travail, "%s %s %s", chaine_gauche,
              * algébrique.                              tampon, chaine_droite);
              */  
                       free(chaine_gauche);
             if (drapeau_modification == d_faux)                      free(tampon);
             {                      free(chaine_droite);
                 free(chaine_travail);                  }
   
                 (*s_etat_processus).erreur_execution = d_ex_syntaxe;                  if (drapeau_priorite_entierement_traitee == d_vrai)
                 return(NULL);                  {
             }                      priorite++;
         }                  }
     } while(nombre_apostrophes != 0);                  else
                   {
     tampon = chaine_travail;                      priorite = 1;
                   }
     if ((chaine_travail = (unsigned char *) malloc((strlen(tampon) + 1 + 6) *              } while(priorite < 10);
             sizeof(unsigned char))) == NULL)  
     {              /*
         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;               * Aucune modification n'a pu être faite sur l'expression
         return(NULL);               * algébrique.
     }               */
   
     sprintf(chaine_travail, "<< %s >>", tampon);              if (drapeau_modification == d_faux)
     free(tampon);              {
                   free(chaine_travail);
     return(chaine_travail);  
 }                  (*s_etat_processus).erreur_execution = d_ex_syntaxe;
                   return(NULL);
               }
 unsigned char *          }
 purification_chaine(unsigned char *chaine)      } while(nombre_apostrophes != 0);
 {  
     long                        i;      tampon = chaine_travail;
     long                        j;  
       if ((chaine_travail = (unsigned char *) malloc((strlen(tampon) + 1 + 6) *
     unsigned char               *chaine_purifiee;              sizeof(unsigned char))) == NULL)
       {
     i = 0;          (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
     j = strlen(chaine) - 1;          return(NULL);
       }
     while(chaine[i] == ' ')  
     {      sprintf(chaine_travail, "<< %s >>", tampon);
         if ((i++) > j)      free(tampon);
         {  
             i = j;      return(chaine_travail);
             break;  }
         }  
     }  
      unsigned char *
     if (j >= 0)  purification_chaine(unsigned char *chaine)
     {  {
         while(chaine[j] == ' ')      integer8                    i;
         {      integer8                    j;
             if ((--j) < 0)  
             {      unsigned char               *chaine_purifiee;
                 j = 0;  
                 break;      i = 0;
             }      j = ((integer8) strlen(chaine)) - 1;
         }  
     }      while(chaine[i] == ' ')
       {
     chaine_purifiee = extraction_chaine(chaine, i + 1, j + 1);          if ((i++) > j)
     free(chaine);          {
               i = j;
     return(chaine_purifiee);              break;
 }          }
       }
       
 logical1      if (j >= 0)
 test_expression_rpn(unsigned char *chaine)      {
 {          while(chaine[j] == ' ')
     long                    j;          {
               if ((--j) < 0)
     unsigned char           t;              {
     unsigned char           t0;                  j = 0;
     unsigned char           t1;                  break;
     unsigned char           t2;              }
     unsigned char           t3;          }
     unsigned char           t4;      }
   
     unsigned long           compteur;      chaine_purifiee = extraction_chaine(chaine, i + 1, j + 1);
     unsigned long           longueur_chaine;      free(chaine);
     unsigned long           i;  
     unsigned long           niveau;      return(chaine_purifiee);
   }
     /*  
      * On teste d'abord la chaîne pour vérifier qu'il n'y a pas de fonction  
      * utilisant la notation infixe.  logical1
      */  test_expression_rpn(unsigned char *chaine)
   {
     compteur = 0;      int                     t;
       int                     t0;
     for(longueur_chaine = strlen(chaine), i = 1; i < longueur_chaine; i++)      int                     t1;
     {      int                     t2;
         /*      int                     t3;
          * On saute les chaînes de caractères      int                     t4;
          */  
       integer8                compteur;
         if (chaine[i - 1] == '"')      integer8                longueur_chaine;
         {      integer8                i;
             i++;      integer8                j;
             while(chaine[i - 1] != '"')      integer8                niveau;
             {  
                 i++;      /*
             }       * On teste d'abord la chaîne pour vérifier qu'il n'y a pas de fonction
         }       * utilisant la notation infixe.
        */
         j = ((long) i) - 2;  
         t0 = (i >= 2) ? chaine[i - 2] : '?';      compteur = 0;
         t1 = chaine[i - 1];  
         t2 = chaine[i];      for(longueur_chaine = ((integer8) strlen(chaine)), i = 1;
         t3 = ((i + 1) < strlen(chaine)) ? chaine[i + 1] : '?';              i < longueur_chaine; i++)
         t4 = ((i + 2) < strlen(chaine)) ? chaine[i + 2] : '?';      {
           /*
         /*           * On saute les chaînes de caractères
          * Ouverture d'une parenthèse signalant une fonction           */
          */  
           if (chaine[i - 1] == '"')
         if ((t1 != '+') && (t1 != '-') && (t1 != '*') && (t1 != '/')          {
                 && (t1 != '\'') && (t2 == '('))              i++;
         {              while(chaine[i - 1] != '"')
             niveau = 0;              {
                   i++;
             do              }
             {          }
                 if ((t = chaine[i++]) == '(')  
                 {          j = i - 2;
                     niveau++;          t0 = (i >= 2) ? chaine[i - 2] : '?';
                 }          t1 = chaine[i - 1];
                 else if (t == ')')          t2 = chaine[i];
                 {          t3 = ((i + 1) < ((integer8) strlen(chaine))) ? chaine[i + 1] : '?';
                     niveau--;          t4 = ((i + 2) < ((integer8) strlen(chaine))) ? chaine[i + 2] : '?';
                 }  
             } while(((niveau != 0) || (t != ')')) && (i < longueur_chaine));          /*
            * Ouverture d'une parenthèse signalant une fonction
             if (i < longueur_chaine)           */
             {  
                 t2 = chaine[i];          if ((t1 != '+') && (t1 != '-') && (t1 != '*') && (t1 != '/')
             }                  && (t1 != '\'') && (t2 == '('))
             else          {
             {              niveau = 0;
                 t2 = ' ';  
             }              do
         }              {
                   if ((t = chaine[i++]) == '(')
         /*                  {
          * Signalement de l'une des quatre opérations et des fonctions                      niveau++;
          * infixes traditionnelles                  }
          */                  else if (t == ')')
                   {
         if ((t2 == '+') || (t2 == '-') || (t2 == '*') || (t2 == '/')                      niveau--;
                 || (t2 == '^') || (t2 == '<') || (t2 == '>') || (t2 == '=')                  }
                 || ((t0 == ' ') && ((t1 == 'A') || (t1 == 'a')) &&              } while(((niveau != 0) || (t != ')')) && (i < longueur_chaine));
                 ((t2 == 'N') || (t2 == 'n')) && ((t3 == 'D') || (t3 == 'd'))  
                 && (t4 == ' ')) ||              if (i < longueur_chaine)
                 ((t0 == ' ') && ((t1 == 'O') || (t1 == 'o')) &&              {
                 ((t2 == 'R') || (t2 == 'r')) && (t3 == ' ')) ||                  t2 = chaine[i];
                 ((t0 == ' ') && ((t1 == 'X') || (t1 == 'x')) &&              }
                 ((t2 == 'O') || (t2 == 'o')) && ((t3 == 'R') || (t3 == 'r'))              else
                 && (t4 == ' ')))              {
         {                  t2 = ' ';
             compteur++;              }
         }          }
   
         /*          /*
          * Signalement d'un nombre           * Signalement de l'une des quatre opérations et des fonctions
          */           * infixes traditionnelles
            */
         if (((t2 == '+') || (t2 == '-')) && ((t1 == '(')  
                 || ((t1 == 'e') || (t1 == 'E') || (t1 == '\'')))          if ((t2 == '+') || (t2 == '-') || (t2 == '*') || (t2 == '/')
                 && (((t0 >= '0') && (t0 <= '9')) || (t0 == '.')))                  || (t2 == '^') || (t2 == '<') || (t2 == '>') || (t2 == '=')
         {                  || ((t0 == ' ') && ((t1 == 'A') || (t1 == 'a')) &&
             compteur--;                  ((t2 == 'N') || (t2 == 'n')) && ((t3 == 'D') || (t3 == 'd'))
         }                  && (t4 == ' ')) ||
         else if (((t2 == '+') || (t2 == '-')) && (t1 == '\'') && (j < 0)                  ((t0 == ' ') && ((t1 == 'O') || (t1 == 'o')) &&
                 && (((t3 >= '0') && (t3 <= '9')) || (t3 == '.')))                  ((t2 == 'R') || (t2 == 'r')) && (t3 == ' ')) ||
         {                  ((t0 == ' ') && ((t1 == 'X') || (t1 == 'x')) &&
             compteur--;                  ((t2 == 'O') || (t2 == 'o')) && ((t3 == 'R') || (t3 == 'r'))
         }                  && (t4 == ' ')))
     }          {
               compteur++;
     return(((compteur == 0) && (test_fonction(chaine) == d_faux))          }
             ? d_vrai : d_faux);  
 }          /*
            * Signalement d'un nombre
            */
 logical1  
 test_fonction(unsigned char *chaine)          if (((t2 == '+') || (t2 == '-')) && ((t1 == '(')
 {                  || ((t1 == 'e') || (t1 == 'E') || (t1 == '\'')))
     logical1                drapeau_fonction;                  && (((t0 >= '0') && (t0 <= '9')) || (t0 == '.')))
           {
     unsigned char           t;              compteur--;
           }
     unsigned long           compteur;          else if (((t2 == '+') || (t2 == '-')) && (t1 == '\'') && (j < 0)
     unsigned long           i;                  && (((t3 >= '0') && (t3 <= '9')) || (t3 == '.')))
     unsigned long           longueur_chaine;          {
               compteur--;
     longueur_chaine = strlen(chaine);          }
     i = 1;      }
   
     while(((t = chaine[i]) != '(') && (i < (longueur_chaine - 1)))      return(((compteur == 0) && (test_fonction(chaine) == d_faux))
     {              ? d_vrai : d_faux);
         if ((t == '+') || (t == '-') || (t == '*') ||  }
                 (t == '/') || (t == '^') || (t == '>') || (t == '<') ||  
                 (t == '='))  
         {  logical1
             i = longueur_chaine - 1;  test_fonction(unsigned char *chaine)
         }  {
         else      logical1                drapeau_fonction;
         {  
             i++;      int                     t;
         }  
     }      integer8                compteur;
       integer8                i;
     compteur = 1;      integer8                longueur_chaine;
     drapeau_fonction = ((i < (longueur_chaine - 1)) && (i != 1))  
             ? d_vrai : d_faux;      longueur_chaine = (integer8) strlen(chaine);
       i = 1;
     for(i++; i < (longueur_chaine - 2); i++)  
     {      while(((t = chaine[i]) != '(') && (i < (longueur_chaine - 1)))
         if ((t = chaine[i]) == '(')      {
         {          if ((t == '+') || (t == '-') || (t == '*') ||
             compteur++;                  (t == '/') || (t == '^') || (t == '>') || (t == '<') ||
         }                  (t == '='))
         else if (t == ')')          {
         {              i = longueur_chaine - 1;
             compteur--;          }
         }          else
           {
         if (compteur == 0)              i++;
         {          }
             drapeau_fonction = d_faux;      }
         }  
     }      compteur = 1;
       drapeau_fonction = ((i < (longueur_chaine - 1)) && (i != 1))
     return drapeau_fonction;              ? d_vrai : d_faux;
 }  
       for(i++; i < (longueur_chaine - 2); i++)
       {
 unsigned char *          if ((t = chaine[i]) == '(')
 extraction_chaine(unsigned char *chaine, unsigned long position_1,          {
         unsigned long position_2)              compteur++;
 {          }
     long                    i;          else if (t == ')')
           {
     unsigned char           *pointeur_ecriture;              compteur--;
     unsigned char           *pointeur_lecture;          }
     unsigned char           *sous_chaine;  
           if (compteur == 0)
     if ((position_1 < 1) || (position_2 < position_1) ||          {
             (position_2 > strlen(chaine)))              drapeau_fonction = d_faux;
     {          }
         if ((sous_chaine = (unsigned char *) malloc(sizeof(unsigned char)))      }
                 == NULL)  
         {      return drapeau_fonction;
             return(NULL);  }
         }  
   
         (*sous_chaine) = d_code_fin_chaine;  unsigned char *
         return(sous_chaine);  extraction_chaine(unsigned char *chaine, integer8 position_1,
     }          integer8 position_2)
   {
     if ((sous_chaine = (unsigned char *)      integer8                i;
             malloc((position_2 - position_1 + 2) * sizeof(unsigned char)))  
             == NULL)      unsigned char           *pointeur_ecriture;
     {      unsigned char           *pointeur_lecture;
         return(NULL);      unsigned char           *sous_chaine;
     }  
       if ((position_1 < 1) || (position_2 < position_1) ||
     pointeur_lecture = &(chaine[position_1 - 1]);              (position_2 > ((integer8) strlen(chaine))))
     pointeur_ecriture = sous_chaine;      {
           if ((sous_chaine = (unsigned char *) malloc(sizeof(unsigned char)))
     for(sous_chaine[i = position_2 - position_1 + 1] = 0; (--i) >= 0;                  == NULL)
             *(pointeur_ecriture++) = *(pointeur_lecture++));          {
               return(NULL);
     return(sous_chaine);          }
 }  
           (*sous_chaine) = d_code_fin_chaine;
 // vim: ts=4          return(sous_chaine);
       }
   
       if ((sous_chaine = (unsigned char *)
               malloc(((size_t) (position_2 - position_1 + 2)) *
               sizeof(unsigned char))) == NULL)
       {
           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.12  
changed lines
  Added in v.1.45


CVSweb interface <joel.bertrand@systella.fr>