Diff for /rpl/src/formateur_fichiers.c between versions 1.51 and 1.52

version 1.51, 2013/03/08 14:55:38 version 1.52, 2013/03/10 17:01:05
Line 19 Line 19
 ================================================================================  ================================================================================
 */  */
   
   #define DEBUG_ERREURS
 #include "rpl-conv.h"  #include "rpl-conv.h"
   
   
Line 42  unsigned char * Line 42  unsigned char *
 formateur_fichier(struct_processus *s_etat_processus, struct_objet *s_objet,  formateur_fichier(struct_processus *s_etat_processus, struct_objet *s_objet,
         struct_objet *s_format, long longueur, long longueur_champ,          struct_objet *s_format, long longueur, long longueur_champ,
         unsigned char format_sortie, unsigned char type,          unsigned char format_sortie, unsigned char type,
         long *longueur_effective, long *recursivite)          long *longueur_effective, long *recursivite, logical1 export_fichier)
 {  {
     /*      /*
      * Traitement du format des fichiers formatés :       * Traitement du format des fichiers formatés :
Line 70  formateur_fichier(struct_processus *s_et Line 70  formateur_fichier(struct_processus *s_et
      *   "real*4", "real*8", ["real*16",]       *   "real*4", "real*8", ["real*16",]
      *   "complex*8", "complex*16", ["complex*32",]       *   "complex*8", "complex*16", ["complex*32",]
      *   "logical*1", "logical*2", "logical*4", logical*8",       *   "logical*1", "logical*2", "logical*4", logical*8",
      *   "character" }       *   "character*n" "character*(*)" }
      */       */
   
     logical1                    autorisation_parenthese;      logical1                    autorisation_parenthese;
     logical1                    format_degenere;      logical1                    format_degenere;
     logical1                    presence_signe;      logical1                    presence_signe;
   
       long                        longueur_chaine_traitee;
   
     struct_liste_chainee        *l_atome;      struct_liste_chainee        *l_atome;
     struct_liste_chainee        *l_element_courant;      struct_liste_chainee        *l_element_courant;
     struct_liste_chainee        *l_element_courant_format;      struct_liste_chainee        *l_element_courant_format;
Line 108  formateur_fichier(struct_processus *s_et Line 110  formateur_fichier(struct_processus *s_et
     unsigned long               nombre_lignes;      unsigned long               nombre_lignes;
   
     integer8                    longueur_liste;      integer8                    longueur_liste;
       integer8                    longueur_reelle_chaine;
     integer8                    longueur_totale;      integer8                    longueur_totale;
     integer8                    masque_binaire;      integer8                    masque_binaire;
     integer8                    position_1;      integer8                    position_1;
Line 861  formateur_fichier(struct_processus *s_et Line 864  formateur_fichier(struct_processus *s_et
                             free(chaine_sauvegarde);                              free(chaine_sauvegarde);
   
                             if ((s_sous_objet = allocation(s_etat_processus,                              if ((s_sous_objet = allocation(s_etat_processus,
                                             CHN)) == NULL)                                      CHN)) == NULL)
                             {                              {
                                 (*s_etat_processus).erreur_systeme =                                  (*s_etat_processus).erreur_systeme =
                                         d_es_allocation_memoire;                                          d_es_allocation_memoire;
Line 892  formateur_fichier(struct_processus *s_et Line 895  formateur_fichier(struct_processus *s_et
                     if (((*s_sous_objet).objet = (void *) formateur_fichier(                      if (((*s_sous_objet).objet = (void *) formateur_fichier(
                             s_etat_processus, (*l_element_courant).donnee,                              s_etat_processus, (*l_element_courant).donnee,
                             s_format, longueur, longueur_champ, format_sortie,                              s_format, longueur, longueur_champ, format_sortie,
                             type, longueur_effective, recursivite)) == NULL)                              type, longueur_effective, recursivite,
                               export_fichier)) == NULL)
                     {                      {
                         (*s_etat_processus).erreur_systeme =                          (*s_etat_processus).erreur_systeme =
                                 d_es_allocation_memoire;                                  d_es_allocation_memoire;
Line 1164  formateur_fichier(struct_processus *s_et Line 1168  formateur_fichier(struct_processus *s_et
                 return(NULL);                  return(NULL);
             }              }
   
             if ((longueur_champ == -1) || (((long) strlen((unsigned char *)              longueur_reelle_chaine = longueur_chaine(s_etat_processus,
                     (*s_objet).objet)) < longueur_champ))                      (unsigned char *) (*s_objet).objet);
   
               if ((longueur_champ == -1) || (longueur_reelle_chaine <
                       longueur_champ))
             {              {
                 chaine = (unsigned char *) malloc((strlen((unsigned char *)                  chaine = (unsigned char *) malloc((strlen((unsigned char *)
                         ((*s_objet).objet)) + 1) * sizeof(unsigned char));                          ((*s_objet).objet)) + 1) * sizeof(unsigned char));
Line 1181  formateur_fichier(struct_processus *s_et Line 1188  formateur_fichier(struct_processus *s_et
             }              }
             else              else
             {              {
                 chaine = (unsigned char *) malloc((longueur_champ + 1)                  longueur_reelle_chaine = pointeur_ieme_caractere(
                         * sizeof(unsigned char));                          s_etat_processus, (unsigned char *)
                           (*s_objet).objet, longueur_champ)
                           - ((unsigned char *) (*s_objet).objet);
   
                 if (chaine == NULL)                  if ((chaine = malloc((longueur_reelle_chaine + 1) *
                           sizeof(unsigned char))) == NULL)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
                             d_es_allocation_memoire;                              d_es_allocation_memoire;
Line 1192  formateur_fichier(struct_processus *s_et Line 1202  formateur_fichier(struct_processus *s_et
                 }                  }
   
                 strncpy(chaine, (unsigned char *) ((*s_objet).objet),                  strncpy(chaine, (unsigned char *) ((*s_objet).objet),
                         longueur_champ);                          longueur_reelle_chaine);
                 chaine[longueur_champ] = d_code_fin_chaine;                  chaine[longueur_reelle_chaine] = d_code_fin_chaine;
             }              }
         }          }
         else if ((*s_objet).type == CPL)          else if ((*s_objet).type == CPL)
Line 1250  formateur_fichier(struct_processus *s_et Line 1260  formateur_fichier(struct_processus *s_et
                 if ((chaine_formatee = formateur_fichier(s_etat_processus,                  if ((chaine_formatee = formateur_fichier(s_etat_processus,
                         (*l_element_courant).donnee, s_format,                          (*l_element_courant).donnee, s_format,
                         longueur, longueur_champ, format_sortie, type,                          longueur, longueur_champ, format_sortie, type,
                         longueur_effective, recursivite)) == NULL)                          longueur_effective, recursivite, export_fichier))
                           == NULL)
                 {                  {
                     return(NULL);                      return(NULL);
                 }                  }
Line 1410  formateur_fichier(struct_processus *s_et Line 1421  formateur_fichier(struct_processus *s_et
                     if ((chaine_formatee = formateur_fichier(s_etat_processus,                      if ((chaine_formatee = formateur_fichier(s_etat_processus,
                             (*l_element_courant).donnee,                              (*l_element_courant).donnee,
                             (*l_element_courant_format).donnee,                              (*l_element_courant_format).donnee,
                             0, 0, ' ', 'F', longueur_effective, recursivite))                              0, 0, ' ', 'F', longueur_effective, recursivite,
                             == NULL)                              export_fichier)) == NULL)
                     {                      {
                         return(NULL);                          return(NULL);
                     }                      }
Line 1583  formateur_fichier(struct_processus *s_et Line 1594  formateur_fichier(struct_processus *s_et
                     if ((chaine_formatee = formateur_fichier(s_etat_processus,                      if ((chaine_formatee = formateur_fichier(s_etat_processus,
                             (*l_element_courant).donnee, s_format,                              (*l_element_courant).donnee, s_format,
                             longueur, longueur_champ, format_sortie, type,                              longueur, longueur_champ, format_sortie, type,
                             longueur_effective, recursivite)) == NULL)                              longueur_effective, recursivite, export_fichier))
                               == NULL)
                     {                      {
                         free(chaine);                          free(chaine);
                         return(NULL);                          return(NULL);
Line 1734  formateur_fichier(struct_processus *s_et Line 1746  formateur_fichier(struct_processus *s_et
                     if ((chaine_formatee = formateur_fichier(s_etat_processus,                      if ((chaine_formatee = formateur_fichier(s_etat_processus,
                             (*l_element_courant).donnee,                              (*l_element_courant).donnee,
                             (*l_element_courant_format).donnee,                              (*l_element_courant_format).donnee,
                             0, 0, ' ', 'F', longueur_effective, recursivite))                              0, 0, ' ', 'F', longueur_effective, recursivite,
                             == NULL)                              export_fichier)) == NULL)
                     {                      {
                         return(NULL);                          return(NULL);
                     }                      }
Line 1898  formateur_fichier(struct_processus *s_et Line 1910  formateur_fichier(struct_processus *s_et
                             (*((struct_tableau *) (*s_objet).objet))                              (*((struct_tableau *) (*s_objet).objet))
                             .elements[i], s_format,                              .elements[i], s_format,
                             longueur, longueur_champ, format_sortie, type,                              longueur, longueur_champ, format_sortie, type,
                             longueur_effective, recursivite)) == NULL)                              longueur_effective, recursivite, export_fichier))
                               == NULL)
                     {                      {
                         return(NULL);                          return(NULL);
                     }                      }
Line 2729  formateur_fichier(struct_processus *s_et Line 2742  formateur_fichier(struct_processus *s_et
          *           *
          * Longueur : (pour l'instruction backspace)           * Longueur : (pour l'instruction backspace)
          *           *
          * 00 XXXXXX                longueur sur 6 bits           * XXXXXXX0                             longueur sur 7 bits
          * 01 000000                longueur sur 16 bits           * XXXX0011 XXXXXXXX XXXX0011           longueur sur 16 bits
          * 10 000000                longueur sur 32 bits           * MSB(1/2) LSB      MSB(2/2)
          * 11 000000                longueur sur 64 bits           * XXXX0101 XXXXXXXX XXXXXXXX XXXX0101  longueur sur 24 bits
          *           * XXXX0111 XXXXXXXX XXXXXXXX XXXXXXXX
          * Exemples :           *          XXXX0111                    longueur sur 32 bits
          * [00 XXXXXX]           * XXXX1001 XXXXXXXX XXXXXXXX XXXXXXXX
          * [01 ----XX][XXXXXXXX][01 XXXXXX]           *          XXXXXXXX XXXX1001           longueur sur 40 bits
          * [10 ----XX][XXXXXXXX][XXXXXXXX][XXXXXXXX][10 XXXXXX]           * XXXX1011 XXXXXXXX XXXXXXXX XXXXXXXX
          * [11 ----XX][XXXXXXXX][XXXXXXXX][XXXXXXXX][XXXXXXXX][XXXXXXXX]           *          XXXXXXXX XXXXXXXX XXXX1011  longueur sur 48 bits
          *         [XXXXXXXX][XXXXXXXX][11 XXXXXX]           * XXXX1101 XXXXXXXX XXXXXXXX XXXXXXXX
            *          XXXXXXXX XXXXXXXX XXXXXXXX
            *          XXXX1101                    longueur sur 56 bits
            * XXXX1111 XXXXXXXX XXXXXXXX XXXXXXXX
            *          XXXXXXXX XXXXXXXX XXXXXXXX
            *          XXXXXXXX XXXX1111           longueur sur 64 bits
          *           *
          * Structures des enregistrements :           * Structures des enregistrements :
          * chaque type de donnée est associé à une en-tête binaire comprenant           * chaque type de donnée est associé à une en-tête binaire comprenant
Line 2870  formateur_fichier(struct_processus *s_et Line 2888  formateur_fichier(struct_processus *s_et
         chaine_formatee = NULL;          chaine_formatee = NULL;
         chaine_sauvegarde = NULL;          chaine_sauvegarde = NULL;
   
         strcpy(base, " ");  
   
         masque_binaire = 0;  
   
         if ((*s_objet).type == ALG)          if ((*s_objet).type == ALG)
         {          {
   
Line 2883  formateur_fichier(struct_processus *s_et Line 2897  formateur_fichier(struct_processus *s_et
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;  
   
             while(l_element_courant != NULL)  
             {  
                 if ((*(*l_element_courant).donnee).type == FCT)  
                 {  
                     if ((strcmp((*((struct_fonction *) (*(*l_element_courant)  
                             .donnee).objet)).nom_fonction, "<<") != 0) &&  
                             (strcmp((*((struct_fonction *)  
                             (*(*l_element_courant)  
                             .donnee).objet)).nom_fonction, ">>") != 0))  
                     {  
                         if ((strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant)  
                                 .donnee).objet)).nom_fonction, "+") == 0) ||  
                                 (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction, "-") == 0) || (strcmp(  
                                 (*((struct_fonction *) (*(*l_element_courant)  
                                 .donnee).objet)).nom_fonction, "*") == 0) ||  
                                 (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 "/") == 0) || (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 "^") == 0) || (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 "<") == 0) || (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 ">") == 0) || (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 "==") == 0) || (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 "<>") == 0) || (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 "<=") == 0) || (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 "=<") == 0) || (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 ">=") == 0) || (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 "=>") == 0))  
                         {  
                             if (depilement(s_etat_processus,  
                                     &((*s_etat_processus)  
                                     .l_base_pile), &s_sous_objet_2) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
   
                             chaine_sauvegarde = (*s_etat_processus)  
                                     .instruction_courante;  
   
                             if (((*s_etat_processus).instruction_courante =  
                                     (unsigned char *) malloc((strlen(  
                                     (unsigned char *) (*s_sous_objet_2).objet)  
                                     + 2 + 1) * sizeof(unsigned char))) == NULL)  
                             {  
                                 (*s_etat_processus).instruction_courante =  
                                         chaine_sauvegarde;  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;  
                                 return(NULL);  
                             }  
   
                             sprintf((*s_etat_processus).instruction_courante,  
                                     "'%s'", (unsigned char *)  
                                     (*s_sous_objet_2).objet);  
   
                             presence_signe = (((*s_etat_processus)  
                                     .instruction_courante[1] == '+')  
                                     || ((*s_etat_processus)  
                                     .instruction_courante[1]  
                                     == '-')) ? d_vrai : d_faux;  
   
                             recherche_type(s_etat_processus);  
   
                             if ((*s_etat_processus).erreur_execution != d_ex)  
                             {  
                                 // Aucune erreur ne peut être renvoyée.  
   
                                 return(NULL);  
                             }  
   
                             if (depilement(s_etat_processus,  
                                     &((*s_etat_processus)  
                                     .l_base_pile), &s_sous_objet_3) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
   
                             free((*s_etat_processus).instruction_courante);  
   
                             (*s_etat_processus).instruction_courante =  
                                     chaine_sauvegarde;  
   
                             autorisation_parenthese = d_faux;  
   
                             if ((*s_sous_objet_3).type == ALG)  
                             {  
                                 l_atome = (struct_liste_chainee *)  
                                         (*s_sous_objet_3).objet;  
                                 chaine_fonction = "";  
                                 nombre_arguments_fonction = 0;  
   
                                 while(l_atome != NULL)  
                                 {  
                                     if ((*(*l_atome).donnee).type == FCT)  
                                     {  
                                         if (strcmp((*((struct_fonction *)  
                                                 (*(*l_atome).donnee).objet))  
                                                 .nom_fonction, ">>") != 0)  
                                         {  
                                             chaine_fonction =  
                                                     (*((struct_fonction *)  
                                                     (*(*l_atome).donnee).objet))  
                                                     .nom_fonction;  
                                             nombre_arguments_fonction =  
                                                     (*((struct_fonction *)  
                                                     (*(*l_atome).donnee).objet))  
                                                     .nombre_arguments;  
                                         }  
                                     }  
   
                                     l_atome = (*l_atome).suivant;  
                                 }  
   
                                 if (strcmp((*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction, "+") == 0)  
                                 {  
                                     if ((strcmp(chaine_fonction, "AND") == 0) ||  
                                             (strcmp(chaine_fonction, "XOR") ==  
                                             0) || (strcmp(chaine_fonction, "OR")  
                                             == 0))  
                                     {  
                                         autorisation_parenthese = d_vrai;  
                                     }  
                                 }  
                                 else if (strcmp((*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction, "-") == 0)  
                                 {  
                                     if (nombre_arguments_fonction != 0)  
                                     {  
                                         autorisation_parenthese = d_faux;  
                                     }  
                                     else  
                                     {  
                                         autorisation_parenthese = d_vrai;  
                                     }  
                                 }  
                                 else if (strcmp((*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction, "*") == 0)  
                                 {  
                                     if ((strcmp(chaine_fonction, "+") == 0) ||  
                                             (strcmp(chaine_fonction, "-") == 0)  
                                             || (strcmp(chaine_fonction, "AND")  
                                             == 0) || (strcmp(chaine_fonction,  
                                             "XOR") == 0) || (strcmp(  
                                             chaine_fonction, "OR") == 0))  
                                     {  
                                         autorisation_parenthese = d_vrai;  
                                     }  
                                 }  
                                 else if (strcmp((*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction, "/") == 0)  
                                 {  
                                     if (nombre_arguments_fonction != 0)  
                                     {  
                                         autorisation_parenthese = d_faux;  
                                     }  
                                     else  
                                     {  
                                         autorisation_parenthese = d_vrai;  
                                     }  
                                 }  
                                 else if ((strcmp((*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction, "^") == 0))  
                                 {  
                                     if (nombre_arguments_fonction != 0)  
                                     {  
                                         autorisation_parenthese = d_faux;  
                                     }  
                                     else  
                                     {  
                                         autorisation_parenthese = d_vrai;  
                                     }  
                                 }  
                             }  
   
                             if ((autorisation_parenthese == d_vrai) ||  
                                     (presence_signe == d_vrai))  
                             {  
                                 chaine_sauvegarde = (unsigned char *)  
                                         (*s_sous_objet_2).objet;  
   
                                 if (((*s_sous_objet_2).objet = (void *)  
                                         malloc((strlen(chaine_sauvegarde) + 2  
                                         + 1) * sizeof(unsigned char))) == NULL)  
                                 {  
                                     (*s_etat_processus).erreur_systeme =  
                                             d_es_allocation_memoire;  
                                     return(NULL);  
                                 }  
   
                                 sprintf((unsigned char *) (*s_sous_objet_2)  
                                         .objet, "(%s)", chaine_sauvegarde);  
                                 free(chaine_sauvegarde);  
                             }  
   
                             liberation(s_etat_processus, s_sous_objet_3);  
   
                             if (depilement(s_etat_processus,  
                                     &((*s_etat_processus)  
                                     .l_base_pile), &s_sous_objet_1) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
   
                             chaine_sauvegarde = (*s_etat_processus)  
                                     .instruction_courante;  
   
                             if (((*s_etat_processus).instruction_courante =  
                                     (unsigned char *) malloc((strlen(  
                                     (unsigned char *) (*s_sous_objet_1).objet)  
                                     + 2 + 1) * sizeof(unsigned char))) == NULL)  
                             {  
                                 (*s_etat_processus).instruction_courante =  
                                         chaine_sauvegarde;  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;  
                                 return(NULL);  
                             }  
   
                             sprintf((*s_etat_processus).instruction_courante,  
                                     "'%s'", (unsigned char *)  
                                     (*s_sous_objet_1).objet);  
   
                             recherche_type(s_etat_processus);  
   
                             if ((*s_etat_processus).erreur_execution != d_ex)  
                             {  
                                 // Aucune erreur ne peut être renvoyée.  
   
                                 return(NULL);  
                             }  
   
                             if (depilement(s_etat_processus,  
                                     &((*s_etat_processus)  
                                     .l_base_pile), &s_sous_objet_3) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
   
                             free((*s_etat_processus).instruction_courante);  
   
                             (*s_etat_processus).instruction_courante =  
                                     chaine_sauvegarde;  
   
                             autorisation_parenthese = d_faux;  
   
                             if ((*s_sous_objet_3).type == ALG)  
                             {  
                                 l_atome = (struct_liste_chainee *)  
                                         (*s_sous_objet_3).objet;  
                                 chaine_fonction = "";  
   
                                 while(l_atome != NULL)  
                                 {  
                                     if ((*(*l_atome).donnee).type == FCT)  
                                     {  
                                         if (strcmp((*((struct_fonction *)  
                                                 (*(*l_atome).donnee).objet))  
                                                 .nom_fonction, ">>") != 0)  
                                         {  
                                             chaine_fonction =  
                                                     (*((struct_fonction *)  
                                                     (*(*l_atome).donnee).objet))  
                                                     .nom_fonction;  
                                         }  
                                     }  
   
                                     l_atome = (*l_atome).suivant;  
                                 }  
   
                                 if ((strcmp((*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction, "+") == 0) ||  
                                         (strcmp((*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction, "-") == 0))  
                                 {  
                                     if ((strcmp(chaine_fonction, "AND") == 0) ||  
                                             (strcmp(chaine_fonction, "XOR") ==  
                                             0) || (strcmp(chaine_fonction, "OR")  
                                             == 0))  
                                     {  
                                         autorisation_parenthese = d_vrai;  
                                     }  
                                 }  
                                 else if ((strcmp((*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction, "*") == 0) ||  
                                         (strcmp((*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction, "/") == 0))  
                                 {  
                                     if ((strcmp(chaine_fonction, "+") == 0) ||  
                                             (strcmp(chaine_fonction, "-") == 0)  
                                             || (strcmp(chaine_fonction, "AND")  
                                             == 0) || (strcmp(chaine_fonction,  
                                             "XOR") == 0) || (strcmp(  
                                             chaine_fonction, "OR") == 0))  
                                     {  
                                         autorisation_parenthese = d_vrai;  
                                     }  
                                 }  
                                 else if ((strcmp((*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction, "^") == 0))  
                                 {  
                                     autorisation_parenthese = d_vrai;  
                                 }  
                             }  
   
                             if (autorisation_parenthese == d_vrai)  
                             {  
                                 chaine_sauvegarde = (unsigned char *)  
                                         (*s_sous_objet_1).objet;  
   
                                 if (((*s_sous_objet_1).objet = (void *)  
                                         malloc((strlen(chaine_sauvegarde) + 2  
                                         + 1) * sizeof(unsigned char))) == NULL)  
                                 {  
                                     (*s_etat_processus).erreur_systeme =  
                                             d_es_allocation_memoire;  
                                     return(NULL);  
                                 }  
   
                                 sprintf((unsigned char *) (*s_sous_objet_1)  
                                         .objet, "(%s)", chaine_sauvegarde);  
                                 free(chaine_sauvegarde);  
                             }  
   
                             liberation(s_etat_processus, s_sous_objet_3);  
   
                             if ((s_sous_objet = allocation(s_etat_processus,  
                                     CHN)) == NULL)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;  
                                 return(NULL);  
                             }  
   
                             if (((*s_sous_objet).objet = (void *)  
                                     malloc((strlen(  
                                     (unsigned char *) (*s_sous_objet_1).objet) +  
                                     strlen((*((struct_fonction *)  
                                     (*(*l_element_courant).donnee).objet))  
                                     .nom_fonction) + strlen((unsigned char *)  
                                     (*s_sous_objet_2).objet) + 1) *  
                                     sizeof(unsigned char))) == NULL)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;  
                                 return(NULL);  
                             }  
   
                             sprintf((unsigned char *) (*s_sous_objet).objet,  
                                     "%s%s%s", (unsigned char *)  
                                     (*s_sous_objet_1)  
                                     .objet, (*((struct_fonction *)  
                                     (*(*l_element_courant).donnee).objet))  
                                     .nom_fonction, (unsigned char *)  
                                     (*s_sous_objet_2).objet);  
   
                             liberation(s_etat_processus, s_sous_objet_1);  
                             liberation(s_etat_processus, s_sous_objet_2);  
   
                             if (empilement(s_etat_processus,  
                                     &((*s_etat_processus)  
                                     .l_base_pile), s_sous_objet) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
                         }  
                         else if (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction, "=") == 0)  
                         {  
                             if (depilement(s_etat_processus,  
                                     &((*s_etat_processus).l_base_pile),  
                                     &s_sous_objet_2) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
   
                             if (depilement(s_etat_processus,  
                                     &((*s_etat_processus).l_base_pile),  
                                     &s_sous_objet_1) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
   
                             if ((s_sous_objet = allocation(s_etat_processus,  
                                     CHN)) == NULL)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;  
                                 return(NULL);  
                             }  
   
                             autorisation_parenthese = d_vrai;  
                             l_atome = l_element_courant;  
   
                             if (l_atome != NULL)  
                             {  
                                 if ((*l_atome).suivant != NULL)  
                                 {  
                                     l_atome = (*l_atome).suivant;  
   
                                     if ((*(*l_atome).donnee).type == FCT)  
                                     {  
                                         if (strcmp((*((struct_fonction *)  
                                                 (*(*l_atome).donnee).objet))  
                                                 .nom_fonction, ">>") == 0)  
                                         {  
                                             if ((*l_atome).suivant == NULL)  
                                             {  
                                                 autorisation_parenthese =  
                                                         d_faux;  
                                             }  
                                         }  
                                     }  
                                 }  
                             }  
   
                             if (autorisation_parenthese == d_vrai)  
                             {  
                                 if (((*s_sous_objet).objet =  
                                         (void *) malloc((strlen(  
                                         (unsigned char *) (*s_sous_objet_1)  
                                         .objet) + strlen((*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction) +  
                                         strlen((unsigned char *)  
                                         (*s_sous_objet_2).objet) + 2 + 1) *  
                                         sizeof(unsigned char))) == NULL)  
                                 {  
                                     (*s_etat_processus).erreur_systeme =  
                                             d_es_allocation_memoire;  
                                     return(NULL);  
                                 }  
   
                                 sprintf((unsigned char *) (*s_sous_objet).objet,  
                                         "(%s%s%s)", (unsigned char *)  
                                         (*s_sous_objet_1)  
                                         .objet, (*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction, (unsigned char *)  
                                         (*s_sous_objet_2).objet);  
                             }  
                             else  
                             {  
                                 if (((*s_sous_objet).objet =  
                                         (void *) malloc((strlen(  
                                         (unsigned char *) (*s_sous_objet_1)  
                                         .objet) + strlen((*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction) + strlen(  
                                         (unsigned char *) (*s_sous_objet_2)  
                                         .objet) + 1) * sizeof(unsigned char)))  
                                         == NULL)  
                                 {  
                                     (*s_etat_processus).erreur_systeme =  
                                             d_es_allocation_memoire;  
                                     return(NULL);  
                                 }  
   
                                 sprintf((unsigned char *) (*s_sous_objet).objet,  
                                         "%s%s%s", (unsigned char *)  
                                         (*s_sous_objet_1)  
                                         .objet, (*((struct_fonction *)  
                                         (*(*l_element_courant).donnee).objet))  
                                         .nom_fonction, (unsigned char *)  
                                         (*s_sous_objet_2).objet);  
                             }  
   
                             liberation(s_etat_processus, s_sous_objet_1);  
                             liberation(s_etat_processus, s_sous_objet_2);  
   
                             if (empilement(s_etat_processus,  
                                     &((*s_etat_processus).l_base_pile),  
                                     s_sous_objet) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
                         }  
                         else if (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 "NOT") == 0)  
                         {  
                             if (depilement(s_etat_processus,  
                                     &((*s_etat_processus)  
                                     .l_base_pile), &s_sous_objet_1) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
   
                             if ((s_sous_objet = allocation(s_etat_processus,  
                                     CHN)) == NULL)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;  
                                 return(NULL);  
                             }  
   
                             if (((*s_sous_objet).objet = (unsigned char *)  
                                     malloc(  
                                     (strlen((unsigned char *) (*s_sous_objet_1)  
                                     .objet) + 4 + 1) * sizeof(unsigned char)))  
                                     == NULL)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;  
                                 return(NULL);  
                             }  
   
                             sprintf((unsigned char *) (*s_sous_objet).objet,  
                                     "%s %s", (*((struct_fonction *)  
                                     (*(*l_element_courant).donnee).objet))  
                                     .nom_fonction, (unsigned char *)  
                                     (*s_sous_objet_1).objet );  
   
                             liberation(s_etat_processus, s_sous_objet_1);  
   
                             if (empilement(s_etat_processus,  
                                     &((*s_etat_processus)  
                                     .l_base_pile), s_sous_objet) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
                         }  
                         else if ((strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 "OR") == 0) || (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 "XOR") == 0) || (strcmp((*((struct_fonction *)  
                                 (*(*l_element_courant).donnee).objet))  
                                 .nom_fonction,  
                                 "AND") == 0))  
                         {  
                             if (depilement(s_etat_processus,  
                                     &((*s_etat_processus)  
                                     .l_base_pile), &s_sous_objet_2) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
   
                             if (depilement(s_etat_processus,  
                                     &((*s_etat_processus)  
                                     .l_base_pile), &s_sous_objet_1) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
   
                             if ((s_sous_objet = allocation(s_etat_processus,  
                                     CHN)) == NULL)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;  
                                 return(NULL);  
                             }  
   
                             if (((*s_sous_objet).objet = (void *)  
                                     malloc((strlen(  
                                     (unsigned char *) (*s_sous_objet_1).objet) +  
                                     strlen((*((struct_fonction *)  
                                     (*(*l_element_courant).donnee).objet))  
                                     .nom_fonction) + strlen((unsigned char *)  
                                     (*s_sous_objet_2).objet) + 2 + 1) *  
                                     sizeof(unsigned char))) == NULL)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;  
                                 return(NULL);  
                             }  
   
                             sprintf((unsigned char *) (*s_sous_objet).objet,  
                                     "%s %s %s", (unsigned char *)  
                                     (*s_sous_objet_1)  
                                     .objet, (*((struct_fonction *)  
                                     (*(*l_element_courant).donnee).objet))  
                                     .nom_fonction, (unsigned char *)  
                                     (*s_sous_objet_2).objet);  
   
                             liberation(s_etat_processus, s_sous_objet_1);  
                             liberation(s_etat_processus, s_sous_objet_2);  
   
                             if (empilement(s_etat_processus,  
                                     &((*s_etat_processus)  
                                     .l_base_pile), s_sous_objet) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
                         }  
                         else  
                         {  
                             nombre_arguments = (*((struct_fonction *)  
                                     (*(*l_element_courant).donnee).objet))  
                                     .nombre_arguments;  
   
                             if ((chaine = (unsigned char *)  
                                     malloc(sizeof(unsigned char))) == NULL)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;  
                                 return(NULL);  
                             }  
                               
                             chaine[0] = d_code_fin_chaine;  
   
                             for(i = 0; i < nombre_arguments; i++)  
                             {  
                                 if ((nombre_arguments - i) > 1)  
                                 {  
                                     l_liste1 = (*s_etat_processus).l_base_pile;  
   
                                     for(j = 2; j < (nombre_arguments - i); j++)  
                                     {  
                                         l_liste1 = (*l_liste1).suivant;  
                                     }  
   
                                     l_liste2 = (*l_liste1).suivant;  
                                     (*l_liste1).suivant = (*l_liste2).suivant;  
                                     (*l_liste2).suivant = (*s_etat_processus)  
                                             .l_base_pile;  
                                     (*s_etat_processus).l_base_pile = l_liste2;  
                                 }  
                                   
                                 if (depilement(s_etat_processus,  
                                         &((*s_etat_processus).l_base_pile),  
                                         &s_sous_objet) == d_erreur)  
                                 {  
                                     return(NULL);  
                                 }  
   
                                 chaine_sauvegarde = chaine;  
   
                                 if (strlen(chaine_sauvegarde) == 0)  
                                 {  
                                     if ((chaine = (unsigned char *)  
                                             malloc((strlen((unsigned char *)  
                                             (*s_sous_objet).objet) + 1) *  
                                             sizeof(unsigned char))) == NULL)  
                                     {  
                                         (*s_etat_processus).erreur_systeme =  
                                                 d_es_allocation_memoire;  
                                         return(NULL);  
                                     }  
   
                                     sprintf(chaine, "%s", (unsigned char *)  
                                             (*s_sous_objet).objet);  
                                 }  
                                 else  
                                 {  
                                     if ((chaine = (unsigned char *)  
                                             malloc((strlen(chaine_sauvegarde)  
                                             + 1 + strlen((unsigned char *)  
                                             (*s_sous_objet).objet) + 1) *  
                                             sizeof(unsigned char))) == NULL)  
                                     {  
                                         (*s_etat_processus).erreur_systeme =  
                                                 d_es_allocation_memoire;  
                                         return(NULL);  
                                     }  
   
                                     sprintf(chaine, "%s,%s", chaine_sauvegarde,  
                                             (unsigned char *) (*s_sous_objet)  
                                             .objet);  
                                 }  
   
                                 free(chaine_sauvegarde);  
                                 liberation(s_etat_processus, s_sous_objet);  
                             }  
   
                             chaine_sauvegarde = chaine;  
   
                             if ((chaine = (unsigned char *) malloc((strlen(  
                                     (*((struct_fonction *)  
                                     (*(*l_element_courant)  
                                     .donnee).objet)).nom_fonction) + 2 +  
                                     strlen(chaine_sauvegarde) + 1) *  
                                     sizeof(unsigned char))) == NULL)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;  
                                 return(NULL);  
                             }  
   
                             sprintf(chaine, "%s(%s)", (*((struct_fonction *)  
                                     (*(*l_element_courant).donnee).objet))  
                                     .nom_fonction, chaine_sauvegarde);  
                             free(chaine_sauvegarde);  
   
                             if ((s_sous_objet = allocation(s_etat_processus,  
                                             CHN)) == NULL)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_allocation_memoire;  
                                 return(NULL);  
                             }  
   
                             (*s_sous_objet).objet = (void *) chaine;  
   
                             if (empilement(s_etat_processus,  
                                     &((*s_etat_processus)  
                                     .l_base_pile), s_sous_objet) == d_erreur)  
                             {  
                                 return(NULL);  
                             }  
                         }  
                     }  
                 }  
                 else  
                 {  
                     if ((s_sous_objet = allocation(s_etat_processus, CHN))  
                             == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     if (((*s_sous_objet).objet = (void *) formateur_fichier(  
                             s_etat_processus, (*l_element_courant).donnee,  
                             s_format, longueur, longueur_champ, format_sortie,  
                             type, longueur_effective, recursivite)) == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     if (((*(*l_element_courant).donnee).type == ALG)  
                             || ((*(*l_element_courant).donnee).type == NOM))  
                     {  
                         chaine_sauvegarde = (unsigned char *)  
                                 (*s_sous_objet).objet;  
   
                         if (((*s_sous_objet).objet = malloc((strlen(  
                                 chaine_sauvegarde) - 1) *  
                                 sizeof(unsigned char))) == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         ptrl = chaine_sauvegarde;  
                         ptre = (unsigned char *) (*s_sous_objet).objet;  
   
                         for(ptrl++, i = strlen(chaine_sauvegarde) - 2; i > 0;  
                                 i--, *ptre++ = *ptrl++);  
   
                         (*ptre) = d_code_fin_chaine;  
   
                         free(chaine_sauvegarde);  
                     }  
                     else if ((*(*l_element_courant).donnee).type == CHN)  
                     {  
                         chaine_sauvegarde = (unsigned char *)  
                                 (*s_sous_objet).objet;  
   
                         if (((*s_sous_objet).objet = malloc((strlen(  
                                 chaine_sauvegarde) + 3) *  
                                 sizeof(unsigned char))) == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         sprintf((unsigned char *) (*s_sous_objet).objet,  
                                 "\"%s\"", chaine_sauvegarde);  
   
                         free(chaine_sauvegarde);  
                     }  
   
                     if (empilement(s_etat_processus, &((*s_etat_processus)  
                             .l_base_pile), s_sous_objet) == d_erreur)  
                     {  
                         return(NULL);  
                     }  
                 }  
   
                 l_element_courant = (*l_element_courant).suivant;  
             }  
   
             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),  
                     &s_sous_objet) == d_erreur)  
             {  
                 return(NULL);  
             }  
   
             if ((chaine = (unsigned char *) malloc((strlen((unsigned char *)  
                     (*s_sous_objet).objet) + 2 + 1) * sizeof(unsigned char)))  
                     == NULL)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return(NULL);  
             }  
   
             sprintf(chaine, "'%s'", (unsigned char *) (*s_sous_objet).objet);  
             liberation(s_etat_processus, s_sous_objet);  
         }          }
         else if ((*s_objet).type == BIN)          else if ((*s_objet).type == BIN)
         {          {
Line 3724  formateur_fichier(struct_processus *s_et Line 2907  formateur_fichier(struct_processus *s_et
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
             if (format_sortie != 'B')          }
             {          else if ((*s_objet).type == CHN)
                 (*s_etat_processus).erreur_execution =          {
                         d_ex_erreur_format_fichier;  
                 return(NULL);  
             }  
   
             masque_binaire = masque_entiers_binaires(s_etat_processus);  
   
             if ((test_cfsf(s_etat_processus, 43) == d_faux) &&  
                     (test_cfsf(s_etat_processus, 44) == d_faux))  
             {  
   
 /*  /*
 -- Base décimale ---------------------------------------------------------------  --------------------------------------------------------------------------------
     Chaîne de caractères
     Poids fort 1000 0XXX (longueur inférieure à 2**3-1
                1000 10LL (autres longueurs)
   --------------------------------------------------------------------------------
 */  */
   
                 sprintf(tampon, "%llu", (*((logical8 *)              longueur_reelle_chaine = longueur_chaine(s_etat_processus,
                         ((*s_objet).objet))) & masque_binaire);                      (unsigned char *) (*s_objet).objet);
                 strcpy(base, "d");  
             }  
             else if ((test_cfsf(s_etat_processus, 43) == d_vrai) &&  
                     (test_cfsf(s_etat_processus, 44) == d_faux))  
             {  
   
 /*              if ((longueur_champ == -1) || (longueur_reelle_chaine <
 -- Base octale -----------------------------------------------------------------                      longueur_champ))
 */              {
                   // Le format est CHARACTER*(*). On copie dans la sortie
                   // la chaine en évaluant les caractères échappés.
   
                 sprintf(tampon, "%llo", (*((logical8 *)                  if ((chaine = formateur_flux(s_etat_processus, (unsigned char *)
                         ((*s_objet).objet))) & masque_binaire);                          (*s_objet).objet, &longueur_chaine_traitee)) == NULL)
                 strcpy(base, "o");                  {
                       return(NULL);
                   }
             }              }
             else if (test_cfsf(s_etat_processus, 44) == d_vrai)              else
             {              {
                   // Format de type CHARACTER*(n)
   
 /*                  if ((chaine_sauvegarde = formateur_flux(s_etat_processus,
 -- Bases hexadécimale et binaire -----------------------------------------------                          (unsigned char *) (*s_objet).objet,
 */                          &longueur_chaine_traitee)) == NULL)
   
                 sprintf(tampon, "%llX", (*((logical8 *)  
                         ((*s_objet).objet))) & masque_binaire);  
   
                 if (test_cfsf(s_etat_processus, 43) == d_vrai)  
                 {                  {
                     strcpy(base, "h");                      return(NULL);
                 }                  }
                 else  
                 {  
                     chaine = (unsigned char *) malloc((strlen(tampon) + 1)  
                             * sizeof(unsigned char));  
   
                     if (chaine == NULL)                  if ((chaine = malloc(longueur_champ * sizeof(unsigned char)))
                     {                              == NULL)
                         (*s_etat_processus).erreur_systeme =                  {
                                 d_es_allocation_memoire;                      (*s_etat_processus).erreur_systeme =
                         return(NULL);                              d_es_allocation_memoire;
                     }                      return(NULL);
                   }
   
                     strcpy(chaine, tampon);                  memcpy(chaine, chaine_sauvegarde, longueur_champ);
                     tampon[0] = 0;                  longueur_chaine_traitee = longueur_champ;
                   free(chaine_sauvegarde);
               }
   
                     for(i = 0; i < strlen(chaine); i++)              chaine_sauvegarde = chaine;
                     {  
                         switch(chaine[i])  
                         {  
                             case '0' :  
                             {  
                                 strcat(tampon, (i != 0) ? "0000" : "0");  
                                 break;  
                             }  
                             case '1' :  
                             {  
                                     strcat(tampon, (i != 0) ? "0001" : "1");  
                                 break;  
                             }  
                             case '2' :  
                             {  
                                 strcat(tampon, (i != 0) ? "0010" : "10");  
                                 break;  
                             }  
                             case '3' :  
                             {  
                                 strcat(tampon, (i != 0) ? "0011" : "11");  
                                 break;  
                             }  
                             case '4' :  
                             {  
                                 strcat(tampon, (i != 0) ? "0100" : "100");  
                                 break;  
                             }  
                             case '5' :  
                             {  
                                 strcat(tampon, (i != 0) ? "0101" : "101");  
                                 break;  
                             }  
                             case '6' :  
                             {  
                                 strcat(tampon, (i != 0) ? "0110" : "110");  
                                 break;  
                             }  
                             case '7' :  
                             {  
                                 strcat(tampon, (i != 0) ? "0111" : "111");  
                                 break;  
                             }  
                             case '8' :  
                             {  
                                 strcat(tampon, "1000");  
                                 break;  
                             }  
                             case '9' :  
                             {  
                                 strcat(tampon, "1001");  
                                 break;  
                             }  
                             case 'A' :  
                             {  
                                 strcat(tampon, "1010");  
                                 break;  
                             }  
                             case 'B' :  
                             {  
                                 strcat(tampon, "1011");  
                                 break;  
                             }  
                             case 'C' :  
                             {  
                                 strcat(tampon, "1100");  
                                 break;  
                             }  
                             case 'D' :  
                             {  
                                 strcat(tampon, "1101");  
                                 break;  
                             }  
                             case 'E' :  
                             {  
                                 strcat(tampon, "1110");  
                                 break;  
                             }  
                             case 'F' :  
                             {  
                                 strcat(tampon, "1111");  
                                 break;  
                             }  
                         }  
                     }  
   
                     free(chaine);              if (longueur_chaine_traitee < (1LL << 3))
                     strcpy(base, "b");              {
                   if ((chaine = malloc((longueur_chaine_traitee + 1)
                           * sizeof(unsigned char))) == NULL)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return(NULL);
                 }                  }
             }  
   
             chaine = (unsigned char *) malloc((strlen(tampon) + 4)                  chaine[0] = 0x80 | (longueur_chaine_traitee & 0x7);
                     * sizeof(unsigned char));  
   
             if (chaine == NULL)                  memcpy(chaine + 1, chaine_sauvegarde, longueur_chaine_traitee);
             {                  longueur_totale = longueur_chaine_traitee + 1;
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return(NULL);  
             }              }
               else if (longueur_chaine_traitee < (1LL << 8))
               {
                   if ((chaine = malloc((longueur_chaine_traitee + 2)
                           * sizeof(unsigned char))) == NULL)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return(NULL);
                   }
   
             strcpy(chaine, "# ");                  chaine[0] = 0x88;
                   chaine[1] = (unsigned char) (longueur_chaine_traitee & 0xFF);
   
             strcat(chaine, tampon);                  memcpy(chaine + 2, chaine_sauvegarde, longueur_chaine_traitee);
             strcat(chaine, base);                  longueur_totale = longueur_chaine_traitee + 2;
         }              }
         else if ((*s_objet).type == CHN)              else if (longueur_chaine_traitee < (1LL << 16))
         {              {
                   if ((chaine = malloc((longueur_chaine_traitee + 3)
                           * sizeof(unsigned char))) == NULL)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return(NULL);
                   }
   
 /*                  chaine[0] = 0x89;
 --------------------------------------------------------------------------------                  chaine[1] = (unsigned char) ((longueur_chaine_traitee >> 8)
   Chaîne de caractères                          & 0xFF);
 --------------------------------------------------------------------------------                  chaine[2] = (unsigned char) (longueur_chaine_traitee & 0xFF);
 */  
   
             if (format_sortie != 'C')                  memcpy(chaine + 3, chaine_sauvegarde, longueur_chaine_traitee);
             {                  longueur_totale = longueur_chaine_traitee + 3;
                 (*s_etat_processus).erreur_execution =  
                         d_ex_erreur_format_fichier;  
                 return(NULL);  
             }              }
               else if (longueur_chaine_traitee < (1LL << 32))
               {
                   if ((chaine = malloc((longueur_chaine_traitee + 5)
                           * sizeof(unsigned char))) == NULL)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return(NULL);
                   }
   
             chaine = (unsigned char *) malloc((strlen((unsigned char *)                  chaine[0] = 0x8A;
                     ((*s_objet).objet)) + 1) * sizeof(unsigned char));                  chaine[1] = (unsigned char) ((longueur_chaine_traitee >> 24)
                           & 0xFF);
                   chaine[2] = (unsigned char) ((longueur_chaine_traitee >> 16)
                           & 0xFF);
                   chaine[3] = (unsigned char) ((longueur_chaine_traitee >> 8)
                           & 0xFF);
                   chaine[4] = (unsigned char) (longueur_chaine_traitee & 0xFF);
   
             if (chaine == NULL)                  memcpy(chaine + 5, chaine_sauvegarde, longueur_chaine_traitee);
                   longueur_totale = longueur_chaine_traitee + 5;
               }
               else
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  if ((chaine = malloc((longueur_chaine_traitee + 9)
                 return(NULL);                          * sizeof(unsigned char))) == NULL)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return(NULL);
                   }
   
                   chaine[0] = 0x8B;
                   chaine[1] = (unsigned char) ((longueur_chaine_traitee >> 56)
                           & 0xFF);
                   chaine[2] = (unsigned char) ((longueur_chaine_traitee >> 48)
                           & 0xFF);
                   chaine[3] = (unsigned char) ((longueur_chaine_traitee >> 40)
                           & 0xFF);
                   chaine[4] = (unsigned char) ((longueur_chaine_traitee >> 32)
                           & 0xFF);
                   chaine[5] = (unsigned char) ((longueur_chaine_traitee >> 24)
                           & 0xFF);
                   chaine[6] = (unsigned char) ((longueur_chaine_traitee >> 16)
                           & 0xFF);
                   chaine[7] = (unsigned char) ((longueur_chaine_traitee >> 8)
                           & 0xFF);
                   chaine[8] = (unsigned char) (longueur_chaine_traitee & 0xFF);
   
                   memcpy(chaine + 9, chaine_sauvegarde, longueur_chaine_traitee);
                   longueur_totale = longueur_chaine_traitee + 9;
             }              }
   
             strcpy(chaine, (unsigned char *) ((*s_objet).objet));              (*longueur_effective) = longueur_totale;
         }          }
         else if ((*s_objet).type == CPL)          else if ((*s_objet).type == CPL)
         {          {
Line 3937  formateur_fichier(struct_processus *s_et Line 3082  formateur_fichier(struct_processus *s_et
             }              }
   
             if ((chaine = formateur_fichier_binaire_nombre(s_etat_processus,              if ((chaine = formateur_fichier_binaire_nombre(s_etat_processus,
                     (*s_objet).objet, 'C', longueur, longueur_effective))                      (*s_objet).objet, 'C', 'C', longueur, longueur_effective))
                     == NULL)                      == NULL)
             {              {
                 return(NULL);                  return(NULL);
Line 3951  formateur_fichier(struct_processus *s_et Line 3096  formateur_fichier(struct_processus *s_et
   Définition    Définition
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
             l_element_courant = (struct_liste_chainee *) ((*s_objet).objet);  
             chaine_sauvegarde = chaine;  
   
             while(l_element_courant != NULL)  
             {  
                 if ((chaine_formatee = formateur_fichier(s_etat_processus,  
                         (*l_element_courant).donnee, s_format,  
                         longueur, longueur_champ, format_sortie, type,  
                         longueur_effective, recursivite)) == NULL)  
                 {  
                     return(NULL);  
                 }  
   
                 if ((*(*l_element_courant).donnee).type == CHN)  
                 {  
                     chaine_tampon = chaine_formatee;  
   
                     if ((chaine_formatee = (unsigned char *) malloc((strlen(  
                             chaine_tampon) + 3) * sizeof(unsigned char)))  
                             == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     sprintf(chaine_formatee, "\"%s\"", chaine_tampon);  
                     free(chaine_tampon);  
                 }  
   
                 l_element_courant = (*l_element_courant).suivant;  
   
                 if (chaine != NULL)  
                 {  
                     chaine_sauvegarde = chaine;  
   
                     if ((chaine = (unsigned char *) malloc((strlen(  
                             chaine_sauvegarde) + strlen(chaine_formatee) + 2) *  
                             sizeof(unsigned char))) == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     strcpy(chaine, chaine_sauvegarde);  
                     free(chaine_sauvegarde);  
                     strcat(chaine, " ");  
                     strcat(chaine, chaine_formatee);  
                     free(chaine_formatee);  
                 }  
                 else  
                 {  
                     chaine = chaine_formatee;  
                 }  
             }  
   
             chaine_sauvegarde = chaine;  
             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 1) *  
                     sizeof(unsigned char));  
   
             if (chaine == NULL)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 free(chaine_sauvegarde);  
                 return(NULL);  
             }  
   
             chaine_sauvegarde[strlen(chaine_sauvegarde)] = d_code_fin_chaine;  
             strcpy(chaine, chaine_sauvegarde);  
             free(chaine_sauvegarde);  
         }          }
         else if ((*s_objet).type == INT)          else if ((*s_objet).type == INT)
         {          {
Line 4034  formateur_fichier(struct_processus *s_et Line 3107  formateur_fichier(struct_processus *s_et
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
             if (format_sortie != 'I')              if ((format_sortie != 'I') && (format_sortie != 'R')
                       && (format_sortie != 'C'))
             {              {
                 (*s_etat_processus).erreur_execution =                  (*s_etat_processus).erreur_execution =
                         d_ex_erreur_format_fichier;                          d_ex_erreur_format_fichier;
Line 4042  formateur_fichier(struct_processus *s_et Line 3116  formateur_fichier(struct_processus *s_et
             }              }
   
             if ((chaine = formateur_fichier_binaire_nombre(s_etat_processus,              if ((chaine = formateur_fichier_binaire_nombre(s_etat_processus,
                     (*s_objet).objet, 'I', longueur, longueur_effective))                      (*s_objet).objet, 'I', format_sortie, longueur,
                     == NULL)                      longueur_effective)) == NULL)
             {              {
                 return(NULL);                  return(NULL);
             }              }
Line 4057  formateur_fichier(struct_processus *s_et Line 3131  formateur_fichier(struct_processus *s_et
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
             chaine = (unsigned char *) malloc((strlen((*((struct_fonction *)  
                     ((*s_objet).objet))).nom_fonction) + 1) *  
                     sizeof(unsigned char));  
   
             if (chaine == NULL)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return(NULL);  
             }  
   
             strcpy(chaine, (unsigned char *) (*((struct_fonction *)  
                     ((*s_objet).objet))).nom_fonction);  
         }          }
         else if ((*s_objet).type == LST)          else if ((*s_objet).type == LST)
         {          {
Line 4238  formateur_fichier(struct_processus *s_et Line 3300  formateur_fichier(struct_processus *s_et
                 {                  {
                     if ((chaine_formatee = formateur_fichier(s_etat_processus,                      if ((chaine_formatee = formateur_fichier(s_etat_processus,
                             (*l_element_courant).donnee,                              (*l_element_courant).donnee,
                             (*l_element_courant_format).donnee,                              (*l_element_courant_format).donnee, 0, 0, ' ', 'U',
                             0, 0, ' ', 'U', longueur_effective, recursivite))                              longueur_effective, recursivite, export_fichier))
                             == NULL)                              == NULL)
                     {                      {
                         return(NULL);                          return(NULL);
Line 4278  formateur_fichier(struct_processus *s_et Line 3340  formateur_fichier(struct_processus *s_et
                         return(NULL);                          return(NULL);
                     }                      }
   
                     format_degenere = d_faux;  
   
                     if (strncmp("INTEGER*", format_chaine, 8) == 0)                      if (strncmp("INTEGER*", format_chaine, 8) == 0)
                     {                      {
                         format_sortie = 'I';                          format_sortie = 'I';
Line 4300  formateur_fichier(struct_processus *s_et Line 3360  formateur_fichier(struct_processus *s_et
                         format_sortie = 'C';                          format_sortie = 'C';
                         position_1 = 8;                          position_1 = 8;
                     }                      }
                     else if (strcmp("CHARACTER", format_chaine) == 0)                      else if (strncmp("CHARACTER*", format_chaine, 10) == 0)
                     {                      {
                         format_sortie = 'S';                          format_sortie = 'S';
                         position_1 = 10;                          position_1 = 10;
Line 4316  formateur_fichier(struct_processus *s_et Line 3376  formateur_fichier(struct_processus *s_et
                         return(NULL);                          return(NULL);
                     }                      }
   
                     if (format_degenere == d_faux)                      if (format_chaine[position_1] == d_code_fin_chaine)
                     {                      {
                         if (format_chaine[position_1] == d_code_fin_chaine)                          free(chaine);
                         {                          free(format_chaine);
                             free(chaine);  
                             free(format_chaine);  
   
                             (*s_etat_processus).erreur_execution =                          (*s_etat_processus).erreur_execution =
                                     d_ex_erreur_format_fichier;                                  d_ex_erreur_format_fichier;
                             return(NULL);                          return(NULL);
                         }                      }
   
                       if (strcmp(&(format_chaine[position_1]), "(*)") != 0)
                       {
                         if (sscanf(&(format_chaine[position_1]), "%ld",                          if (sscanf(&(format_chaine[position_1]), "%ld",
                                 &longueur) != 1)                                  &longueur) != 1)
                         {                          {
Line 4338  formateur_fichier(struct_processus *s_et Line 3398  formateur_fichier(struct_processus *s_et
                                     d_ex_erreur_format_fichier;                                      d_ex_erreur_format_fichier;
                             return(NULL);                              return(NULL);
                         }                          }
   
                           longueur_champ = longueur;
                     }                      }
                     else                      else
                     {                      {
                           longueur_champ = -1;
                         longueur = -1;                          longueur = -1;
                     }                      }
   
Line 4349  formateur_fichier(struct_processus *s_et Line 3412  formateur_fichier(struct_processus *s_et
                     if ((chaine_formatee = formateur_fichier(s_etat_processus,                      if ((chaine_formatee = formateur_fichier(s_etat_processus,
                             (*l_element_courant).donnee, s_format,                              (*l_element_courant).donnee, s_format,
                             longueur, longueur_champ, format_sortie, type,                              longueur, longueur_champ, format_sortie, type,
                             longueur_effective, recursivite)) == NULL)                              longueur_effective, recursivite, export_fichier))
                               == NULL)
                     {                      {
                         free(chaine);                          free(chaine);
                         return(NULL);                          return(NULL);
Line 4385  formateur_fichier(struct_processus *s_et Line 3449  formateur_fichier(struct_processus *s_et
                 return(NULL);                  return(NULL);
             }              }
   
             if ((*recursivite) == 1)  
             {  
                 // Ajout de la longueur totale en fin d'enregistrement.  
   
                 if (longueur_totale < (((integer8) 1) << 6))  
                 {  
                     tampon[0] = longueur_totale + 1;  
   
                     if ((chaine = realloc(chaine, (longueur_totale + 1)  
                             * sizeof(unsigned char))) == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     memcpy(&(chaine[longueur_totale]), tampon, 1);  
                     longueur_totale += 1;  
                 }  
                 else if (longueur_totale < (((integer8) 1) << 16))  
                 {  
                     tampon[2] = 0x40;  
                     tampon[1] = (longueur_totale + 1) & 0xFF;  
                     tampon[0] = ((longueur_totale + 1) >> 8) & 0xFF;  
   
                     if ((chaine = realloc(chaine, (longueur_totale + 3)  
                             * sizeof(unsigned char))) == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     memcpy(&(chaine[longueur_totale]), tampon, 3);  
                     longueur_totale += 3;  
                 }  
                 else if (longueur_totale < (((integer8) 1) << 32))  
                 {  
                     tampon[4] = 0x80;  
                     tampon[3] = (longueur_totale + 1) & 0xFF;  
                     tampon[2] = ((longueur_totale + 1) >> 8) & 0xFF;  
                     tampon[1] = ((longueur_totale + 1) >> 16) & 0xFF;  
                     tampon[0] = ((longueur_totale + 1) >> 24) & 0xFF;  
   
                     if ((chaine = realloc(chaine, (longueur_totale + 5)  
                             * sizeof(unsigned char))) == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     memcpy(&(chaine[longueur_totale]), tampon, 5);  
                     longueur_totale += 5;  
                 }  
                 else  
                 {  
                     tampon[8] = 0xC0;  
                     tampon[7] = (longueur_totale + 1) & 0xFF;  
                     tampon[6] = ((longueur_totale + 1) >> 8) & 0xFF;  
                     tampon[5] = ((longueur_totale + 1) >> 16) & 0xFF;  
                     tampon[4] = ((longueur_totale + 1) >> 24) & 0xFF;  
                     tampon[3] = ((longueur_totale + 1) >> 32) & 0xFF;  
                     tampon[2] = ((longueur_totale + 1) >> 40) & 0xFF;  
                     tampon[1] = ((longueur_totale + 1) >> 48) & 0xFF;  
                     tampon[0] = ((longueur_totale + 1) >> 56) & 0xFF;  
   
                     if ((chaine = realloc(chaine, (longueur_totale + 9)  
                             * sizeof(unsigned char))) == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     memcpy(&(chaine[longueur_totale]), tampon, 9);  
                     longueur_totale += 9;  
                 }  
   
                 __zone();  
             }  
   
             (*longueur_effective) = longueur_totale;              (*longueur_effective) = longueur_totale;
         }          }
         else if ((*s_objet).type == TBL)          else if ((*s_objet).type == TBL)
Line 4477  formateur_fichier(struct_processus *s_et Line 3459  formateur_fichier(struct_processus *s_et
   Table    Table
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
             if ((*s_format).type != TBL)  
             {  
                 (*s_etat_processus).erreur_execution =  
                         d_ex_erreur_format_fichier;  
                 return(NULL);  
             }  
   
             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;  
             l_element_courant_format = (struct_liste_chainee *)  
                     (*s_format).objet;  
   
             if ((*((struct_tableau *) (*s_objet).objet)).nombre_elements !=  
                     (*((struct_tableau *) (*s_format).objet)).nombre_elements)  
             {  
                 (*s_etat_processus).erreur_execution =  
                         d_ex_erreur_format_fichier;  
                 return(NULL);  
             }  
   
             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));  
   
             if (chaine == NULL)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return(NULL);  
             }  
   
             strcpy(chaine, "<[");  
   
             for(i = 0; i < (*((struct_tableau *) (*s_objet).objet))  
                     .nombre_elements; i++)  
             {  
                 if ((((*(*((struct_tableau *) (*s_format).objet))  
                         .elements[i]).type == LST) &&  
                         ((*(*((struct_tableau *) (*s_objet).objet)).elements[i])  
                         .type == LST)) ||  
                         (((*(*((struct_tableau *) (*s_format).objet))  
                         .elements[i]).type == TBL) &&  
                         ((*(*((struct_tableau *) (*s_objet).objet)).elements[i])  
                         .type == TBL)))  
                 {  
                     chaine_sauvegarde = chaine;  
   
                     if ((chaine_formatee = formateur_fichier(s_etat_processus,  
                             (*l_element_courant).donnee,  
                             (*l_element_courant_format).donnee,  
                             0, 0, ' ', 'F', longueur_effective, recursivite))  
                             == NULL)  
                     {  
                         return(NULL);  
                     }  
   
                     chaine = (unsigned char *) malloc((strlen(chaine_formatee)  
                             + strlen(chaine_sauvegarde) + 2)  
                             * sizeof(unsigned char));  
   
                     if (chaine == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     strcpy(chaine, chaine_sauvegarde);  
                     free(chaine_sauvegarde);  
                     strcat(chaine, " ");  
                     strcat(chaine, chaine_formatee);  
                     free(chaine_formatee);  
                 }  
                 else if ((*(*((struct_tableau *) (*s_format).objet))  
                         .elements[i]).type != CHN)  
                 {  
                     free(chaine);  
   
                     (*s_etat_processus).erreur_execution =  
                             d_ex_erreur_format_fichier;  
                     return(NULL);  
                 }  
                 else  
                 {  
                     if ((format_chaine = conversion_majuscule((unsigned char *)  
                             (*(*((struct_tableau *) (*s_format).objet))  
                             .elements[i]).objet)) == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     format_degenere = d_faux;  
   
                     if (strncmp("STANDARD*", format_chaine, 9) == 0)  
                     {  
                         format_sortie = 'S';  
                         position_1 = 9;  
                         format_degenere = d_vrai;  
                     }  
                     else if (strncmp("BINARY*", format_chaine, 7) == 0)  
                     {  
                         format_sortie = 'B';  
                         position_1 = 7;  
                     }  
                     else if (strncmp("FIXED*", format_chaine, 6) == 0)  
                     {  
                         format_sortie = 'F';  
                         position_1 = 6;  
                     }  
                     else if (strncmp("SCIENTIFIC*", format_chaine, 11) == 0)  
                     {  
                         format_sortie = 'I';  
                         position_1 = 11;  
                     }  
                     else if (strncmp("ENGINEER*", format_chaine, 9) == 0)  
                     {  
                         format_sortie = 'E';  
                         position_1 = 9;  
                     }  
                     else if (strncmp("CHARACTER*", format_chaine, 10) == 0)  
                     {  
                         format_sortie = 'C';  
                         position_1 = 10;  
                         format_degenere = d_vrai;  
                     }  
                     else  
                     {  
                         free(chaine);  
                         free(format_chaine);  
   
                         (*s_etat_processus).erreur_execution =  
                                 d_ex_erreur_format_fichier;  
                         return(NULL);  
                     }  
   
                     position_3 = strlen(format_chaine);  
                     format_chaine[--position_3] = d_code_fin_chaine;  
   
                     position_2 = position_1;  
   
                     while(format_chaine[position_2] != '(')  
                     {  
                         if (format_chaine[position_2] == d_code_fin_chaine)  
                         {  
                             free(chaine);  
                             free(format_chaine);  
   
                             (*s_etat_processus).erreur_execution =  
                                     d_ex_erreur_format_fichier;  
                             return(NULL);  
                         }  
   
                         position_2++;  
                     }  
   
                     format_chaine[position_2++] = d_code_fin_chaine;  
   
                     if (format_degenere == d_faux)  
                     {  
                         if (sscanf(&(format_chaine[position_1]), "%ld",  
                                 &longueur) != 1)  
                         {  
                             free(chaine);  
                             free(format_chaine);  
   
                             (*s_etat_processus).erreur_execution =  
                                     d_ex_erreur_format_fichier;  
                             return(NULL);  
                         }  
                     }  
                     else  
                     {  
                         longueur = -1;  
                     }  
   
                     if (strcmp(&(format_chaine[position_2]), "*") != 0)  
                     {  
                         if (sscanf(&(format_chaine[position_2]), "%ld",  
                                 &longueur_champ) != 1)  
                         {  
                             free(chaine);  
                             free(format_chaine);  
   
                             (*s_etat_processus).erreur_execution =  
                                     d_ex_erreur_format_fichier;  
                             return(NULL);  
                         }  
                     }  
                     else  
                     {  
                         longueur_champ = -1;  
                     }  
   
                     if ((longueur >= 0) && (longueur_champ >= 0) && (longueur >  
                             longueur_champ))  
                     {  
                         free(chaine);  
                         free(format_chaine);  
   
                         (*s_etat_processus).erreur_execution =  
                                 d_ex_erreur_format_fichier;  
                         return(NULL);  
                     }  
   
                     free(format_chaine);  
                   
                     chaine_sauvegarde = chaine;  
   
                     if ((chaine_formatee = formateur_fichier(s_etat_processus,  
                             (*((struct_tableau *) (*s_objet).objet))  
                             .elements[i], s_format,  
                             longueur, longueur_champ, format_sortie, type,  
                             longueur_effective, recursivite)) == NULL)  
                     {  
                         return(NULL);  
                     }  
   
                     if ((*(*((struct_tableau *) (*s_objet).objet))  
                             .elements[i]).type == CHN)  
                     {  
                         chaine = (unsigned char *)  
                                 malloc((strlen(chaine_formatee)  
                                 + strlen(chaine_sauvegarde) + 4)  
                                 * sizeof(unsigned char));  
   
                         if (chaine == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         strcpy(chaine, chaine_sauvegarde);  
                         free(chaine_sauvegarde);  
                         strcat(chaine, " \"");  
                         strcat(chaine, chaine_formatee);  
                         free(chaine_formatee);  
                         strcat(chaine, "\"");  
                     }  
                     else if ((*(*((struct_tableau *) (*s_objet).objet))  
                             .elements[i]).type == NOM)  
                     {  
                         chaine = (unsigned char *)  
                                 malloc((strlen(chaine_formatee)  
                                 + strlen(chaine_sauvegarde) + 2)  
                                 * sizeof(unsigned char));  
   
                         if (chaine == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         sprintf(chaine, "%s %s", chaine_sauvegarde,  
                                 chaine_formatee);  
                         free(chaine_formatee);  
                     }  
                     else  
                     {  
                         chaine = (unsigned char *)  
                                 malloc((strlen(chaine_formatee)  
                                 + strlen(chaine_sauvegarde) + 2)  
                                 * sizeof(unsigned char));  
   
                         if (chaine == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         strcpy(chaine, chaine_sauvegarde);  
                         free(chaine_sauvegarde);  
                         strcat(chaine, " ");  
                         strcat(chaine, chaine_formatee);  
                         free(chaine_formatee);  
                     }  
                 }  
             }  
   
             chaine_sauvegarde = chaine;  
             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 4)  
                     * sizeof(unsigned char));  
   
             if (chaine == NULL)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return(NULL);  
             }  
   
             strcpy(chaine, chaine_sauvegarde);  
             free(chaine_sauvegarde);  
             strcat(chaine, " ]>");  
         }          }
         else if ((*s_objet).type == MCX)          else if ((*s_objet).type == MCX)
         {          {
Line 4779  formateur_fichier(struct_processus *s_et Line 3468  formateur_fichier(struct_processus *s_et
   Matrice complexe    Matrice complexe
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
             if ((format_sortie != 'S') && (format_sortie != 'F') &&  
                     (format_sortie != 'I') && (format_sortie != 'E'))  
             {  
                 (*s_etat_processus).erreur_execution =  
                         d_ex_erreur_format_fichier;  
                 return(NULL);  
             }  
   
             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))  
                     .nombre_lignes;  
             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))  
                     .nombre_colonnes;  
   
             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));  
   
             if (chaine != NULL)  
             {  
                 strcpy(chaine, "[[");  
   
                 for(i = 0; i < nombre_lignes; i++)  
                 {  
                     for(j = 0; j < nombre_colonnes; j++)  
                     {  
                         if ((chaine_formatee =  
                                 formateur_fichier_nombre(s_etat_processus,  
                                 (void *) &(((struct_complexe16 **)  
                                 ((*((struct_matrice *)  
                                 ((*s_objet).objet))).tableau))[i][j]), 'C',  
                                 longueur, longueur_champ, format_sortie))  
                                 == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         chaine_sauvegarde = chaine;  
                         chaine = (unsigned char *) malloc(  
                                 (strlen(chaine_sauvegarde) +  
                                 strlen(chaine_formatee) + 2)  
                                 * sizeof(unsigned char));  
   
                         if (chaine == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         strcpy(chaine, chaine_sauvegarde);  
                         free(chaine_sauvegarde);  
                         strcat(chaine, " ");  
                         strcat(chaine, chaine_formatee);  
                         free(chaine_formatee);  
                     }  
   
                     chaine_sauvegarde = chaine;  
                     if (test_cfsf(s_etat_processus, 45) == d_vrai)  
                     {  
                         chaine = (unsigned char *) malloc(  
                                 (strlen(chaine_sauvegarde) + 6)  
                                 * sizeof(unsigned char));  
   
                         if (chaine == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         strcpy(chaine, chaine_sauvegarde);  
                         free(chaine_sauvegarde);  
                         strcat(chaine, " ]\n [");  
                     }  
                     else  
                     {  
                         chaine = (unsigned char *) malloc(  
                                 (strlen(chaine_sauvegarde) + 4)  
                                 * sizeof(unsigned char));  
   
                         if (chaine == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         strcpy(chaine, chaine_sauvegarde);  
                         free(chaine_sauvegarde);  
                         strcat(chaine, " ][");  
                     }  
                 }  
   
                 if (test_cfsf(s_etat_processus, 45) == d_vrai)  
                 {  
                     chaine[strlen(chaine) - 3] = ']';  
                     chaine[strlen(chaine) - 2] = 0;  
   
                     chaine_sauvegarde = chaine;  
                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)  
                             + 1) * sizeof(unsigned char));  
   
                     if (chaine == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     strcpy(chaine, chaine_sauvegarde);  
                     free(chaine_sauvegarde);  
                 }  
                 else  
                 {  
                     chaine[strlen(chaine) - 2] = ']';  
                     chaine[strlen(chaine) - 1] = 0;  
   
                     chaine_sauvegarde = chaine;  
                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)  
                             + 2) * sizeof(unsigned char));  
   
                     if (chaine == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     strcpy(chaine, chaine_sauvegarde);  
                     free(chaine_sauvegarde);  
                     strcat(chaine, "]");  
                 }  
             }  
         }          }
         else if ((*s_objet).type == MIN)          else if ((*s_objet).type == MIN)
         {          {
Line 4922  formateur_fichier(struct_processus *s_et Line 3477  formateur_fichier(struct_processus *s_et
   Matrice entière    Matrice entière
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
             if ((format_sortie != 'S') && (format_sortie != 'F') &&  
                     (format_sortie != 'I') && (format_sortie != 'E'))  
             {  
                 (*s_etat_processus).erreur_execution =  
                         d_ex_erreur_format_fichier;  
                 return(NULL);  
             }  
   
             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))  
                     .nombre_lignes;  
             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))  
                     .nombre_colonnes;  
   
             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));  
   
             if (chaine != NULL)  
             {  
                 strcpy(chaine, "[[");  
   
                 for(i = 0; i < nombre_lignes; i++)  
                 {  
                     for(j = 0; j < nombre_colonnes; j++)  
                     {  
                         if ((chaine_formatee =  
                                 formateur_fichier_nombre(s_etat_processus,  
                                 (void *) &(((integer8 **) ((*((struct_matrice *)  
                                 ((*s_objet).objet))).tableau))[i][j]), 'I',  
                                 longueur, longueur_champ, format_sortie))  
                                 == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         chaine_sauvegarde = chaine;  
                         chaine = (unsigned char *) malloc(  
                                 (strlen(chaine_sauvegarde) +  
                                 strlen(chaine_formatee) + 2)  
                                 * sizeof(unsigned char));  
   
                         if (chaine == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         strcpy(chaine, chaine_sauvegarde);  
                         free(chaine_sauvegarde);  
                         strcat(chaine, " ");  
                         strcat(chaine, chaine_formatee);  
                         free(chaine_formatee);  
                     }  
   
                     chaine_sauvegarde = chaine;  
                     if (test_cfsf(s_etat_processus, 45) == d_vrai)  
                     {  
                         chaine = (unsigned char *) malloc(  
                                 (strlen(chaine_sauvegarde) + 6)  
                                 * sizeof(unsigned char));  
   
                         if (chaine == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         strcpy(chaine, chaine_sauvegarde);  
                         free(chaine_sauvegarde);  
                         strcat(chaine, " ]\n [");  
                     }  
                     else  
                     {  
                         chaine = (unsigned char *) malloc(  
                                 (strlen(chaine_sauvegarde) + 4)  
                                 * sizeof(unsigned char));  
   
                         if (chaine == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         strcpy(chaine, chaine_sauvegarde);  
                         free(chaine_sauvegarde);  
                         strcat(chaine, " ][");  
                     }  
                 }  
   
                 if (test_cfsf(s_etat_processus, 45) == d_vrai)  
                 {  
                     chaine[strlen(chaine) - 3] = ']';  
                     chaine[strlen(chaine) - 2] = 0;  
   
                     chaine_sauvegarde = chaine;  
                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)  
                             + 1) * sizeof(unsigned char));  
   
                     if (chaine == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     strcpy(chaine, chaine_sauvegarde);  
                     free(chaine_sauvegarde);  
                 }  
                 else  
                 {  
                     chaine[strlen(chaine) - 2] = ']';  
                     chaine[strlen(chaine) - 1] = 0;  
   
                     chaine_sauvegarde = chaine;  
                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)  
                             + 2) * sizeof(unsigned char));  
   
                     if (chaine == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     strcpy(chaine, chaine_sauvegarde);  
                     free(chaine_sauvegarde);  
                     strcat(chaine, "]");  
                 }  
             }  
         }          }
         else if ((*s_objet).type == MRL)          else if ((*s_objet).type == MRL)
         {          {
Line 5064  formateur_fichier(struct_processus *s_et Line 3486  formateur_fichier(struct_processus *s_et
   Matrice réelle    Matrice réelle
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
             if ((format_sortie != 'S') && (format_sortie != 'F') &&  
                     (format_sortie != 'I') && (format_sortie != 'E'))  
             {  
                 (*s_etat_processus).erreur_execution =  
                         d_ex_erreur_format_fichier;  
                 return(NULL);  
             }  
   
             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))  
                     .nombre_lignes;  
             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))  
                     .nombre_colonnes;  
   
             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));  
   
             if (chaine != NULL)  
             {  
                 strcpy(chaine, "[[");  
   
                 for(i = 0; i < nombre_lignes; i++)  
                 {  
                     for(j = 0; j < nombre_colonnes; j++)  
                     {  
                         if ((chaine_formatee =  
                                 formateur_fichier_nombre(s_etat_processus,  
                                 (void *) &(((real8 **) ((*((struct_matrice *)  
                                 ((*s_objet).objet))).tableau))[i][j]), 'R',  
                                 longueur, longueur_champ, format_sortie))  
                                 == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         chaine_sauvegarde = chaine;  
                         chaine = (unsigned char *) malloc(  
                                 (strlen(chaine_sauvegarde) +  
                                 strlen(chaine_formatee) + 2)  
                                 * sizeof(unsigned char));  
   
                         if (chaine == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         strcpy(chaine, chaine_sauvegarde);  
                         free(chaine_sauvegarde);  
                         strcat(chaine, " ");  
                         strcat(chaine, chaine_formatee);  
                         free(chaine_formatee);  
                     }  
   
                     chaine_sauvegarde = chaine;  
                     if (test_cfsf(s_etat_processus, 45) == d_vrai)  
                     {  
                         chaine = (unsigned char *) malloc(  
                                 (strlen(chaine_sauvegarde) + 6)  
                                 * sizeof(unsigned char));  
   
                         if (chaine == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         strcpy(chaine, chaine_sauvegarde);  
                         free(chaine_sauvegarde);  
                         strcat(chaine, " ]\n [");  
                     }  
                     else  
                     {  
                         chaine = (unsigned char *) malloc(  
                                 (strlen(chaine_sauvegarde) + 4)  
                                 * sizeof(unsigned char));  
   
                         if (chaine == NULL)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_allocation_memoire;  
                             return(NULL);  
                         }  
   
                         strcpy(chaine, chaine_sauvegarde);  
                         free(chaine_sauvegarde);  
                         strcat(chaine, " ][");  
                     }  
                 }  
   
                 if (test_cfsf(s_etat_processus, 45) == d_vrai)  
                 {  
                     chaine[strlen(chaine) - 3] = ']';  
                     chaine[strlen(chaine) - 2] = 0;  
   
                     chaine_sauvegarde = chaine;  
                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)  
                             + 1) * sizeof(unsigned char));  
   
                     if (chaine == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     strcpy(chaine, chaine_sauvegarde);  
                     free(chaine_sauvegarde);  
                 }  
                 else  
                 {  
                     chaine[strlen(chaine) - 2] = ']';  
                     chaine[strlen(chaine) - 1] = 0;  
   
                     chaine_sauvegarde = chaine;  
                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)  
                             + 2) * sizeof(unsigned char));  
   
                     if (chaine == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     strcpy(chaine, chaine_sauvegarde);  
                     free(chaine_sauvegarde);  
                     strcat(chaine, "]");  
                 }  
             }  
         }          }
         else if ((*s_objet).type == NOM)          else if ((*s_objet).type == NOM)
         {          {
Line 5206  formateur_fichier(struct_processus *s_et Line 3495  formateur_fichier(struct_processus *s_et
   Nom    Nom
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
             chaine = (unsigned char *) malloc((strlen((*((struct_nom *)  
                     (*s_objet).objet)).nom) + 3) * sizeof(unsigned char));  
   
             if (chaine == NULL)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return(NULL);  
             }  
   
             sprintf(chaine, "'%s'", (*((struct_nom *) (*s_objet).objet)).nom);  
         }          }
         else if ((*s_objet).type == REL)          else if ((*s_objet).type == REL)
         {          {
Line 5228  formateur_fichier(struct_processus *s_et Line 3506  formateur_fichier(struct_processus *s_et
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
             if (format_sortie != 'R')              if ((format_sortie != 'R') && (format_sortie != 'C'))
             {              {
                 (*s_etat_processus).erreur_execution =                  (*s_etat_processus).erreur_execution =
                         d_ex_erreur_format_fichier;                          d_ex_erreur_format_fichier;
Line 5236  formateur_fichier(struct_processus *s_et Line 3514  formateur_fichier(struct_processus *s_et
             }              }
   
             if ((chaine = formateur_fichier_binaire_nombre(s_etat_processus,              if ((chaine = formateur_fichier_binaire_nombre(s_etat_processus,
                     (*s_objet).objet, 'R', longueur, longueur_effective))                      (*s_objet).objet, 'R', format_sortie,
                     == NULL)                      longueur, longueur_effective)) == NULL)
             {              {
                 return(NULL);                  return(NULL);
             }              }
Line 5250  formateur_fichier(struct_processus *s_et Line 3528  formateur_fichier(struct_processus *s_et
   Vecteur complexe    Vecteur complexe
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
             if ((format_sortie != 'S') && (format_sortie != 'F') &&  
                     (format_sortie != 'I') && (format_sortie != 'E'))  
             {  
                 (*s_etat_processus).erreur_execution =  
                         d_ex_erreur_format_fichier;  
                 return(NULL);  
             }  
   
             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))  
                     .taille;  
   
             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));  
   
             if (chaine != NULL)  
             {  
                 strcpy(chaine, "[");  
   
                 for(i = 0; i < nombre_colonnes; i++)  
                 {  
                     if ((chaine_formatee =  
                             formateur_fichier_nombre(s_etat_processus,  
                             (void *) &(((struct_complexe16 *)  
                             ((*((struct_vecteur *)  
                             ((*s_objet).objet))).tableau))[i]), 'C',  
                             longueur, longueur_champ, format_sortie)) == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     chaine_sauvegarde = chaine;  
                     chaine = (unsigned char *) malloc(  
                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)  
                             + 2) * sizeof(unsigned char));  
   
                     if (chaine == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     strcpy(chaine, chaine_sauvegarde);  
                     free(chaine_sauvegarde);  
                     strcat(chaine, " ");  
                     strcat(chaine, chaine_formatee);  
                     free(chaine_formatee);  
                 }  
   
                 chaine_sauvegarde = chaine;  
                 chaine = (unsigned char *) malloc(  
                         (strlen(chaine_sauvegarde) + 3)  
                         * sizeof(unsigned char));  
   
                 if (chaine == NULL)  
                 {  
                     (*s_etat_processus).erreur_systeme =  
                             d_es_allocation_memoire;  
                     return(NULL);  
                 }  
   
                 strcpy(chaine, chaine_sauvegarde);  
                 free(chaine_sauvegarde);  
                 strcat(chaine, " ]");  
             }  
         }          }
         else if ((*s_objet).type == VIN)          else if ((*s_objet).type == VIN)
         {          {
Line 5326  formateur_fichier(struct_processus *s_et Line 3537  formateur_fichier(struct_processus *s_et
   Vecteur entier    Vecteur entier
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
           }
           else if ((*s_objet).type == VRL)
           {
   
             if ((format_sortie != 'S') && (format_sortie != 'F') &&  /*
                     (format_sortie != 'I') && (format_sortie != 'E'))  --------------------------------------------------------------------------------
             {    Vecteur réel
                 (*s_etat_processus).erreur_execution =  --------------------------------------------------------------------------------
                         d_ex_erreur_format_fichier;  */
                 return(NULL);          }
             }          else
           {
             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))              // Type non exportable
                     .taille;  
   
             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));  
   
             if (chaine != NULL)              (*s_etat_processus).erreur_execution = d_ex_erreur_format_fichier;
             {              free(chaine);
                 strcpy(chaine, "[");  
   
                 for(i = 0; i < nombre_colonnes; i++)              return(NULL);
                 {          }
                     if ((chaine_formatee =  
                             formateur_fichier_nombre(s_etat_processus,  
                             (void *) &(((integer8 *) ((*((struct_vecteur *)  
                             ((*s_objet).objet))).tableau))[i]), 'I',  
                             longueur, longueur_champ, format_sortie)) == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     chaine_sauvegarde = chaine;          // On n'ajoute la longueur de l'enregistrement que dans le cas
                     chaine = (unsigned char *) malloc(          // où le format est utilisé dans un fichier.
                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)  
                             + 2) * sizeof(unsigned char));  
   
                     if (chaine == NULL)          if (((*recursivite) == 1) && (export_fichier == d_vrai))
                     {          {
                         (*s_etat_processus).erreur_systeme =              // Ajout de la longueur totale en fin d'enregistrement.
                                 d_es_allocation_memoire;  
                         return(NULL);  
                     }  
   
                     strcpy(chaine, chaine_sauvegarde);              longueur_totale = (*longueur_effective);
                     free(chaine_sauvegarde);  
                     strcat(chaine, " ");  
                     strcat(chaine, chaine_formatee);  
                     free(chaine_formatee);  
                 }  
   
                 chaine_sauvegarde = chaine;              if (longueur_totale < (((integer8) 1) << 7))
                 chaine = (unsigned char *) malloc(              {
                         (strlen(chaine_sauvegarde) + 3)                  tampon[0] = ((longueur_totale + 1) << 1) & 0xFF;
                         * sizeof(unsigned char));  
   
                 if (chaine == NULL)                  if ((chaine = realloc(chaine, (longueur_totale + 1)
                           * 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);
                 }                  }
   
                 strcpy(chaine, chaine_sauvegarde);                  // XXXX XXX0
                 free(chaine_sauvegarde);                  memcpy(&(chaine[longueur_totale]), tampon, 1);
                 strcat(chaine, " ]");                  longueur_totale += 1;
             }  
         }  
         else if ((*s_objet).type == VRL)  
         {  
   
 /*  
 --------------------------------------------------------------------------------  
   Vecteur réel  
 --------------------------------------------------------------------------------  
 */  
   
             if ((format_sortie != 'S') && (format_sortie != 'F') &&  
                     (format_sortie != 'I') && (format_sortie != 'E'))  
             {  
                 (*s_etat_processus).erreur_execution =  
                         d_ex_erreur_format_fichier;  
                 return(NULL);  
             }              }
               else if (longueur_totale < (((integer8) 1) << 16))
             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))  
                     .taille;  
   
             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));  
   
             if (chaine != NULL)  
             {              {
                 strcpy(chaine, "[");                  longueur_totale++;
   
                 for(i = 0; i < nombre_colonnes; i++)                  for(i = 0; i < 7; i++)
                 {                  {
                     if ((chaine_formatee =                      if ((longueur_totale < (((integer8) 1) << (8 * (i + 2))))
                             formateur_fichier_nombre(s_etat_processus,                              || (i == 6))
                             (void *) &(((real8 *) ((*((struct_vecteur *)  
                             ((*s_objet).objet))).tableau))[i]), 'R',  
                             longueur, longueur_champ, format_sortie)) == NULL)  
                     {                      {
                         (*s_etat_processus).erreur_systeme =                          // MSB (4 bits de poids fort)
                                 d_es_allocation_memoire;                          tampon[0] = ((longueur_totale >> 8) & 0xF0)
                         return(NULL);                                  | 0x1 /* longueur supérieure à 7 bits */
                     }                                  | ((i + 1) << 1);
   
                     chaine_sauvegarde = chaine;                          for(j = 0; j <= i; j++)
                     chaine = (unsigned char *) malloc(                          {
                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)                              tampon[(i - j) + 1] = (longueur_totale >> (j + 1))
                             + 2) * sizeof(unsigned char));                                      & 0xFF;
                           }
   
                     if (chaine == NULL)                          // MSB (4 bits de poids faible)
                     {                          tampon[i + 2] = (((longueur_totale >> 8) & 0x0F) << 4)
                         (*s_etat_processus).erreur_systeme =                                  | 0x1 /* longueur supérieure à 7 bits */
                                 d_es_allocation_memoire;                                  | ((i + 1) << 1);
                         return(NULL);                          break;
                     }                      }
   
                     strcpy(chaine, chaine_sauvegarde);  
                     free(chaine_sauvegarde);  
                     strcat(chaine, " ");  
                     strcat(chaine, chaine_formatee);  
                     free(chaine_formatee);  
                 }                  }
   
                 chaine_sauvegarde = chaine;                  if ((chaine = realloc(chaine, (longueur_totale + 3)
                 chaine = (unsigned char *) malloc(                          * sizeof(unsigned char))) == NULL)
                         (strlen(chaine_sauvegarde) + 3)  
                         * sizeof(unsigned char));  
   
                 if (chaine == NULL)  
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
                             d_es_allocation_memoire;                              d_es_allocation_memoire;
                     return(NULL);                      return(NULL);
                 }                  }
   
                 strcpy(chaine, chaine_sauvegarde);                  memcpy(&(chaine[longueur_totale]), tampon, 3);
                 free(chaine_sauvegarde);                  longueur_totale += 3;
                 strcat(chaine, " ]");              }
               else if (longueur_totale < (((integer8) 1) << 32))
               {
             }              }
         }  
         else  
         {  
             // Type non exportable  
   
             (*s_etat_processus).erreur_execution = d_ex_erreur_format_fichier;  
             free(chaine);  
   
             return(NULL);              __zone();
               (*longueur_effective) = longueur_totale;
         }          }
     }      }
   
Line 5874  formateur_fichier_reel(struct_processus Line 4025  formateur_fichier_reel(struct_processus
   
 unsigned char *  unsigned char *
 formateur_fichier_binaire_nombre(struct_processus *s_etat_processus,  formateur_fichier_binaire_nombre(struct_processus *s_etat_processus,
         void *valeur_numerique, unsigned char type, long longueur,          void *valeur_numerique, unsigned char type_entree,
         long *longueur_conversion)          unsigned char type, long longueur, long *longueur_conversion)
 {  {
     unsigned char               *chaine;      unsigned char               *chaine;
   
     switch(type)      switch(type)
     {      {
         default :  
         case 'I' :          case 'I' :
         {          {
               if (type_entree != type)
               {
                   (*s_etat_processus).erreur_execution = d_ex_representation;
                   return(NULL);
               }
   
             switch(longueur)              switch(longueur)
             {              {
                 case 1:                  case 1:
Line 6009  formateur_fichier_binaire_nombre(struct_ Line 4165  formateur_fichier_binaire_nombre(struct_
             {              {
                 case 4:                  case 4:
                 {                  {
                     double          vinf;                      real8           valeur;
                     double          vsup;                      real8           vinf;
                       real8           vsup;
   
                     union                      union
                     {                      {
Line 6018  formateur_fichier_binaire_nombre(struct_ Line 4175  formateur_fichier_binaire_nombre(struct_
                         integer4    i4;                          integer4    i4;
                     }               eq4;                      }               eq4;
   
                     if ((*((real8 *) valeur_numerique)) > 0)                      if (type_entree == 'R')
                     {                      {
                         vinf = nextafter((*((real8 *) valeur_numerique)), 0);                          valeur = (*((real8 *) valeur_numerique));
                         vsup = nextafter((*((real8 *) valeur_numerique)),                      }
                                 (*((real8 *) valeur_numerique)) * 2);                      else if (type_entree == 'I')
                       {
                           valeur = (*((integer8 *) valeur_numerique));
                     }                      }
                     else                      else
                     {                      {
                         vinf = nextafter((*((real8 *) valeur_numerique)),                          (*s_etat_processus).erreur_execution =
                                 (*((real8 *) valeur_numerique)) * 2);                                  d_ex_representation;
                         vsup = nextafter((*((real8 *) valeur_numerique)), 0);                          return(NULL);
                     }                      }
   
                     if (!((vinf <= ((real4) (*((real8 *) valeur_numerique)))) &&                      if (valeur > 0)
                             ((real4) ((*((real8 *) valeur_numerique)))                      {
                             <= vsup)))                          vinf = nextafter(valeur, 0);
                           vsup = nextafter(valeur, valeur * 2);
                       }
                       else
                       {
                           vinf = nextafter(valeur, valeur * 2);
                           vsup = nextafter(valeur, 0);
                       }
   
                       if (!((vinf <= ((real4) valeur)) &&
                               (((real4) valeur) <= vsup)))
                     {                      {
                         (*s_etat_processus).erreur_execution =                          (*s_etat_processus).erreur_execution =
                                 d_ex_representation;                                  d_ex_representation;
Line 6047  formateur_fichier_binaire_nombre(struct_ Line 4216  formateur_fichier_binaire_nombre(struct_
                         return(NULL);                          return(NULL);
                     }                      }
   
                     eq4.r4 = (real4) (*((real8 *) valeur_numerique));                      eq4.r4 = (real4) valeur;
                     (*longueur_conversion) = 5;                      (*longueur_conversion) = 5;
                     chaine[0] = 0x12;                      chaine[0] = 0x14;
                     chaine[1] = (eq4.i4 >> 24) & 0xFF;                      chaine[1] = (eq4.i4 >> 24) & 0xFF;
                     chaine[2] = (eq4.i4 >> 16) & 0xFF;                      chaine[2] = (eq4.i4 >> 16) & 0xFF;
                     chaine[3] = (eq4.i4 >> 8) & 0xFF;                      chaine[3] = (eq4.i4 >> 8) & 0xFF;
Line 6072  formateur_fichier_binaire_nombre(struct_ Line 4241  formateur_fichier_binaire_nombre(struct_
                         return(NULL);                          return(NULL);
                     }                      }
   
                     eq8.r8 = (*((real8 *) valeur_numerique));                      if (type_entree == 'I')
                       {
                           eq8.r8 = (*((integer8 *) valeur_numerique));
                       }
                       else if (type_entree == 'R')
                       {
                           eq8.r8 = (*((real8 *) valeur_numerique));
                       }
                       else
                       {
                           (*s_etat_processus).erreur_execution =
                                   d_ex_representation;
                           return(NULL);
                       }
   
                     (*longueur_conversion) = 9;                      (*longueur_conversion) = 9;
                     chaine[0] = 0x13;                      chaine[0] = 0x15;
                     chaine[1] = (eq8.i8 >> 56) & 0xFF;                      chaine[1] = (eq8.i8 >> 56) & 0xFF;
                     chaine[2] = (eq8.i8 >> 48) & 0xFF;                      chaine[2] = (eq8.i8 >> 48) & 0xFF;
                     chaine[3] = (eq8.i8 >> 40) & 0xFF;                      chaine[3] = (eq8.i8 >> 40) & 0xFF;
Line 6110  formateur_fichier_binaire_nombre(struct_ Line 4292  formateur_fichier_binaire_nombre(struct_
                     long                limag;                      long                limag;
                     long                lreel;                      long                lreel;
   
                     if ((partie_reelle = formateur_fichier_binaire_nombre(                      real8               zero;
                             s_etat_processus, &((*((complex16 *)  
                             valeur_numerique)).partie_reelle), 'R', 4, &lreel))                      if (type_entree == 'I')
                             == NULL)  
                     {                      {
                         return(NULL);                          if ((partie_reelle = formateur_fichier_binaire_nombre(
                                   s_etat_processus, &(*((integer8 *)
                                   valeur_numerique)), 'I', 'R', 4,
                                   &lreel)) == NULL)
                           {
                               return(NULL);
                           }
   
                           zero = 0;
   
                           if ((partie_imaginaire =
                                   formateur_fichier_binaire_nombre(
                                   s_etat_processus, &zero, 'R', 'R', 4,
                                   &limag)) == NULL)
                           {
                               free(partie_reelle);
                               return(NULL);
                           }
                     }                      }
                       else if (type_entree == 'R')
                       {
                           if ((partie_reelle = formateur_fichier_binaire_nombre(
                                   s_etat_processus, &(*((real8 *)
                                   valeur_numerique)), 'R', 'R', 4,
                                   &lreel)) == NULL)
                           {
                               return(NULL);
                           }
   
                           zero = 0;
   
                     if ((partie_imaginaire = formateur_fichier_binaire_nombre(                          if ((partie_imaginaire =
                             s_etat_processus, &((*((complex16 *)                                  formateur_fichier_binaire_nombre(
                             valeur_numerique)).partie_imaginaire), 'R', 4,                                  s_etat_processus, &zero, 'R', 'R', 4,
                             &limag)) == NULL)                                  &limag)) == NULL)
                           {
                               free(partie_reelle);
                               return(NULL);
                           }
                       }
                       else if (type_entree == 'C')
                     {                      {
                         free(partie_reelle);                          if ((partie_reelle = formateur_fichier_binaire_nombre(
                                   s_etat_processus, &((*((complex16 *)
                                   valeur_numerique)).partie_reelle), 'R', 'R', 4,
                                   &lreel)) == NULL)
                           {
                               return(NULL);
                           }
   
                           if ((partie_imaginaire =
                                   formateur_fichier_binaire_nombre(
                                   s_etat_processus, &((*((complex16 *)
                                   valeur_numerique)).partie_imaginaire),
                                   'R', 'R', 4, &limag)) == NULL)
                           {
                               free(partie_reelle);
                               return(NULL);
                           }
                       }
                       else
                       {
                           (*s_etat_processus).erreur_execution =
                                   d_ex_erreur_format_fichier;
                         return(NULL);                          return(NULL);
                     }                      }
   
Line 6155  formateur_fichier_binaire_nombre(struct_ Line 4391  formateur_fichier_binaire_nombre(struct_
   
                     long                limag;                      long                limag;
                     long                lreel;                      long                lreel;
                       real8               zero;
   
                     if ((partie_reelle = formateur_fichier_binaire_nombre(                      if (type_entree == 'I')
                             s_etat_processus, &((*((complex16 *)  
                             valeur_numerique)).partie_reelle), 'R', 8, &lreel))  
                             == NULL)  
                     {                      {
                         return(NULL);                          if ((partie_reelle = formateur_fichier_binaire_nombre(
                                   s_etat_processus, &(*((integer8 *)
                                   valeur_numerique)), 'I', 'R', 8,
                                   &lreel)) == NULL)
                           {
                               return(NULL);
                           }
   
                           zero = 0;
   
                           if ((partie_imaginaire =
                                   formateur_fichier_binaire_nombre(
                                   s_etat_processus, &zero, 'R', 'R', 8,
                                   &limag)) == NULL)
                           {
                               free(partie_reelle);
                               return(NULL);
                           }
                     }                      }
                       else if (type_entree == 'R')
                       {
                           if ((partie_reelle = formateur_fichier_binaire_nombre(
                                   s_etat_processus, &(*((real8 *)
                                   valeur_numerique)), 'R', 'R', 8,
                                   &lreel)) == NULL)
                           {
                               return(NULL);
                           }
   
                           zero = 0;
   
                     if ((partie_imaginaire = formateur_fichier_binaire_nombre(                          if ((partie_imaginaire =
                             s_etat_processus, &((*((complex16 *)                                  formateur_fichier_binaire_nombre(
                             valeur_numerique)).partie_imaginaire), 'R', 8,                                  s_etat_processus, &zero, 'R', 'R', 8,
                             &limag)) == NULL)                                  &limag)) == NULL)
                           {
                               free(partie_reelle);
                               return(NULL);
                           }
                       }
                       else if (type_entree == 'C')
                     {                      {
                         free(partie_reelle);                          if ((partie_reelle = formateur_fichier_binaire_nombre(
                                   s_etat_processus, &((*((complex16 *)
                                   valeur_numerique)).partie_reelle), 'R', 'R', 8,
                                   &lreel)) == NULL)
                           {
                               return(NULL);
                           }
   
                           if ((partie_imaginaire =
                                   formateur_fichier_binaire_nombre(
                                   s_etat_processus, &((*((complex16 *)
                                   valeur_numerique)).partie_imaginaire),
                                   'R', 'R', 8, &limag)) == NULL)
                           {
                               free(partie_reelle);
                               return(NULL);
                           }
                       }
                       else
                       {
                           (*s_etat_processus).erreur_execution =
                                   d_ex_erreur_format_fichier;
                         return(NULL);                          return(NULL);
                     }                      }
   
Line 6204  formateur_fichier_binaire_nombre(struct_ Line 4493  formateur_fichier_binaire_nombre(struct_
   
             break;              break;
         }          }
   
           default :
           {
               (*s_etat_processus).erreur_execution = d_ex_erreur_format_fichier;
               return(NULL);
           }
     }      }
   
     return(chaine);      return(chaine);
 }  }
   
   
   /*
   ================================================================================
     Routines de conversion d'un objet binaire en struct_objet *
   ================================================================================
     Entrées : pointeur sur un void *. Si longueur_buffer est strictement inférieur
               à zéro, il s'agit d'un file * sinon d'un buffer de type unsigned
               char *.
   --------------------------------------------------------------------------------
     Sorties : pointeur sur un struct_objet nouvellement alloué
   --------------------------------------------------------------------------------
     Effets de bord : néant
   ================================================================================
   */
   
   struct_objet *
   lecture_fichier_non_formate(struct_processus *s_etat_processus,
           void *argument, integer8 longueur_buffer, logical1 recursivite)
   {
       file                        *fichier;
   
       integer8                    i;
       integer8                    longueur;
   
       struct_liste_chainee        *l_element_courant;
   
       struct_objet                *s_objet;
       struct_objet                *s_objet_elementaire;
   
       unsigned char               octets[8];
       unsigned char               *buffer;
       unsigned char               *ptr;
   
       size_t                      deplacement;
   
       if (longueur_buffer < 0)
       {
           fichier = argument;
           buffer = NULL;
           ptr = NULL;
       }
       else
       {
           buffer = argument;
           ptr = buffer;
           fichier = NULL;
       }
   
   
       if (longueur_buffer < 0)
       {
           if (fread(octets, (size_t) sizeof(unsigned char),
                   1, fichier) != 1)
           {
               (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
               return(NULL);
           }
       }
       else
       {
           octets[0] = *ptr++;
       }
   
       switch(octets[0] & 0xF0)
       {
           case 0x10:  // Scalaire
           {
               switch(octets[0] & 0x0C)
               {
                   case 0x00:  // Entier
                   {
                       if ((s_objet = allocation(s_etat_processus, INT)) == NULL)
                       {
                           return(NULL);
                       }
   
                       switch(octets[0] & 0x03)
                       {
                           case 0x00:  // integer*1
                           {
                               deplacement = 1;
                               break;
                           }
   
                           case 0x01:  // integer*2
                           {
                               deplacement = 2;
                               break;
                           }
   
                           case 0x02:  // integer*4
                           {
                               deplacement = 4;
                               break;
                           }
   
                           case 0x03:  // integer*8
                           {
                               deplacement = 8;
                               break;
                           }
                       }
   
                       if (longueur_buffer < 0)
                       {
                           if (fread(octets, (size_t) sizeof(unsigned char),
                                   deplacement, fichier) != deplacement)
                           {
                               (*s_etat_processus).erreur_systeme =
                                       d_es_erreur_fichier;
                               return(NULL);
                           }
                       }
                       else
                       {
                           for(i = 0; i < (signed) deplacement; i++)
                           {
                               octets[i] = *ptr++;
                           }
                       }
   
                       (*((integer8 *) (*s_objet).objet)) = 0;
   
                       for(i = 0; i < (signed) deplacement; i++)
                       {
                           (*((integer8 *) (*s_objet).objet)) |=
                                   octets[i] << (8 * ((deplacement - 1) - i));
                       }
   
                       break;
                   }
   
                   case 0x04:  // Réel
                   {
                       if ((s_objet = allocation(s_etat_processus, REL)) == NULL)
                       {
                           return(NULL);
                       }
   
                       switch(octets[0] & 0x03)
                       {
                           case 0x00:  // real*4
                           {
                               deplacement = 4;
                               break;
                           }
   
                           case 0x01:  // real*8
                           {
                               deplacement = 8;
                               break;
                           }
   
                           default:
                           {
                               (*s_etat_processus).erreur_execution =
                                       d_ex_syntaxe;
                               return(NULL);
                           }
                       }
   
                       if (longueur_buffer < 0)
                       {
                           if (fread(octets, (size_t) sizeof(unsigned char),
                                   deplacement, fichier) != deplacement)
                           {
                               (*s_etat_processus).erreur_systeme =
                                       d_es_erreur_fichier;
                               return(NULL);
                           }
                       }
                       else
                       {
                           for(i = 0; i < (signed) deplacement; i++)
                           {
                               octets[i] = *ptr++;
                           }
                       }
   
                       if (deplacement == 4)
                       {
                           union
                           {
                               real4       r4;
                               integer4    i4;
                           } eq4;
   
                           eq4.i4 = 0;
   
                           for(i = 0; i < (signed) deplacement; i++)
                           {
                               eq4.i4 |= ((integer4) octets[i]) <<
                                       (8 * ((deplacement - 1) - i));
                           }
   
                           (*((real8 *) (*s_objet).objet)) = (real8) eq4.r4;
                       }
                       else
                       {
                           union
                           {
                               real8       r8;
                               integer8    i8;
                           } eq8;
   
                           eq8.i8 = 0;
   
                           for(i = 0; i < (signed) deplacement; i++)
                           {
                               eq8.i8 |= ((integer8) octets[i]) <<
                                       (8 * ((deplacement - 1) - i));
                           }
   
                           (*((real8 *) (*s_objet).objet)) = (real8) eq8.r8;
                       }
   
                       break;
                   }
   
                   case 0x08:  // Complexe
                   {
                       if ((s_objet = allocation(s_etat_processus, CPL)) == NULL)
                       {
                           return(NULL);
                       }
   
                       break;
                   }
   
                   default:
                   {
                       (*s_etat_processus).erreur_execution = d_ex_syntaxe;
                       return(NULL);
                   }
               }
   
               break;
           }
   
           case 0x40:  // Liste
           {
               if ((octets[0] & 0x08) == 0)    // Longueur sur 6 bits
               {
                   longueur = (octets[0] & 0x07);
               }
               else
               {
                   switch(octets[0] & 0x07)
                   {
                       case 0x00:          // Longueur sur 8 bits
                       {
                           if (longueur_buffer < 0)
                           {
                               if (fread(octets, (size_t) sizeof(unsigned char),
                                       1, fichier) != 1)
                               {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_erreur_fichier;
                                   return(NULL);
                               }
                           }
                           else
                           {
                               octets[0] = *ptr++;
                           }
   
                           longueur = octets[0];
                           break;
                       }
   
                       case 0x01:          // Longueur sur 16 bits
                       {
                           if (longueur_buffer < 0)
                           {
                               if (fread(octets, (size_t) sizeof(unsigned char),
                                       2, fichier) != 2)
                               {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_erreur_fichier;
                                   return(NULL);
                               }
                           }
                           else
                           {
                               octets[0] = *ptr++;
                               octets[1] = *ptr++;
                           }
   
                           longueur = (((integer8) (octets[0])) << 8)
                                   | ((integer8) (octets[1]));
                           break;
                       }
   
                       case 0x02:          // Longueur sur 32 bits
                       {
                           if (longueur_buffer < 0)
                           {
                               if (fread(octets, (size_t) sizeof(unsigned char),
                                       4, fichier) != 4)
                               {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_erreur_fichier;
                                   return(NULL);
                               }
                           }
                           else
                           {
                               octets[0] = *ptr++;
                               octets[1] = *ptr++;
                               octets[2] = *ptr++;
                               octets[3] = *ptr++;
                           }
   
                           longueur = (((integer8) (octets[0])) << 24)
                                   | (((integer8) (octets[1])) << 16)
                                   | (((integer8) (octets[2])) << 8)
                                   | ((integer8) (octets[3]));
                           break;
                       }
   
                       case 0x03:          // Longueur sur 64 bits
                       {
                           if (longueur_buffer < 0)
                           {
                               if (fread(octets, (size_t) sizeof(unsigned char),
                                       8, fichier) != 8)
                               {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_erreur_fichier;
                                   return(NULL);
                               }
                           }
                           else
                           {
                               octets[0] = *ptr++;
                               octets[1] = *ptr++;
                               octets[2] = *ptr++;
                               octets[3] = *ptr++;
                               octets[4] = *ptr++;
                               octets[5] = *ptr++;
                               octets[6] = *ptr++;
                               octets[7] = *ptr++;
                           }
   
                           longueur = (((integer8) (octets[0])) << 56)
                                   | (((integer8) (octets[1])) << 48)
                                   | (((integer8) (octets[2])) << 40)
                                   | (((integer8) (octets[3])) << 32)
                                   | (((integer8) (octets[4])) << 24)
                                   | (((integer8) (octets[5])) << 16)
                                   | (((integer8) (octets[6])) << 8)
                                   | ((integer8) (octets[7]));
                           break;
                       }
   
                       default:
                       {
                           (*s_etat_processus).erreur_execution = d_ex_syntaxe;
                           return(NULL);
                       }
                   }
               }
   
               if ((s_objet = allocation(s_etat_processus, LST)) == NULL)
               {
                   return(NULL);
               }
   
               l_element_courant = NULL;
   
               for(i = 0; i < longueur; i++)
               {
                   // Lecture des éléments de la liste.
   
                   if (longueur_buffer < 0)
                   {
                       if ((s_objet_elementaire = lecture_fichier_non_formate(
                               s_etat_processus, fichier, longueur_buffer, d_vrai))
                               == NULL)
                       {
                           liberation(s_etat_processus, s_objet);
                           return(NULL);
                       }
                   }
                   else
                   {
                       if ((s_objet_elementaire = lecture_fichier_non_formate(
                               s_etat_processus, &ptr,
                               longueur_buffer - (ptr - buffer), d_vrai)) == NULL)
                       {
                           liberation(s_etat_processus, s_objet);
                           return(NULL);
                       }
                   }
   
                   if (l_element_courant == NULL)
                   {
                       if (((*s_objet).objet = allocation_maillon(
                               s_etat_processus)) == NULL)
                       {
                           liberation(s_etat_processus, s_objet_elementaire);
                           liberation(s_etat_processus, s_objet);
                           return(NULL);
                       }
   
                       l_element_courant = (*s_objet).objet;
                   }
                   else
                   {
                       if (((*l_element_courant).suivant = allocation_maillon(
                               s_etat_processus)) == NULL)
                       {
                           liberation(s_etat_processus, s_objet_elementaire);
                           liberation(s_etat_processus, s_objet);
                           return(NULL);
                       }
   
                       l_element_courant = (*l_element_courant).suivant;
                   }
   
                   (*l_element_courant).donnee = s_objet_elementaire;
                   (*l_element_courant).suivant = NULL;
               }
   
               break;
           }
   
           case 0x80:  // Chaîne de caractères
           {
               s_objet = NULL;
               break;
           }
   
           default:
           {
               (*s_etat_processus).erreur_execution = d_ex_syntaxe;
               return(NULL);
           }
       }
   
       if ((longueur_buffer < 0) && (recursivite == d_faux))
       {
           // Lecture depuis un fichier, on saute le champ de queue qui contient
           // la longueur de l'enregistrement.
   
           if (fread(octets, (size_t) sizeof(unsigned char), 1, fichier) != 1)
           {
               liberation(s_etat_processus, s_objet);
   
               (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
               return(NULL);
           }
   
           if ((octets[0] & 0x01) != 0)
           {
               deplacement = ((octets[0] & 0x0F) >> 1) + 1;
   
               if (fread(octets, (size_t) sizeof(unsigned char), deplacement,
                       fichier) != deplacement)
               {
                   liberation(s_etat_processus, s_objet);
   
                   (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   return(NULL);
               }
           }
       }
   
       return(s_objet);
   }
   
 // vim: ts=4  // vim: ts=4

Removed from v.1.51  
changed lines
  Added in v.1.52


CVSweb interface <joel.bertrand@systella.fr>