File:  [local] / rpl / src / formateur_fichiers.c
Revision 1.34: download - view: text, annotated - select for diffs - revision graph
Tue Nov 15 07:01:37 2011 UTC (12 years, 5 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Correction des fuites de mémoire à l'ouverture de sqlite (lorsque la base est censée exister mais qu'elle n'existe pas)
Correction des makefiles pour qu'ils soient moins verbeux.
Ajout de l'écriture des fichiers binaires (listes, entiers, réels, complexes).

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.1.4
    4:   Copyright (C) 1989-2011 Dr. BERTRAND Joël
    5: 
    6:   This file is part of RPL/2.
    7: 
    8:   RPL/2 is free software; you can redistribute it and/or modify it
    9:   under the terms of the CeCILL V2 License as published by the french
   10:   CEA, CNRS and INRIA.
   11:  
   12:   RPL/2 is distributed in the hope that it will be useful, but WITHOUT
   13:   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   14:   FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License
   15:   for more details.
   16:  
   17:   You should have received a copy of the CeCILL License
   18:   along with RPL/2. If not, write to info@cecill.info.
   19: ================================================================================
   20: */
   21: 
   22: 
   23: #include "rpl-conv.h"
   24: 
   25: 
   26: /*
   27: ================================================================================
   28:   Routine de formation des données pour l'écriture dans les fichiers
   29: ================================================================================
   30:   Entrées : structure sur l'état du processus et objet à afficher
   31:   Longueur est la précision requise et longueur_champ, le nombre maximal
   32:   de caractères de la chaîne résultat (-1 signifiant une absence de contrainte)
   33:   Type = 'F/U' (formaté, non formaté)
   34: --------------------------------------------------------------------------------
   35:   Sorties : chaine de caractères et longueur du tableau de caractères
   36: --------------------------------------------------------------------------------
   37:   Effets de bord : néant
   38: ================================================================================
   39: */
   40: 
   41: unsigned char *
   42: formateur_fichier(struct_processus *s_etat_processus, struct_objet *s_objet,
   43:         struct_objet *s_format, long longueur, long longueur_champ,
   44:         unsigned char format_sortie, unsigned char type,
   45:         long *longueur_effective, long *recursivite)
   46: {
   47:     /*
   48:      * Traitement du format des fichiers formatés :
   49:      *
   50:      * { "standard*(*)" (format classique sans limitation)
   51:      *   "standard*(Y)" (format classique limité à Y caractères)
   52:      *   "fixed*X(*)"   (format virgule fixe avec une partie
   53:      *                   fractionnaire composée de X chiffres,
   54:      *                   mais dont la longueur est limité par
   55:      *                   la précision de la représentation interne)
   56:      *   "fixed*X(Y)"   (idem, mais longueur totale inférieure ou égale à
   57:      *                   Y caractères)
   58:      *   "scientific*X(*)"
   59:      *   "scientific*X(Y)"
   60:      *   "engineer*X(*)"
   61:      *   "engineer*X(Y)"
   62:      *   "binary*X(*)"
   63:      *   "binary*X(Y)"  (X est la base : 2, 8, 10, 16)
   64:      *   "character*(*)"
   65:      *   "character*(Y)" }
   66:      *
   67:      * Traitement du format des fichiers non formatés :
   68:      *
   69:      * { "integer*1", "integer*2", "integer*4", "integer*8",
   70:      *   "real*4", "real*8", ["real*16",]
   71:      *   "complex*8", "complex*16", ["complex*32",]
   72:      *   "logical*1", "logical*2", "logical*4", logical*8",
   73:      *   "character" }
   74:      */
   75: 
   76:     logical1                    autorisation_parenthese;
   77:     logical1                    format_degenere;
   78:     logical1                    longueur_3bits;
   79:     logical1                    longueur_6bits;
   80:     logical1                    presence_signe;
   81: 
   82:     struct_liste_chainee        *l_atome;
   83:     struct_liste_chainee        *l_element_courant;
   84:     struct_liste_chainee        *l_element_courant_format;
   85:     struct_liste_chainee        *l_liste1;
   86:     struct_liste_chainee        *l_liste2;
   87: 
   88:     struct_objet                *s_sous_objet;
   89:     struct_objet                *s_sous_objet_1;
   90:     struct_objet                *s_sous_objet_2;
   91:     struct_objet                *s_sous_objet_3;
   92: 
   93:     unsigned char               base[1 + 1];
   94:     unsigned char               *chaine;
   95:     unsigned char               *chaine_fonction;
   96:     unsigned char               *chaine_formatee;
   97:     unsigned char               *chaine_tampon;
   98:     unsigned char               *chaine_sauvegarde;
   99:     unsigned char               *format_chaine;
  100:     unsigned char               longueur_optimale;
  101:     unsigned char               parametre_longueur;
  102:     unsigned char               *ptre;
  103:     unsigned char               *ptrl;
  104:     unsigned char               tampon[64 + 1];
  105: 
  106:     unsigned long               i;
  107:     unsigned long               j;
  108:     unsigned long               longueur_binaire;
  109:     unsigned long               longueur_champ_final;
  110:     unsigned long               nombre_arguments;
  111:     unsigned long               nombre_arguments_fonction;
  112:     unsigned long               nombre_colonnes;
  113:     unsigned long               nombre_elements;
  114:     unsigned long               nombre_lignes;
  115: 
  116:     integer8                    longueur_liste;
  117:     integer8                    longueur_entete;
  118:     integer8                    longueur_objet;
  119:     integer8                    longueur_totale;
  120:     integer8                    masque_binaire;
  121:     integer8                    position_1;
  122:     integer8                    position_2;
  123:     integer8                    position_3;
  124: 
  125:     long                        offset;
  126: 
  127:     (*recursivite)++;
  128: 
  129:     if (type == 'F')
  130:     {
  131:         /*
  132:          * Fichiers formatés
  133:          */
  134: 
  135:         chaine = NULL;
  136:         chaine_formatee = NULL;
  137:         chaine_sauvegarde = NULL;
  138: 
  139:         strcpy(base, " ");
  140: 
  141:         longueur_binaire = 0;
  142:         masque_binaire = 0;
  143: 
  144:         if ((*s_objet).type == ALG)
  145:         {
  146: 
  147: /*
  148: --------------------------------------------------------------------------------
  149:   Expression algébrique
  150: --------------------------------------------------------------------------------
  151: */
  152: 
  153:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
  154: 
  155:             while(l_element_courant != NULL)
  156:             {
  157:                 if ((*(*l_element_courant).donnee).type == FCT)
  158:                 {
  159:                     if ((strcmp((*((struct_fonction *) (*(*l_element_courant)
  160:                             .donnee).objet)).nom_fonction, "<<") != 0) &&
  161:                             (strcmp((*((struct_fonction *)
  162:                             (*(*l_element_courant)
  163:                             .donnee).objet)).nom_fonction, ">>") != 0))
  164:                     {
  165:                         if ((strcmp((*((struct_fonction *)
  166:                                 (*(*l_element_courant)
  167:                                 .donnee).objet)).nom_fonction, "+") == 0) ||
  168:                                 (strcmp((*((struct_fonction *)
  169:                                 (*(*l_element_courant).donnee).objet))
  170:                                 .nom_fonction, "-") == 0) || (strcmp(
  171:                                 (*((struct_fonction *) (*(*l_element_courant)
  172:                                 .donnee).objet)).nom_fonction, "*") == 0) ||
  173:                                 (strcmp((*((struct_fonction *)
  174:                                 (*(*l_element_courant).donnee).objet))
  175:                                 .nom_fonction,
  176:                                 "/") == 0) || (strcmp((*((struct_fonction *)
  177:                                 (*(*l_element_courant).donnee).objet))
  178:                                 .nom_fonction,
  179:                                 "^") == 0) || (strcmp((*((struct_fonction *)
  180:                                 (*(*l_element_courant).donnee).objet))
  181:                                 .nom_fonction,
  182:                                 "<") == 0) || (strcmp((*((struct_fonction *)
  183:                                 (*(*l_element_courant).donnee).objet))
  184:                                 .nom_fonction,
  185:                                 ">") == 0) || (strcmp((*((struct_fonction *)
  186:                                 (*(*l_element_courant).donnee).objet))
  187:                                 .nom_fonction,
  188:                                 "==") == 0) || (strcmp((*((struct_fonction *)
  189:                                 (*(*l_element_courant).donnee).objet))
  190:                                 .nom_fonction,
  191:                                 "<>") == 0) || (strcmp((*((struct_fonction *)
  192:                                 (*(*l_element_courant).donnee).objet))
  193:                                 .nom_fonction,
  194:                                 "<=") == 0) || (strcmp((*((struct_fonction *)
  195:                                 (*(*l_element_courant).donnee).objet))
  196:                                 .nom_fonction,
  197:                                 "=<") == 0) || (strcmp((*((struct_fonction *)
  198:                                 (*(*l_element_courant).donnee).objet))
  199:                                 .nom_fonction,
  200:                                 ">=") == 0) || (strcmp((*((struct_fonction *)
  201:                                 (*(*l_element_courant).donnee).objet))
  202:                                 .nom_fonction,
  203:                                 "=>") == 0))
  204:                         {
  205:                             if (depilement(s_etat_processus,
  206:                                     &((*s_etat_processus)
  207:                                     .l_base_pile), &s_sous_objet_2) == d_erreur)
  208:                             {
  209:                                 return(NULL);
  210:                             }
  211: 
  212:                             chaine_sauvegarde = (*s_etat_processus)
  213:                                     .instruction_courante;
  214: 
  215:                             if (((*s_etat_processus).instruction_courante =
  216:                                     (unsigned char *) malloc((strlen(
  217:                                     (unsigned char *) (*s_sous_objet_2).objet)
  218:                                     + 2 + 1) * sizeof(unsigned char))) == NULL)
  219:                             {
  220:                                 (*s_etat_processus).instruction_courante =
  221:                                         chaine_sauvegarde;
  222:                                 (*s_etat_processus).erreur_systeme =
  223:                                         d_es_allocation_memoire;
  224:                                 return(NULL);
  225:                             }
  226: 
  227:                             sprintf((*s_etat_processus).instruction_courante,
  228:                                     "'%s'", (unsigned char *)
  229:                                     (*s_sous_objet_2).objet);
  230: 
  231:                             presence_signe = (((*s_etat_processus)
  232:                                     .instruction_courante[1] == '+')
  233:                                     || ((*s_etat_processus)
  234:                                     .instruction_courante[1]
  235:                                     == '-')) ? d_vrai : d_faux;
  236: 
  237:                             recherche_type(s_etat_processus);
  238: 
  239:                             if ((*s_etat_processus).erreur_execution != d_ex)
  240:                             {
  241:                                 // Aucune erreur ne peut être renvoyée.
  242: 
  243:                                 return(NULL);
  244:                             }
  245: 
  246:                             if (depilement(s_etat_processus,
  247:                                     &((*s_etat_processus)
  248:                                     .l_base_pile), &s_sous_objet_3) == d_erreur)
  249:                             {
  250:                                 return(NULL);
  251:                             }
  252: 
  253:                             free((*s_etat_processus).instruction_courante);
  254: 
  255:                             (*s_etat_processus).instruction_courante =
  256:                                     chaine_sauvegarde;
  257: 
  258:                             autorisation_parenthese = d_faux;
  259: 
  260:                             if ((*s_sous_objet_3).type == ALG)
  261:                             {
  262:                                 l_atome = (struct_liste_chainee *)
  263:                                         (*s_sous_objet_3).objet;
  264:                                 chaine_fonction = "";
  265:                                 nombre_arguments_fonction = 0;
  266: 
  267:                                 while(l_atome != NULL)
  268:                                 {
  269:                                     if ((*(*l_atome).donnee).type == FCT)
  270:                                     {
  271:                                         if (strcmp((*((struct_fonction *)
  272:                                                 (*(*l_atome).donnee).objet))
  273:                                                 .nom_fonction, ">>") != 0)
  274:                                         {
  275:                                             chaine_fonction =
  276:                                                     (*((struct_fonction *)
  277:                                                     (*(*l_atome).donnee).objet))
  278:                                                     .nom_fonction;
  279:                                             nombre_arguments_fonction =
  280:                                                     (*((struct_fonction *)
  281:                                                     (*(*l_atome).donnee).objet))
  282:                                                     .nombre_arguments;
  283:                                         }
  284:                                     }
  285: 
  286:                                     l_atome = (*l_atome).suivant;
  287:                                 }
  288: 
  289:                                 if (strcmp((*((struct_fonction *)
  290:                                         (*(*l_element_courant).donnee).objet))
  291:                                         .nom_fonction, "+") == 0)
  292:                                 {
  293:                                     if ((strcmp(chaine_fonction, "AND") == 0) ||
  294:                                             (strcmp(chaine_fonction, "XOR") ==
  295:                                             0) || (strcmp(chaine_fonction, "OR")
  296:                                             == 0))
  297:                                     {
  298:                                         autorisation_parenthese = d_vrai;
  299:                                     }
  300:                                 }
  301:                                 else if (strcmp((*((struct_fonction *)
  302:                                         (*(*l_element_courant).donnee).objet))
  303:                                         .nom_fonction, "-") == 0)
  304:                                 {
  305:                                     if (nombre_arguments_fonction != 0)
  306:                                     {
  307:                                         autorisation_parenthese = d_faux;
  308:                                     }
  309:                                     else
  310:                                     {
  311:                                         autorisation_parenthese = d_vrai;
  312:                                     }
  313:                                 }
  314:                                 else if (strcmp((*((struct_fonction *)
  315:                                         (*(*l_element_courant).donnee).objet))
  316:                                         .nom_fonction, "*") == 0)
  317:                                 {
  318:                                     if ((strcmp(chaine_fonction, "+") == 0) ||
  319:                                             (strcmp(chaine_fonction, "-") == 0)
  320:                                             || (strcmp(chaine_fonction, "AND")
  321:                                             == 0) || (strcmp(chaine_fonction,
  322:                                             "XOR") == 0) || (strcmp(
  323:                                             chaine_fonction, "OR") == 0))
  324:                                     {
  325:                                         autorisation_parenthese = d_vrai;
  326:                                     }
  327:                                 }
  328:                                 else if (strcmp((*((struct_fonction *)
  329:                                         (*(*l_element_courant).donnee).objet))
  330:                                         .nom_fonction, "/") == 0)
  331:                                 {
  332:                                     if (nombre_arguments_fonction != 0)
  333:                                     {
  334:                                         autorisation_parenthese = d_faux;
  335:                                     }
  336:                                     else
  337:                                     {
  338:                                         autorisation_parenthese = d_vrai;
  339:                                     }
  340:                                 }
  341:                                 else if ((strcmp((*((struct_fonction *)
  342:                                         (*(*l_element_courant).donnee).objet))
  343:                                         .nom_fonction, "^") == 0))
  344:                                 {
  345:                                     if (nombre_arguments_fonction != 0)
  346:                                     {
  347:                                         autorisation_parenthese = d_faux;
  348:                                     }
  349:                                     else
  350:                                     {
  351:                                         autorisation_parenthese = d_vrai;
  352:                                     }
  353:                                 }
  354:                             }
  355: 
  356:                             if ((autorisation_parenthese == d_vrai) ||
  357:                                     (presence_signe == d_vrai))
  358:                             {
  359:                                 chaine_sauvegarde = (unsigned char *)
  360:                                         (*s_sous_objet_2).objet;
  361: 
  362:                                 if (((*s_sous_objet_2).objet = (void *)
  363:                                         malloc((strlen(chaine_sauvegarde) + 2
  364:                                         + 1) * sizeof(unsigned char))) == NULL)
  365:                                 {
  366:                                     (*s_etat_processus).erreur_systeme =
  367:                                             d_es_allocation_memoire;
  368:                                     return(NULL);
  369:                                 }
  370: 
  371:                                 sprintf((unsigned char *) (*s_sous_objet_2)
  372:                                         .objet, "(%s)", chaine_sauvegarde);
  373:                                 free(chaine_sauvegarde);
  374:                             }
  375: 
  376:                             liberation(s_etat_processus, s_sous_objet_3);
  377: 
  378:                             if (depilement(s_etat_processus,
  379:                                     &((*s_etat_processus)
  380:                                     .l_base_pile), &s_sous_objet_1) == d_erreur)
  381:                             {
  382:                                 return(NULL);
  383:                             }
  384: 
  385:                             chaine_sauvegarde = (*s_etat_processus)
  386:                                     .instruction_courante;
  387: 
  388:                             if (((*s_etat_processus).instruction_courante =
  389:                                     (unsigned char *) malloc((strlen(
  390:                                     (unsigned char *) (*s_sous_objet_1).objet)
  391:                                     + 2 + 1) * sizeof(unsigned char))) == NULL)
  392:                             {
  393:                                 (*s_etat_processus).instruction_courante =
  394:                                         chaine_sauvegarde;
  395:                                 (*s_etat_processus).erreur_systeme =
  396:                                         d_es_allocation_memoire;
  397:                                 return(NULL);
  398:                             }
  399: 
  400:                             sprintf((*s_etat_processus).instruction_courante,
  401:                                     "'%s'", (unsigned char *)
  402:                                     (*s_sous_objet_1).objet);
  403: 
  404:                             recherche_type(s_etat_processus);
  405: 
  406:                             if ((*s_etat_processus).erreur_execution != d_ex)
  407:                             {
  408:                                 // Aucune erreur ne peut être renvoyée.
  409: 
  410:                                 return(NULL);
  411:                             }
  412: 
  413:                             if (depilement(s_etat_processus,
  414:                                     &((*s_etat_processus)
  415:                                     .l_base_pile), &s_sous_objet_3) == d_erreur)
  416:                             {
  417:                                 return(NULL);
  418:                             }
  419: 
  420:                             free((*s_etat_processus).instruction_courante);
  421: 
  422:                             (*s_etat_processus).instruction_courante =
  423:                                     chaine_sauvegarde;
  424: 
  425:                             autorisation_parenthese = d_faux;
  426: 
  427:                             if ((*s_sous_objet_3).type == ALG)
  428:                             {
  429:                                 l_atome = (struct_liste_chainee *)
  430:                                         (*s_sous_objet_3).objet;
  431:                                 chaine_fonction = "";
  432: 
  433:                                 while(l_atome != NULL)
  434:                                 {
  435:                                     if ((*(*l_atome).donnee).type == FCT)
  436:                                     {
  437:                                         if (strcmp((*((struct_fonction *)
  438:                                                 (*(*l_atome).donnee).objet))
  439:                                                 .nom_fonction, ">>") != 0)
  440:                                         {
  441:                                             chaine_fonction =
  442:                                                     (*((struct_fonction *)
  443:                                                     (*(*l_atome).donnee).objet))
  444:                                                     .nom_fonction;
  445:                                         }
  446:                                     }
  447: 
  448:                                     l_atome = (*l_atome).suivant;
  449:                                 }
  450: 
  451:                                 if ((strcmp((*((struct_fonction *)
  452:                                         (*(*l_element_courant).donnee).objet))
  453:                                         .nom_fonction, "+") == 0) ||
  454:                                         (strcmp((*((struct_fonction *)
  455:                                         (*(*l_element_courant).donnee).objet))
  456:                                         .nom_fonction, "-") == 0))
  457:                                 {
  458:                                     if ((strcmp(chaine_fonction, "AND") == 0) ||
  459:                                             (strcmp(chaine_fonction, "XOR") ==
  460:                                             0) || (strcmp(chaine_fonction, "OR")
  461:                                             == 0))
  462:                                     {
  463:                                         autorisation_parenthese = d_vrai;
  464:                                     }
  465:                                 }
  466:                                 else if ((strcmp((*((struct_fonction *)
  467:                                         (*(*l_element_courant).donnee).objet))
  468:                                         .nom_fonction, "*") == 0) ||
  469:                                         (strcmp((*((struct_fonction *)
  470:                                         (*(*l_element_courant).donnee).objet))
  471:                                         .nom_fonction, "/") == 0))
  472:                                 {
  473:                                     if ((strcmp(chaine_fonction, "+") == 0) ||
  474:                                             (strcmp(chaine_fonction, "-") == 0)
  475:                                             || (strcmp(chaine_fonction, "AND")
  476:                                             == 0) || (strcmp(chaine_fonction,
  477:                                             "XOR") == 0) || (strcmp(
  478:                                             chaine_fonction, "OR") == 0))
  479:                                     {
  480:                                         autorisation_parenthese = d_vrai;
  481:                                     }
  482:                                 }
  483:                                 else if ((strcmp((*((struct_fonction *)
  484:                                         (*(*l_element_courant).donnee).objet))
  485:                                         .nom_fonction, "^") == 0))
  486:                                 {
  487:                                     autorisation_parenthese = d_vrai;
  488:                                 }
  489:                             }
  490: 
  491:                             if (autorisation_parenthese == d_vrai)
  492:                             {
  493:                                 chaine_sauvegarde = (unsigned char *)
  494:                                         (*s_sous_objet_1).objet;
  495: 
  496:                                 if (((*s_sous_objet_1).objet = (void *)
  497:                                         malloc((strlen(chaine_sauvegarde) + 2
  498:                                         + 1) * sizeof(unsigned char))) == NULL)
  499:                                 {
  500:                                     (*s_etat_processus).erreur_systeme =
  501:                                             d_es_allocation_memoire;
  502:                                     return(NULL);
  503:                                 }
  504: 
  505:                                 sprintf((unsigned char *) (*s_sous_objet_1)
  506:                                         .objet, "(%s)", chaine_sauvegarde);
  507:                                 free(chaine_sauvegarde);
  508:                             }
  509: 
  510:                             liberation(s_etat_processus, s_sous_objet_3);
  511: 
  512:                             if ((s_sous_objet = allocation(s_etat_processus,
  513:                                     CHN)) == NULL)
  514:                             {
  515:                                 (*s_etat_processus).erreur_systeme =
  516:                                         d_es_allocation_memoire;
  517:                                 return(NULL);
  518:                             }
  519: 
  520:                             if (((*s_sous_objet).objet = (void *)
  521:                                     malloc((strlen(
  522:                                     (unsigned char *) (*s_sous_objet_1).objet) +
  523:                                     strlen((*((struct_fonction *)
  524:                                     (*(*l_element_courant).donnee).objet))
  525:                                     .nom_fonction) + strlen((unsigned char *)
  526:                                     (*s_sous_objet_2).objet) + 1) *
  527:                                     sizeof(unsigned char))) == NULL)
  528:                             {
  529:                                 (*s_etat_processus).erreur_systeme =
  530:                                         d_es_allocation_memoire;
  531:                                 return(NULL);
  532:                             }
  533: 
  534:                             sprintf((unsigned char *) (*s_sous_objet).objet,
  535:                                     "%s%s%s", (unsigned char *)
  536:                                     (*s_sous_objet_1)
  537:                                     .objet, (*((struct_fonction *)
  538:                                     (*(*l_element_courant).donnee).objet))
  539:                                     .nom_fonction, (unsigned char *)
  540:                                     (*s_sous_objet_2).objet);
  541: 
  542:                             liberation(s_etat_processus, s_sous_objet_1);
  543:                             liberation(s_etat_processus, s_sous_objet_2);
  544: 
  545:                             if (empilement(s_etat_processus,
  546:                                     &((*s_etat_processus)
  547:                                     .l_base_pile), s_sous_objet) == d_erreur)
  548:                             {
  549:                                 return(NULL);
  550:                             }
  551:                         }
  552:                         else if (strcmp((*((struct_fonction *)
  553:                                 (*(*l_element_courant).donnee).objet))
  554:                                 .nom_fonction, "=") == 0)
  555:                         {
  556:                             if (depilement(s_etat_processus,
  557:                                     &((*s_etat_processus).l_base_pile),
  558:                                     &s_sous_objet_2) == d_erreur)
  559:                             {
  560:                                 return(NULL);
  561:                             }
  562: 
  563:                             if (depilement(s_etat_processus,
  564:                                     &((*s_etat_processus).l_base_pile),
  565:                                     &s_sous_objet_1) == d_erreur)
  566:                             {
  567:                                 return(NULL);
  568:                             }
  569: 
  570:                             if ((s_sous_objet = allocation(s_etat_processus,
  571:                                     CHN)) == NULL)
  572:                             {
  573:                                 (*s_etat_processus).erreur_systeme =
  574:                                         d_es_allocation_memoire;
  575:                                 return(NULL);
  576:                             }
  577: 
  578:                             autorisation_parenthese = d_vrai;
  579:                             l_atome = l_element_courant;
  580: 
  581:                             if (l_atome != NULL)
  582:                             {
  583:                                 if ((*l_atome).suivant != NULL)
  584:                                 {
  585:                                     l_atome = (*l_atome).suivant;
  586: 
  587:                                     if ((*(*l_atome).donnee).type == FCT)
  588:                                     {
  589:                                         if (strcmp((*((struct_fonction *)
  590:                                                 (*(*l_atome).donnee).objet))
  591:                                                 .nom_fonction, ">>") == 0)
  592:                                         {
  593:                                             if ((*l_atome).suivant == NULL)
  594:                                             {
  595:                                                 autorisation_parenthese =
  596:                                                         d_faux;
  597:                                             }
  598:                                         }
  599:                                     }
  600:                                 }
  601:                             }
  602: 
  603:                             if (autorisation_parenthese == d_vrai)
  604:                             {
  605:                                 if (((*s_sous_objet).objet =
  606:                                         (void *) malloc((strlen(
  607:                                         (unsigned char *) (*s_sous_objet_1)
  608:                                         .objet) + strlen((*((struct_fonction *)
  609:                                         (*(*l_element_courant).donnee).objet))
  610:                                         .nom_fonction) +
  611:                                         strlen((unsigned char *)
  612:                                         (*s_sous_objet_2).objet) + 2 + 1) *
  613:                                         sizeof(unsigned char))) == NULL)
  614:                                 {
  615:                                     (*s_etat_processus).erreur_systeme =
  616:                                             d_es_allocation_memoire;
  617:                                     return(NULL);
  618:                                 }
  619: 
  620:                                 sprintf((unsigned char *) (*s_sous_objet).objet,
  621:                                         "(%s%s%s)", (unsigned char *)
  622:                                         (*s_sous_objet_1)
  623:                                         .objet, (*((struct_fonction *)
  624:                                         (*(*l_element_courant).donnee).objet))
  625:                                         .nom_fonction, (unsigned char *)
  626:                                         (*s_sous_objet_2).objet);
  627:                             }
  628:                             else
  629:                             {
  630:                                 if (((*s_sous_objet).objet =
  631:                                         (void *) malloc((strlen(
  632:                                         (unsigned char *) (*s_sous_objet_1)
  633:                                         .objet) + strlen((*((struct_fonction *)
  634:                                         (*(*l_element_courant).donnee).objet))
  635:                                         .nom_fonction) + strlen(
  636:                                         (unsigned char *) (*s_sous_objet_2)
  637:                                         .objet) + 1) * sizeof(unsigned char)))
  638:                                         == NULL)
  639:                                 {
  640:                                     (*s_etat_processus).erreur_systeme =
  641:                                             d_es_allocation_memoire;
  642:                                     return(NULL);
  643:                                 }
  644: 
  645:                                 sprintf((unsigned char *) (*s_sous_objet).objet,
  646:                                         "%s%s%s", (unsigned char *)
  647:                                         (*s_sous_objet_1)
  648:                                         .objet, (*((struct_fonction *)
  649:                                         (*(*l_element_courant).donnee).objet))
  650:                                         .nom_fonction, (unsigned char *)
  651:                                         (*s_sous_objet_2).objet);
  652:                             }
  653: 
  654:                             liberation(s_etat_processus, s_sous_objet_1);
  655:                             liberation(s_etat_processus, s_sous_objet_2);
  656: 
  657:                             if (empilement(s_etat_processus,
  658:                                     &((*s_etat_processus).l_base_pile),
  659:                                     s_sous_objet) == d_erreur)
  660:                             {
  661:                                 return(NULL);
  662:                             }
  663:                         }
  664:                         else if (strcmp((*((struct_fonction *)
  665:                                 (*(*l_element_courant).donnee).objet))
  666:                                 .nom_fonction,
  667:                                 "NOT") == 0)
  668:                         {
  669:                             if (depilement(s_etat_processus,
  670:                                     &((*s_etat_processus)
  671:                                     .l_base_pile), &s_sous_objet_1) == d_erreur)
  672:                             {
  673:                                 return(NULL);
  674:                             }
  675: 
  676:                             if ((s_sous_objet = allocation(s_etat_processus,
  677:                                     CHN)) == NULL)
  678:                             {
  679:                                 (*s_etat_processus).erreur_systeme =
  680:                                         d_es_allocation_memoire;
  681:                                 return(NULL);
  682:                             }
  683: 
  684:                             if (((*s_sous_objet).objet = (unsigned char *)
  685:                                     malloc(
  686:                                     (strlen((unsigned char *) (*s_sous_objet_1)
  687:                                     .objet) + 4 + 1) * sizeof(unsigned char)))
  688:                                     == NULL)
  689:                             {
  690:                                 (*s_etat_processus).erreur_systeme =
  691:                                         d_es_allocation_memoire;
  692:                                 return(NULL);
  693:                             }
  694: 
  695:                             sprintf((unsigned char *) (*s_sous_objet).objet,
  696:                                     "%s %s", (*((struct_fonction *)
  697:                                     (*(*l_element_courant).donnee).objet))
  698:                                     .nom_fonction, (unsigned char *)
  699:                                     (*s_sous_objet_1).objet );
  700: 
  701:                             liberation(s_etat_processus, s_sous_objet_1);
  702: 
  703:                             if (empilement(s_etat_processus,
  704:                                     &((*s_etat_processus)
  705:                                     .l_base_pile), s_sous_objet) == d_erreur)
  706:                             {
  707:                                 return(NULL);
  708:                             }
  709:                         }
  710:                         else if ((strcmp((*((struct_fonction *)
  711:                                 (*(*l_element_courant).donnee).objet))
  712:                                 .nom_fonction,
  713:                                 "OR") == 0) || (strcmp((*((struct_fonction *)
  714:                                 (*(*l_element_courant).donnee).objet))
  715:                                 .nom_fonction,
  716:                                 "XOR") == 0) || (strcmp((*((struct_fonction *)
  717:                                 (*(*l_element_courant).donnee).objet))
  718:                                 .nom_fonction,
  719:                                 "AND") == 0))
  720:                         {
  721:                             if (depilement(s_etat_processus,
  722:                                     &((*s_etat_processus)
  723:                                     .l_base_pile), &s_sous_objet_2) == d_erreur)
  724:                             {
  725:                                 return(NULL);
  726:                             }
  727: 
  728:                             if (depilement(s_etat_processus,
  729:                                     &((*s_etat_processus)
  730:                                     .l_base_pile), &s_sous_objet_1) == d_erreur)
  731:                             {
  732:                                 return(NULL);
  733:                             }
  734: 
  735:                             if ((s_sous_objet = allocation(s_etat_processus,
  736:                                     CHN)) == NULL)
  737:                             {
  738:                                 (*s_etat_processus).erreur_systeme =
  739:                                         d_es_allocation_memoire;
  740:                                 return(NULL);
  741:                             }
  742: 
  743:                             if (((*s_sous_objet).objet = (void *)
  744:                                     malloc((strlen(
  745:                                     (unsigned char *) (*s_sous_objet_1).objet) +
  746:                                     strlen((*((struct_fonction *)
  747:                                     (*(*l_element_courant).donnee).objet))
  748:                                     .nom_fonction) + strlen((unsigned char *)
  749:                                     (*s_sous_objet_2).objet) + 2 + 1) *
  750:                                     sizeof(unsigned char))) == NULL)
  751:                             {
  752:                                 (*s_etat_processus).erreur_systeme =
  753:                                         d_es_allocation_memoire;
  754:                                 return(NULL);
  755:                             }
  756: 
  757:                             sprintf((unsigned char *) (*s_sous_objet).objet,
  758:                                     "%s %s %s", (unsigned char *)
  759:                                     (*s_sous_objet_1)
  760:                                     .objet, (*((struct_fonction *)
  761:                                     (*(*l_element_courant).donnee).objet))
  762:                                     .nom_fonction, (unsigned char *)
  763:                                     (*s_sous_objet_2).objet);
  764: 
  765:                             liberation(s_etat_processus, s_sous_objet_1);
  766:                             liberation(s_etat_processus, s_sous_objet_2);
  767: 
  768:                             if (empilement(s_etat_processus,
  769:                                     &((*s_etat_processus)
  770:                                     .l_base_pile), s_sous_objet) == d_erreur)
  771:                             {
  772:                                 return(NULL);
  773:                             }
  774:                         }
  775:                         else
  776:                         {
  777:                             nombre_arguments = (*((struct_fonction *)
  778:                                     (*(*l_element_courant).donnee).objet))
  779:                                     .nombre_arguments;
  780: 
  781:                             if ((chaine = (unsigned char *)
  782:                                     malloc(sizeof(unsigned char))) == NULL)
  783:                             {
  784:                                 (*s_etat_processus).erreur_systeme =
  785:                                         d_es_allocation_memoire;
  786:                                 return(NULL);
  787:                             }
  788:                             
  789:                             chaine[0] = d_code_fin_chaine;
  790: 
  791:                             for(i = 0; i < nombre_arguments; i++)
  792:                             {
  793:                                 if ((nombre_arguments - i) > 1)
  794:                                 {
  795:                                     l_liste1 = (*s_etat_processus).l_base_pile;
  796: 
  797:                                     for(j = 2; j < (nombre_arguments - i); j++)
  798:                                     {
  799:                                         l_liste1 = (*l_liste1).suivant;
  800:                                     }
  801: 
  802:                                     l_liste2 = (*l_liste1).suivant;
  803:                                     (*l_liste1).suivant = (*l_liste2).suivant;
  804:                                     (*l_liste2).suivant = (*s_etat_processus)
  805:                                             .l_base_pile;
  806:                                     (*s_etat_processus).l_base_pile = l_liste2;
  807:                                 }
  808:                                 
  809:                                 if (depilement(s_etat_processus,
  810:                                         &((*s_etat_processus).l_base_pile),
  811:                                         &s_sous_objet) == d_erreur)
  812:                                 {
  813:                                     return(NULL);
  814:                                 }
  815: 
  816:                                 chaine_sauvegarde = chaine;
  817: 
  818:                                 if (strlen(chaine_sauvegarde) == 0)
  819:                                 {
  820:                                     if ((chaine = (unsigned char *)
  821:                                             malloc((strlen((unsigned char *)
  822:                                             (*s_sous_objet).objet) + 1) *
  823:                                             sizeof(unsigned char))) == NULL)
  824:                                     {
  825:                                         (*s_etat_processus).erreur_systeme =
  826:                                                 d_es_allocation_memoire;
  827:                                         return(NULL);
  828:                                     }
  829: 
  830:                                     sprintf(chaine, "%s", (unsigned char *)
  831:                                             (*s_sous_objet).objet);
  832:                                 }
  833:                                 else
  834:                                 {
  835:                                     if ((chaine = (unsigned char *)
  836:                                             malloc((strlen(chaine_sauvegarde)
  837:                                             + 1 + strlen((unsigned char *)
  838:                                             (*s_sous_objet).objet) + 1) *
  839:                                             sizeof(unsigned char))) == NULL)
  840:                                     {
  841:                                         (*s_etat_processus).erreur_systeme =
  842:                                                 d_es_allocation_memoire;
  843:                                         return(NULL);
  844:                                     }
  845: 
  846:                                     sprintf(chaine, "%s,%s", chaine_sauvegarde,
  847:                                             (unsigned char *) (*s_sous_objet)
  848:                                             .objet);
  849:                                 }
  850: 
  851:                                 free(chaine_sauvegarde);
  852:                                 liberation(s_etat_processus, s_sous_objet);
  853:                             }
  854: 
  855:                             chaine_sauvegarde = chaine;
  856: 
  857:                             if ((chaine = (unsigned char *) malloc((strlen(
  858:                                     (*((struct_fonction *)
  859:                                     (*(*l_element_courant)
  860:                                     .donnee).objet)).nom_fonction) + 2 +
  861:                                     strlen(chaine_sauvegarde) + 1) *
  862:                                     sizeof(unsigned char))) == NULL)
  863:                             {
  864:                                 (*s_etat_processus).erreur_systeme =
  865:                                         d_es_allocation_memoire;
  866:                                 return(NULL);
  867:                             }
  868: 
  869:                             sprintf(chaine, "%s(%s)", (*((struct_fonction *)
  870:                                     (*(*l_element_courant).donnee).objet))
  871:                                     .nom_fonction, chaine_sauvegarde);
  872:                             free(chaine_sauvegarde);
  873: 
  874:                             if ((s_sous_objet = allocation(s_etat_processus,
  875:                                             CHN)) == NULL)
  876:                             {
  877:                                 (*s_etat_processus).erreur_systeme =
  878:                                         d_es_allocation_memoire;
  879:                                 return(NULL);
  880:                             }
  881: 
  882:                             (*s_sous_objet).objet = (void *) chaine;
  883: 
  884:                             if (empilement(s_etat_processus,
  885:                                     &((*s_etat_processus)
  886:                                     .l_base_pile), s_sous_objet) == d_erreur)
  887:                             {
  888:                                 return(NULL);
  889:                             }
  890:                         }
  891:                     }
  892:                 }
  893:                 else
  894:                 {
  895:                     if ((s_sous_objet = allocation(s_etat_processus, CHN))
  896:                             == NULL)
  897:                     {
  898:                         (*s_etat_processus).erreur_systeme =
  899:                                 d_es_allocation_memoire;
  900:                         return(NULL);
  901:                     }
  902: 
  903:                     if (((*s_sous_objet).objet = (void *) formateur_fichier(
  904:                             s_etat_processus, (*l_element_courant).donnee,
  905:                             s_format, longueur, longueur_champ, format_sortie,
  906:                             type, longueur_effective, recursivite)) == NULL)
  907:                     {
  908:                         (*s_etat_processus).erreur_systeme =
  909:                                 d_es_allocation_memoire;
  910:                         return(NULL);
  911:                     }
  912: 
  913:                     if (((*(*l_element_courant).donnee).type == ALG)
  914:                             || ((*(*l_element_courant).donnee).type == NOM))
  915:                     {
  916:                         chaine_sauvegarde = (unsigned char *)
  917:                                 (*s_sous_objet).objet;
  918: 
  919:                         if (((*s_sous_objet).objet = malloc((strlen(
  920:                                 chaine_sauvegarde) - 1) *
  921:                                 sizeof(unsigned char))) == NULL)
  922:                         {
  923:                             (*s_etat_processus).erreur_systeme =
  924:                                     d_es_allocation_memoire;
  925:                             return(NULL);
  926:                         }
  927: 
  928:                         ptrl = chaine_sauvegarde;
  929:                         ptre = (unsigned char *) (*s_sous_objet).objet;
  930: 
  931:                         for(ptrl++, i = strlen(chaine_sauvegarde) - 2; i > 0;
  932:                                 i--, *ptre++ = *ptrl++);
  933: 
  934:                         (*ptre) = d_code_fin_chaine;
  935: 
  936:                         free(chaine_sauvegarde);
  937:                     }
  938:                     else if ((*(*l_element_courant).donnee).type == CHN)
  939:                     {
  940:                         chaine_sauvegarde = (unsigned char *)
  941:                                 (*s_sous_objet).objet;
  942: 
  943:                         if (((*s_sous_objet).objet = malloc((strlen(
  944:                                 chaine_sauvegarde) + 3) *
  945:                                 sizeof(unsigned char))) == NULL)
  946:                         {
  947:                             (*s_etat_processus).erreur_systeme =
  948:                                     d_es_allocation_memoire;
  949:                             return(NULL);
  950:                         }
  951: 
  952:                         sprintf((unsigned char *) (*s_sous_objet).objet,
  953:                                 "\"%s\"", chaine_sauvegarde);
  954: 
  955:                         free(chaine_sauvegarde);
  956:                     }
  957: 
  958:                     if (empilement(s_etat_processus, &((*s_etat_processus)
  959:                             .l_base_pile), s_sous_objet) == d_erreur)
  960:                     {
  961:                         return(NULL);
  962:                     }
  963:                 }
  964: 
  965:                 l_element_courant = (*l_element_courant).suivant;
  966:             }
  967: 
  968:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  969:                     &s_sous_objet) == d_erreur)
  970:             {
  971:                 return(NULL);
  972:             }
  973: 
  974:             if ((chaine = (unsigned char *) malloc((strlen((unsigned char *)
  975:                     (*s_sous_objet).objet) + 2 + 1) * sizeof(unsigned char)))
  976:                     == NULL)
  977:             {
  978:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  979:                 return(NULL);
  980:             }
  981: 
  982:             sprintf(chaine, "'%s'", (unsigned char *) (*s_sous_objet).objet);
  983:             liberation(s_etat_processus, s_sous_objet);
  984:         }
  985:         else if ((*s_objet).type == BIN)
  986:         {
  987: 
  988: /*
  989: --------------------------------------------------------------------------------
  990:   Entier binaire en base 2, 8, 10 ou 16
  991: --------------------------------------------------------------------------------
  992: */
  993: 
  994:             if (format_sortie != 'B')
  995:             {
  996:                 (*s_etat_processus).erreur_execution =
  997:                         d_ex_erreur_format_fichier;
  998:                 return(NULL);
  999:             }
 1000: 
 1001:             longueur_binaire = longueur_entiers_binaires(s_etat_processus);
 1002:             masque_binaire = masque_entiers_binaires(s_etat_processus);
 1003: 
 1004:             if ((test_cfsf(s_etat_processus, 43) == d_faux) &&
 1005:                     (test_cfsf(s_etat_processus, 44) == d_faux))
 1006:             {
 1007: 
 1008: /*
 1009: -- Base décimale ---------------------------------------------------------------
 1010: */
 1011: 
 1012:                 sprintf(tampon, "%llu", (*((logical8 *)
 1013:                         ((*s_objet).objet))) & masque_binaire);
 1014:                 strcpy(base, "d");
 1015:             }
 1016:             else if ((test_cfsf(s_etat_processus, 43) == d_vrai) &&
 1017:                     (test_cfsf(s_etat_processus, 44) == d_faux))
 1018:             {
 1019: 
 1020: /*
 1021: -- Base octale -----------------------------------------------------------------
 1022: */
 1023: 
 1024:                 sprintf(tampon, "%llo", (*((logical8 *)
 1025:                         ((*s_objet).objet))) & masque_binaire);
 1026:                 strcpy(base, "o");
 1027:             }
 1028:             else if (test_cfsf(s_etat_processus, 44) == d_vrai)
 1029:             {
 1030: 
 1031: /*
 1032: -- Bases hexadécimale et binaire -----------------------------------------------
 1033: */
 1034: 
 1035:                 sprintf(tampon, "%llX", (*((logical8 *)
 1036:                         ((*s_objet).objet))) & masque_binaire);
 1037: 
 1038:                 if (test_cfsf(s_etat_processus, 43) == d_vrai)
 1039:                 {
 1040:                     strcpy(base, "h");
 1041:                 }
 1042:                 else
 1043:                 {
 1044:                     chaine = (unsigned char *) malloc((strlen(tampon) + 1)
 1045:                             * sizeof(unsigned char));
 1046: 
 1047:                     if (chaine == NULL)
 1048:                     {
 1049:                         (*s_etat_processus).erreur_systeme =
 1050:                                 d_es_allocation_memoire;
 1051:                         return(NULL);
 1052:                     }
 1053: 
 1054:                     strcpy(chaine, tampon);
 1055:                     tampon[0] = 0;
 1056: 
 1057:                     for(i = 0; i < strlen(chaine); i++)
 1058:                     {
 1059:                         switch(chaine[i])
 1060:                         {
 1061:                             case '0' :
 1062:                             {
 1063:                                 strcat(tampon, (i != 0) ? "0000" : "0");
 1064:                                 break;
 1065:                             }
 1066:                             case '1' :
 1067:                             {
 1068:                                     strcat(tampon, (i != 0) ? "0001" : "1");
 1069:                                 break;
 1070:                             }
 1071:                             case '2' :
 1072:                             {
 1073:                                 strcat(tampon, (i != 0) ? "0010" : "10");
 1074:                                 break;
 1075:                             }
 1076:                             case '3' :
 1077:                             {
 1078:                                 strcat(tampon, (i != 0) ? "0011" : "11");
 1079:                                 break;
 1080:                             }
 1081:                             case '4' :
 1082:                             {
 1083:                                 strcat(tampon, (i != 0) ? "0100" : "100");
 1084:                                 break;
 1085:                             }
 1086:                             case '5' :
 1087:                             {
 1088:                                 strcat(tampon, (i != 0) ? "0101" : "101");
 1089:                                 break;
 1090:                             }
 1091:                             case '6' :
 1092:                             {
 1093:                                 strcat(tampon, (i != 0) ? "0110" : "110");
 1094:                                 break;
 1095:                             }
 1096:                             case '7' :
 1097:                             {
 1098:                                 strcat(tampon, (i != 0) ? "0111" : "111");
 1099:                                 break;
 1100:                             }
 1101:                             case '8' :
 1102:                             {
 1103:                                 strcat(tampon, "1000");
 1104:                                 break;
 1105:                             }
 1106:                             case '9' :
 1107:                             {
 1108:                                 strcat(tampon, "1001");
 1109:                                 break;
 1110:                             }
 1111:                             case 'A' :
 1112:                             {
 1113:                                 strcat(tampon, "1010");
 1114:                                 break;
 1115:                             }
 1116:                             case 'B' :
 1117:                             {
 1118:                                 strcat(tampon, "1011");
 1119:                                 break;
 1120:                             }
 1121:                             case 'C' :
 1122:                             {
 1123:                                 strcat(tampon, "1100");
 1124:                                 break;
 1125:                             }
 1126:                             case 'D' :
 1127:                             {
 1128:                                 strcat(tampon, "1101");
 1129:                                 break;
 1130:                             }
 1131:                             case 'E' :
 1132:                             {
 1133:                                 strcat(tampon, "1110");
 1134:                                 break;
 1135:                             }
 1136:                             case 'F' :
 1137:                             {
 1138:                                 strcat(tampon, "1111");
 1139:                                 break;
 1140:                             }
 1141:                         }
 1142:                     }
 1143: 
 1144:                     free(chaine);
 1145:                     strcpy(base, "b");
 1146:                 }
 1147:             }
 1148: 
 1149:             chaine = (unsigned char *) malloc((strlen(tampon) + 4)
 1150:                     * sizeof(unsigned char));
 1151: 
 1152:             if (chaine == NULL)
 1153:             {
 1154:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1155:                 return(NULL);
 1156:             }
 1157: 
 1158:             strcpy(chaine, "# ");
 1159: 
 1160:             strcat(chaine, tampon);
 1161:             strcat(chaine, base);
 1162:         }
 1163:         else if ((*s_objet).type == CHN)
 1164:         {
 1165: 
 1166: /*
 1167: --------------------------------------------------------------------------------
 1168:   Chaîne de caractères
 1169: --------------------------------------------------------------------------------
 1170: */
 1171: 
 1172:             if (format_sortie != 'C')
 1173:             {
 1174:                 (*s_etat_processus).erreur_execution =
 1175:                         d_ex_erreur_format_fichier;
 1176:                 return(NULL);
 1177:             }
 1178: 
 1179:             if ((longueur_champ == -1) || (((long) strlen((unsigned char *)
 1180:                     (*s_objet).objet)) < longueur_champ))
 1181:             {
 1182:                 chaine = (unsigned char *) malloc((strlen((unsigned char *)
 1183:                         ((*s_objet).objet)) + 1) * sizeof(unsigned char));
 1184: 
 1185:                 if (chaine == NULL)
 1186:                 {
 1187:                     (*s_etat_processus).erreur_systeme =
 1188:                             d_es_allocation_memoire;
 1189:                     return(NULL);
 1190:                 }
 1191: 
 1192:                 strcpy(chaine, (unsigned char *) ((*s_objet).objet));
 1193:             }
 1194:             else
 1195:             {
 1196:                 chaine = (unsigned char *) malloc((longueur_champ + 1)
 1197:                         * sizeof(unsigned char));
 1198: 
 1199:                 if (chaine == NULL)
 1200:                 {
 1201:                     (*s_etat_processus).erreur_systeme =
 1202:                             d_es_allocation_memoire;
 1203:                     return(NULL);
 1204:                 }
 1205: 
 1206:                 strncpy(chaine, (unsigned char *) ((*s_objet).objet),
 1207:                         longueur_champ);
 1208:                 chaine[longueur_champ] = d_code_fin_chaine;
 1209:             }
 1210:         }
 1211:         else if ((*s_objet).type == CPL)
 1212:         {
 1213: 
 1214: /*
 1215: --------------------------------------------------------------------------------
 1216:   Complexe
 1217: --------------------------------------------------------------------------------
 1218: */
 1219: 
 1220:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 1221:                     (format_sortie != 'I') && (format_sortie != 'E'))
 1222:             {
 1223:                 (*s_etat_processus).erreur_execution =
 1224:                         d_ex_erreur_format_fichier;
 1225:                 return(NULL);
 1226:             }
 1227: 
 1228:             if ((chaine_formatee = formateur_fichier_nombre(s_etat_processus,
 1229:                     (void *) ((struct_complexe16 *) ((*s_objet).objet)), 'C',
 1230:                     longueur, longueur_champ, format_sortie)) == NULL)
 1231:             {
 1232:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1233:                 return(NULL);
 1234:             }
 1235: 
 1236:             chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 1237:                     + 1) * sizeof(unsigned char));
 1238: 
 1239:             if (chaine == NULL)
 1240:             {
 1241:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1242:                 return(NULL);
 1243:             }
 1244: 
 1245:             strcpy(chaine, chaine_formatee);
 1246:             free(chaine_formatee);
 1247:         }
 1248:         else if ((*s_objet).type == RPN)
 1249:         {
 1250: 
 1251: /*
 1252: --------------------------------------------------------------------------------
 1253:   Définition
 1254: --------------------------------------------------------------------------------
 1255: */
 1256: 
 1257:             l_element_courant = (struct_liste_chainee *) ((*s_objet).objet);
 1258:             chaine_sauvegarde = chaine;
 1259: 
 1260:             while(l_element_courant != NULL)
 1261:             {
 1262:                 if ((chaine_formatee = formateur_fichier(s_etat_processus,
 1263:                         (*l_element_courant).donnee, s_format,
 1264:                         longueur, longueur_champ, format_sortie, type,
 1265:                         longueur_effective, recursivite)) == NULL)
 1266:                 {
 1267:                     return(NULL);
 1268:                 }
 1269: 
 1270:                 if ((*(*l_element_courant).donnee).type == CHN)
 1271:                 {
 1272:                     chaine_tampon = chaine_formatee;
 1273: 
 1274:                     if ((chaine_formatee = (unsigned char *) malloc((strlen(
 1275:                             chaine_tampon) + 3) * sizeof(unsigned char)))
 1276:                             == NULL)
 1277:                     {
 1278:                         (*s_etat_processus).erreur_systeme =
 1279:                                 d_es_allocation_memoire;
 1280:                         return(NULL);
 1281:                     }
 1282: 
 1283:                     sprintf(chaine_formatee, "\"%s\"", chaine_tampon);
 1284:                     free(chaine_tampon);
 1285:                 }
 1286: 
 1287:                 l_element_courant = (*l_element_courant).suivant;
 1288: 
 1289:                 if (chaine != NULL)
 1290:                 {
 1291:                     chaine_sauvegarde = chaine;
 1292: 
 1293:                     if ((chaine = (unsigned char *) malloc((strlen(
 1294:                             chaine_sauvegarde) + strlen(chaine_formatee) + 2) *
 1295:                             sizeof(unsigned char))) == NULL)
 1296:                     {
 1297:                         (*s_etat_processus).erreur_systeme =
 1298:                                 d_es_allocation_memoire;
 1299:                         return(NULL);
 1300:                     }
 1301: 
 1302:                     strcpy(chaine, chaine_sauvegarde);
 1303:                     free(chaine_sauvegarde);
 1304:                     strcat(chaine, " ");
 1305:                     strcat(chaine, chaine_formatee);
 1306:                     free(chaine_formatee);
 1307:                 }
 1308:                 else
 1309:                 {
 1310:                     chaine = chaine_formatee;
 1311:                 }
 1312:             }
 1313: 
 1314:             chaine_sauvegarde = chaine;
 1315:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 1) *
 1316:                     sizeof(unsigned char));
 1317: 
 1318:             if (chaine == NULL)
 1319:             {
 1320:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1321:                 free(chaine_sauvegarde);
 1322:                 return(NULL);
 1323:             }
 1324: 
 1325:             chaine_sauvegarde[strlen(chaine_sauvegarde)] = d_code_fin_chaine;
 1326:             strcpy(chaine, chaine_sauvegarde);
 1327:             free(chaine_sauvegarde);
 1328:         }
 1329:         else if ((*s_objet).type == INT)
 1330:         {
 1331: 
 1332: /*
 1333: --------------------------------------------------------------------------------
 1334:   Entier
 1335: --------------------------------------------------------------------------------
 1336: */
 1337: 
 1338:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 1339:                     (format_sortie != 'I') && (format_sortie != 'E'))
 1340:             {
 1341:                 (*s_etat_processus).erreur_execution =
 1342:                         d_ex_erreur_format_fichier;
 1343:                 return(NULL);
 1344:             }
 1345: 
 1346:             if ((chaine_formatee = formateur_fichier_nombre(s_etat_processus,
 1347:                     (void *) ((integer8 *) ((*s_objet).objet)), 'I',
 1348:                     longueur, longueur_champ, format_sortie)) == NULL)
 1349:             {
 1350:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1351:                 return(NULL);
 1352:             }
 1353: 
 1354:             chaine = (unsigned char *) malloc((strlen(chaine_formatee) + 1)
 1355:                     * sizeof(unsigned char));
 1356: 
 1357:             if (chaine == NULL)
 1358:             {
 1359:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1360:                 return(NULL);
 1361:             }
 1362: 
 1363:             strcpy(chaine, chaine_formatee);
 1364:             free(chaine_formatee);
 1365:         }
 1366:         else if ((*s_objet).type == FCT)
 1367:         {
 1368: 
 1369: /*
 1370: --------------------------------------------------------------------------------
 1371:   Fonction
 1372: --------------------------------------------------------------------------------
 1373: */
 1374: 
 1375:             chaine = (unsigned char *) malloc((strlen((*((struct_fonction *)
 1376:                     ((*s_objet).objet))).nom_fonction) + 1) *
 1377:                     sizeof(unsigned char));
 1378: 
 1379:             if (chaine == NULL)
 1380:             {
 1381:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1382:                 return(NULL);
 1383:             }
 1384: 
 1385:             strcpy(chaine, (unsigned char *) (*((struct_fonction *)
 1386:                     ((*s_objet).objet))).nom_fonction);
 1387:         }
 1388:         else if ((*s_objet).type == LST)
 1389:         {
 1390: 
 1391: /*
 1392: --------------------------------------------------------------------------------
 1393:   Liste
 1394: --------------------------------------------------------------------------------
 1395: */
 1396: 
 1397:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 1398: 
 1399:             if (chaine == NULL)
 1400:             {
 1401:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1402:                 return(NULL);
 1403:             }
 1404: 
 1405:             strcpy(chaine, "{");
 1406: 
 1407:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 1408:             l_element_courant_format = (struct_liste_chainee *)
 1409:                     (*s_format).objet;
 1410:             nombre_elements = 0;
 1411: 
 1412:             while((l_element_courant != NULL) &&
 1413:                     (l_element_courant_format != NULL))
 1414:             {
 1415:                 if ((((*(*l_element_courant_format).donnee).type == LST)
 1416:                         && ((*(*l_element_courant).donnee).type == LST)) ||
 1417:                         (((*(*l_element_courant_format).donnee).type == TBL)
 1418:                         && ((*(*l_element_courant).donnee).type == TBL)))
 1419:                 {
 1420:                     chaine_sauvegarde = chaine;
 1421: 
 1422:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 1423:                             (*l_element_courant).donnee,
 1424:                             (*l_element_courant_format).donnee,
 1425:                             0, 0, ' ', 'F', longueur_effective, recursivite))
 1426:                             == NULL)
 1427:                     {
 1428:                         return(NULL);
 1429:                     }
 1430: 
 1431:                     chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 1432:                             + strlen(chaine_sauvegarde) + 2)
 1433:                             * sizeof(unsigned char));
 1434: 
 1435:                     if (chaine == NULL)
 1436:                     {
 1437:                         (*s_etat_processus).erreur_systeme =
 1438:                                 d_es_allocation_memoire;
 1439:                         return(NULL);
 1440:                     }
 1441: 
 1442:                     strcpy(chaine, chaine_sauvegarde);
 1443:                     free(chaine_sauvegarde);
 1444:                     strcat(chaine, " ");
 1445:                     strcat(chaine, chaine_formatee);
 1446:                     free(chaine_formatee);
 1447:                 }
 1448:                 else if ((*(*l_element_courant_format).donnee).type != CHN)
 1449:                 {
 1450:                     free(chaine);
 1451: 
 1452:                     (*s_etat_processus).erreur_execution =
 1453:                             d_ex_erreur_format_fichier;
 1454:                     return(NULL);
 1455:                 }
 1456:                 else
 1457:                 {
 1458:                     if ((format_chaine = conversion_majuscule((unsigned char *)
 1459:                             (*(*l_element_courant_format).donnee).objet))
 1460:                             == NULL)
 1461:                     {
 1462:                         (*s_etat_processus).erreur_systeme =
 1463:                                 d_es_allocation_memoire;
 1464:                         return(NULL);
 1465:                     }
 1466: 
 1467:                     format_degenere = d_faux;
 1468: 
 1469:                     if (strncmp("STANDARD*", format_chaine, 9) == 0)
 1470:                     {
 1471:                         format_sortie = 'S';
 1472:                         position_1 = 9;
 1473:                         format_degenere = d_vrai;
 1474:                     }
 1475:                     else if (strncmp("BINARY*", format_chaine, 7) == 0)
 1476:                     {
 1477:                         format_sortie = 'B';
 1478:                         position_1 = 7;
 1479:                     }
 1480:                     else if (strncmp("FIXED*", format_chaine, 6) == 0)
 1481:                     {
 1482:                         format_sortie = 'F';
 1483:                         position_1 = 6;
 1484:                     }
 1485:                     else if (strncmp("SCIENTIFIC*", format_chaine, 11) == 0)
 1486:                     {
 1487:                         format_sortie = 'I';
 1488:                         position_1 = 11;
 1489:                     }
 1490:                     else if (strncmp("ENGINEER*", format_chaine, 9) == 0)
 1491:                     {
 1492:                         format_sortie = 'E';
 1493:                         position_1 = 9;
 1494:                     }
 1495:                     else if (strncmp("CHARACTER*", format_chaine, 10) == 0)
 1496:                     {
 1497:                         format_sortie = 'C';
 1498:                         position_1 = 10;
 1499:                         format_degenere = d_vrai;
 1500:                     }
 1501:                     else
 1502:                     {
 1503:                         free(chaine);
 1504:                         free(format_chaine);
 1505: 
 1506:                         (*s_etat_processus).erreur_execution =
 1507:                                 d_ex_erreur_format_fichier;
 1508:                         return(NULL);
 1509:                     }
 1510: 
 1511:                     position_3 = strlen(format_chaine);
 1512:                     format_chaine[--position_3] = d_code_fin_chaine;
 1513: 
 1514:                     position_2 = position_1;
 1515: 
 1516:                     while(format_chaine[position_2] != '(')
 1517:                     {
 1518:                         if (format_chaine[position_2] == d_code_fin_chaine)
 1519:                         {
 1520:                             free(chaine);
 1521:                             free(format_chaine);
 1522: 
 1523:                             (*s_etat_processus).erreur_execution =
 1524:                                     d_ex_erreur_format_fichier;
 1525:                             return(NULL);
 1526:                         }
 1527: 
 1528:                         position_2++;
 1529:                     }
 1530: 
 1531:                     format_chaine[position_2++] = d_code_fin_chaine;
 1532: 
 1533:                     if (format_degenere == d_faux)
 1534:                     {
 1535:                         if (sscanf(&(format_chaine[position_1]), "%ld",
 1536:                                 &longueur) != 1)
 1537:                         {
 1538:                             free(chaine);
 1539:                             free(format_chaine);
 1540: 
 1541:                             (*s_etat_processus).erreur_execution =
 1542:                                     d_ex_erreur_format_fichier;
 1543:                             return(NULL);
 1544:                         }
 1545:                     }
 1546:                     else
 1547:                     {
 1548:                         longueur = -1;
 1549:                     }
 1550: 
 1551:                     if (strcmp(&(format_chaine[position_2]), "*") != 0)
 1552:                     {
 1553:                         if (sscanf(&(format_chaine[position_2]), "%ld",
 1554:                                 &longueur_champ) != 1)
 1555:                         {
 1556:                             free(chaine);
 1557:                             free(format_chaine);
 1558: 
 1559:                             (*s_etat_processus).erreur_execution =
 1560:                                     d_ex_erreur_format_fichier;
 1561:                             return(NULL);
 1562:                         }
 1563:                     }
 1564:                     else
 1565:                     {
 1566:                         longueur_champ = -1;
 1567:                     }
 1568: 
 1569:                     if ((longueur >= 0) && (longueur_champ >= 0) && (longueur >
 1570:                             longueur_champ))
 1571:                     {
 1572:                         free(chaine);
 1573:                         free(format_chaine);
 1574: 
 1575:                         (*s_etat_processus).erreur_execution =
 1576:                                 d_ex_erreur_format_fichier;
 1577:                         return(NULL);
 1578:                     }
 1579: 
 1580:                     free(format_chaine);
 1581:                 
 1582:                     chaine_sauvegarde = chaine;
 1583: 
 1584:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 1585:                             (*l_element_courant).donnee, s_format,
 1586:                             longueur, longueur_champ, format_sortie, type,
 1587:                             longueur_effective, recursivite)) == NULL)
 1588:                     {
 1589:                         free(chaine);
 1590:                         return(NULL);
 1591:                     }
 1592: 
 1593:                     if ((*(*l_element_courant).donnee).type == CHN)
 1594:                     {
 1595:                         chaine = (unsigned char *)
 1596:                                 malloc((strlen(chaine_formatee)
 1597:                                 + strlen(chaine_sauvegarde) + 4)
 1598:                                 * sizeof(unsigned char));
 1599: 
 1600:                         if (chaine == NULL)
 1601:                         {
 1602:                             (*s_etat_processus).erreur_systeme =
 1603:                                     d_es_allocation_memoire;
 1604:                             return(NULL);
 1605:                         }
 1606: 
 1607:                         strcpy(chaine, chaine_sauvegarde);
 1608:                         free(chaine_sauvegarde);
 1609:                         strcat(chaine, " \"");
 1610:                         strcat(chaine, chaine_formatee);
 1611:                         free(chaine_formatee);
 1612:                         strcat(chaine, "\"");
 1613:                     }
 1614:                     else if ((*(*l_element_courant).donnee).type == NOM)
 1615:                     {
 1616:                         chaine = (unsigned char *)
 1617:                                 malloc((strlen(chaine_formatee)
 1618:                                 + strlen(chaine_sauvegarde) + 2)
 1619:                                 * sizeof(unsigned char));
 1620: 
 1621:                         if (chaine == NULL)
 1622:                         {
 1623:                             (*s_etat_processus).erreur_systeme =
 1624:                                     d_es_allocation_memoire;
 1625:                             return(NULL);
 1626:                         }
 1627: 
 1628:                         sprintf(chaine, "%s %s", chaine_sauvegarde,
 1629:                                 chaine_formatee);
 1630:                         free(chaine_formatee);
 1631:                     }
 1632:                     else
 1633:                     {
 1634:                         chaine = (unsigned char *)
 1635:                                 malloc((strlen(chaine_formatee)
 1636:                                 + strlen(chaine_sauvegarde) + 2)
 1637:                                 * sizeof(unsigned char));
 1638: 
 1639:                         if (chaine == NULL)
 1640:                         {
 1641:                             (*s_etat_processus).erreur_systeme =
 1642:                                     d_es_allocation_memoire;
 1643:                             return(NULL);
 1644:                         }
 1645: 
 1646:                         strcpy(chaine, chaine_sauvegarde);
 1647:                         free(chaine_sauvegarde);
 1648:                         strcat(chaine, " ");
 1649:                         strcat(chaine, chaine_formatee);
 1650:                         free(chaine_formatee);
 1651:                     }
 1652:                 }
 1653: 
 1654:                 nombre_elements++;
 1655:                 l_element_courant = (*l_element_courant).suivant;
 1656:                 l_element_courant_format = (*l_element_courant_format).suivant;
 1657:             }
 1658: 
 1659:             if ((l_element_courant != NULL) ||
 1660:                     (l_element_courant_format != NULL))
 1661:             {
 1662:                 free(chaine);
 1663: 
 1664:                 (*s_etat_processus).erreur_execution =
 1665:                         d_ex_erreur_format_fichier;
 1666:                 return(NULL);
 1667:             }
 1668: 
 1669:             chaine_sauvegarde = chaine;
 1670:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 3)
 1671:                     * sizeof(unsigned char));
 1672: 
 1673:             if (chaine == NULL)
 1674:             {
 1675:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1676:                 return(NULL);
 1677:             }
 1678: 
 1679:             strcpy(chaine, chaine_sauvegarde);
 1680:             free(chaine_sauvegarde);
 1681:             strcat(chaine, " }");
 1682:         }
 1683:         else if ((*s_objet).type == TBL)
 1684:         {
 1685: 
 1686: /*
 1687: --------------------------------------------------------------------------------
 1688:   Table
 1689: --------------------------------------------------------------------------------
 1690: */
 1691: 
 1692:             if ((*s_format).type != TBL)
 1693:             {
 1694:                 (*s_etat_processus).erreur_execution =
 1695:                         d_ex_erreur_format_fichier;
 1696:                 return(NULL);
 1697:             }
 1698: 
 1699:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 1700:             l_element_courant_format = (struct_liste_chainee *)
 1701:                     (*s_format).objet;
 1702: 
 1703:             if ((*((struct_tableau *) (*s_objet).objet)).nombre_elements !=
 1704:                     (*((struct_tableau *) (*s_format).objet)).nombre_elements)
 1705:             {
 1706:                 (*s_etat_processus).erreur_execution =
 1707:                         d_ex_erreur_format_fichier;
 1708:                 return(NULL);
 1709:             }
 1710: 
 1711:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 1712: 
 1713:             if (chaine == NULL)
 1714:             {
 1715:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1716:                 return(NULL);
 1717:             }
 1718: 
 1719:             strcpy(chaine, "<[");
 1720: 
 1721:             for(i = 0; i < (*((struct_tableau *) (*s_objet).objet))
 1722:                     .nombre_elements; i++)
 1723:             {
 1724:                 if ((((*(*((struct_tableau *) (*s_format).objet))
 1725:                         .elements[i]).type == LST) &&
 1726:                         ((*(*((struct_tableau *) (*s_objet).objet)).elements[i])
 1727:                         .type == LST)) ||
 1728:                         (((*(*((struct_tableau *) (*s_format).objet))
 1729:                         .elements[i]).type == TBL) &&
 1730:                         ((*(*((struct_tableau *) (*s_objet).objet)).elements[i])
 1731:                         .type == TBL)))
 1732:                 {
 1733:                     chaine_sauvegarde = chaine;
 1734: 
 1735:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 1736:                             (*l_element_courant).donnee,
 1737:                             (*l_element_courant_format).donnee,
 1738:                             0, 0, ' ', 'F', longueur_effective, recursivite))
 1739:                             == NULL)
 1740:                     {
 1741:                         return(NULL);
 1742:                     }
 1743: 
 1744:                     chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 1745:                             + strlen(chaine_sauvegarde) + 2)
 1746:                             * sizeof(unsigned char));
 1747: 
 1748:                     if (chaine == NULL)
 1749:                     {
 1750:                         (*s_etat_processus).erreur_systeme =
 1751:                                 d_es_allocation_memoire;
 1752:                         return(NULL);
 1753:                     }
 1754: 
 1755:                     strcpy(chaine, chaine_sauvegarde);
 1756:                     free(chaine_sauvegarde);
 1757:                     strcat(chaine, " ");
 1758:                     strcat(chaine, chaine_formatee);
 1759:                     free(chaine_formatee);
 1760:                 }
 1761:                 else if ((*(*((struct_tableau *) (*s_format).objet))
 1762:                         .elements[i]).type != CHN)
 1763:                 {
 1764:                     free(chaine);
 1765: 
 1766:                     (*s_etat_processus).erreur_execution =
 1767:                             d_ex_erreur_format_fichier;
 1768:                     return(NULL);
 1769:                 }
 1770:                 else
 1771:                 {
 1772:                     if ((format_chaine = conversion_majuscule((unsigned char *)
 1773:                             (*(*((struct_tableau *) (*s_format).objet))
 1774:                             .elements[i]).objet)) == NULL)
 1775:                     {
 1776:                         (*s_etat_processus).erreur_systeme =
 1777:                                 d_es_allocation_memoire;
 1778:                         return(NULL);
 1779:                     }
 1780: 
 1781:                     format_degenere = d_faux;
 1782: 
 1783:                     if (strncmp("STANDARD*", format_chaine, 9) == 0)
 1784:                     {
 1785:                         format_sortie = 'S';
 1786:                         position_1 = 9;
 1787:                         format_degenere = d_vrai;
 1788:                     }
 1789:                     else if (strncmp("BINARY*", format_chaine, 7) == 0)
 1790:                     {
 1791:                         format_sortie = 'B';
 1792:                         position_1 = 7;
 1793:                     }
 1794:                     else if (strncmp("FIXED*", format_chaine, 6) == 0)
 1795:                     {
 1796:                         format_sortie = 'F';
 1797:                         position_1 = 6;
 1798:                     }
 1799:                     else if (strncmp("SCIENTIFIC*", format_chaine, 11) == 0)
 1800:                     {
 1801:                         format_sortie = 'I';
 1802:                         position_1 = 11;
 1803:                     }
 1804:                     else if (strncmp("ENGINEER*", format_chaine, 9) == 0)
 1805:                     {
 1806:                         format_sortie = 'E';
 1807:                         position_1 = 9;
 1808:                     }
 1809:                     else if (strncmp("CHARACTER*", format_chaine, 10) == 0)
 1810:                     {
 1811:                         format_sortie = 'C';
 1812:                         position_1 = 10;
 1813:                         format_degenere = d_vrai;
 1814:                     }
 1815:                     else
 1816:                     {
 1817:                         free(chaine);
 1818:                         free(format_chaine);
 1819: 
 1820:                         (*s_etat_processus).erreur_execution =
 1821:                                 d_ex_erreur_format_fichier;
 1822:                         return(NULL);
 1823:                     }
 1824: 
 1825:                     position_3 = strlen(format_chaine);
 1826:                     format_chaine[--position_3] = d_code_fin_chaine;
 1827: 
 1828:                     position_2 = position_1;
 1829: 
 1830:                     while(format_chaine[position_2] != '(')
 1831:                     {
 1832:                         if (format_chaine[position_2] == d_code_fin_chaine)
 1833:                         {
 1834:                             free(chaine);
 1835:                             free(format_chaine);
 1836: 
 1837:                             (*s_etat_processus).erreur_execution =
 1838:                                     d_ex_erreur_format_fichier;
 1839:                             return(NULL);
 1840:                         }
 1841: 
 1842:                         position_2++;
 1843:                     }
 1844: 
 1845:                     format_chaine[position_2++] = d_code_fin_chaine;
 1846: 
 1847:                     if (format_degenere == d_faux)
 1848:                     {
 1849:                         if (sscanf(&(format_chaine[position_1]), "%ld",
 1850:                                 &longueur) != 1)
 1851:                         {
 1852:                             free(chaine);
 1853:                             free(format_chaine);
 1854: 
 1855:                             (*s_etat_processus).erreur_execution =
 1856:                                     d_ex_erreur_format_fichier;
 1857:                             return(NULL);
 1858:                         }
 1859:                     }
 1860:                     else
 1861:                     {
 1862:                         longueur = -1;
 1863:                     }
 1864: 
 1865:                     if (strcmp(&(format_chaine[position_2]), "*") != 0)
 1866:                     {
 1867:                         if (sscanf(&(format_chaine[position_2]), "%ld",
 1868:                                 &longueur_champ) != 1)
 1869:                         {
 1870:                             free(chaine);
 1871:                             free(format_chaine);
 1872: 
 1873:                             (*s_etat_processus).erreur_execution =
 1874:                                     d_ex_erreur_format_fichier;
 1875:                             return(NULL);
 1876:                         }
 1877:                     }
 1878:                     else
 1879:                     {
 1880:                         longueur_champ = -1;
 1881:                     }
 1882: 
 1883:                     if ((longueur >= 0) && (longueur_champ >= 0) && (longueur >
 1884:                             longueur_champ))
 1885:                     {
 1886:                         free(chaine);
 1887:                         free(format_chaine);
 1888: 
 1889:                         (*s_etat_processus).erreur_execution =
 1890:                                 d_ex_erreur_format_fichier;
 1891:                         return(NULL);
 1892:                     }
 1893: 
 1894:                     free(format_chaine);
 1895:                 
 1896:                     chaine_sauvegarde = chaine;
 1897: 
 1898:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 1899:                             (*((struct_tableau *) (*s_objet).objet))
 1900:                             .elements[i], s_format,
 1901:                             longueur, longueur_champ, format_sortie, type,
 1902:                             longueur_effective, recursivite)) == NULL)
 1903:                     {
 1904:                         return(NULL);
 1905:                     }
 1906: 
 1907:                     if ((*(*((struct_tableau *) (*s_objet).objet))
 1908:                             .elements[i]).type == CHN)
 1909:                     {
 1910:                         chaine = (unsigned char *)
 1911:                                 malloc((strlen(chaine_formatee)
 1912:                                 + strlen(chaine_sauvegarde) + 4)
 1913:                                 * sizeof(unsigned char));
 1914: 
 1915:                         if (chaine == NULL)
 1916:                         {
 1917:                             (*s_etat_processus).erreur_systeme =
 1918:                                     d_es_allocation_memoire;
 1919:                             return(NULL);
 1920:                         }
 1921: 
 1922:                         strcpy(chaine, chaine_sauvegarde);
 1923:                         free(chaine_sauvegarde);
 1924:                         strcat(chaine, " \"");
 1925:                         strcat(chaine, chaine_formatee);
 1926:                         free(chaine_formatee);
 1927:                         strcat(chaine, "\"");
 1928:                     }
 1929:                     else if ((*(*((struct_tableau *) (*s_objet).objet))
 1930:                             .elements[i]).type == NOM)
 1931:                     {
 1932:                         chaine = (unsigned char *)
 1933:                                 malloc((strlen(chaine_formatee)
 1934:                                 + strlen(chaine_sauvegarde) + 2)
 1935:                                 * sizeof(unsigned char));
 1936: 
 1937:                         if (chaine == NULL)
 1938:                         {
 1939:                             (*s_etat_processus).erreur_systeme =
 1940:                                     d_es_allocation_memoire;
 1941:                             return(NULL);
 1942:                         }
 1943: 
 1944:                         sprintf(chaine, "%s %s", chaine_sauvegarde,
 1945:                                 chaine_formatee);
 1946:                         free(chaine_formatee);
 1947:                     }
 1948:                     else
 1949:                     {
 1950:                         chaine = (unsigned char *)
 1951:                                 malloc((strlen(chaine_formatee)
 1952:                                 + strlen(chaine_sauvegarde) + 2)
 1953:                                 * sizeof(unsigned char));
 1954: 
 1955:                         if (chaine == NULL)
 1956:                         {
 1957:                             (*s_etat_processus).erreur_systeme =
 1958:                                     d_es_allocation_memoire;
 1959:                             return(NULL);
 1960:                         }
 1961: 
 1962:                         strcpy(chaine, chaine_sauvegarde);
 1963:                         free(chaine_sauvegarde);
 1964:                         strcat(chaine, " ");
 1965:                         strcat(chaine, chaine_formatee);
 1966:                         free(chaine_formatee);
 1967:                     }
 1968:                 }
 1969:             }
 1970: 
 1971:             chaine_sauvegarde = chaine;
 1972:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 4)
 1973:                     * sizeof(unsigned char));
 1974: 
 1975:             if (chaine == NULL)
 1976:             {
 1977:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1978:                 return(NULL);
 1979:             }
 1980: 
 1981:             strcpy(chaine, chaine_sauvegarde);
 1982:             free(chaine_sauvegarde);
 1983:             strcat(chaine, " ]>");
 1984:         }
 1985:         else if ((*s_objet).type == MCX)
 1986:         {
 1987: 
 1988: /*
 1989: --------------------------------------------------------------------------------
 1990:   Matrice complexe
 1991: --------------------------------------------------------------------------------
 1992: */
 1993: 
 1994:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 1995:                     (format_sortie != 'I') && (format_sortie != 'E'))
 1996:             {
 1997:                 (*s_etat_processus).erreur_execution =
 1998:                         d_ex_erreur_format_fichier;
 1999:                 return(NULL);
 2000:             }
 2001: 
 2002:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 2003:                     .nombre_lignes;
 2004:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 2005:                     .nombre_colonnes;
 2006: 
 2007:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 2008: 
 2009:             if (chaine != NULL)
 2010:             {
 2011:                 strcpy(chaine, "[[");
 2012: 
 2013:                 for(i = 0; i < nombre_lignes; i++)
 2014:                 {
 2015:                     for(j = 0; j < nombre_colonnes; j++)
 2016:                     {
 2017:                         if ((chaine_formatee =
 2018:                                 formateur_fichier_nombre(s_etat_processus,
 2019:                                 (void *) &(((struct_complexe16 **)
 2020:                                 ((*((struct_matrice *)
 2021:                                 ((*s_objet).objet))).tableau))[i][j]), 'C',
 2022:                                 longueur, longueur_champ, format_sortie))
 2023:                                 == NULL)
 2024:                         {
 2025:                             (*s_etat_processus).erreur_systeme =
 2026:                                     d_es_allocation_memoire;
 2027:                             return(NULL);
 2028:                         }
 2029: 
 2030:                         chaine_sauvegarde = chaine;
 2031:                         chaine = (unsigned char *) malloc(
 2032:                                 (strlen(chaine_sauvegarde) +
 2033:                                 strlen(chaine_formatee) + 2)
 2034:                                 * sizeof(unsigned char));
 2035: 
 2036:                         if (chaine == NULL)
 2037:                         {
 2038:                             (*s_etat_processus).erreur_systeme =
 2039:                                     d_es_allocation_memoire;
 2040:                             return(NULL);
 2041:                         }
 2042: 
 2043:                         strcpy(chaine, chaine_sauvegarde);
 2044:                         free(chaine_sauvegarde);
 2045:                         strcat(chaine, " ");
 2046:                         strcat(chaine, chaine_formatee);
 2047:                         free(chaine_formatee);
 2048:                     }
 2049: 
 2050:                     chaine_sauvegarde = chaine;
 2051:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2052:                     {
 2053:                         chaine = (unsigned char *) malloc(
 2054:                                 (strlen(chaine_sauvegarde) + 6)
 2055:                                 * sizeof(unsigned char));
 2056: 
 2057:                         if (chaine == NULL)
 2058:                         {
 2059:                             (*s_etat_processus).erreur_systeme =
 2060:                                     d_es_allocation_memoire;
 2061:                             return(NULL);
 2062:                         }
 2063: 
 2064:                         strcpy(chaine, chaine_sauvegarde);
 2065:                         free(chaine_sauvegarde);
 2066:                         strcat(chaine, " ]\n [");
 2067:                     }
 2068:                     else
 2069:                     {
 2070:                         chaine = (unsigned char *) malloc(
 2071:                                 (strlen(chaine_sauvegarde) + 4)
 2072:                                 * sizeof(unsigned char));
 2073: 
 2074:                         if (chaine == NULL)
 2075:                         {
 2076:                             (*s_etat_processus).erreur_systeme =
 2077:                                     d_es_allocation_memoire;
 2078:                             return(NULL);
 2079:                         }
 2080: 
 2081:                         strcpy(chaine, chaine_sauvegarde);
 2082:                         free(chaine_sauvegarde);
 2083:                         strcat(chaine, " ][");
 2084:                     }
 2085:                 }
 2086: 
 2087:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2088:                 {
 2089:                     chaine[strlen(chaine) - 3] = ']';
 2090:                     chaine[strlen(chaine) - 2] = 0;
 2091: 
 2092:                     chaine_sauvegarde = chaine;
 2093:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2094:                             + 1) * sizeof(unsigned char));
 2095: 
 2096:                     if (chaine == NULL)
 2097:                     {
 2098:                         (*s_etat_processus).erreur_systeme =
 2099:                                 d_es_allocation_memoire;
 2100:                         return(NULL);
 2101:                     }
 2102: 
 2103:                     strcpy(chaine, chaine_sauvegarde);
 2104:                     free(chaine_sauvegarde);
 2105:                 }
 2106:                 else
 2107:                 {
 2108:                     chaine[strlen(chaine) - 2] = ']';
 2109:                     chaine[strlen(chaine) - 1] = 0;
 2110: 
 2111:                     chaine_sauvegarde = chaine;
 2112:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2113:                             + 2) * sizeof(unsigned char));
 2114: 
 2115:                     if (chaine == NULL)
 2116:                     {
 2117:                         (*s_etat_processus).erreur_systeme =
 2118:                                 d_es_allocation_memoire;
 2119:                         return(NULL);
 2120:                     }
 2121: 
 2122:                     strcpy(chaine, chaine_sauvegarde);
 2123:                     free(chaine_sauvegarde);
 2124:                     strcat(chaine, "]");
 2125:                 }
 2126:             }
 2127:         }
 2128:         else if ((*s_objet).type == MIN)
 2129:         {
 2130: 
 2131: /*
 2132: --------------------------------------------------------------------------------
 2133:   Matrice entière
 2134: --------------------------------------------------------------------------------
 2135: */
 2136: 
 2137:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2138:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2139:             {
 2140:                 (*s_etat_processus).erreur_execution =
 2141:                         d_ex_erreur_format_fichier;
 2142:                 return(NULL);
 2143:             }
 2144: 
 2145:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 2146:                     .nombre_lignes;
 2147:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 2148:                     .nombre_colonnes;
 2149: 
 2150:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 2151: 
 2152:             if (chaine != NULL)
 2153:             {
 2154:                 strcpy(chaine, "[[");
 2155: 
 2156:                 for(i = 0; i < nombre_lignes; i++)
 2157:                 {
 2158:                     for(j = 0; j < nombre_colonnes; j++)
 2159:                     {
 2160:                         if ((chaine_formatee =
 2161:                                 formateur_fichier_nombre(s_etat_processus,
 2162:                                 (void *) &(((integer8 **) ((*((struct_matrice *)
 2163:                                 ((*s_objet).objet))).tableau))[i][j]), 'I',
 2164:                                 longueur, longueur_champ, format_sortie))
 2165:                                 == NULL)
 2166:                         {
 2167:                             (*s_etat_processus).erreur_systeme =
 2168:                                     d_es_allocation_memoire;
 2169:                             return(NULL);
 2170:                         }
 2171: 
 2172:                         chaine_sauvegarde = chaine;
 2173:                         chaine = (unsigned char *) malloc(
 2174:                                 (strlen(chaine_sauvegarde) +
 2175:                                 strlen(chaine_formatee) + 2)
 2176:                                 * sizeof(unsigned char));
 2177: 
 2178:                         if (chaine == NULL)
 2179:                         {
 2180:                             (*s_etat_processus).erreur_systeme =
 2181:                                     d_es_allocation_memoire;
 2182:                             return(NULL);
 2183:                         }
 2184: 
 2185:                         strcpy(chaine, chaine_sauvegarde);
 2186:                         free(chaine_sauvegarde);
 2187:                         strcat(chaine, " ");
 2188:                         strcat(chaine, chaine_formatee);
 2189:                         free(chaine_formatee);
 2190:                     }
 2191: 
 2192:                     chaine_sauvegarde = chaine;
 2193:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2194:                     {
 2195:                         chaine = (unsigned char *) malloc(
 2196:                                 (strlen(chaine_sauvegarde) + 6)
 2197:                                 * sizeof(unsigned char));
 2198: 
 2199:                         if (chaine == NULL)
 2200:                         {
 2201:                             (*s_etat_processus).erreur_systeme =
 2202:                                     d_es_allocation_memoire;
 2203:                             return(NULL);
 2204:                         }
 2205: 
 2206:                         strcpy(chaine, chaine_sauvegarde);
 2207:                         free(chaine_sauvegarde);
 2208:                         strcat(chaine, " ]\n [");
 2209:                     }
 2210:                     else
 2211:                     {
 2212:                         chaine = (unsigned char *) malloc(
 2213:                                 (strlen(chaine_sauvegarde) + 4)
 2214:                                 * sizeof(unsigned char));
 2215: 
 2216:                         if (chaine == NULL)
 2217:                         {
 2218:                             (*s_etat_processus).erreur_systeme =
 2219:                                     d_es_allocation_memoire;
 2220:                             return(NULL);
 2221:                         }
 2222: 
 2223:                         strcpy(chaine, chaine_sauvegarde);
 2224:                         free(chaine_sauvegarde);
 2225:                         strcat(chaine, " ][");
 2226:                     }
 2227:                 }
 2228: 
 2229:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2230:                 {
 2231:                     chaine[strlen(chaine) - 3] = ']';
 2232:                     chaine[strlen(chaine) - 2] = 0;
 2233: 
 2234:                     chaine_sauvegarde = chaine;
 2235:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2236:                             + 1) * sizeof(unsigned char));
 2237: 
 2238:                     if (chaine == NULL)
 2239:                     {
 2240:                         (*s_etat_processus).erreur_systeme =
 2241:                                 d_es_allocation_memoire;
 2242:                         return(NULL);
 2243:                     }
 2244: 
 2245:                     strcpy(chaine, chaine_sauvegarde);
 2246:                     free(chaine_sauvegarde);
 2247:                 }
 2248:                 else
 2249:                 {
 2250:                     chaine[strlen(chaine) - 2] = ']';
 2251:                     chaine[strlen(chaine) - 1] = 0;
 2252: 
 2253:                     chaine_sauvegarde = chaine;
 2254:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2255:                             + 2) * sizeof(unsigned char));
 2256: 
 2257:                     if (chaine == NULL)
 2258:                     {
 2259:                         (*s_etat_processus).erreur_systeme =
 2260:                                 d_es_allocation_memoire;
 2261:                         return(NULL);
 2262:                     }
 2263: 
 2264:                     strcpy(chaine, chaine_sauvegarde);
 2265:                     free(chaine_sauvegarde);
 2266:                     strcat(chaine, "]");
 2267:                 }
 2268:             }
 2269:         }
 2270:         else if ((*s_objet).type == MRL)
 2271:         {
 2272: 
 2273: /*
 2274: --------------------------------------------------------------------------------
 2275:   Matrice réelle
 2276: --------------------------------------------------------------------------------
 2277: */
 2278: 
 2279:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2280:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2281:             {
 2282:                 (*s_etat_processus).erreur_execution =
 2283:                         d_ex_erreur_format_fichier;
 2284:                 return(NULL);
 2285:             }
 2286: 
 2287:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 2288:                     .nombre_lignes;
 2289:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 2290:                     .nombre_colonnes;
 2291: 
 2292:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 2293: 
 2294:             if (chaine != NULL)
 2295:             {
 2296:                 strcpy(chaine, "[[");
 2297: 
 2298:                 for(i = 0; i < nombre_lignes; i++)
 2299:                 {
 2300:                     for(j = 0; j < nombre_colonnes; j++)
 2301:                     {
 2302:                         if ((chaine_formatee =
 2303:                                 formateur_fichier_nombre(s_etat_processus,
 2304:                                 (void *) &(((real8 **) ((*((struct_matrice *)
 2305:                                 ((*s_objet).objet))).tableau))[i][j]), 'R',
 2306:                                 longueur, longueur_champ, format_sortie))
 2307:                                 == NULL)
 2308:                         {
 2309:                             (*s_etat_processus).erreur_systeme =
 2310:                                     d_es_allocation_memoire;
 2311:                             return(NULL);
 2312:                         }
 2313: 
 2314:                         chaine_sauvegarde = chaine;
 2315:                         chaine = (unsigned char *) malloc(
 2316:                                 (strlen(chaine_sauvegarde) +
 2317:                                 strlen(chaine_formatee) + 2)
 2318:                                 * sizeof(unsigned char));
 2319: 
 2320:                         if (chaine == NULL)
 2321:                         {
 2322:                             (*s_etat_processus).erreur_systeme =
 2323:                                     d_es_allocation_memoire;
 2324:                             return(NULL);
 2325:                         }
 2326: 
 2327:                         strcpy(chaine, chaine_sauvegarde);
 2328:                         free(chaine_sauvegarde);
 2329:                         strcat(chaine, " ");
 2330:                         strcat(chaine, chaine_formatee);
 2331:                         free(chaine_formatee);
 2332:                     }
 2333: 
 2334:                     chaine_sauvegarde = chaine;
 2335:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2336:                     {
 2337:                         chaine = (unsigned char *) malloc(
 2338:                                 (strlen(chaine_sauvegarde) + 6)
 2339:                                 * sizeof(unsigned char));
 2340: 
 2341:                         if (chaine == NULL)
 2342:                         {
 2343:                             (*s_etat_processus).erreur_systeme =
 2344:                                     d_es_allocation_memoire;
 2345:                             return(NULL);
 2346:                         }
 2347: 
 2348:                         strcpy(chaine, chaine_sauvegarde);
 2349:                         free(chaine_sauvegarde);
 2350:                         strcat(chaine, " ]\n [");
 2351:                     }
 2352:                     else
 2353:                     {
 2354:                         chaine = (unsigned char *) malloc(
 2355:                                 (strlen(chaine_sauvegarde) + 4)
 2356:                                 * sizeof(unsigned char));
 2357: 
 2358:                         if (chaine == NULL)
 2359:                         {
 2360:                             (*s_etat_processus).erreur_systeme =
 2361:                                     d_es_allocation_memoire;
 2362:                             return(NULL);
 2363:                         }
 2364: 
 2365:                         strcpy(chaine, chaine_sauvegarde);
 2366:                         free(chaine_sauvegarde);
 2367:                         strcat(chaine, " ][");
 2368:                     }
 2369:                 }
 2370: 
 2371:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2372:                 {
 2373:                     chaine[strlen(chaine) - 3] = ']';
 2374:                     chaine[strlen(chaine) - 2] = 0;
 2375: 
 2376:                     chaine_sauvegarde = chaine;
 2377:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2378:                             + 1) * sizeof(unsigned char));
 2379: 
 2380:                     if (chaine == NULL)
 2381:                     {
 2382:                         (*s_etat_processus).erreur_systeme =
 2383:                                 d_es_allocation_memoire;
 2384:                         return(NULL);
 2385:                     }
 2386: 
 2387:                     strcpy(chaine, chaine_sauvegarde);
 2388:                     free(chaine_sauvegarde);
 2389:                 }
 2390:                 else
 2391:                 {
 2392:                     chaine[strlen(chaine) - 2] = ']';
 2393:                     chaine[strlen(chaine) - 1] = 0;
 2394: 
 2395:                     chaine_sauvegarde = chaine;
 2396:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2397:                             + 2) * sizeof(unsigned char));
 2398: 
 2399:                     if (chaine == NULL)
 2400:                     {
 2401:                         (*s_etat_processus).erreur_systeme =
 2402:                                 d_es_allocation_memoire;
 2403:                         return(NULL);
 2404:                     }
 2405: 
 2406:                     strcpy(chaine, chaine_sauvegarde);
 2407:                     free(chaine_sauvegarde);
 2408:                     strcat(chaine, "]");
 2409:                 }
 2410:             }
 2411:         }
 2412:         else if ((*s_objet).type == NOM)
 2413:         {
 2414: 
 2415: /*
 2416: --------------------------------------------------------------------------------
 2417:   Nom
 2418: --------------------------------------------------------------------------------
 2419: */
 2420: 
 2421:             chaine = (unsigned char *) malloc((strlen((*((struct_nom *)
 2422:                     (*s_objet).objet)).nom) + 3) * sizeof(unsigned char));
 2423: 
 2424:             if (chaine == NULL)
 2425:             {
 2426:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2427:                 return(NULL);
 2428:             }
 2429: 
 2430:             sprintf(chaine, "'%s'", (*((struct_nom *) (*s_objet).objet)).nom);
 2431:         }
 2432:         else if ((*s_objet).type == REL)
 2433:         {
 2434: 
 2435: /*
 2436: --------------------------------------------------------------------------------
 2437:   Réel
 2438: --------------------------------------------------------------------------------
 2439: */
 2440: 
 2441:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2442:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2443:             {
 2444:                 (*s_etat_processus).erreur_execution =
 2445:                         d_ex_erreur_format_fichier;
 2446:                 return(NULL);
 2447:             }
 2448: 
 2449:             if ((chaine_formatee = formateur_fichier_nombre(s_etat_processus,
 2450:                     (void *) ((real8 *) ((*s_objet).objet)), 'R',
 2451:                     longueur, longueur_champ, format_sortie)) == NULL)
 2452:             {
 2453:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2454:                 return(NULL);
 2455:             }
 2456: 
 2457:             chaine = (unsigned char *) malloc((strlen(chaine_formatee) + 1)
 2458:                     * sizeof(unsigned char));
 2459: 
 2460:             if (chaine == NULL)
 2461:             {
 2462:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2463:                 return(NULL);
 2464:             }
 2465: 
 2466:             strcpy(chaine, chaine_formatee);
 2467:             free(chaine_formatee);
 2468:         }
 2469:         else if ((*s_objet).type == VCX)
 2470:         {
 2471: 
 2472: /*
 2473: --------------------------------------------------------------------------------
 2474:   Vecteur complexe
 2475: --------------------------------------------------------------------------------
 2476: */
 2477: 
 2478:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2479:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2480:             {
 2481:                 (*s_etat_processus).erreur_execution =
 2482:                         d_ex_erreur_format_fichier;
 2483:                 return(NULL);
 2484:             }
 2485: 
 2486:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 2487:                     .taille;
 2488: 
 2489:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 2490: 
 2491:             if (chaine != NULL)
 2492:             {
 2493:                 strcpy(chaine, "[");
 2494: 
 2495:                 for(i = 0; i < nombre_colonnes; i++)
 2496:                 {
 2497:                     if ((chaine_formatee =
 2498:                             formateur_fichier_nombre(s_etat_processus,
 2499:                             (void *) &(((struct_complexe16 *)
 2500:                             ((*((struct_vecteur *)
 2501:                             ((*s_objet).objet))).tableau))[i]), 'C',
 2502:                             longueur, longueur_champ, format_sortie)) == NULL)
 2503:                     {
 2504:                         (*s_etat_processus).erreur_systeme =
 2505:                                 d_es_allocation_memoire;
 2506:                         return(NULL);
 2507:                     }
 2508: 
 2509:                     chaine_sauvegarde = chaine;
 2510:                     chaine = (unsigned char *) malloc(
 2511:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 2512:                             + 2) * sizeof(unsigned char));
 2513: 
 2514:                     if (chaine == NULL)
 2515:                     {
 2516:                         (*s_etat_processus).erreur_systeme =
 2517:                                 d_es_allocation_memoire;
 2518:                         return(NULL);
 2519:                     }
 2520: 
 2521:                     strcpy(chaine, chaine_sauvegarde);
 2522:                     free(chaine_sauvegarde);
 2523:                     strcat(chaine, " ");
 2524:                     strcat(chaine, chaine_formatee);
 2525:                     free(chaine_formatee);
 2526:                 }
 2527: 
 2528:                 chaine_sauvegarde = chaine;
 2529:                 chaine = (unsigned char *) malloc(
 2530:                         (strlen(chaine_sauvegarde) + 3)
 2531:                         * sizeof(unsigned char));
 2532: 
 2533:                 if (chaine == NULL)
 2534:                 {
 2535:                     (*s_etat_processus).erreur_systeme =
 2536:                             d_es_allocation_memoire;
 2537:                     return(NULL);
 2538:                 }
 2539: 
 2540:                 strcpy(chaine, chaine_sauvegarde);
 2541:                 free(chaine_sauvegarde);
 2542:                 strcat(chaine, " ]");
 2543:             }
 2544:         }
 2545:         else if ((*s_objet).type == VIN)
 2546:         {
 2547: 
 2548: /*
 2549: --------------------------------------------------------------------------------
 2550:   Vecteur entier
 2551: --------------------------------------------------------------------------------
 2552: */
 2553: 
 2554:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2555:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2556:             {
 2557:                 (*s_etat_processus).erreur_execution =
 2558:                         d_ex_erreur_format_fichier;
 2559:                 return(NULL);
 2560:             }
 2561: 
 2562:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 2563:                     .taille;
 2564: 
 2565:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 2566: 
 2567:             if (chaine != NULL)
 2568:             {
 2569:                 strcpy(chaine, "[");
 2570: 
 2571:                 for(i = 0; i < nombre_colonnes; i++)
 2572:                 {
 2573:                     if ((chaine_formatee =
 2574:                             formateur_fichier_nombre(s_etat_processus,
 2575:                             (void *) &(((integer8 *) ((*((struct_vecteur *)
 2576:                             ((*s_objet).objet))).tableau))[i]), 'I',
 2577:                             longueur, longueur_champ, format_sortie)) == NULL)
 2578:                     {
 2579:                         (*s_etat_processus).erreur_systeme =
 2580:                                 d_es_allocation_memoire;
 2581:                         return(NULL);
 2582:                     }
 2583: 
 2584:                     chaine_sauvegarde = chaine;
 2585:                     chaine = (unsigned char *) malloc(
 2586:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 2587:                             + 2) * sizeof(unsigned char));
 2588: 
 2589:                     if (chaine == NULL)
 2590:                     {
 2591:                         (*s_etat_processus).erreur_systeme =
 2592:                                 d_es_allocation_memoire;
 2593:                         return(NULL);
 2594:                     }
 2595: 
 2596:                     strcpy(chaine, chaine_sauvegarde);
 2597:                     free(chaine_sauvegarde);
 2598:                     strcat(chaine, " ");
 2599:                     strcat(chaine, chaine_formatee);
 2600:                     free(chaine_formatee);
 2601:                 }
 2602: 
 2603:                 chaine_sauvegarde = chaine;
 2604:                 chaine = (unsigned char *) malloc(
 2605:                         (strlen(chaine_sauvegarde) + 3)
 2606:                         * sizeof(unsigned char));
 2607: 
 2608:                 if (chaine == NULL)
 2609:                 {
 2610:                     (*s_etat_processus).erreur_systeme =
 2611:                             d_es_allocation_memoire;
 2612:                     return(NULL);
 2613:                 }
 2614: 
 2615:                 strcpy(chaine, chaine_sauvegarde);
 2616:                 free(chaine_sauvegarde);
 2617:                 strcat(chaine, " ]");
 2618:             }
 2619:         }
 2620:         else if ((*s_objet).type == VRL)
 2621:         {
 2622: 
 2623: /*
 2624: --------------------------------------------------------------------------------
 2625:   Vecteur réel
 2626: --------------------------------------------------------------------------------
 2627: */
 2628: 
 2629:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2630:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2631:             {
 2632:                 (*s_etat_processus).erreur_execution =
 2633:                         d_ex_erreur_format_fichier;
 2634:                 return(NULL);
 2635:             }
 2636: 
 2637:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 2638:                     .taille;
 2639: 
 2640:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 2641: 
 2642:             if (chaine != NULL)
 2643:             {
 2644:                 strcpy(chaine, "[");
 2645: 
 2646:                 for(i = 0; i < nombre_colonnes; i++)
 2647:                 {
 2648:                     if ((chaine_formatee =
 2649:                             formateur_fichier_nombre(s_etat_processus,
 2650:                             (void *) &(((real8 *) ((*((struct_vecteur *)
 2651:                             ((*s_objet).objet))).tableau))[i]), 'R',
 2652:                             longueur, longueur_champ, format_sortie)) == NULL)
 2653:                     {
 2654:                         (*s_etat_processus).erreur_systeme =
 2655:                                 d_es_allocation_memoire;
 2656:                         return(NULL);
 2657:                     }
 2658: 
 2659:                     chaine_sauvegarde = chaine;
 2660:                     chaine = (unsigned char *) malloc(
 2661:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 2662:                             + 2) * sizeof(unsigned char));
 2663: 
 2664:                     if (chaine == NULL)
 2665:                     {
 2666:                         (*s_etat_processus).erreur_systeme =
 2667:                                 d_es_allocation_memoire;
 2668:                         return(NULL);
 2669:                     }
 2670: 
 2671:                     strcpy(chaine, chaine_sauvegarde);
 2672:                     free(chaine_sauvegarde);
 2673:                     strcat(chaine, " ");
 2674:                     strcat(chaine, chaine_formatee);
 2675:                     free(chaine_formatee);
 2676:                 }
 2677: 
 2678:                 chaine_sauvegarde = chaine;
 2679:                 chaine = (unsigned char *) malloc(
 2680:                         (strlen(chaine_sauvegarde) + 3)
 2681:                         * sizeof(unsigned char));
 2682: 
 2683:                 if (chaine == NULL)
 2684:                 {
 2685:                     (*s_etat_processus).erreur_systeme =
 2686:                             d_es_allocation_memoire;
 2687:                     return(NULL);
 2688:                 }
 2689: 
 2690:                 strcpy(chaine, chaine_sauvegarde);
 2691:                 free(chaine_sauvegarde);
 2692:                 strcat(chaine, " ]");
 2693:             }
 2694:         }
 2695:         else
 2696:         {
 2697:             // Type non exportable
 2698: 
 2699:             (*s_etat_processus).erreur_execution = d_ex_erreur_format_fichier;
 2700:             free(chaine);
 2701: 
 2702:             return(NULL);
 2703:         }
 2704: 
 2705:         (*longueur_effective) = strlen(chaine) + 1;
 2706:     }
 2707:     else
 2708:     {
 2709:         /*
 2710:          * Fichiers non formatés
 2711:          */
 2712: 
 2713: #define __zone() \
 2714:         do { int _i; \
 2715:             for(_i = 0; _i < longueur_totale; _i++) \
 2716:                 printf("%02X ", chaine[_i]); printf("\b\n"); } while(0)
 2717: 
 2718:         /*
 2719:          * Chaque enregistrement est composé d'une donnée (une liste)
 2720:          * suivie de sa longueur en octets et d'un champ binaire indiquant
 2721:          * le format (integer*1,2,4 ou 8) d'écriture de cette longueur.
 2722:          * Les données contenues dans ces fichiers sont associées à un
 2723:          * descripteur de type.
 2724:          *
 2725:          * Attention : les fichiers non formatés ne sont pas portables
 2726:          * d'une architecture à l'autre.
 2727:          *
 2728:          * Structure d'un enregistrement :
 2729:          * [en-tête][.........données..........][longueur + type de longueur]
 2730:          *
 2731:          * Longueur : (pour l'instruction backspace)
 2732:          *
 2733:          * 00 XXXXXX                longueur sur 6 bits
 2734:          * 01 XXXXXX                longueur sur 16 bits
 2735:          * 10 XXXXXX                longueur sur 32 bits
 2736:          * 11 XXXXXX                longueur sur 64 bits
 2737:          *
 2738:          * Exemples :
 2739:          * [00 XXXXXX]
 2740:          * [01 ----XX][XXXXXXXX][01 XXXXXX]
 2741:          * [10 ----XX][XXXXXXXX][XXXXXXXX][XXXXXXXX][10 XXXXXX]
 2742:          * [11 ----XX][XXXXXXXX][XXXXXXXX][XXXXXXXX][XXXXXXXX][XXXXXXXX]
 2743:          *         [XXXXXXXX][XXXXXXXX][11 XXXXXX]
 2744:          *
 2745:          * Structures des enregistrements :
 2746:          * chaque type de donnée est associé à une en-tête binaire comprenant
 2747:          * le type de données ainsi que toutes autres informations utiles.
 2748:          *
 2749:          * Représentation binaire :
 2750:          *
 2751:          * 1/ scalaires
 2752:          * 0000 XXXX                Binaire sur XXXX octets
 2753:          *
 2754:          * TYPE
 2755:          * 0001 00 00               integer*1
 2756:          * 0001 00 01               integer*2
 2757:          * 0001 00 10               integer*4
 2758:          * 0001 00 11               integer*8
 2759:          *
 2760:          * 0001 01 00               real*4
 2761:          * 0001 01 01               real*8
 2762:          *
 2763:          * 0001 10 00               complex*8
 2764:          * 0001 10 01               complex*16
 2765:          *
 2766:          * 0010 00 00               vecteur integer*1 (dimensions integer*1)
 2767:          * 0010 01 00               vecteur integer*1 (dimensions integer*2)
 2768:          * 0010 10 00               vecteur integer*1 (dimensions integer*4)
 2769:          * 0010 11 00               vecteur integer*1 (dimensions integer*8)
 2770:          * 0010 00 01               vecteur integer*2 (dimensions integer*1)
 2771:          * 0010 01 01               vecteur integer*2 (dimensions integer*2)
 2772:          * 0010 10 01               vecteur integer*2 (dimensions integer*4)
 2773:          * 0010 11 01               vecteur integer*2 (dimensions integer*8)
 2774:          * 0010 00 10               vecteur integer*4 (dimensions integer*1)
 2775:          * 0010 01 10               vecteur integer*4 (dimensions integer*2)
 2776:          * 0010 10 10               vecteur integer*4 (dimensions integer*4)
 2777:          * 0010 11 10               vecteur integer*4 (dimensions integer*8)
 2778:          * 0010 00 11               vecteur integer*8 (dimensions integer*1)
 2779:          * 0010 01 11               vecteur integer*8 (dimensions integer*2)
 2780:          * 0010 10 11               vecteur integer*8 (dimensions integer*4)
 2781:          * 0010 11 11               vecteur integer*8 (dimensions integer*8)
 2782:          *
 2783:          * 0011 00 00               matrice integer*1 (dimensions integer*1)
 2784:          * 0011 01 00               matrice integer*1 (dimensions integer*2)
 2785:          * 0011 10 00               matrice integer*1 (dimensions integer*4)
 2786:          * 0011 11 00               matrice integer*1 (dimensions integer*8)
 2787:          * 0011 00 01               matrice integer*2 (dimensions integer*1)
 2788:          * 0011 01 01               matrice integer*2 (dimensions integer*2)
 2789:          * 0011 10 01               matrice integer*2 (dimensions integer*4)
 2790:          * 0011 11 01               matrice integer*2 (dimensions integer*8)
 2791:          * 0011 00 10               matrice integer*4 (dimensions integer*1)
 2792:          * 0011 01 10               matrice integer*4 (dimensions integer*2)
 2793:          * 0011 10 10               matrice integer*4 (dimensions integer*4)
 2794:          * 0011 11 10               matrice integer*4 (dimensions integer*8)
 2795:          * 0011 00 11               matrice integer*8 (dimensions integer*1)
 2796:          * 0011 01 11               matrice integer*8 (dimensions integer*2)
 2797:          * 0011 10 11               matrice integer*8 (dimensions integer*4)
 2798:          * 0011 11 11               matrice integer*8 (dimensions integer*8)
 2799:          *
 2800:          * 0100 0 XXX               liste de longueur XXX
 2801:          * 0100 10 00               liste de longueur integer*1
 2802:          * 0100 10 01               liste de longueur integer*2
 2803:          * 0100 10 10               liste de longueur integer*4
 2804:          * 0100 10 11               liste de longueur integer*8
 2805:          *
 2806:          * 0101 0 XXX               nom de longueur XXX
 2807:          * 0101 10 LL               nom de longueur integer*LL
 2808:          *
 2809:          * 0110 0 XXX               expression RPN
 2810:          * 0110 10 LL
 2811:          *
 2812:          * 0111 0 XXX               expression algébrique
 2813:          * 0111 10 LL
 2814:          *
 2815:          * 1000 0 XXX               chaîne de caractères
 2816:          * 1000 10 LL
 2817:          *
 2818:          * 1001 0 XXX               table de longueur XXX
 2819:          * 1001 10 00               table de longueur integer*1
 2820:          * 1001 10 01               table de longueur integer*2
 2821:          * 1001 10 10               table de longueur integer*4
 2822:          * 1001 10 11               table de longueur integer*8
 2823:          *
 2824:          * 1010 00 10               vecteur real*4 (dimensions integer*1)
 2825:          * 1010 01 10               vecteur real*4 (dimensions integer*2)
 2826:          * 1010 10 10               vecteur real*4 (dimensions integer*4)
 2827:          * 1010 11 10               vecteur real*4 (dimensions integer*8)
 2828:          * 1010 00 11               vecteur real*8 (dimensions integer*1)
 2829:          * 1010 01 11               vecteur real*8 (dimensions integer*2)
 2830:          * 1010 10 11               vecteur real*8 (dimensions integer*4)
 2831:          * 1010 11 11               vecteur real*8 (dimensions integer*8)
 2832:          * 1011 00 10               vecteur complex*8 (dimensions integer*1)
 2833:          * 1011 01 10               vecteur complex*8 (dimensions integer*2)
 2834:          * 1011 10 10               vecteur complex*8 (dimensions integer*4)
 2835:          * 1011 11 10               vecteur complex*8 (dimensions integer*8)
 2836:          * 1011 00 11               vecteur complex*16 (dimensions integer*1)
 2837:          * 1011 01 11               vecteur complex*16 (dimensions integer*2)
 2838:          * 1011 10 11               vecteur complex*16 (dimensions integer*4)
 2839:          * 1011 11 11               vecteur complex*16 (dimensions integer*8)
 2840:          *
 2841:          * 1100 00 10               matrice real*4 (dimensions integer*1)
 2842:          * 1100 01 10               matrice real*4 (dimensions integer*2)
 2843:          * 1100 10 10               matrice real*4 (dimensions integer*4)
 2844:          * 1100 11 10               matrice real*4 (dimensions integer*8)
 2845:          * 1100 00 11               matrice real*8 (dimensions integer*1)
 2846:          * 1100 01 11               matrice real*8 (dimensions integer*2)
 2847:          * 1100 10 11               matrice real*8 (dimensions integer*4)
 2848:          * 1100 11 11               matrice real*8 (dimensions integer*8)
 2849:          * 1101 00 10               matrice complex*8 (dimensions integer*1)
 2850:          * 1101 01 10               matrice complex*8 (dimensions integer*2)
 2851:          * 1101 10 10               matrice complex*8 (dimensions integer*4)
 2852:          * 1101 11 10               matrice complex*8 (dimensions integer*8)
 2853:          * 1101 00 11               matrice complex*16 (dimensions integer*1)
 2854:          * 1101 01 11               matrice complex*16 (dimensions integer*2)
 2855:          * 1101 10 11               matrice complex*16 (dimensions integer*4)
 2856:          * 1101 11 11               matrice complex*16 (dimensions integer*8)
 2857:          *
 2858:          * Les longueurs indiquées par le champ LL suivent l'en-tête :
 2859:          *      00 : integer*1
 2860:          *      01 : integer*2
 2861:          *      10 : integer*4
 2862:          *      11 : integer*8
 2863:          *
 2864:          * [En-tête][longueur_1][longueur_2][données]
 2865:          * le nombre de champs longueur dépendant des types d'enregistrement.
 2866:          *
 2867:          * Toutes les autres combinaisons sont invalides.
 2868:          */
 2869: 
 2870:         chaine = NULL;
 2871:         chaine_formatee = NULL;
 2872:         chaine_sauvegarde = NULL;
 2873: 
 2874:         strcpy(base, " ");
 2875: 
 2876:         longueur_binaire = 0;
 2877:         masque_binaire = 0;
 2878: 
 2879:         if ((*s_objet).type == ALG)
 2880:         {
 2881: 
 2882: /*
 2883: --------------------------------------------------------------------------------
 2884:   Expression algébrique
 2885: --------------------------------------------------------------------------------
 2886: */
 2887: 
 2888:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 2889: 
 2890:             while(l_element_courant != NULL)
 2891:             {
 2892:                 if ((*(*l_element_courant).donnee).type == FCT)
 2893:                 {
 2894:                     if ((strcmp((*((struct_fonction *) (*(*l_element_courant)
 2895:                             .donnee).objet)).nom_fonction, "<<") != 0) &&
 2896:                             (strcmp((*((struct_fonction *)
 2897:                             (*(*l_element_courant)
 2898:                             .donnee).objet)).nom_fonction, ">>") != 0))
 2899:                     {
 2900:                         if ((strcmp((*((struct_fonction *)
 2901:                                 (*(*l_element_courant)
 2902:                                 .donnee).objet)).nom_fonction, "+") == 0) ||
 2903:                                 (strcmp((*((struct_fonction *)
 2904:                                 (*(*l_element_courant).donnee).objet))
 2905:                                 .nom_fonction, "-") == 0) || (strcmp(
 2906:                                 (*((struct_fonction *) (*(*l_element_courant)
 2907:                                 .donnee).objet)).nom_fonction, "*") == 0) ||
 2908:                                 (strcmp((*((struct_fonction *)
 2909:                                 (*(*l_element_courant).donnee).objet))
 2910:                                 .nom_fonction,
 2911:                                 "/") == 0) || (strcmp((*((struct_fonction *)
 2912:                                 (*(*l_element_courant).donnee).objet))
 2913:                                 .nom_fonction,
 2914:                                 "^") == 0) || (strcmp((*((struct_fonction *)
 2915:                                 (*(*l_element_courant).donnee).objet))
 2916:                                 .nom_fonction,
 2917:                                 "<") == 0) || (strcmp((*((struct_fonction *)
 2918:                                 (*(*l_element_courant).donnee).objet))
 2919:                                 .nom_fonction,
 2920:                                 ">") == 0) || (strcmp((*((struct_fonction *)
 2921:                                 (*(*l_element_courant).donnee).objet))
 2922:                                 .nom_fonction,
 2923:                                 "==") == 0) || (strcmp((*((struct_fonction *)
 2924:                                 (*(*l_element_courant).donnee).objet))
 2925:                                 .nom_fonction,
 2926:                                 "<>") == 0) || (strcmp((*((struct_fonction *)
 2927:                                 (*(*l_element_courant).donnee).objet))
 2928:                                 .nom_fonction,
 2929:                                 "<=") == 0) || (strcmp((*((struct_fonction *)
 2930:                                 (*(*l_element_courant).donnee).objet))
 2931:                                 .nom_fonction,
 2932:                                 "=<") == 0) || (strcmp((*((struct_fonction *)
 2933:                                 (*(*l_element_courant).donnee).objet))
 2934:                                 .nom_fonction,
 2935:                                 ">=") == 0) || (strcmp((*((struct_fonction *)
 2936:                                 (*(*l_element_courant).donnee).objet))
 2937:                                 .nom_fonction,
 2938:                                 "=>") == 0))
 2939:                         {
 2940:                             if (depilement(s_etat_processus,
 2941:                                     &((*s_etat_processus)
 2942:                                     .l_base_pile), &s_sous_objet_2) == d_erreur)
 2943:                             {
 2944:                                 return(NULL);
 2945:                             }
 2946: 
 2947:                             chaine_sauvegarde = (*s_etat_processus)
 2948:                                     .instruction_courante;
 2949: 
 2950:                             if (((*s_etat_processus).instruction_courante =
 2951:                                     (unsigned char *) malloc((strlen(
 2952:                                     (unsigned char *) (*s_sous_objet_2).objet)
 2953:                                     + 2 + 1) * sizeof(unsigned char))) == NULL)
 2954:                             {
 2955:                                 (*s_etat_processus).instruction_courante =
 2956:                                         chaine_sauvegarde;
 2957:                                 (*s_etat_processus).erreur_systeme =
 2958:                                         d_es_allocation_memoire;
 2959:                                 return(NULL);
 2960:                             }
 2961: 
 2962:                             sprintf((*s_etat_processus).instruction_courante,
 2963:                                     "'%s'", (unsigned char *)
 2964:                                     (*s_sous_objet_2).objet);
 2965: 
 2966:                             presence_signe = (((*s_etat_processus)
 2967:                                     .instruction_courante[1] == '+')
 2968:                                     || ((*s_etat_processus)
 2969:                                     .instruction_courante[1]
 2970:                                     == '-')) ? d_vrai : d_faux;
 2971: 
 2972:                             recherche_type(s_etat_processus);
 2973: 
 2974:                             if ((*s_etat_processus).erreur_execution != d_ex)
 2975:                             {
 2976:                                 // Aucune erreur ne peut être renvoyée.
 2977: 
 2978:                                 return(NULL);
 2979:                             }
 2980: 
 2981:                             if (depilement(s_etat_processus,
 2982:                                     &((*s_etat_processus)
 2983:                                     .l_base_pile), &s_sous_objet_3) == d_erreur)
 2984:                             {
 2985:                                 return(NULL);
 2986:                             }
 2987: 
 2988:                             free((*s_etat_processus).instruction_courante);
 2989: 
 2990:                             (*s_etat_processus).instruction_courante =
 2991:                                     chaine_sauvegarde;
 2992: 
 2993:                             autorisation_parenthese = d_faux;
 2994: 
 2995:                             if ((*s_sous_objet_3).type == ALG)
 2996:                             {
 2997:                                 l_atome = (struct_liste_chainee *)
 2998:                                         (*s_sous_objet_3).objet;
 2999:                                 chaine_fonction = "";
 3000:                                 nombre_arguments_fonction = 0;
 3001: 
 3002:                                 while(l_atome != NULL)
 3003:                                 {
 3004:                                     if ((*(*l_atome).donnee).type == FCT)
 3005:                                     {
 3006:                                         if (strcmp((*((struct_fonction *)
 3007:                                                 (*(*l_atome).donnee).objet))
 3008:                                                 .nom_fonction, ">>") != 0)
 3009:                                         {
 3010:                                             chaine_fonction =
 3011:                                                     (*((struct_fonction *)
 3012:                                                     (*(*l_atome).donnee).objet))
 3013:                                                     .nom_fonction;
 3014:                                             nombre_arguments_fonction =
 3015:                                                     (*((struct_fonction *)
 3016:                                                     (*(*l_atome).donnee).objet))
 3017:                                                     .nombre_arguments;
 3018:                                         }
 3019:                                     }
 3020: 
 3021:                                     l_atome = (*l_atome).suivant;
 3022:                                 }
 3023: 
 3024:                                 if (strcmp((*((struct_fonction *)
 3025:                                         (*(*l_element_courant).donnee).objet))
 3026:                                         .nom_fonction, "+") == 0)
 3027:                                 {
 3028:                                     if ((strcmp(chaine_fonction, "AND") == 0) ||
 3029:                                             (strcmp(chaine_fonction, "XOR") ==
 3030:                                             0) || (strcmp(chaine_fonction, "OR")
 3031:                                             == 0))
 3032:                                     {
 3033:                                         autorisation_parenthese = d_vrai;
 3034:                                     }
 3035:                                 }
 3036:                                 else if (strcmp((*((struct_fonction *)
 3037:                                         (*(*l_element_courant).donnee).objet))
 3038:                                         .nom_fonction, "-") == 0)
 3039:                                 {
 3040:                                     if (nombre_arguments_fonction != 0)
 3041:                                     {
 3042:                                         autorisation_parenthese = d_faux;
 3043:                                     }
 3044:                                     else
 3045:                                     {
 3046:                                         autorisation_parenthese = d_vrai;
 3047:                                     }
 3048:                                 }
 3049:                                 else if (strcmp((*((struct_fonction *)
 3050:                                         (*(*l_element_courant).donnee).objet))
 3051:                                         .nom_fonction, "*") == 0)
 3052:                                 {
 3053:                                     if ((strcmp(chaine_fonction, "+") == 0) ||
 3054:                                             (strcmp(chaine_fonction, "-") == 0)
 3055:                                             || (strcmp(chaine_fonction, "AND")
 3056:                                             == 0) || (strcmp(chaine_fonction,
 3057:                                             "XOR") == 0) || (strcmp(
 3058:                                             chaine_fonction, "OR") == 0))
 3059:                                     {
 3060:                                         autorisation_parenthese = d_vrai;
 3061:                                     }
 3062:                                 }
 3063:                                 else if (strcmp((*((struct_fonction *)
 3064:                                         (*(*l_element_courant).donnee).objet))
 3065:                                         .nom_fonction, "/") == 0)
 3066:                                 {
 3067:                                     if (nombre_arguments_fonction != 0)
 3068:                                     {
 3069:                                         autorisation_parenthese = d_faux;
 3070:                                     }
 3071:                                     else
 3072:                                     {
 3073:                                         autorisation_parenthese = d_vrai;
 3074:                                     }
 3075:                                 }
 3076:                                 else if ((strcmp((*((struct_fonction *)
 3077:                                         (*(*l_element_courant).donnee).objet))
 3078:                                         .nom_fonction, "^") == 0))
 3079:                                 {
 3080:                                     if (nombre_arguments_fonction != 0)
 3081:                                     {
 3082:                                         autorisation_parenthese = d_faux;
 3083:                                     }
 3084:                                     else
 3085:                                     {
 3086:                                         autorisation_parenthese = d_vrai;
 3087:                                     }
 3088:                                 }
 3089:                             }
 3090: 
 3091:                             if ((autorisation_parenthese == d_vrai) ||
 3092:                                     (presence_signe == d_vrai))
 3093:                             {
 3094:                                 chaine_sauvegarde = (unsigned char *)
 3095:                                         (*s_sous_objet_2).objet;
 3096: 
 3097:                                 if (((*s_sous_objet_2).objet = (void *)
 3098:                                         malloc((strlen(chaine_sauvegarde) + 2
 3099:                                         + 1) * sizeof(unsigned char))) == NULL)
 3100:                                 {
 3101:                                     (*s_etat_processus).erreur_systeme =
 3102:                                             d_es_allocation_memoire;
 3103:                                     return(NULL);
 3104:                                 }
 3105: 
 3106:                                 sprintf((unsigned char *) (*s_sous_objet_2)
 3107:                                         .objet, "(%s)", chaine_sauvegarde);
 3108:                                 free(chaine_sauvegarde);
 3109:                             }
 3110: 
 3111:                             liberation(s_etat_processus, s_sous_objet_3);
 3112: 
 3113:                             if (depilement(s_etat_processus,
 3114:                                     &((*s_etat_processus)
 3115:                                     .l_base_pile), &s_sous_objet_1) == d_erreur)
 3116:                             {
 3117:                                 return(NULL);
 3118:                             }
 3119: 
 3120:                             chaine_sauvegarde = (*s_etat_processus)
 3121:                                     .instruction_courante;
 3122: 
 3123:                             if (((*s_etat_processus).instruction_courante =
 3124:                                     (unsigned char *) malloc((strlen(
 3125:                                     (unsigned char *) (*s_sous_objet_1).objet)
 3126:                                     + 2 + 1) * sizeof(unsigned char))) == NULL)
 3127:                             {
 3128:                                 (*s_etat_processus).instruction_courante =
 3129:                                         chaine_sauvegarde;
 3130:                                 (*s_etat_processus).erreur_systeme =
 3131:                                         d_es_allocation_memoire;
 3132:                                 return(NULL);
 3133:                             }
 3134: 
 3135:                             sprintf((*s_etat_processus).instruction_courante,
 3136:                                     "'%s'", (unsigned char *)
 3137:                                     (*s_sous_objet_1).objet);
 3138: 
 3139:                             recherche_type(s_etat_processus);
 3140: 
 3141:                             if ((*s_etat_processus).erreur_execution != d_ex)
 3142:                             {
 3143:                                 // Aucune erreur ne peut être renvoyée.
 3144: 
 3145:                                 return(NULL);
 3146:                             }
 3147: 
 3148:                             if (depilement(s_etat_processus,
 3149:                                     &((*s_etat_processus)
 3150:                                     .l_base_pile), &s_sous_objet_3) == d_erreur)
 3151:                             {
 3152:                                 return(NULL);
 3153:                             }
 3154: 
 3155:                             free((*s_etat_processus).instruction_courante);
 3156: 
 3157:                             (*s_etat_processus).instruction_courante =
 3158:                                     chaine_sauvegarde;
 3159: 
 3160:                             autorisation_parenthese = d_faux;
 3161: 
 3162:                             if ((*s_sous_objet_3).type == ALG)
 3163:                             {
 3164:                                 l_atome = (struct_liste_chainee *)
 3165:                                         (*s_sous_objet_3).objet;
 3166:                                 chaine_fonction = "";
 3167: 
 3168:                                 while(l_atome != NULL)
 3169:                                 {
 3170:                                     if ((*(*l_atome).donnee).type == FCT)
 3171:                                     {
 3172:                                         if (strcmp((*((struct_fonction *)
 3173:                                                 (*(*l_atome).donnee).objet))
 3174:                                                 .nom_fonction, ">>") != 0)
 3175:                                         {
 3176:                                             chaine_fonction =
 3177:                                                     (*((struct_fonction *)
 3178:                                                     (*(*l_atome).donnee).objet))
 3179:                                                     .nom_fonction;
 3180:                                         }
 3181:                                     }
 3182: 
 3183:                                     l_atome = (*l_atome).suivant;
 3184:                                 }
 3185: 
 3186:                                 if ((strcmp((*((struct_fonction *)
 3187:                                         (*(*l_element_courant).donnee).objet))
 3188:                                         .nom_fonction, "+") == 0) ||
 3189:                                         (strcmp((*((struct_fonction *)
 3190:                                         (*(*l_element_courant).donnee).objet))
 3191:                                         .nom_fonction, "-") == 0))
 3192:                                 {
 3193:                                     if ((strcmp(chaine_fonction, "AND") == 0) ||
 3194:                                             (strcmp(chaine_fonction, "XOR") ==
 3195:                                             0) || (strcmp(chaine_fonction, "OR")
 3196:                                             == 0))
 3197:                                     {
 3198:                                         autorisation_parenthese = d_vrai;
 3199:                                     }
 3200:                                 }
 3201:                                 else if ((strcmp((*((struct_fonction *)
 3202:                                         (*(*l_element_courant).donnee).objet))
 3203:                                         .nom_fonction, "*") == 0) ||
 3204:                                         (strcmp((*((struct_fonction *)
 3205:                                         (*(*l_element_courant).donnee).objet))
 3206:                                         .nom_fonction, "/") == 0))
 3207:                                 {
 3208:                                     if ((strcmp(chaine_fonction, "+") == 0) ||
 3209:                                             (strcmp(chaine_fonction, "-") == 0)
 3210:                                             || (strcmp(chaine_fonction, "AND")
 3211:                                             == 0) || (strcmp(chaine_fonction,
 3212:                                             "XOR") == 0) || (strcmp(
 3213:                                             chaine_fonction, "OR") == 0))
 3214:                                     {
 3215:                                         autorisation_parenthese = d_vrai;
 3216:                                     }
 3217:                                 }
 3218:                                 else if ((strcmp((*((struct_fonction *)
 3219:                                         (*(*l_element_courant).donnee).objet))
 3220:                                         .nom_fonction, "^") == 0))
 3221:                                 {
 3222:                                     autorisation_parenthese = d_vrai;
 3223:                                 }
 3224:                             }
 3225: 
 3226:                             if (autorisation_parenthese == d_vrai)
 3227:                             {
 3228:                                 chaine_sauvegarde = (unsigned char *)
 3229:                                         (*s_sous_objet_1).objet;
 3230: 
 3231:                                 if (((*s_sous_objet_1).objet = (void *)
 3232:                                         malloc((strlen(chaine_sauvegarde) + 2
 3233:                                         + 1) * sizeof(unsigned char))) == NULL)
 3234:                                 {
 3235:                                     (*s_etat_processus).erreur_systeme =
 3236:                                             d_es_allocation_memoire;
 3237:                                     return(NULL);
 3238:                                 }
 3239: 
 3240:                                 sprintf((unsigned char *) (*s_sous_objet_1)
 3241:                                         .objet, "(%s)", chaine_sauvegarde);
 3242:                                 free(chaine_sauvegarde);
 3243:                             }
 3244: 
 3245:                             liberation(s_etat_processus, s_sous_objet_3);
 3246: 
 3247:                             if ((s_sous_objet = allocation(s_etat_processus,
 3248:                                     CHN)) == NULL)
 3249:                             {
 3250:                                 (*s_etat_processus).erreur_systeme =
 3251:                                         d_es_allocation_memoire;
 3252:                                 return(NULL);
 3253:                             }
 3254: 
 3255:                             if (((*s_sous_objet).objet = (void *)
 3256:                                     malloc((strlen(
 3257:                                     (unsigned char *) (*s_sous_objet_1).objet) +
 3258:                                     strlen((*((struct_fonction *)
 3259:                                     (*(*l_element_courant).donnee).objet))
 3260:                                     .nom_fonction) + strlen((unsigned char *)
 3261:                                     (*s_sous_objet_2).objet) + 1) *
 3262:                                     sizeof(unsigned char))) == NULL)
 3263:                             {
 3264:                                 (*s_etat_processus).erreur_systeme =
 3265:                                         d_es_allocation_memoire;
 3266:                                 return(NULL);
 3267:                             }
 3268: 
 3269:                             sprintf((unsigned char *) (*s_sous_objet).objet,
 3270:                                     "%s%s%s", (unsigned char *)
 3271:                                     (*s_sous_objet_1)
 3272:                                     .objet, (*((struct_fonction *)
 3273:                                     (*(*l_element_courant).donnee).objet))
 3274:                                     .nom_fonction, (unsigned char *)
 3275:                                     (*s_sous_objet_2).objet);
 3276: 
 3277:                             liberation(s_etat_processus, s_sous_objet_1);
 3278:                             liberation(s_etat_processus, s_sous_objet_2);
 3279: 
 3280:                             if (empilement(s_etat_processus,
 3281:                                     &((*s_etat_processus)
 3282:                                     .l_base_pile), s_sous_objet) == d_erreur)
 3283:                             {
 3284:                                 return(NULL);
 3285:                             }
 3286:                         }
 3287:                         else if (strcmp((*((struct_fonction *)
 3288:                                 (*(*l_element_courant).donnee).objet))
 3289:                                 .nom_fonction, "=") == 0)
 3290:                         {
 3291:                             if (depilement(s_etat_processus,
 3292:                                     &((*s_etat_processus).l_base_pile),
 3293:                                     &s_sous_objet_2) == d_erreur)
 3294:                             {
 3295:                                 return(NULL);
 3296:                             }
 3297: 
 3298:                             if (depilement(s_etat_processus,
 3299:                                     &((*s_etat_processus).l_base_pile),
 3300:                                     &s_sous_objet_1) == d_erreur)
 3301:                             {
 3302:                                 return(NULL);
 3303:                             }
 3304: 
 3305:                             if ((s_sous_objet = allocation(s_etat_processus,
 3306:                                     CHN)) == NULL)
 3307:                             {
 3308:                                 (*s_etat_processus).erreur_systeme =
 3309:                                         d_es_allocation_memoire;
 3310:                                 return(NULL);
 3311:                             }
 3312: 
 3313:                             autorisation_parenthese = d_vrai;
 3314:                             l_atome = l_element_courant;
 3315: 
 3316:                             if (l_atome != NULL)
 3317:                             {
 3318:                                 if ((*l_atome).suivant != NULL)
 3319:                                 {
 3320:                                     l_atome = (*l_atome).suivant;
 3321: 
 3322:                                     if ((*(*l_atome).donnee).type == FCT)
 3323:                                     {
 3324:                                         if (strcmp((*((struct_fonction *)
 3325:                                                 (*(*l_atome).donnee).objet))
 3326:                                                 .nom_fonction, ">>") == 0)
 3327:                                         {
 3328:                                             if ((*l_atome).suivant == NULL)
 3329:                                             {
 3330:                                                 autorisation_parenthese =
 3331:                                                         d_faux;
 3332:                                             }
 3333:                                         }
 3334:                                     }
 3335:                                 }
 3336:                             }
 3337: 
 3338:                             if (autorisation_parenthese == d_vrai)
 3339:                             {
 3340:                                 if (((*s_sous_objet).objet =
 3341:                                         (void *) malloc((strlen(
 3342:                                         (unsigned char *) (*s_sous_objet_1)
 3343:                                         .objet) + strlen((*((struct_fonction *)
 3344:                                         (*(*l_element_courant).donnee).objet))
 3345:                                         .nom_fonction) +
 3346:                                         strlen((unsigned char *)
 3347:                                         (*s_sous_objet_2).objet) + 2 + 1) *
 3348:                                         sizeof(unsigned char))) == NULL)
 3349:                                 {
 3350:                                     (*s_etat_processus).erreur_systeme =
 3351:                                             d_es_allocation_memoire;
 3352:                                     return(NULL);
 3353:                                 }
 3354: 
 3355:                                 sprintf((unsigned char *) (*s_sous_objet).objet,
 3356:                                         "(%s%s%s)", (unsigned char *)
 3357:                                         (*s_sous_objet_1)
 3358:                                         .objet, (*((struct_fonction *)
 3359:                                         (*(*l_element_courant).donnee).objet))
 3360:                                         .nom_fonction, (unsigned char *)
 3361:                                         (*s_sous_objet_2).objet);
 3362:                             }
 3363:                             else
 3364:                             {
 3365:                                 if (((*s_sous_objet).objet =
 3366:                                         (void *) malloc((strlen(
 3367:                                         (unsigned char *) (*s_sous_objet_1)
 3368:                                         .objet) + strlen((*((struct_fonction *)
 3369:                                         (*(*l_element_courant).donnee).objet))
 3370:                                         .nom_fonction) + strlen(
 3371:                                         (unsigned char *) (*s_sous_objet_2)
 3372:                                         .objet) + 1) * sizeof(unsigned char)))
 3373:                                         == NULL)
 3374:                                 {
 3375:                                     (*s_etat_processus).erreur_systeme =
 3376:                                             d_es_allocation_memoire;
 3377:                                     return(NULL);
 3378:                                 }
 3379: 
 3380:                                 sprintf((unsigned char *) (*s_sous_objet).objet,
 3381:                                         "%s%s%s", (unsigned char *)
 3382:                                         (*s_sous_objet_1)
 3383:                                         .objet, (*((struct_fonction *)
 3384:                                         (*(*l_element_courant).donnee).objet))
 3385:                                         .nom_fonction, (unsigned char *)
 3386:                                         (*s_sous_objet_2).objet);
 3387:                             }
 3388: 
 3389:                             liberation(s_etat_processus, s_sous_objet_1);
 3390:                             liberation(s_etat_processus, s_sous_objet_2);
 3391: 
 3392:                             if (empilement(s_etat_processus,
 3393:                                     &((*s_etat_processus).l_base_pile),
 3394:                                     s_sous_objet) == d_erreur)
 3395:                             {
 3396:                                 return(NULL);
 3397:                             }
 3398:                         }
 3399:                         else if (strcmp((*((struct_fonction *)
 3400:                                 (*(*l_element_courant).donnee).objet))
 3401:                                 .nom_fonction,
 3402:                                 "NOT") == 0)
 3403:                         {
 3404:                             if (depilement(s_etat_processus,
 3405:                                     &((*s_etat_processus)
 3406:                                     .l_base_pile), &s_sous_objet_1) == d_erreur)
 3407:                             {
 3408:                                 return(NULL);
 3409:                             }
 3410: 
 3411:                             if ((s_sous_objet = allocation(s_etat_processus,
 3412:                                     CHN)) == NULL)
 3413:                             {
 3414:                                 (*s_etat_processus).erreur_systeme =
 3415:                                         d_es_allocation_memoire;
 3416:                                 return(NULL);
 3417:                             }
 3418: 
 3419:                             if (((*s_sous_objet).objet = (unsigned char *)
 3420:                                     malloc(
 3421:                                     (strlen((unsigned char *) (*s_sous_objet_1)
 3422:                                     .objet) + 4 + 1) * sizeof(unsigned char)))
 3423:                                     == NULL)
 3424:                             {
 3425:                                 (*s_etat_processus).erreur_systeme =
 3426:                                         d_es_allocation_memoire;
 3427:                                 return(NULL);
 3428:                             }
 3429: 
 3430:                             sprintf((unsigned char *) (*s_sous_objet).objet,
 3431:                                     "%s %s", (*((struct_fonction *)
 3432:                                     (*(*l_element_courant).donnee).objet))
 3433:                                     .nom_fonction, (unsigned char *)
 3434:                                     (*s_sous_objet_1).objet );
 3435: 
 3436:                             liberation(s_etat_processus, s_sous_objet_1);
 3437: 
 3438:                             if (empilement(s_etat_processus,
 3439:                                     &((*s_etat_processus)
 3440:                                     .l_base_pile), s_sous_objet) == d_erreur)
 3441:                             {
 3442:                                 return(NULL);
 3443:                             }
 3444:                         }
 3445:                         else if ((strcmp((*((struct_fonction *)
 3446:                                 (*(*l_element_courant).donnee).objet))
 3447:                                 .nom_fonction,
 3448:                                 "OR") == 0) || (strcmp((*((struct_fonction *)
 3449:                                 (*(*l_element_courant).donnee).objet))
 3450:                                 .nom_fonction,
 3451:                                 "XOR") == 0) || (strcmp((*((struct_fonction *)
 3452:                                 (*(*l_element_courant).donnee).objet))
 3453:                                 .nom_fonction,
 3454:                                 "AND") == 0))
 3455:                         {
 3456:                             if (depilement(s_etat_processus,
 3457:                                     &((*s_etat_processus)
 3458:                                     .l_base_pile), &s_sous_objet_2) == d_erreur)
 3459:                             {
 3460:                                 return(NULL);
 3461:                             }
 3462: 
 3463:                             if (depilement(s_etat_processus,
 3464:                                     &((*s_etat_processus)
 3465:                                     .l_base_pile), &s_sous_objet_1) == d_erreur)
 3466:                             {
 3467:                                 return(NULL);
 3468:                             }
 3469: 
 3470:                             if ((s_sous_objet = allocation(s_etat_processus,
 3471:                                     CHN)) == NULL)
 3472:                             {
 3473:                                 (*s_etat_processus).erreur_systeme =
 3474:                                         d_es_allocation_memoire;
 3475:                                 return(NULL);
 3476:                             }
 3477: 
 3478:                             if (((*s_sous_objet).objet = (void *)
 3479:                                     malloc((strlen(
 3480:                                     (unsigned char *) (*s_sous_objet_1).objet) +
 3481:                                     strlen((*((struct_fonction *)
 3482:                                     (*(*l_element_courant).donnee).objet))
 3483:                                     .nom_fonction) + strlen((unsigned char *)
 3484:                                     (*s_sous_objet_2).objet) + 2 + 1) *
 3485:                                     sizeof(unsigned char))) == NULL)
 3486:                             {
 3487:                                 (*s_etat_processus).erreur_systeme =
 3488:                                         d_es_allocation_memoire;
 3489:                                 return(NULL);
 3490:                             }
 3491: 
 3492:                             sprintf((unsigned char *) (*s_sous_objet).objet,
 3493:                                     "%s %s %s", (unsigned char *)
 3494:                                     (*s_sous_objet_1)
 3495:                                     .objet, (*((struct_fonction *)
 3496:                                     (*(*l_element_courant).donnee).objet))
 3497:                                     .nom_fonction, (unsigned char *)
 3498:                                     (*s_sous_objet_2).objet);
 3499: 
 3500:                             liberation(s_etat_processus, s_sous_objet_1);
 3501:                             liberation(s_etat_processus, s_sous_objet_2);
 3502: 
 3503:                             if (empilement(s_etat_processus,
 3504:                                     &((*s_etat_processus)
 3505:                                     .l_base_pile), s_sous_objet) == d_erreur)
 3506:                             {
 3507:                                 return(NULL);
 3508:                             }
 3509:                         }
 3510:                         else
 3511:                         {
 3512:                             nombre_arguments = (*((struct_fonction *)
 3513:                                     (*(*l_element_courant).donnee).objet))
 3514:                                     .nombre_arguments;
 3515: 
 3516:                             if ((chaine = (unsigned char *)
 3517:                                     malloc(sizeof(unsigned char))) == NULL)
 3518:                             {
 3519:                                 (*s_etat_processus).erreur_systeme =
 3520:                                         d_es_allocation_memoire;
 3521:                                 return(NULL);
 3522:                             }
 3523:                             
 3524:                             chaine[0] = d_code_fin_chaine;
 3525: 
 3526:                             for(i = 0; i < nombre_arguments; i++)
 3527:                             {
 3528:                                 if ((nombre_arguments - i) > 1)
 3529:                                 {
 3530:                                     l_liste1 = (*s_etat_processus).l_base_pile;
 3531: 
 3532:                                     for(j = 2; j < (nombre_arguments - i); j++)
 3533:                                     {
 3534:                                         l_liste1 = (*l_liste1).suivant;
 3535:                                     }
 3536: 
 3537:                                     l_liste2 = (*l_liste1).suivant;
 3538:                                     (*l_liste1).suivant = (*l_liste2).suivant;
 3539:                                     (*l_liste2).suivant = (*s_etat_processus)
 3540:                                             .l_base_pile;
 3541:                                     (*s_etat_processus).l_base_pile = l_liste2;
 3542:                                 }
 3543:                                 
 3544:                                 if (depilement(s_etat_processus,
 3545:                                         &((*s_etat_processus).l_base_pile),
 3546:                                         &s_sous_objet) == d_erreur)
 3547:                                 {
 3548:                                     return(NULL);
 3549:                                 }
 3550: 
 3551:                                 chaine_sauvegarde = chaine;
 3552: 
 3553:                                 if (strlen(chaine_sauvegarde) == 0)
 3554:                                 {
 3555:                                     if ((chaine = (unsigned char *)
 3556:                                             malloc((strlen((unsigned char *)
 3557:                                             (*s_sous_objet).objet) + 1) *
 3558:                                             sizeof(unsigned char))) == NULL)
 3559:                                     {
 3560:                                         (*s_etat_processus).erreur_systeme =
 3561:                                                 d_es_allocation_memoire;
 3562:                                         return(NULL);
 3563:                                     }
 3564: 
 3565:                                     sprintf(chaine, "%s", (unsigned char *)
 3566:                                             (*s_sous_objet).objet);
 3567:                                 }
 3568:                                 else
 3569:                                 {
 3570:                                     if ((chaine = (unsigned char *)
 3571:                                             malloc((strlen(chaine_sauvegarde)
 3572:                                             + 1 + strlen((unsigned char *)
 3573:                                             (*s_sous_objet).objet) + 1) *
 3574:                                             sizeof(unsigned char))) == NULL)
 3575:                                     {
 3576:                                         (*s_etat_processus).erreur_systeme =
 3577:                                                 d_es_allocation_memoire;
 3578:                                         return(NULL);
 3579:                                     }
 3580: 
 3581:                                     sprintf(chaine, "%s,%s", chaine_sauvegarde,
 3582:                                             (unsigned char *) (*s_sous_objet)
 3583:                                             .objet);
 3584:                                 }
 3585: 
 3586:                                 free(chaine_sauvegarde);
 3587:                                 liberation(s_etat_processus, s_sous_objet);
 3588:                             }
 3589: 
 3590:                             chaine_sauvegarde = chaine;
 3591: 
 3592:                             if ((chaine = (unsigned char *) malloc((strlen(
 3593:                                     (*((struct_fonction *)
 3594:                                     (*(*l_element_courant)
 3595:                                     .donnee).objet)).nom_fonction) + 2 +
 3596:                                     strlen(chaine_sauvegarde) + 1) *
 3597:                                     sizeof(unsigned char))) == NULL)
 3598:                             {
 3599:                                 (*s_etat_processus).erreur_systeme =
 3600:                                         d_es_allocation_memoire;
 3601:                                 return(NULL);
 3602:                             }
 3603: 
 3604:                             sprintf(chaine, "%s(%s)", (*((struct_fonction *)
 3605:                                     (*(*l_element_courant).donnee).objet))
 3606:                                     .nom_fonction, chaine_sauvegarde);
 3607:                             free(chaine_sauvegarde);
 3608: 
 3609:                             if ((s_sous_objet = allocation(s_etat_processus,
 3610:                                             CHN)) == NULL)
 3611:                             {
 3612:                                 (*s_etat_processus).erreur_systeme =
 3613:                                         d_es_allocation_memoire;
 3614:                                 return(NULL);
 3615:                             }
 3616: 
 3617:                             (*s_sous_objet).objet = (void *) chaine;
 3618: 
 3619:                             if (empilement(s_etat_processus,
 3620:                                     &((*s_etat_processus)
 3621:                                     .l_base_pile), s_sous_objet) == d_erreur)
 3622:                             {
 3623:                                 return(NULL);
 3624:                             }
 3625:                         }
 3626:                     }
 3627:                 }
 3628:                 else
 3629:                 {
 3630:                     if ((s_sous_objet = allocation(s_etat_processus, CHN))
 3631:                             == NULL)
 3632:                     {
 3633:                         (*s_etat_processus).erreur_systeme =
 3634:                                 d_es_allocation_memoire;
 3635:                         return(NULL);
 3636:                     }
 3637: 
 3638:                     if (((*s_sous_objet).objet = (void *) formateur_fichier(
 3639:                             s_etat_processus, (*l_element_courant).donnee,
 3640:                             s_format, longueur, longueur_champ, format_sortie,
 3641:                             type, longueur_effective, recursivite)) == NULL)
 3642:                     {
 3643:                         (*s_etat_processus).erreur_systeme =
 3644:                                 d_es_allocation_memoire;
 3645:                         return(NULL);
 3646:                     }
 3647: 
 3648:                     if (((*(*l_element_courant).donnee).type == ALG)
 3649:                             || ((*(*l_element_courant).donnee).type == NOM))
 3650:                     {
 3651:                         chaine_sauvegarde = (unsigned char *)
 3652:                                 (*s_sous_objet).objet;
 3653: 
 3654:                         if (((*s_sous_objet).objet = malloc((strlen(
 3655:                                 chaine_sauvegarde) - 1) *
 3656:                                 sizeof(unsigned char))) == NULL)
 3657:                         {
 3658:                             (*s_etat_processus).erreur_systeme =
 3659:                                     d_es_allocation_memoire;
 3660:                             return(NULL);
 3661:                         }
 3662: 
 3663:                         ptrl = chaine_sauvegarde;
 3664:                         ptre = (unsigned char *) (*s_sous_objet).objet;
 3665: 
 3666:                         for(ptrl++, i = strlen(chaine_sauvegarde) - 2; i > 0;
 3667:                                 i--, *ptre++ = *ptrl++);
 3668: 
 3669:                         (*ptre) = d_code_fin_chaine;
 3670: 
 3671:                         free(chaine_sauvegarde);
 3672:                     }
 3673:                     else if ((*(*l_element_courant).donnee).type == CHN)
 3674:                     {
 3675:                         chaine_sauvegarde = (unsigned char *)
 3676:                                 (*s_sous_objet).objet;
 3677: 
 3678:                         if (((*s_sous_objet).objet = malloc((strlen(
 3679:                                 chaine_sauvegarde) + 3) *
 3680:                                 sizeof(unsigned char))) == NULL)
 3681:                         {
 3682:                             (*s_etat_processus).erreur_systeme =
 3683:                                     d_es_allocation_memoire;
 3684:                             return(NULL);
 3685:                         }
 3686: 
 3687:                         sprintf((unsigned char *) (*s_sous_objet).objet,
 3688:                                 "\"%s\"", chaine_sauvegarde);
 3689: 
 3690:                         free(chaine_sauvegarde);
 3691:                     }
 3692: 
 3693:                     if (empilement(s_etat_processus, &((*s_etat_processus)
 3694:                             .l_base_pile), s_sous_objet) == d_erreur)
 3695:                     {
 3696:                         return(NULL);
 3697:                     }
 3698:                 }
 3699: 
 3700:                 l_element_courant = (*l_element_courant).suivant;
 3701:             }
 3702: 
 3703:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3704:                     &s_sous_objet) == d_erreur)
 3705:             {
 3706:                 return(NULL);
 3707:             }
 3708: 
 3709:             if ((chaine = (unsigned char *) malloc((strlen((unsigned char *)
 3710:                     (*s_sous_objet).objet) + 2 + 1) * sizeof(unsigned char)))
 3711:                     == NULL)
 3712:             {
 3713:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3714:                 return(NULL);
 3715:             }
 3716: 
 3717:             sprintf(chaine, "'%s'", (unsigned char *) (*s_sous_objet).objet);
 3718:             liberation(s_etat_processus, s_sous_objet);
 3719:         }
 3720:         else if ((*s_objet).type == BIN)
 3721:         {
 3722: 
 3723: /*
 3724: --------------------------------------------------------------------------------
 3725:   Entier binaire en base 2, 8, 10 ou 16
 3726: --------------------------------------------------------------------------------
 3727: */
 3728: 
 3729:             if (format_sortie != 'B')
 3730:             {
 3731:                 (*s_etat_processus).erreur_execution =
 3732:                         d_ex_erreur_format_fichier;
 3733:                 return(NULL);
 3734:             }
 3735: 
 3736:             longueur_binaire = longueur_entiers_binaires(s_etat_processus);
 3737:             masque_binaire = masque_entiers_binaires(s_etat_processus);
 3738: 
 3739:             if ((test_cfsf(s_etat_processus, 43) == d_faux) &&
 3740:                     (test_cfsf(s_etat_processus, 44) == d_faux))
 3741:             {
 3742: 
 3743: /*
 3744: -- Base décimale ---------------------------------------------------------------
 3745: */
 3746: 
 3747:                 sprintf(tampon, "%llu", (*((logical8 *)
 3748:                         ((*s_objet).objet))) & masque_binaire);
 3749:                 strcpy(base, "d");
 3750:             }
 3751:             else if ((test_cfsf(s_etat_processus, 43) == d_vrai) &&
 3752:                     (test_cfsf(s_etat_processus, 44) == d_faux))
 3753:             {
 3754: 
 3755: /*
 3756: -- Base octale -----------------------------------------------------------------
 3757: */
 3758: 
 3759:                 sprintf(tampon, "%llo", (*((logical8 *)
 3760:                         ((*s_objet).objet))) & masque_binaire);
 3761:                 strcpy(base, "o");
 3762:             }
 3763:             else if (test_cfsf(s_etat_processus, 44) == d_vrai)
 3764:             {
 3765: 
 3766: /*
 3767: -- Bases hexadécimale et binaire -----------------------------------------------
 3768: */
 3769: 
 3770:                 sprintf(tampon, "%llX", (*((logical8 *)
 3771:                         ((*s_objet).objet))) & masque_binaire);
 3772: 
 3773:                 if (test_cfsf(s_etat_processus, 43) == d_vrai)
 3774:                 {
 3775:                     strcpy(base, "h");
 3776:                 }
 3777:                 else
 3778:                 {
 3779:                     chaine = (unsigned char *) malloc((strlen(tampon) + 1)
 3780:                             * sizeof(unsigned char));
 3781: 
 3782:                     if (chaine == NULL)
 3783:                     {
 3784:                         (*s_etat_processus).erreur_systeme =
 3785:                                 d_es_allocation_memoire;
 3786:                         return(NULL);
 3787:                     }
 3788: 
 3789:                     strcpy(chaine, tampon);
 3790:                     tampon[0] = 0;
 3791: 
 3792:                     for(i = 0; i < strlen(chaine); i++)
 3793:                     {
 3794:                         switch(chaine[i])
 3795:                         {
 3796:                             case '0' :
 3797:                             {
 3798:                                 strcat(tampon, (i != 0) ? "0000" : "0");
 3799:                                 break;
 3800:                             }
 3801:                             case '1' :
 3802:                             {
 3803:                                     strcat(tampon, (i != 0) ? "0001" : "1");
 3804:                                 break;
 3805:                             }
 3806:                             case '2' :
 3807:                             {
 3808:                                 strcat(tampon, (i != 0) ? "0010" : "10");
 3809:                                 break;
 3810:                             }
 3811:                             case '3' :
 3812:                             {
 3813:                                 strcat(tampon, (i != 0) ? "0011" : "11");
 3814:                                 break;
 3815:                             }
 3816:                             case '4' :
 3817:                             {
 3818:                                 strcat(tampon, (i != 0) ? "0100" : "100");
 3819:                                 break;
 3820:                             }
 3821:                             case '5' :
 3822:                             {
 3823:                                 strcat(tampon, (i != 0) ? "0101" : "101");
 3824:                                 break;
 3825:                             }
 3826:                             case '6' :
 3827:                             {
 3828:                                 strcat(tampon, (i != 0) ? "0110" : "110");
 3829:                                 break;
 3830:                             }
 3831:                             case '7' :
 3832:                             {
 3833:                                 strcat(tampon, (i != 0) ? "0111" : "111");
 3834:                                 break;
 3835:                             }
 3836:                             case '8' :
 3837:                             {
 3838:                                 strcat(tampon, "1000");
 3839:                                 break;
 3840:                             }
 3841:                             case '9' :
 3842:                             {
 3843:                                 strcat(tampon, "1001");
 3844:                                 break;
 3845:                             }
 3846:                             case 'A' :
 3847:                             {
 3848:                                 strcat(tampon, "1010");
 3849:                                 break;
 3850:                             }
 3851:                             case 'B' :
 3852:                             {
 3853:                                 strcat(tampon, "1011");
 3854:                                 break;
 3855:                             }
 3856:                             case 'C' :
 3857:                             {
 3858:                                 strcat(tampon, "1100");
 3859:                                 break;
 3860:                             }
 3861:                             case 'D' :
 3862:                             {
 3863:                                 strcat(tampon, "1101");
 3864:                                 break;
 3865:                             }
 3866:                             case 'E' :
 3867:                             {
 3868:                                 strcat(tampon, "1110");
 3869:                                 break;
 3870:                             }
 3871:                             case 'F' :
 3872:                             {
 3873:                                 strcat(tampon, "1111");
 3874:                                 break;
 3875:                             }
 3876:                         }
 3877:                     }
 3878: 
 3879:                     free(chaine);
 3880:                     strcpy(base, "b");
 3881:                 }
 3882:             }
 3883: 
 3884:             chaine = (unsigned char *) malloc((strlen(tampon) + 4)
 3885:                     * sizeof(unsigned char));
 3886: 
 3887:             if (chaine == NULL)
 3888:             {
 3889:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3890:                 return(NULL);
 3891:             }
 3892: 
 3893:             strcpy(chaine, "# ");
 3894: 
 3895:             strcat(chaine, tampon);
 3896:             strcat(chaine, base);
 3897:         }
 3898:         else if ((*s_objet).type == CHN)
 3899:         {
 3900: 
 3901: /*
 3902: --------------------------------------------------------------------------------
 3903:   Chaîne de caractères
 3904: --------------------------------------------------------------------------------
 3905: */
 3906: 
 3907:             if (format_sortie != 'C')
 3908:             {
 3909:                 (*s_etat_processus).erreur_execution =
 3910:                         d_ex_erreur_format_fichier;
 3911:                 return(NULL);
 3912:             }
 3913: 
 3914:             chaine = (unsigned char *) malloc((strlen((unsigned char *)
 3915:                     ((*s_objet).objet)) + 1) * sizeof(unsigned char));
 3916: 
 3917:             if (chaine == NULL)
 3918:             {
 3919:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3920:                 return(NULL);
 3921:             }
 3922: 
 3923:             strcpy(chaine, (unsigned char *) ((*s_objet).objet));
 3924:         }
 3925:         else if ((*s_objet).type == CPL)
 3926:         {
 3927: 
 3928: /*
 3929: --------------------------------------------------------------------------------
 3930:   Complexe
 3931: --------------------------------------------------------------------------------
 3932: */
 3933: 
 3934:             if (format_sortie != 'C')
 3935:             {
 3936:                 (*s_etat_processus).erreur_execution =
 3937:                         d_ex_erreur_format_fichier;
 3938:                 return(NULL);
 3939:             }
 3940: 
 3941:             if ((chaine = formateur_fichier_binaire_nombre(s_etat_processus,
 3942:                     (*s_objet).objet, 'C', longueur, longueur_effective))
 3943:                     == NULL)
 3944:             {
 3945:                 return(NULL);
 3946:             }
 3947:         }
 3948:         else if ((*s_objet).type == RPN)
 3949:         {
 3950: 
 3951: /*
 3952: --------------------------------------------------------------------------------
 3953:   Définition
 3954: --------------------------------------------------------------------------------
 3955: */
 3956: 
 3957:             l_element_courant = (struct_liste_chainee *) ((*s_objet).objet);
 3958:             chaine_sauvegarde = chaine;
 3959: 
 3960:             while(l_element_courant != NULL)
 3961:             {
 3962:                 if ((chaine_formatee = formateur_fichier(s_etat_processus,
 3963:                         (*l_element_courant).donnee, s_format,
 3964:                         longueur, longueur_champ, format_sortie, type,
 3965:                         longueur_effective, recursivite)) == NULL)
 3966:                 {
 3967:                     return(NULL);
 3968:                 }
 3969: 
 3970:                 if ((*(*l_element_courant).donnee).type == CHN)
 3971:                 {
 3972:                     chaine_tampon = chaine_formatee;
 3973: 
 3974:                     if ((chaine_formatee = (unsigned char *) malloc((strlen(
 3975:                             chaine_tampon) + 3) * sizeof(unsigned char)))
 3976:                             == NULL)
 3977:                     {
 3978:                         (*s_etat_processus).erreur_systeme =
 3979:                                 d_es_allocation_memoire;
 3980:                         return(NULL);
 3981:                     }
 3982: 
 3983:                     sprintf(chaine_formatee, "\"%s\"", chaine_tampon);
 3984:                     free(chaine_tampon);
 3985:                 }
 3986: 
 3987:                 l_element_courant = (*l_element_courant).suivant;
 3988: 
 3989:                 if (chaine != NULL)
 3990:                 {
 3991:                     chaine_sauvegarde = chaine;
 3992: 
 3993:                     if ((chaine = (unsigned char *) malloc((strlen(
 3994:                             chaine_sauvegarde) + strlen(chaine_formatee) + 2) *
 3995:                             sizeof(unsigned char))) == NULL)
 3996:                     {
 3997:                         (*s_etat_processus).erreur_systeme =
 3998:                                 d_es_allocation_memoire;
 3999:                         return(NULL);
 4000:                     }
 4001: 
 4002:                     strcpy(chaine, chaine_sauvegarde);
 4003:                     free(chaine_sauvegarde);
 4004:                     strcat(chaine, " ");
 4005:                     strcat(chaine, chaine_formatee);
 4006:                     free(chaine_formatee);
 4007:                 }
 4008:                 else
 4009:                 {
 4010:                     chaine = chaine_formatee;
 4011:                 }
 4012:             }
 4013: 
 4014:             chaine_sauvegarde = chaine;
 4015:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 1) *
 4016:                     sizeof(unsigned char));
 4017: 
 4018:             if (chaine == NULL)
 4019:             {
 4020:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4021:                 free(chaine_sauvegarde);
 4022:                 return(NULL);
 4023:             }
 4024: 
 4025:             chaine_sauvegarde[strlen(chaine_sauvegarde)] = d_code_fin_chaine;
 4026:             strcpy(chaine, chaine_sauvegarde);
 4027:             free(chaine_sauvegarde);
 4028:         }
 4029:         else if ((*s_objet).type == INT)
 4030:         {
 4031: 
 4032: /*
 4033: --------------------------------------------------------------------------------
 4034:   Entier
 4035: --------------------------------------------------------------------------------
 4036: */
 4037: 
 4038:             if (format_sortie != 'I')
 4039:             {
 4040:                 (*s_etat_processus).erreur_execution =
 4041:                         d_ex_erreur_format_fichier;
 4042:                 return(NULL);
 4043:             }
 4044: 
 4045:             if ((chaine = formateur_fichier_binaire_nombre(s_etat_processus,
 4046:                     (*s_objet).objet, 'I', longueur, longueur_effective))
 4047:                     == NULL)
 4048:             {
 4049:                 return(NULL);
 4050:             }
 4051:         }
 4052:         else if ((*s_objet).type == FCT)
 4053:         {
 4054: 
 4055: /*
 4056: --------------------------------------------------------------------------------
 4057:   Fonction
 4058: --------------------------------------------------------------------------------
 4059: */
 4060: 
 4061:             chaine = (unsigned char *) malloc((strlen((*((struct_fonction *)
 4062:                     ((*s_objet).objet))).nom_fonction) + 1) *
 4063:                     sizeof(unsigned char));
 4064: 
 4065:             if (chaine == NULL)
 4066:             {
 4067:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4068:                 return(NULL);
 4069:             }
 4070: 
 4071:             strcpy(chaine, (unsigned char *) (*((struct_fonction *)
 4072:                     ((*s_objet).objet))).nom_fonction);
 4073:         }
 4074:         else if ((*s_objet).type == LST)
 4075:         {
 4076: 
 4077: /*
 4078: --------------------------------------------------------------------------------
 4079:   Liste
 4080:   Poids fort 0100
 4081: --------------------------------------------------------------------------------
 4082: */
 4083: 
 4084:             chaine = malloc(sizeof(unsigned char));
 4085: 
 4086:             if (chaine == NULL)
 4087:             {
 4088:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4089:                 return(NULL);
 4090:             }
 4091: 
 4092:             // Calcul de la longueur de la liste.
 4093: 
 4094:             longueur_liste = 0;
 4095:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 4096: 
 4097:             while(l_element_courant != NULL)
 4098:             {
 4099:                 l_element_courant = (*l_element_courant).suivant;
 4100:                 longueur_liste++;
 4101:             }
 4102: 
 4103:             if (longueur_liste < (1LL << 3))
 4104:             {
 4105:                 chaine[0] = 0x40 | (longueur_liste & 0x7);
 4106:             }
 4107:             else if (longueur_liste < (1LL << 8))
 4108:             {
 4109:                 chaine[0] = 0x48;
 4110:             }
 4111:             else if (longueur_liste < (1LL << 16))
 4112:             {
 4113:                 chaine[0] = 0x49;
 4114:             }
 4115:             else if (longueur_liste < (1LL << 32))
 4116:             {
 4117:                 chaine[0] = 0x4A;
 4118:             }
 4119:             else
 4120:             {
 4121:                 chaine[0] = 0x4B;
 4122:             }
 4123: 
 4124:             longueur_totale = 1;
 4125: 
 4126:             if ((chaine[0] & 0x8) != 0)
 4127:             {
 4128:                 switch(chaine[0] & 0x03)
 4129:                 {
 4130:                     case 0x00 :
 4131:                     {
 4132:                         longueur_totale += 1;
 4133: 
 4134:                         if ((chaine = realloc(chaine, longueur_totale *
 4135:                                 sizeof(unsigned char))) == NULL)
 4136:                         {
 4137:                             (*s_etat_processus).erreur_systeme =
 4138:                                     d_es_allocation_memoire;
 4139:                             return(NULL);
 4140:                         }
 4141: 
 4142:                         chaine[longueur_totale - 1] =
 4143:                                 (unsigned char) (longueur_liste & 0xFF);
 4144:                         break;
 4145:                     }
 4146: 
 4147:                     case 0x01 :
 4148:                     {
 4149:                         longueur_totale += 2;
 4150: 
 4151:                         if ((chaine = realloc(chaine, longueur_totale *
 4152:                                 sizeof(unsigned char))) == NULL)
 4153:                         {
 4154:                             (*s_etat_processus).erreur_systeme =
 4155:                                     d_es_allocation_memoire;
 4156:                             return(NULL);
 4157:                         }
 4158: 
 4159:                         chaine[longueur_totale - 2] =
 4160:                                 (unsigned char) ((longueur_liste >> 8) & 0xFF);
 4161:                         chaine[longueur_totale - 1] =
 4162:                                 (unsigned char) (longueur_liste & 0xFF);
 4163:                         break;
 4164:                     }
 4165: 
 4166:                     case 0x02 :
 4167:                     {
 4168:                         longueur_totale += 4;
 4169: 
 4170:                         if ((chaine = realloc(chaine, longueur_totale *
 4171:                                 sizeof(unsigned char))) == NULL)
 4172:                         {
 4173:                             (*s_etat_processus).erreur_systeme =
 4174:                                     d_es_allocation_memoire;
 4175:                             return(NULL);
 4176:                         }
 4177: 
 4178:                         chaine[longueur_totale - 4] =
 4179:                                 (unsigned char) ((longueur_liste >> 24) & 0xFF);
 4180:                         chaine[longueur_totale - 3] =
 4181:                                 (unsigned char) ((longueur_liste >> 16) & 0xFF);
 4182:                         chaine[longueur_totale - 2] =
 4183:                                 (unsigned char) ((longueur_liste >> 8) & 0xFF);
 4184:                         chaine[longueur_totale - 1] =
 4185:                                 (unsigned char) (longueur_liste & 0xFF);
 4186:                         break;
 4187:                     }
 4188: 
 4189:                     case 0x03 :
 4190:                     {
 4191:                         longueur_totale += 8;
 4192: 
 4193:                         if ((chaine = realloc(chaine, longueur_totale *
 4194:                                 sizeof(unsigned char))) == NULL)
 4195:                         {
 4196:                             (*s_etat_processus).erreur_systeme =
 4197:                                     d_es_allocation_memoire;
 4198:                             return(NULL);
 4199:                         }
 4200: 
 4201:                         chaine[longueur_totale - 8] =
 4202:                                 (unsigned char) ((longueur_liste >> 56) & 0xFF);
 4203:                         chaine[longueur_totale - 7] =
 4204:                                 (unsigned char) ((longueur_liste >> 48) & 0xFF);
 4205:                         chaine[longueur_totale - 6] =
 4206:                                 (unsigned char) ((longueur_liste >> 40) & 0xFF);
 4207:                         chaine[longueur_totale - 5] =
 4208:                                 (unsigned char) ((longueur_liste >> 32) & 0xFF);
 4209:                         chaine[longueur_totale - 4] =
 4210:                                 (unsigned char) ((longueur_liste >> 24) & 0xFF);
 4211:                         chaine[longueur_totale - 3] =
 4212:                                 (unsigned char) ((longueur_liste >> 16) & 0xFF);
 4213:                         chaine[longueur_totale - 2] =
 4214:                                 (unsigned char) ((longueur_liste >> 8) & 0xFF);
 4215:                         chaine[longueur_totale - 1] =
 4216:                                 (unsigned char) (longueur_liste & 0xFF);
 4217:                         break;
 4218:                     }
 4219: 
 4220:                     default :
 4221:                     {
 4222:                         BUG(1, printf("Internal format error\n"));
 4223:                     }
 4224:                 }
 4225:             }
 4226: 
 4227:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 4228:             l_element_courant_format = (struct_liste_chainee *)
 4229:                     (*s_format).objet;
 4230:             nombre_elements = 0;
 4231: 
 4232:             while((l_element_courant != NULL) &&
 4233:                     (l_element_courant_format != NULL))
 4234:             {
 4235:                 if ((((*(*l_element_courant_format).donnee).type == LST)
 4236:                         && ((*(*l_element_courant).donnee).type == LST)) ||
 4237:                         (((*(*l_element_courant_format).donnee).type == TBL)
 4238:                         && ((*(*l_element_courant).donnee).type == TBL)))
 4239:                 {
 4240:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 4241:                             (*l_element_courant).donnee,
 4242:                             (*l_element_courant_format).donnee,
 4243:                             0, 0, ' ', 'U', longueur_effective, recursivite))
 4244:                             == NULL)
 4245:                     {
 4246:                         return(NULL);
 4247:                     }
 4248: 
 4249:                     if ((chaine = realloc(chaine, (longueur_totale +
 4250:                             (*longueur_effective)) * sizeof(unsigned char)))
 4251:                             == NULL)
 4252:                     {
 4253:                         (*s_etat_processus).erreur_systeme =
 4254:                                 d_es_allocation_memoire;
 4255:                         return(NULL);
 4256:                     }
 4257: 
 4258:                     memcpy(&(chaine[longueur_totale]), chaine_formatee,
 4259:                             (*longueur_effective));
 4260:                     longueur_totale += (*longueur_effective);
 4261:                     free(chaine_formatee);
 4262:                 }
 4263:                 else if ((*(*l_element_courant_format).donnee).type != CHN)
 4264:                 {
 4265:                     free(chaine);
 4266: 
 4267:                     (*s_etat_processus).erreur_execution =
 4268:                             d_ex_erreur_format_fichier;
 4269:                     return(NULL);
 4270:                 }
 4271:                 else
 4272:                 {
 4273:                     if ((format_chaine = conversion_majuscule((unsigned char *)
 4274:                             (*(*l_element_courant_format).donnee).objet))
 4275:                             == NULL)
 4276:                     {
 4277:                         (*s_etat_processus).erreur_systeme =
 4278:                                 d_es_allocation_memoire;
 4279:                         return(NULL);
 4280:                     }
 4281: 
 4282:                     format_degenere = d_faux;
 4283: 
 4284:                     if (strncmp("INTEGER*", format_chaine, 8) == 0)
 4285:                     {
 4286:                         format_sortie = 'I';
 4287:                         position_1 = 8;
 4288:                     }
 4289:                     else if (strncmp("LOGICAL*", format_chaine, 8) == 0)
 4290:                     {
 4291:                         format_sortie = 'L';
 4292:                         position_1 = 8;
 4293:                     }
 4294:                     else if (strncmp("REAL*", format_chaine, 5) == 0)
 4295:                     {
 4296:                         format_sortie = 'R';
 4297:                         position_1 = 5;
 4298:                     }
 4299:                     else if (strncmp("COMPLEX*", format_chaine, 8) == 0)
 4300:                     {
 4301:                         format_sortie = 'C';
 4302:                         position_1 = 8;
 4303:                     }
 4304:                     else if (strcmp("CHARACTER", format_chaine) == 0)
 4305:                     {
 4306:                         format_sortie = 'S';
 4307:                         position_1 = 10;
 4308:                         format_degenere = d_vrai;
 4309:                     }
 4310:                     else
 4311:                     {
 4312:                         free(chaine);
 4313:                         free(format_chaine);
 4314: 
 4315:                         (*s_etat_processus).erreur_execution =
 4316:                                 d_ex_erreur_format_fichier;
 4317:                         return(NULL);
 4318:                     }
 4319: 
 4320:                     if (format_degenere == d_faux)
 4321:                     {
 4322:                         if (format_chaine[position_1] == d_code_fin_chaine)
 4323:                         {
 4324:                             free(chaine);
 4325:                             free(format_chaine);
 4326: 
 4327:                             (*s_etat_processus).erreur_execution =
 4328:                                     d_ex_erreur_format_fichier;
 4329:                             return(NULL);
 4330:                         }
 4331: 
 4332:                         if (sscanf(&(format_chaine[position_1]), "%ld",
 4333:                                 &longueur) != 1)
 4334:                         {
 4335:                             free(chaine);
 4336:                             free(format_chaine);
 4337: 
 4338:                             (*s_etat_processus).erreur_execution =
 4339:                                     d_ex_erreur_format_fichier;
 4340:                             return(NULL);
 4341:                         }
 4342:                     }
 4343:                     else
 4344:                     {
 4345:                         longueur = -1;
 4346:                     }
 4347: 
 4348:                     free(format_chaine);
 4349:                 
 4350:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 4351:                             (*l_element_courant).donnee, s_format,
 4352:                             longueur, longueur_champ, format_sortie, type,
 4353:                             longueur_effective, recursivite)) == NULL)
 4354:                     {
 4355:                         free(chaine);
 4356:                         return(NULL);
 4357:                     }
 4358: 
 4359:                     if ((chaine = realloc(chaine,
 4360:                             (longueur_totale + (*longueur_effective))
 4361:                             * sizeof(unsigned char))) == NULL)
 4362:                     {
 4363:                         (*s_etat_processus).erreur_systeme =
 4364:                                 d_es_allocation_memoire;
 4365:                         return(NULL);
 4366:                     }
 4367: 
 4368:                     memcpy(&(chaine[longueur_totale]), chaine_formatee,
 4369:                             (*longueur_effective));
 4370:                     longueur_totale += (*longueur_effective);
 4371:                     free(chaine_formatee);
 4372:                 }
 4373: 
 4374:                 nombre_elements++;
 4375:                 l_element_courant = (*l_element_courant).suivant;
 4376:                 l_element_courant_format = (*l_element_courant_format).suivant;
 4377:             }
 4378: 
 4379:             if ((l_element_courant != NULL) ||
 4380:                     (l_element_courant_format != NULL))
 4381:             {
 4382:                 free(chaine);
 4383: 
 4384:                 (*s_etat_processus).erreur_execution =
 4385:                         d_ex_erreur_format_fichier;
 4386:                 return(NULL);
 4387:             }
 4388: 
 4389:             if ((*recursivite) == 1)
 4390:             {
 4391:                 // Ajout de la longueur totale en fin d'enregistrement.
 4392: 
 4393:                 if (longueur_totale < (((integer8) 1) << 6))
 4394:                 {
 4395:                     tampon[0] = longueur_totale + 1;
 4396: 
 4397:                     if ((chaine = realloc(chaine, (longueur_totale + 1)
 4398:                             * sizeof(unsigned char))) == NULL)
 4399:                     {
 4400:                         (*s_etat_processus).erreur_systeme =
 4401:                                 d_es_allocation_memoire;
 4402:                         return(NULL);
 4403:                     }
 4404: 
 4405:                     memcpy(&(chaine[longueur_totale]), tampon, 1);
 4406:                     longueur_totale += 1;
 4407:                 }
 4408:                 else if (longueur_totale < (((integer8) 1) << 16))
 4409:                 {
 4410:                     tampon[2] = 0x40;
 4411:                     tampon[1] = (longueur_totale + 1) & 0xFF;
 4412:                     tampon[0] = ((longueur_totale + 1) >> 8) & 0xFF;
 4413: 
 4414:                     if ((chaine = realloc(chaine, (longueur_totale + 3)
 4415:                             * sizeof(unsigned char))) == NULL)
 4416:                     {
 4417:                         (*s_etat_processus).erreur_systeme =
 4418:                                 d_es_allocation_memoire;
 4419:                         return(NULL);
 4420:                     }
 4421: 
 4422:                     memcpy(&(chaine[longueur_totale]), tampon, 3);
 4423:                     longueur_totale += 3;
 4424:                 }
 4425:                 else if (longueur_totale < (((integer8) 1) << 32))
 4426:                 {
 4427:                     tampon[4] = 0x80;
 4428:                     tampon[3] = (longueur_totale + 1) & 0xFF;
 4429:                     tampon[2] = ((longueur_totale + 1) >> 8) & 0xFF;
 4430:                     tampon[1] = ((longueur_totale + 1) >> 16) & 0xFF;
 4431:                     tampon[0] = ((longueur_totale + 1) >> 24) & 0xFF;
 4432: 
 4433:                     if ((chaine = realloc(chaine, (longueur_totale + 5)
 4434:                             * sizeof(unsigned char))) == NULL)
 4435:                     {
 4436:                         (*s_etat_processus).erreur_systeme =
 4437:                                 d_es_allocation_memoire;
 4438:                         return(NULL);
 4439:                     }
 4440: 
 4441:                     memcpy(&(chaine[longueur_totale]), tampon, 5);
 4442:                     longueur_totale += 5;
 4443:                 }
 4444:                 else
 4445:                 {
 4446:                     tampon[8] = 0xC0;
 4447:                     tampon[7] = (longueur_totale + 1) & 0xFF;
 4448:                     tampon[6] = ((longueur_totale + 1) >> 8) & 0xFF;
 4449:                     tampon[5] = ((longueur_totale + 1) >> 16) & 0xFF;
 4450:                     tampon[4] = ((longueur_totale + 1) >> 24) & 0xFF;
 4451:                     tampon[3] = ((longueur_totale + 1) >> 32) & 0xFF;
 4452:                     tampon[2] = ((longueur_totale + 1) >> 40) & 0xFF;
 4453:                     tampon[1] = ((longueur_totale + 1) >> 48) & 0xFF;
 4454:                     tampon[0] = ((longueur_totale + 1) >> 56) & 0xFF;
 4455: 
 4456:                     if ((chaine = realloc(chaine, (longueur_totale + 9)
 4457:                             * sizeof(unsigned char))) == NULL)
 4458:                     {
 4459:                         (*s_etat_processus).erreur_systeme =
 4460:                                 d_es_allocation_memoire;
 4461:                         return(NULL);
 4462:                     }
 4463: 
 4464:                     memcpy(&(chaine[longueur_totale]), tampon, 9);
 4465:                     longueur_totale += 9;
 4466:                 }
 4467: 
 4468:                 __zone();
 4469:             }
 4470: 
 4471:             (*longueur_effective) = longueur_totale;
 4472:         }
 4473:         else if ((*s_objet).type == TBL)
 4474:         {
 4475: 
 4476: /*
 4477: --------------------------------------------------------------------------------
 4478:   Table
 4479: --------------------------------------------------------------------------------
 4480: */
 4481: 
 4482:             if ((*s_format).type != TBL)
 4483:             {
 4484:                 (*s_etat_processus).erreur_execution =
 4485:                         d_ex_erreur_format_fichier;
 4486:                 return(NULL);
 4487:             }
 4488: 
 4489:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 4490:             l_element_courant_format = (struct_liste_chainee *)
 4491:                     (*s_format).objet;
 4492: 
 4493:             if ((*((struct_tableau *) (*s_objet).objet)).nombre_elements !=
 4494:                     (*((struct_tableau *) (*s_format).objet)).nombre_elements)
 4495:             {
 4496:                 (*s_etat_processus).erreur_execution =
 4497:                         d_ex_erreur_format_fichier;
 4498:                 return(NULL);
 4499:             }
 4500: 
 4501:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 4502: 
 4503:             if (chaine == NULL)
 4504:             {
 4505:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4506:                 return(NULL);
 4507:             }
 4508: 
 4509:             strcpy(chaine, "<[");
 4510: 
 4511:             for(i = 0; i < (*((struct_tableau *) (*s_objet).objet))
 4512:                     .nombre_elements; i++)
 4513:             {
 4514:                 if ((((*(*((struct_tableau *) (*s_format).objet))
 4515:                         .elements[i]).type == LST) &&
 4516:                         ((*(*((struct_tableau *) (*s_objet).objet)).elements[i])
 4517:                         .type == LST)) ||
 4518:                         (((*(*((struct_tableau *) (*s_format).objet))
 4519:                         .elements[i]).type == TBL) &&
 4520:                         ((*(*((struct_tableau *) (*s_objet).objet)).elements[i])
 4521:                         .type == TBL)))
 4522:                 {
 4523:                     chaine_sauvegarde = chaine;
 4524: 
 4525:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 4526:                             (*l_element_courant).donnee,
 4527:                             (*l_element_courant_format).donnee,
 4528:                             0, 0, ' ', 'F', longueur_effective, recursivite))
 4529:                             == NULL)
 4530:                     {
 4531:                         return(NULL);
 4532:                     }
 4533: 
 4534:                     chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 4535:                             + strlen(chaine_sauvegarde) + 2)
 4536:                             * sizeof(unsigned char));
 4537: 
 4538:                     if (chaine == NULL)
 4539:                     {
 4540:                         (*s_etat_processus).erreur_systeme =
 4541:                                 d_es_allocation_memoire;
 4542:                         return(NULL);
 4543:                     }
 4544: 
 4545:                     strcpy(chaine, chaine_sauvegarde);
 4546:                     free(chaine_sauvegarde);
 4547:                     strcat(chaine, " ");
 4548:                     strcat(chaine, chaine_formatee);
 4549:                     free(chaine_formatee);
 4550:                 }
 4551:                 else if ((*(*((struct_tableau *) (*s_format).objet))
 4552:                         .elements[i]).type != CHN)
 4553:                 {
 4554:                     free(chaine);
 4555: 
 4556:                     (*s_etat_processus).erreur_execution =
 4557:                             d_ex_erreur_format_fichier;
 4558:                     return(NULL);
 4559:                 }
 4560:                 else
 4561:                 {
 4562:                     if ((format_chaine = conversion_majuscule((unsigned char *)
 4563:                             (*(*((struct_tableau *) (*s_format).objet))
 4564:                             .elements[i]).objet)) == NULL)
 4565:                     {
 4566:                         (*s_etat_processus).erreur_systeme =
 4567:                                 d_es_allocation_memoire;
 4568:                         return(NULL);
 4569:                     }
 4570: 
 4571:                     format_degenere = d_faux;
 4572: 
 4573:                     if (strncmp("STANDARD*", format_chaine, 9) == 0)
 4574:                     {
 4575:                         format_sortie = 'S';
 4576:                         position_1 = 9;
 4577:                         format_degenere = d_vrai;
 4578:                     }
 4579:                     else if (strncmp("BINARY*", format_chaine, 7) == 0)
 4580:                     {
 4581:                         format_sortie = 'B';
 4582:                         position_1 = 7;
 4583:                     }
 4584:                     else if (strncmp("FIXED*", format_chaine, 6) == 0)
 4585:                     {
 4586:                         format_sortie = 'F';
 4587:                         position_1 = 6;
 4588:                     }
 4589:                     else if (strncmp("SCIENTIFIC*", format_chaine, 11) == 0)
 4590:                     {
 4591:                         format_sortie = 'I';
 4592:                         position_1 = 11;
 4593:                     }
 4594:                     else if (strncmp("ENGINEER*", format_chaine, 9) == 0)
 4595:                     {
 4596:                         format_sortie = 'E';
 4597:                         position_1 = 9;
 4598:                     }
 4599:                     else if (strncmp("CHARACTER*", format_chaine, 10) == 0)
 4600:                     {
 4601:                         format_sortie = 'C';
 4602:                         position_1 = 10;
 4603:                         format_degenere = d_vrai;
 4604:                     }
 4605:                     else
 4606:                     {
 4607:                         free(chaine);
 4608:                         free(format_chaine);
 4609: 
 4610:                         (*s_etat_processus).erreur_execution =
 4611:                                 d_ex_erreur_format_fichier;
 4612:                         return(NULL);
 4613:                     }
 4614: 
 4615:                     position_3 = strlen(format_chaine);
 4616:                     format_chaine[--position_3] = d_code_fin_chaine;
 4617: 
 4618:                     position_2 = position_1;
 4619: 
 4620:                     while(format_chaine[position_2] != '(')
 4621:                     {
 4622:                         if (format_chaine[position_2] == d_code_fin_chaine)
 4623:                         {
 4624:                             free(chaine);
 4625:                             free(format_chaine);
 4626: 
 4627:                             (*s_etat_processus).erreur_execution =
 4628:                                     d_ex_erreur_format_fichier;
 4629:                             return(NULL);
 4630:                         }
 4631: 
 4632:                         position_2++;
 4633:                     }
 4634: 
 4635:                     format_chaine[position_2++] = d_code_fin_chaine;
 4636: 
 4637:                     if (format_degenere == d_faux)
 4638:                     {
 4639:                         if (sscanf(&(format_chaine[position_1]), "%ld",
 4640:                                 &longueur) != 1)
 4641:                         {
 4642:                             free(chaine);
 4643:                             free(format_chaine);
 4644: 
 4645:                             (*s_etat_processus).erreur_execution =
 4646:                                     d_ex_erreur_format_fichier;
 4647:                             return(NULL);
 4648:                         }
 4649:                     }
 4650:                     else
 4651:                     {
 4652:                         longueur = -1;
 4653:                     }
 4654: 
 4655:                     if (strcmp(&(format_chaine[position_2]), "*") != 0)
 4656:                     {
 4657:                         if (sscanf(&(format_chaine[position_2]), "%ld",
 4658:                                 &longueur_champ) != 1)
 4659:                         {
 4660:                             free(chaine);
 4661:                             free(format_chaine);
 4662: 
 4663:                             (*s_etat_processus).erreur_execution =
 4664:                                     d_ex_erreur_format_fichier;
 4665:                             return(NULL);
 4666:                         }
 4667:                     }
 4668:                     else
 4669:                     {
 4670:                         longueur_champ = -1;
 4671:                     }
 4672: 
 4673:                     if ((longueur >= 0) && (longueur_champ >= 0) && (longueur >
 4674:                             longueur_champ))
 4675:                     {
 4676:                         free(chaine);
 4677:                         free(format_chaine);
 4678: 
 4679:                         (*s_etat_processus).erreur_execution =
 4680:                                 d_ex_erreur_format_fichier;
 4681:                         return(NULL);
 4682:                     }
 4683: 
 4684:                     free(format_chaine);
 4685:                 
 4686:                     chaine_sauvegarde = chaine;
 4687: 
 4688:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 4689:                             (*((struct_tableau *) (*s_objet).objet))
 4690:                             .elements[i], s_format,
 4691:                             longueur, longueur_champ, format_sortie, type,
 4692:                             longueur_effective, recursivite)) == NULL)
 4693:                     {
 4694:                         return(NULL);
 4695:                     }
 4696: 
 4697:                     if ((*(*((struct_tableau *) (*s_objet).objet))
 4698:                             .elements[i]).type == CHN)
 4699:                     {
 4700:                         chaine = (unsigned char *)
 4701:                                 malloc((strlen(chaine_formatee)
 4702:                                 + strlen(chaine_sauvegarde) + 4)
 4703:                                 * sizeof(unsigned char));
 4704: 
 4705:                         if (chaine == NULL)
 4706:                         {
 4707:                             (*s_etat_processus).erreur_systeme =
 4708:                                     d_es_allocation_memoire;
 4709:                             return(NULL);
 4710:                         }
 4711: 
 4712:                         strcpy(chaine, chaine_sauvegarde);
 4713:                         free(chaine_sauvegarde);
 4714:                         strcat(chaine, " \"");
 4715:                         strcat(chaine, chaine_formatee);
 4716:                         free(chaine_formatee);
 4717:                         strcat(chaine, "\"");
 4718:                     }
 4719:                     else if ((*(*((struct_tableau *) (*s_objet).objet))
 4720:                             .elements[i]).type == NOM)
 4721:                     {
 4722:                         chaine = (unsigned char *)
 4723:                                 malloc((strlen(chaine_formatee)
 4724:                                 + strlen(chaine_sauvegarde) + 2)
 4725:                                 * sizeof(unsigned char));
 4726: 
 4727:                         if (chaine == NULL)
 4728:                         {
 4729:                             (*s_etat_processus).erreur_systeme =
 4730:                                     d_es_allocation_memoire;
 4731:                             return(NULL);
 4732:                         }
 4733: 
 4734:                         sprintf(chaine, "%s %s", chaine_sauvegarde,
 4735:                                 chaine_formatee);
 4736:                         free(chaine_formatee);
 4737:                     }
 4738:                     else
 4739:                     {
 4740:                         chaine = (unsigned char *)
 4741:                                 malloc((strlen(chaine_formatee)
 4742:                                 + strlen(chaine_sauvegarde) + 2)
 4743:                                 * sizeof(unsigned char));
 4744: 
 4745:                         if (chaine == NULL)
 4746:                         {
 4747:                             (*s_etat_processus).erreur_systeme =
 4748:                                     d_es_allocation_memoire;
 4749:                             return(NULL);
 4750:                         }
 4751: 
 4752:                         strcpy(chaine, chaine_sauvegarde);
 4753:                         free(chaine_sauvegarde);
 4754:                         strcat(chaine, " ");
 4755:                         strcat(chaine, chaine_formatee);
 4756:                         free(chaine_formatee);
 4757:                     }
 4758:                 }
 4759:             }
 4760: 
 4761:             chaine_sauvegarde = chaine;
 4762:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 4)
 4763:                     * sizeof(unsigned char));
 4764: 
 4765:             if (chaine == NULL)
 4766:             {
 4767:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4768:                 return(NULL);
 4769:             }
 4770: 
 4771:             strcpy(chaine, chaine_sauvegarde);
 4772:             free(chaine_sauvegarde);
 4773:             strcat(chaine, " ]>");
 4774:         }
 4775:         else if ((*s_objet).type == MCX)
 4776:         {
 4777: 
 4778: /*
 4779: --------------------------------------------------------------------------------
 4780:   Matrice complexe
 4781: --------------------------------------------------------------------------------
 4782: */
 4783: 
 4784:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 4785:                     (format_sortie != 'I') && (format_sortie != 'E'))
 4786:             {
 4787:                 (*s_etat_processus).erreur_execution =
 4788:                         d_ex_erreur_format_fichier;
 4789:                 return(NULL);
 4790:             }
 4791: 
 4792:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 4793:                     .nombre_lignes;
 4794:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 4795:                     .nombre_colonnes;
 4796: 
 4797:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 4798: 
 4799:             if (chaine != NULL)
 4800:             {
 4801:                 strcpy(chaine, "[[");
 4802: 
 4803:                 for(i = 0; i < nombre_lignes; i++)
 4804:                 {
 4805:                     for(j = 0; j < nombre_colonnes; j++)
 4806:                     {
 4807:                         if ((chaine_formatee =
 4808:                                 formateur_fichier_nombre(s_etat_processus,
 4809:                                 (void *) &(((struct_complexe16 **)
 4810:                                 ((*((struct_matrice *)
 4811:                                 ((*s_objet).objet))).tableau))[i][j]), 'C',
 4812:                                 longueur, longueur_champ, format_sortie))
 4813:                                 == NULL)
 4814:                         {
 4815:                             (*s_etat_processus).erreur_systeme =
 4816:                                     d_es_allocation_memoire;
 4817:                             return(NULL);
 4818:                         }
 4819: 
 4820:                         chaine_sauvegarde = chaine;
 4821:                         chaine = (unsigned char *) malloc(
 4822:                                 (strlen(chaine_sauvegarde) +
 4823:                                 strlen(chaine_formatee) + 2)
 4824:                                 * sizeof(unsigned char));
 4825: 
 4826:                         if (chaine == NULL)
 4827:                         {
 4828:                             (*s_etat_processus).erreur_systeme =
 4829:                                     d_es_allocation_memoire;
 4830:                             return(NULL);
 4831:                         }
 4832: 
 4833:                         strcpy(chaine, chaine_sauvegarde);
 4834:                         free(chaine_sauvegarde);
 4835:                         strcat(chaine, " ");
 4836:                         strcat(chaine, chaine_formatee);
 4837:                         free(chaine_formatee);
 4838:                     }
 4839: 
 4840:                     chaine_sauvegarde = chaine;
 4841:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 4842:                     {
 4843:                         chaine = (unsigned char *) malloc(
 4844:                                 (strlen(chaine_sauvegarde) + 6)
 4845:                                 * sizeof(unsigned char));
 4846: 
 4847:                         if (chaine == NULL)
 4848:                         {
 4849:                             (*s_etat_processus).erreur_systeme =
 4850:                                     d_es_allocation_memoire;
 4851:                             return(NULL);
 4852:                         }
 4853: 
 4854:                         strcpy(chaine, chaine_sauvegarde);
 4855:                         free(chaine_sauvegarde);
 4856:                         strcat(chaine, " ]\n [");
 4857:                     }
 4858:                     else
 4859:                     {
 4860:                         chaine = (unsigned char *) malloc(
 4861:                                 (strlen(chaine_sauvegarde) + 4)
 4862:                                 * sizeof(unsigned char));
 4863: 
 4864:                         if (chaine == NULL)
 4865:                         {
 4866:                             (*s_etat_processus).erreur_systeme =
 4867:                                     d_es_allocation_memoire;
 4868:                             return(NULL);
 4869:                         }
 4870: 
 4871:                         strcpy(chaine, chaine_sauvegarde);
 4872:                         free(chaine_sauvegarde);
 4873:                         strcat(chaine, " ][");
 4874:                     }
 4875:                 }
 4876: 
 4877:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 4878:                 {
 4879:                     chaine[strlen(chaine) - 3] = ']';
 4880:                     chaine[strlen(chaine) - 2] = 0;
 4881: 
 4882:                     chaine_sauvegarde = chaine;
 4883:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 4884:                             + 1) * sizeof(unsigned char));
 4885: 
 4886:                     if (chaine == NULL)
 4887:                     {
 4888:                         (*s_etat_processus).erreur_systeme =
 4889:                                 d_es_allocation_memoire;
 4890:                         return(NULL);
 4891:                     }
 4892: 
 4893:                     strcpy(chaine, chaine_sauvegarde);
 4894:                     free(chaine_sauvegarde);
 4895:                 }
 4896:                 else
 4897:                 {
 4898:                     chaine[strlen(chaine) - 2] = ']';
 4899:                     chaine[strlen(chaine) - 1] = 0;
 4900: 
 4901:                     chaine_sauvegarde = chaine;
 4902:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 4903:                             + 2) * sizeof(unsigned char));
 4904: 
 4905:                     if (chaine == NULL)
 4906:                     {
 4907:                         (*s_etat_processus).erreur_systeme =
 4908:                                 d_es_allocation_memoire;
 4909:                         return(NULL);
 4910:                     }
 4911: 
 4912:                     strcpy(chaine, chaine_sauvegarde);
 4913:                     free(chaine_sauvegarde);
 4914:                     strcat(chaine, "]");
 4915:                 }
 4916:             }
 4917:         }
 4918:         else if ((*s_objet).type == MIN)
 4919:         {
 4920: 
 4921: /*
 4922: --------------------------------------------------------------------------------
 4923:   Matrice entière
 4924: --------------------------------------------------------------------------------
 4925: */
 4926: 
 4927:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 4928:                     (format_sortie != 'I') && (format_sortie != 'E'))
 4929:             {
 4930:                 (*s_etat_processus).erreur_execution =
 4931:                         d_ex_erreur_format_fichier;
 4932:                 return(NULL);
 4933:             }
 4934: 
 4935:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 4936:                     .nombre_lignes;
 4937:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 4938:                     .nombre_colonnes;
 4939: 
 4940:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 4941: 
 4942:             if (chaine != NULL)
 4943:             {
 4944:                 strcpy(chaine, "[[");
 4945: 
 4946:                 for(i = 0; i < nombre_lignes; i++)
 4947:                 {
 4948:                     for(j = 0; j < nombre_colonnes; j++)
 4949:                     {
 4950:                         if ((chaine_formatee =
 4951:                                 formateur_fichier_nombre(s_etat_processus,
 4952:                                 (void *) &(((integer8 **) ((*((struct_matrice *)
 4953:                                 ((*s_objet).objet))).tableau))[i][j]), 'I',
 4954:                                 longueur, longueur_champ, format_sortie))
 4955:                                 == NULL)
 4956:                         {
 4957:                             (*s_etat_processus).erreur_systeme =
 4958:                                     d_es_allocation_memoire;
 4959:                             return(NULL);
 4960:                         }
 4961: 
 4962:                         chaine_sauvegarde = chaine;
 4963:                         chaine = (unsigned char *) malloc(
 4964:                                 (strlen(chaine_sauvegarde) +
 4965:                                 strlen(chaine_formatee) + 2)
 4966:                                 * sizeof(unsigned char));
 4967: 
 4968:                         if (chaine == NULL)
 4969:                         {
 4970:                             (*s_etat_processus).erreur_systeme =
 4971:                                     d_es_allocation_memoire;
 4972:                             return(NULL);
 4973:                         }
 4974: 
 4975:                         strcpy(chaine, chaine_sauvegarde);
 4976:                         free(chaine_sauvegarde);
 4977:                         strcat(chaine, " ");
 4978:                         strcat(chaine, chaine_formatee);
 4979:                         free(chaine_formatee);
 4980:                     }
 4981: 
 4982:                     chaine_sauvegarde = chaine;
 4983:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 4984:                     {
 4985:                         chaine = (unsigned char *) malloc(
 4986:                                 (strlen(chaine_sauvegarde) + 6)
 4987:                                 * sizeof(unsigned char));
 4988: 
 4989:                         if (chaine == NULL)
 4990:                         {
 4991:                             (*s_etat_processus).erreur_systeme =
 4992:                                     d_es_allocation_memoire;
 4993:                             return(NULL);
 4994:                         }
 4995: 
 4996:                         strcpy(chaine, chaine_sauvegarde);
 4997:                         free(chaine_sauvegarde);
 4998:                         strcat(chaine, " ]\n [");
 4999:                     }
 5000:                     else
 5001:                     {
 5002:                         chaine = (unsigned char *) malloc(
 5003:                                 (strlen(chaine_sauvegarde) + 4)
 5004:                                 * sizeof(unsigned char));
 5005: 
 5006:                         if (chaine == NULL)
 5007:                         {
 5008:                             (*s_etat_processus).erreur_systeme =
 5009:                                     d_es_allocation_memoire;
 5010:                             return(NULL);
 5011:                         }
 5012: 
 5013:                         strcpy(chaine, chaine_sauvegarde);
 5014:                         free(chaine_sauvegarde);
 5015:                         strcat(chaine, " ][");
 5016:                     }
 5017:                 }
 5018: 
 5019:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 5020:                 {
 5021:                     chaine[strlen(chaine) - 3] = ']';
 5022:                     chaine[strlen(chaine) - 2] = 0;
 5023: 
 5024:                     chaine_sauvegarde = chaine;
 5025:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 5026:                             + 1) * sizeof(unsigned char));
 5027: 
 5028:                     if (chaine == NULL)
 5029:                     {
 5030:                         (*s_etat_processus).erreur_systeme =
 5031:                                 d_es_allocation_memoire;
 5032:                         return(NULL);
 5033:                     }
 5034: 
 5035:                     strcpy(chaine, chaine_sauvegarde);
 5036:                     free(chaine_sauvegarde);
 5037:                 }
 5038:                 else
 5039:                 {
 5040:                     chaine[strlen(chaine) - 2] = ']';
 5041:                     chaine[strlen(chaine) - 1] = 0;
 5042: 
 5043:                     chaine_sauvegarde = chaine;
 5044:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 5045:                             + 2) * sizeof(unsigned char));
 5046: 
 5047:                     if (chaine == NULL)
 5048:                     {
 5049:                         (*s_etat_processus).erreur_systeme =
 5050:                                 d_es_allocation_memoire;
 5051:                         return(NULL);
 5052:                     }
 5053: 
 5054:                     strcpy(chaine, chaine_sauvegarde);
 5055:                     free(chaine_sauvegarde);
 5056:                     strcat(chaine, "]");
 5057:                 }
 5058:             }
 5059:         }
 5060:         else if ((*s_objet).type == MRL)
 5061:         {
 5062: 
 5063: /*
 5064: --------------------------------------------------------------------------------
 5065:   Matrice réelle
 5066: --------------------------------------------------------------------------------
 5067: */
 5068: 
 5069:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 5070:                     (format_sortie != 'I') && (format_sortie != 'E'))
 5071:             {
 5072:                 (*s_etat_processus).erreur_execution =
 5073:                         d_ex_erreur_format_fichier;
 5074:                 return(NULL);
 5075:             }
 5076: 
 5077:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 5078:                     .nombre_lignes;
 5079:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 5080:                     .nombre_colonnes;
 5081: 
 5082:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 5083: 
 5084:             if (chaine != NULL)
 5085:             {
 5086:                 strcpy(chaine, "[[");
 5087: 
 5088:                 for(i = 0; i < nombre_lignes; i++)
 5089:                 {
 5090:                     for(j = 0; j < nombre_colonnes; j++)
 5091:                     {
 5092:                         if ((chaine_formatee =
 5093:                                 formateur_fichier_nombre(s_etat_processus,
 5094:                                 (void *) &(((real8 **) ((*((struct_matrice *)
 5095:                                 ((*s_objet).objet))).tableau))[i][j]), 'R',
 5096:                                 longueur, longueur_champ, format_sortie))
 5097:                                 == NULL)
 5098:                         {
 5099:                             (*s_etat_processus).erreur_systeme =
 5100:                                     d_es_allocation_memoire;
 5101:                             return(NULL);
 5102:                         }
 5103: 
 5104:                         chaine_sauvegarde = chaine;
 5105:                         chaine = (unsigned char *) malloc(
 5106:                                 (strlen(chaine_sauvegarde) +
 5107:                                 strlen(chaine_formatee) + 2)
 5108:                                 * sizeof(unsigned char));
 5109: 
 5110:                         if (chaine == NULL)
 5111:                         {
 5112:                             (*s_etat_processus).erreur_systeme =
 5113:                                     d_es_allocation_memoire;
 5114:                             return(NULL);
 5115:                         }
 5116: 
 5117:                         strcpy(chaine, chaine_sauvegarde);
 5118:                         free(chaine_sauvegarde);
 5119:                         strcat(chaine, " ");
 5120:                         strcat(chaine, chaine_formatee);
 5121:                         free(chaine_formatee);
 5122:                     }
 5123: 
 5124:                     chaine_sauvegarde = chaine;
 5125:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 5126:                     {
 5127:                         chaine = (unsigned char *) malloc(
 5128:                                 (strlen(chaine_sauvegarde) + 6)
 5129:                                 * sizeof(unsigned char));
 5130: 
 5131:                         if (chaine == NULL)
 5132:                         {
 5133:                             (*s_etat_processus).erreur_systeme =
 5134:                                     d_es_allocation_memoire;
 5135:                             return(NULL);
 5136:                         }
 5137: 
 5138:                         strcpy(chaine, chaine_sauvegarde);
 5139:                         free(chaine_sauvegarde);
 5140:                         strcat(chaine, " ]\n [");
 5141:                     }
 5142:                     else
 5143:                     {
 5144:                         chaine = (unsigned char *) malloc(
 5145:                                 (strlen(chaine_sauvegarde) + 4)
 5146:                                 * sizeof(unsigned char));
 5147: 
 5148:                         if (chaine == NULL)
 5149:                         {
 5150:                             (*s_etat_processus).erreur_systeme =
 5151:                                     d_es_allocation_memoire;
 5152:                             return(NULL);
 5153:                         }
 5154: 
 5155:                         strcpy(chaine, chaine_sauvegarde);
 5156:                         free(chaine_sauvegarde);
 5157:                         strcat(chaine, " ][");
 5158:                     }
 5159:                 }
 5160: 
 5161:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 5162:                 {
 5163:                     chaine[strlen(chaine) - 3] = ']';
 5164:                     chaine[strlen(chaine) - 2] = 0;
 5165: 
 5166:                     chaine_sauvegarde = chaine;
 5167:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 5168:                             + 1) * sizeof(unsigned char));
 5169: 
 5170:                     if (chaine == NULL)
 5171:                     {
 5172:                         (*s_etat_processus).erreur_systeme =
 5173:                                 d_es_allocation_memoire;
 5174:                         return(NULL);
 5175:                     }
 5176: 
 5177:                     strcpy(chaine, chaine_sauvegarde);
 5178:                     free(chaine_sauvegarde);
 5179:                 }
 5180:                 else
 5181:                 {
 5182:                     chaine[strlen(chaine) - 2] = ']';
 5183:                     chaine[strlen(chaine) - 1] = 0;
 5184: 
 5185:                     chaine_sauvegarde = chaine;
 5186:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 5187:                             + 2) * sizeof(unsigned char));
 5188: 
 5189:                     if (chaine == NULL)
 5190:                     {
 5191:                         (*s_etat_processus).erreur_systeme =
 5192:                                 d_es_allocation_memoire;
 5193:                         return(NULL);
 5194:                     }
 5195: 
 5196:                     strcpy(chaine, chaine_sauvegarde);
 5197:                     free(chaine_sauvegarde);
 5198:                     strcat(chaine, "]");
 5199:                 }
 5200:             }
 5201:         }
 5202:         else if ((*s_objet).type == NOM)
 5203:         {
 5204: 
 5205: /*
 5206: --------------------------------------------------------------------------------
 5207:   Nom
 5208: --------------------------------------------------------------------------------
 5209: */
 5210: 
 5211:             chaine = (unsigned char *) malloc((strlen((*((struct_nom *)
 5212:                     (*s_objet).objet)).nom) + 3) * sizeof(unsigned char));
 5213: 
 5214:             if (chaine == NULL)
 5215:             {
 5216:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5217:                 return(NULL);
 5218:             }
 5219: 
 5220:             sprintf(chaine, "'%s'", (*((struct_nom *) (*s_objet).objet)).nom);
 5221:         }
 5222:         else if ((*s_objet).type == REL)
 5223:         {
 5224: 
 5225: /*
 5226: --------------------------------------------------------------------------------
 5227:   Réel
 5228: --------------------------------------------------------------------------------
 5229: */
 5230: 
 5231:             if (format_sortie != 'R')
 5232:             {
 5233:                 (*s_etat_processus).erreur_execution =
 5234:                         d_ex_erreur_format_fichier;
 5235:                 return(NULL);
 5236:             }
 5237: 
 5238:             if ((chaine = formateur_fichier_binaire_nombre(s_etat_processus,
 5239:                     (*s_objet).objet, 'R', longueur, longueur_effective))
 5240:                     == NULL)
 5241:             {
 5242:                 return(NULL);
 5243:             }
 5244:         }
 5245:         else if ((*s_objet).type == VCX)
 5246:         {
 5247: 
 5248: /*
 5249: --------------------------------------------------------------------------------
 5250:   Vecteur complexe
 5251: --------------------------------------------------------------------------------
 5252: */
 5253: 
 5254:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 5255:                     (format_sortie != 'I') && (format_sortie != 'E'))
 5256:             {
 5257:                 (*s_etat_processus).erreur_execution =
 5258:                         d_ex_erreur_format_fichier;
 5259:                 return(NULL);
 5260:             }
 5261: 
 5262:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 5263:                     .taille;
 5264: 
 5265:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 5266: 
 5267:             if (chaine != NULL)
 5268:             {
 5269:                 strcpy(chaine, "[");
 5270: 
 5271:                 for(i = 0; i < nombre_colonnes; i++)
 5272:                 {
 5273:                     if ((chaine_formatee =
 5274:                             formateur_fichier_nombre(s_etat_processus,
 5275:                             (void *) &(((struct_complexe16 *)
 5276:                             ((*((struct_vecteur *)
 5277:                             ((*s_objet).objet))).tableau))[i]), 'C',
 5278:                             longueur, longueur_champ, format_sortie)) == NULL)
 5279:                     {
 5280:                         (*s_etat_processus).erreur_systeme =
 5281:                                 d_es_allocation_memoire;
 5282:                         return(NULL);
 5283:                     }
 5284: 
 5285:                     chaine_sauvegarde = chaine;
 5286:                     chaine = (unsigned char *) malloc(
 5287:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 5288:                             + 2) * sizeof(unsigned char));
 5289: 
 5290:                     if (chaine == NULL)
 5291:                     {
 5292:                         (*s_etat_processus).erreur_systeme =
 5293:                                 d_es_allocation_memoire;
 5294:                         return(NULL);
 5295:                     }
 5296: 
 5297:                     strcpy(chaine, chaine_sauvegarde);
 5298:                     free(chaine_sauvegarde);
 5299:                     strcat(chaine, " ");
 5300:                     strcat(chaine, chaine_formatee);
 5301:                     free(chaine_formatee);
 5302:                 }
 5303: 
 5304:                 chaine_sauvegarde = chaine;
 5305:                 chaine = (unsigned char *) malloc(
 5306:                         (strlen(chaine_sauvegarde) + 3)
 5307:                         * sizeof(unsigned char));
 5308: 
 5309:                 if (chaine == NULL)
 5310:                 {
 5311:                     (*s_etat_processus).erreur_systeme =
 5312:                             d_es_allocation_memoire;
 5313:                     return(NULL);
 5314:                 }
 5315: 
 5316:                 strcpy(chaine, chaine_sauvegarde);
 5317:                 free(chaine_sauvegarde);
 5318:                 strcat(chaine, " ]");
 5319:             }
 5320:         }
 5321:         else if ((*s_objet).type == VIN)
 5322:         {
 5323: 
 5324: /*
 5325: --------------------------------------------------------------------------------
 5326:   Vecteur entier
 5327: --------------------------------------------------------------------------------
 5328: */
 5329: 
 5330:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 5331:                     (format_sortie != 'I') && (format_sortie != 'E'))
 5332:             {
 5333:                 (*s_etat_processus).erreur_execution =
 5334:                         d_ex_erreur_format_fichier;
 5335:                 return(NULL);
 5336:             }
 5337: 
 5338:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 5339:                     .taille;
 5340: 
 5341:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 5342: 
 5343:             if (chaine != NULL)
 5344:             {
 5345:                 strcpy(chaine, "[");
 5346: 
 5347:                 for(i = 0; i < nombre_colonnes; i++)
 5348:                 {
 5349:                     if ((chaine_formatee =
 5350:                             formateur_fichier_nombre(s_etat_processus,
 5351:                             (void *) &(((integer8 *) ((*((struct_vecteur *)
 5352:                             ((*s_objet).objet))).tableau))[i]), 'I',
 5353:                             longueur, longueur_champ, format_sortie)) == NULL)
 5354:                     {
 5355:                         (*s_etat_processus).erreur_systeme =
 5356:                                 d_es_allocation_memoire;
 5357:                         return(NULL);
 5358:                     }
 5359: 
 5360:                     chaine_sauvegarde = chaine;
 5361:                     chaine = (unsigned char *) malloc(
 5362:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 5363:                             + 2) * sizeof(unsigned char));
 5364: 
 5365:                     if (chaine == NULL)
 5366:                     {
 5367:                         (*s_etat_processus).erreur_systeme =
 5368:                                 d_es_allocation_memoire;
 5369:                         return(NULL);
 5370:                     }
 5371: 
 5372:                     strcpy(chaine, chaine_sauvegarde);
 5373:                     free(chaine_sauvegarde);
 5374:                     strcat(chaine, " ");
 5375:                     strcat(chaine, chaine_formatee);
 5376:                     free(chaine_formatee);
 5377:                 }
 5378: 
 5379:                 chaine_sauvegarde = chaine;
 5380:                 chaine = (unsigned char *) malloc(
 5381:                         (strlen(chaine_sauvegarde) + 3)
 5382:                         * sizeof(unsigned char));
 5383: 
 5384:                 if (chaine == NULL)
 5385:                 {
 5386:                     (*s_etat_processus).erreur_systeme =
 5387:                             d_es_allocation_memoire;
 5388:                     return(NULL);
 5389:                 }
 5390: 
 5391:                 strcpy(chaine, chaine_sauvegarde);
 5392:                 free(chaine_sauvegarde);
 5393:                 strcat(chaine, " ]");
 5394:             }
 5395:         }
 5396:         else if ((*s_objet).type == VRL)
 5397:         {
 5398: 
 5399: /*
 5400: --------------------------------------------------------------------------------
 5401:   Vecteur réel
 5402: --------------------------------------------------------------------------------
 5403: */
 5404: 
 5405:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 5406:                     (format_sortie != 'I') && (format_sortie != 'E'))
 5407:             {
 5408:                 (*s_etat_processus).erreur_execution =
 5409:                         d_ex_erreur_format_fichier;
 5410:                 return(NULL);
 5411:             }
 5412: 
 5413:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 5414:                     .taille;
 5415: 
 5416:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 5417: 
 5418:             if (chaine != NULL)
 5419:             {
 5420:                 strcpy(chaine, "[");
 5421: 
 5422:                 for(i = 0; i < nombre_colonnes; i++)
 5423:                 {
 5424:                     if ((chaine_formatee =
 5425:                             formateur_fichier_nombre(s_etat_processus,
 5426:                             (void *) &(((real8 *) ((*((struct_vecteur *)
 5427:                             ((*s_objet).objet))).tableau))[i]), 'R',
 5428:                             longueur, longueur_champ, format_sortie)) == NULL)
 5429:                     {
 5430:                         (*s_etat_processus).erreur_systeme =
 5431:                                 d_es_allocation_memoire;
 5432:                         return(NULL);
 5433:                     }
 5434: 
 5435:                     chaine_sauvegarde = chaine;
 5436:                     chaine = (unsigned char *) malloc(
 5437:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 5438:                             + 2) * sizeof(unsigned char));
 5439: 
 5440:                     if (chaine == NULL)
 5441:                     {
 5442:                         (*s_etat_processus).erreur_systeme =
 5443:                                 d_es_allocation_memoire;
 5444:                         return(NULL);
 5445:                     }
 5446: 
 5447:                     strcpy(chaine, chaine_sauvegarde);
 5448:                     free(chaine_sauvegarde);
 5449:                     strcat(chaine, " ");
 5450:                     strcat(chaine, chaine_formatee);
 5451:                     free(chaine_formatee);
 5452:                 }
 5453: 
 5454:                 chaine_sauvegarde = chaine;
 5455:                 chaine = (unsigned char *) malloc(
 5456:                         (strlen(chaine_sauvegarde) + 3)
 5457:                         * sizeof(unsigned char));
 5458: 
 5459:                 if (chaine == NULL)
 5460:                 {
 5461:                     (*s_etat_processus).erreur_systeme =
 5462:                             d_es_allocation_memoire;
 5463:                     return(NULL);
 5464:                 }
 5465: 
 5466:                 strcpy(chaine, chaine_sauvegarde);
 5467:                 free(chaine_sauvegarde);
 5468:                 strcat(chaine, " ]");
 5469:             }
 5470:         }
 5471:         else
 5472:         {
 5473:             // Type non exportable
 5474: 
 5475:             (*s_etat_processus).erreur_execution = d_ex_erreur_format_fichier;
 5476:             free(chaine);
 5477: 
 5478:             return(NULL);
 5479:         }
 5480:     }
 5481: 
 5482:     (*recursivite)--;
 5483: 
 5484:     return(chaine);
 5485: }
 5486: 
 5487: 
 5488: /*
 5489: ================================================================================
 5490:   Routines qui transforment un nombre entier, réel ou complexe en chaîne de
 5491:   caractères suivant le format courant
 5492: ================================================================================
 5493:   Entrées : pointeur générique sur la donnée numérique à convertir,
 5494:   type de l'entité (I, R ou C).
 5495: --------------------------------------------------------------------------------
 5496:   Sorties : chaîne de caractères allouée dans la routine
 5497: --------------------------------------------------------------------------------
 5498:   Effets de bord : néant
 5499: ================================================================================
 5500: */
 5501: 
 5502: /*
 5503: --------------------------------------------------------------------------------
 5504:   Formatage des complexes, réels et entiers
 5505: --------------------------------------------------------------------------------
 5506: */
 5507: 
 5508: unsigned char *
 5509: formateur_fichier_nombre(struct_processus *s_etat_processus,
 5510:         void *valeur_numerique, unsigned char type,
 5511:         long longueur, long longueur_champ, unsigned char format)
 5512: {
 5513:     unsigned char               *chaine;
 5514:     unsigned char               *construction_chaine;
 5515:     unsigned char               *sauvegarde;
 5516:     unsigned char               *tampon;
 5517: 
 5518:     chaine = NULL;
 5519: 
 5520:     switch(type)
 5521:     {
 5522:         case 'C' :
 5523:         {
 5524:             construction_chaine = (unsigned char *) malloc(
 5525:                     2 * sizeof(unsigned char));
 5526: 
 5527:             if (construction_chaine == NULL)
 5528:             {
 5529:                 (*s_etat_processus).erreur_systeme =
 5530:                         d_es_allocation_memoire;
 5531:                 return(NULL);
 5532:             }
 5533: 
 5534:             strcpy(construction_chaine, "(");
 5535: 
 5536:             tampon = formateur_fichier_reel(s_etat_processus,
 5537:                     (void *) &((*((struct_complexe16 *)
 5538:                     valeur_numerique)).partie_reelle), 'R',
 5539:                     longueur, longueur_champ, format);
 5540: 
 5541:             if (tampon == NULL)
 5542:             {
 5543:                 (*s_etat_processus).erreur_systeme =
 5544:                         d_es_allocation_memoire;
 5545:                 return(NULL);
 5546:             }
 5547: 
 5548:             sauvegarde = construction_chaine;
 5549: 
 5550:             construction_chaine = (unsigned char *) malloc(
 5551:                     (strlen(sauvegarde) + strlen(tampon) + 2)
 5552:                     * sizeof(unsigned char));
 5553: 
 5554:             if (construction_chaine == NULL)
 5555:             {
 5556:                 (*s_etat_processus).erreur_systeme =
 5557:                         d_es_allocation_memoire;
 5558:                 return(NULL);
 5559:             }
 5560: 
 5561:             strcpy(construction_chaine, sauvegarde);
 5562:             free(sauvegarde);
 5563:             strcat(construction_chaine, tampon);
 5564:             free(tampon);
 5565: 
 5566:             strcat(construction_chaine, ",");
 5567: 
 5568:             tampon = formateur_fichier_reel(s_etat_processus,
 5569:                     (void *) &((*((struct_complexe16 *)
 5570:                     valeur_numerique)).partie_imaginaire), 'R',
 5571:                     longueur, longueur_champ, format);
 5572: 
 5573:             if (tampon == NULL)
 5574:             {
 5575:                 (*s_etat_processus).erreur_systeme =
 5576:                         d_es_allocation_memoire;
 5577:                 return(NULL);
 5578:             }
 5579: 
 5580:             sauvegarde = construction_chaine;
 5581: 
 5582:             construction_chaine = (unsigned char *) malloc(
 5583:                     (strlen(sauvegarde) + strlen(tampon) + 2)
 5584:                     * sizeof(unsigned char));
 5585: 
 5586:             if (construction_chaine == NULL)
 5587:             {
 5588:                 (*s_etat_processus).erreur_systeme =
 5589:                         d_es_allocation_memoire;
 5590:                 return(NULL);
 5591:             }
 5592: 
 5593:             strcpy(construction_chaine, sauvegarde);
 5594:             free(sauvegarde);
 5595:             strcat(construction_chaine, tampon);
 5596:             free(tampon);
 5597:             strcat(construction_chaine, ")");
 5598: 
 5599:             chaine = construction_chaine;
 5600: 
 5601:             break;
 5602:         }
 5603: 
 5604:         case 'R' :
 5605:         {
 5606:             chaine = formateur_fichier_reel(s_etat_processus,
 5607:                     valeur_numerique, 'R', longueur, longueur_champ,
 5608:                     format);
 5609: 
 5610:             if (chaine == NULL)
 5611:             {
 5612:                 (*s_etat_processus).erreur_systeme =
 5613:                         d_es_allocation_memoire;
 5614:                 return(NULL);
 5615:             }
 5616: 
 5617:             break;
 5618:         }
 5619: 
 5620:         default :
 5621:         case 'I' :
 5622:         {
 5623:             chaine = formateur_fichier_reel(s_etat_processus,
 5624:                     valeur_numerique, 'I', longueur, longueur_champ,
 5625:                     format);
 5626: 
 5627:             if (chaine == NULL)
 5628:             {
 5629:                 (*s_etat_processus).erreur_systeme =
 5630:                         d_es_allocation_memoire;
 5631:                 return(NULL);
 5632:             }
 5633: 
 5634:             break;
 5635:         }
 5636:     }
 5637: 
 5638:     return(chaine);
 5639: }
 5640: 
 5641: 
 5642: /*
 5643: --------------------------------------------------------------------------------
 5644:   Formateur des réels et entiers
 5645: --------------------------------------------------------------------------------
 5646: */
 5647: 
 5648: unsigned char *
 5649: formateur_fichier_reel(struct_processus *s_etat_processus,
 5650:         void *valeur_numerique, unsigned char type,
 5651:         long longueur, long longueur_champ,
 5652:         unsigned char format_sortie)
 5653: {
 5654:     real8                   mantisse;
 5655:     real8                   tampon_reel;
 5656: 
 5657:     integer8                tampon_entier;
 5658: 
 5659:     long                    correction;
 5660:     long                    exposant;
 5661:     long                    longueur_utile;
 5662:     long                    longueur_utile_limite;
 5663: 
 5664:     unsigned char           *chaine;
 5665:     unsigned char           format[16 + 1];
 5666:     unsigned char           mode[3 + 1];
 5667:     unsigned char           tampon[16 + 1];
 5668: 
 5669:     unsigned long           i;
 5670: 
 5671:     chaine = (unsigned char *) malloc((32 + 1) * sizeof(unsigned char));
 5672: 
 5673:     if (chaine == NULL)
 5674:     {
 5675:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5676:         return(NULL);
 5677:     }
 5678: 
 5679:     if (type == 'R')
 5680:     {
 5681:         tampon_reel = *((real8 *) valeur_numerique);
 5682: 
 5683:         if (tampon_reel > ((real8) 0))
 5684:         {
 5685:             exposant = (long) floor(log10(tampon_reel));
 5686:         }
 5687:         else if (tampon_reel < ((real8) 0))
 5688:         {
 5689:             exposant = (long) floor(log10(-tampon_reel));
 5690:         }
 5691:         else
 5692:         {
 5693:             exposant = 0;
 5694:         }
 5695: 
 5696:         mantisse = (*((real8 *) valeur_numerique)) / pow(10, exposant);
 5697:     }
 5698:     else
 5699:     {
 5700:         tampon_entier = *((integer8 *) valeur_numerique);
 5701: 
 5702:         if (tampon_entier > ((integer8) 0))
 5703:         {
 5704:             exposant = (long) floor(log10(tampon_entier));
 5705:         }
 5706:         else if (tampon_entier < ((integer8) 0))
 5707:         {
 5708:             exposant = (long) floor(log10(-tampon_entier));
 5709:         }
 5710:         else
 5711:         {
 5712:             exposant = 0;
 5713:         }
 5714: 
 5715:         mantisse = (*((integer8 *) valeur_numerique)) / pow(10, exposant);
 5716:     }
 5717: 
 5718:     longueur_utile = longueur;
 5719:     longueur_utile_limite = 15;
 5720: 
 5721:     if (longueur_utile > longueur_utile_limite)
 5722:     {
 5723:         longueur_utile = longueur_utile_limite;
 5724:     }
 5725: 
 5726:     if (format_sortie == 'S')
 5727:     {
 5728:         strcpy(mode, "STD");
 5729:     }
 5730:     else if (format_sortie == 'C')
 5731:     {
 5732:         strcpy(mode, "SCI");
 5733:     }
 5734:     else if (format_sortie == 'F')
 5735:     {
 5736:         strcpy(mode, "FIX");
 5737:     }
 5738:     else
 5739:     {
 5740:         strcpy(mode, "ENG");
 5741:     }
 5742: 
 5743:     if ((strcmp(mode, "SCI") == 0) ||
 5744:             ((strcmp(mode, "STD") == 0) && ((exposant >
 5745:             longueur_utile_limite) ||
 5746:             (exposant < -longueur_utile_limite))) ||
 5747:             ((strcmp(mode, "FIX") == 0) &&
 5748:             ((exposant >= longueur_utile_limite) ||
 5749:             (exposant < -longueur_utile))))
 5750:     {
 5751:         chaine[0] = 0;
 5752:         format[0] = 0;
 5753: 
 5754:         if (strcmp(mode, "STD") == 0)
 5755:         {
 5756:             longueur_utile = longueur_utile_limite - 1;
 5757:         }
 5758: 
 5759:         sprintf(format, "%%.%luf", longueur_utile);
 5760:             
 5761:         sprintf(tampon, format, mantisse);
 5762:         strcpy(chaine, tampon);
 5763:         strcat(chaine, "E");
 5764:         sprintf(tampon, "%ld", exposant);
 5765:         strcat(chaine, tampon);
 5766:     }
 5767:     else if (strcmp(mode, "FIX") == 0)
 5768:     {
 5769:         chaine[0] = 0;
 5770:         format[0] = 0;
 5771: 
 5772:         if (longueur_utile + exposant >= longueur_utile_limite)
 5773:         {
 5774:             longueur_utile = longueur_utile_limite - (exposant + 1);
 5775:         }
 5776: 
 5777:         sprintf(format, "%%.%luf", longueur_utile);
 5778: 
 5779:         sprintf(tampon, format, (mantisse * pow(10, exposant)));
 5780:         strcpy(chaine, tampon);
 5781:     }
 5782:     else if (strcmp(mode, "ENG") == 0)
 5783:     {
 5784:         chaine[0] = 0;
 5785:         format[0] = 0;
 5786: 
 5787:         correction = labs(exposant) % 3;
 5788: 
 5789:         if (exposant < 0)
 5790:         {
 5791:             if (correction == 0)
 5792:             {
 5793:                 correction = 3;
 5794:             }
 5795: 
 5796:             correction =  3 - correction;
 5797:         }
 5798: 
 5799:         longueur_utile -= correction;
 5800:         sprintf(format, "%%.%luf", longueur_utile);
 5801: 
 5802:         sprintf(tampon, format, (mantisse * pow(10, correction)));
 5803:         strcpy(chaine, tampon);
 5804:         strcat(chaine, "E");
 5805:         sprintf(tampon, "%ld", (exposant - correction));
 5806:         strcat(chaine, tampon);
 5807:     }
 5808:     else
 5809:     {
 5810:         if (type == 'I')
 5811:         {
 5812:             chaine[0] = 0;
 5813:             sprintf(tampon, "%lld", *((integer8 *) valeur_numerique));
 5814:         }
 5815:         else
 5816:         {
 5817:             chaine[0] = 0;
 5818:             format[0] = 0;
 5819: 
 5820:             if (exposant >= 0)
 5821:             {
 5822:                 sprintf(format, "%%.%luf", (longueur_utile_limite - exposant
 5823:                         - 1));
 5824:             }
 5825:             else
 5826:             {
 5827:                 sprintf(format, "%%.%luf", longueur_utile_limite);
 5828:             }
 5829: 
 5830:             sprintf(tampon, format, *((real8 *) valeur_numerique));
 5831: 
 5832:             i = strlen(tampon) - 1;
 5833:             while(tampon[i] == '0')
 5834:             {
 5835:                 tampon[i] = 0;
 5836:                 i--;
 5837:             }
 5838: 
 5839:             if (ds_imposition_separateur_decimal == d_faux)
 5840:             {
 5841:                 i = strlen(tampon) - 1;
 5842:                 if (tampon[i] == '.')
 5843:                 {
 5844:                     tampon[i] = 0;
 5845:                 }
 5846:             }
 5847:         }
 5848:         strcpy(chaine, tampon);
 5849:     }
 5850: 
 5851:     if (longueur_champ >= 0)
 5852:     {
 5853:         if (strlen(chaine) > (size_t) longueur_champ)
 5854:         {
 5855:             for(i = 0; i < (unsigned long) longueur_champ; i++)
 5856:             {
 5857:                 chaine[i] = '*';
 5858:             }
 5859: 
 5860:             chaine[i] = d_code_fin_chaine;
 5861:         }
 5862:     }
 5863: 
 5864:     return(chaine);
 5865: }
 5866: 
 5867: 
 5868: /*
 5869: --------------------------------------------------------------------------------
 5870:   Mêmes fonctions mais pour les fichiers binaires
 5871: --------------------------------------------------------------------------------
 5872: */
 5873: 
 5874: unsigned char *
 5875: formateur_fichier_binaire_nombre(struct_processus *s_etat_processus,
 5876:         void *valeur_numerique, unsigned char type, long longueur,
 5877:         long *longueur_conversion)
 5878: {
 5879:     unsigned char               *chaine;
 5880: 
 5881:     switch(type)
 5882:     {
 5883:         default :
 5884:         case 'I' :
 5885:         {
 5886:             switch(longueur)
 5887:             {
 5888:                 case 1:
 5889:                 {
 5890:                     if ((*((integer8 *) valeur_numerique)) !=
 5891:                             ((integer1) (*((integer8 *) valeur_numerique))))
 5892:                     {
 5893:                         (*s_etat_processus).erreur_execution =
 5894:                                 d_ex_representation;
 5895:                         return(NULL);
 5896:                     }
 5897: 
 5898:                     if ((chaine = malloc(2 * sizeof(unsigned char))) == NULL)
 5899:                     {
 5900:                         (*s_etat_processus).erreur_systeme =
 5901:                                 d_es_allocation_memoire;
 5902:                         return(NULL);
 5903:                     }
 5904: 
 5905:                     (*longueur_conversion) = 2;
 5906:                     chaine[0] = 0x10;
 5907:                     chaine[1] = (*((integer8 *) valeur_numerique)) & 0xFF;
 5908:                     break;
 5909:                 }
 5910: 
 5911:                 case 2:
 5912:                 {
 5913:                     if ((*((integer8 *) valeur_numerique)) !=
 5914:                             ((integer2) (*((integer8 *) valeur_numerique))))
 5915:                     {
 5916:                         (*s_etat_processus).erreur_execution =
 5917:                                 d_ex_representation;
 5918:                         return(NULL);
 5919:                     }
 5920: 
 5921:                     if ((chaine = malloc(3 * sizeof(unsigned char))) == NULL)
 5922:                     {
 5923:                         (*s_etat_processus).erreur_systeme =
 5924:                                 d_es_allocation_memoire;
 5925:                         return(NULL);
 5926:                     }
 5927: 
 5928:                     (*longueur_conversion) = 3;
 5929:                     chaine[0] = 0x11;
 5930:                     chaine[1] = ((*((integer8 *) valeur_numerique)) >> 8)
 5931:                             & 0xFF;
 5932:                     chaine[2] = (*((integer8 *) valeur_numerique)) & 0xFF;
 5933:                     break;
 5934:                 }
 5935: 
 5936:                 case 4:
 5937:                 {
 5938:                     if ((*((integer8 *) valeur_numerique)) !=
 5939:                             ((integer2) (*((integer8 *) valeur_numerique))))
 5940:                     {
 5941:                         (*s_etat_processus).erreur_execution =
 5942:                                 d_ex_representation;
 5943:                         return(NULL);
 5944:                     }
 5945: 
 5946:                     if ((chaine = malloc(5 * sizeof(unsigned char))) == NULL)
 5947:                     {
 5948:                         (*s_etat_processus).erreur_systeme =
 5949:                                 d_es_allocation_memoire;
 5950:                         return(NULL);
 5951:                     }
 5952: 
 5953:                     (*longueur_conversion) = 5;
 5954:                     chaine[0] = 0x12;
 5955:                     chaine[1] = ((*((integer8 *) valeur_numerique)) >> 24)
 5956:                             & 0xFF;
 5957:                     chaine[2] = ((*((integer8 *) valeur_numerique)) >> 16)
 5958:                             & 0xFF;
 5959:                     chaine[3] = ((*((integer8 *) valeur_numerique)) >> 8)
 5960:                             & 0xFF;
 5961:                     chaine[4] = (*((integer8 *) valeur_numerique)) & 0xFF;
 5962:                     break;
 5963:                 }
 5964: 
 5965:                 case 8:
 5966:                 {
 5967:                     if ((chaine = malloc(9 * sizeof(unsigned char))) == NULL)
 5968:                     {
 5969:                         (*s_etat_processus).erreur_systeme =
 5970:                                 d_es_allocation_memoire;
 5971:                         return(NULL);
 5972:                     }
 5973: 
 5974:                     (*longueur_conversion) = 9;
 5975:                     chaine[0] = 0x13;
 5976:                     chaine[1] = ((*((integer8 *) valeur_numerique)) >> 56)
 5977:                             & 0xFF;
 5978:                     chaine[2] = ((*((integer8 *) valeur_numerique)) >> 48)
 5979:                             & 0xFF;
 5980:                     chaine[3] = ((*((integer8 *) valeur_numerique)) >> 40)
 5981:                             & 0xFF;
 5982:                     chaine[4] = ((*((integer8 *) valeur_numerique)) >> 32)
 5983:                             & 0xFF;
 5984:                     chaine[5] = ((*((integer8 *) valeur_numerique)) >> 24)
 5985:                             & 0xFF;
 5986:                     chaine[6] = ((*((integer8 *) valeur_numerique)) >> 16)
 5987:                             & 0xFF;
 5988:                     chaine[7] = ((*((integer8 *) valeur_numerique)) >> 8)
 5989:                             & 0xFF;
 5990:                     chaine[8] = (*((integer8 *) valeur_numerique)) & 0xFF;
 5991:                     break;
 5992:                 }
 5993: 
 5994:                 default :
 5995:                 {
 5996:                     (*s_etat_processus).erreur_execution =
 5997:                             d_ex_erreur_format_fichier;
 5998:                     return(NULL);
 5999:                 }
 6000:             }
 6001: 
 6002:             break;
 6003:         }
 6004: 
 6005:         case 'R' :
 6006:         {
 6007:             switch(longueur)
 6008:             {
 6009:                 case 4:
 6010:                 {
 6011:                     double          vinf;
 6012:                     double          vsup;
 6013: 
 6014:                     union
 6015:                     {
 6016:                         real4       r4;
 6017:                         integer4    i4;
 6018:                     }               eq4;
 6019: 
 6020:                     if ((*((real8 *) valeur_numerique)) > 0)
 6021:                     {
 6022:                         vinf = nextafter((*((real8 *) valeur_numerique)), 0);
 6023:                         vsup = nextafter((*((real8 *) valeur_numerique)),
 6024:                                 (*((real8 *) valeur_numerique)) * 2);
 6025:                     }
 6026:                     else
 6027:                     {
 6028:                         vinf = nextafter((*((real8 *) valeur_numerique)),
 6029:                                 (*((real8 *) valeur_numerique)) * 2);
 6030:                         vsup = nextafter((*((real8 *) valeur_numerique)), 0);
 6031:                     }
 6032: 
 6033:                     if (!((vinf <= ((real4) (*((real8 *) valeur_numerique)))) &&
 6034:                             ((real4) ((*((real8 *) valeur_numerique)))
 6035:                             <= vsup)))
 6036:                     {
 6037:                         (*s_etat_processus).erreur_execution =
 6038:                                 d_ex_representation;
 6039:                         return(NULL);
 6040:                     }
 6041: 
 6042:                     if ((chaine = malloc(5 * sizeof(unsigned char))) == NULL)
 6043:                     {
 6044:                         (*s_etat_processus).erreur_systeme =
 6045:                                 d_es_allocation_memoire;
 6046:                         return(NULL);
 6047:                     }
 6048: 
 6049:                     eq4.r4 = (real4) (*((real8 *) valeur_numerique));
 6050:                     (*longueur_conversion) = 5;
 6051:                     chaine[0] = 0x12;
 6052:                     chaine[1] = (eq4.i4 >> 24) & 0xFF;
 6053:                     chaine[2] = (eq4.i4 >> 16) & 0xFF;
 6054:                     chaine[3] = (eq4.i4 >> 8) & 0xFF;
 6055:                     chaine[4] = eq4.i4 & 0xFF;
 6056:                     break;
 6057:                 }
 6058: 
 6059:                 case 8:
 6060:                 {
 6061:                     union
 6062:                     {
 6063:                         real8       r8;
 6064:                         integer8    i8;
 6065:                     }               eq8;
 6066: 
 6067:                     if ((chaine = malloc(9 * sizeof(unsigned char))) == NULL)
 6068:                     {
 6069:                         (*s_etat_processus).erreur_systeme =
 6070:                                 d_es_allocation_memoire;
 6071:                         return(NULL);
 6072:                     }
 6073: 
 6074:                     eq8.r8 = (*((real8 *) valeur_numerique));
 6075: 
 6076:                     (*longueur_conversion) = 9;
 6077:                     chaine[0] = 0x13;
 6078:                     chaine[1] = (eq8.i8 >> 56) & 0xFF;
 6079:                     chaine[2] = (eq8.i8 >> 48) & 0xFF;
 6080:                     chaine[3] = (eq8.i8 >> 40) & 0xFF;
 6081:                     chaine[4] = (eq8.i8 >> 32) & 0xFF;
 6082:                     chaine[5] = (eq8.i8 >> 24) & 0xFF;
 6083:                     chaine[6] = (eq8.i8 >> 16) & 0xFF;
 6084:                     chaine[7] = (eq8.i8 >> 8) & 0xFF;
 6085:                     chaine[8] = eq8.i8 & 0xFF;
 6086:                     break;
 6087:                 }
 6088: 
 6089:                 default :
 6090:                 {
 6091:                     (*s_etat_processus).erreur_execution =
 6092:                             d_ex_erreur_format_fichier;
 6093:                     return(NULL);
 6094:                 }
 6095:             }
 6096: 
 6097:             break;
 6098:         }
 6099: 
 6100:         case 'C' :
 6101:         {
 6102:             switch(longueur)
 6103:             {
 6104:                 case 8:
 6105:                 {
 6106:                     unsigned char       *partie_reelle;
 6107:                     unsigned char       *partie_imaginaire;
 6108: 
 6109:                     long                limag;
 6110:                     long                lreel;
 6111: 
 6112:                     if ((partie_reelle = formateur_fichier_binaire_nombre(
 6113:                             s_etat_processus, &((*((complex16 *)
 6114:                             valeur_numerique)).partie_reelle), 'R', 4, &lreel))
 6115:                             == NULL)
 6116:                     {
 6117:                         return(NULL);
 6118:                     }
 6119: 
 6120:                     if ((partie_imaginaire = formateur_fichier_binaire_nombre(
 6121:                             s_etat_processus, &((*((complex16 *)
 6122:                             valeur_numerique)).partie_imaginaire), 'R', 4,
 6123:                             &limag)) == NULL)
 6124:                     {
 6125:                         free(partie_reelle);
 6126:                         return(NULL);
 6127:                     }
 6128: 
 6129:                     if ((chaine = malloc((lreel + limag - 1) *
 6130:                             sizeof(unsigned char))) == NULL)
 6131:                     {
 6132:                         free(partie_reelle);
 6133:                         free(partie_imaginaire);
 6134: 
 6135:                         (*s_etat_processus).erreur_systeme =
 6136:                                 d_es_allocation_memoire;
 6137:                         return(NULL);
 6138:                     }
 6139: 
 6140:                     chaine[0] = 0x18;
 6141:                     memcpy(chaine + 1, partie_reelle + 1, lreel - 1);
 6142:                     memcpy(chaine + lreel, partie_imaginaire + 1, limag - 1);
 6143:                     (*longueur_conversion) = lreel + limag - 1;
 6144: 
 6145:                     free(partie_reelle);
 6146:                     free(partie_imaginaire);
 6147:                     break;
 6148:                 }
 6149: 
 6150:                 case 16:
 6151:                 {
 6152:                     unsigned char       *partie_reelle;
 6153:                     unsigned char       *partie_imaginaire;
 6154: 
 6155:                     long                limag;
 6156:                     long                lreel;
 6157: 
 6158:                     if ((partie_reelle = formateur_fichier_binaire_nombre(
 6159:                             s_etat_processus, &((*((complex16 *)
 6160:                             valeur_numerique)).partie_reelle), 'R', 8, &lreel))
 6161:                             == NULL)
 6162:                     {
 6163:                         return(NULL);
 6164:                     }
 6165: 
 6166:                     if ((partie_imaginaire = formateur_fichier_binaire_nombre(
 6167:                             s_etat_processus, &((*((complex16 *)
 6168:                             valeur_numerique)).partie_imaginaire), 'R', 8,
 6169:                             &limag)) == NULL)
 6170:                     {
 6171:                         free(partie_reelle);
 6172:                         return(NULL);
 6173:                     }
 6174: 
 6175:                     if ((chaine = malloc((lreel + limag - 1) *
 6176:                             sizeof(unsigned char))) == NULL)
 6177:                     {
 6178:                         free(partie_reelle);
 6179:                         free(partie_imaginaire);
 6180: 
 6181:                         (*s_etat_processus).erreur_systeme =
 6182:                                 d_es_allocation_memoire;
 6183:                         return(NULL);
 6184:                     }
 6185: 
 6186:                     chaine[0] = 0x19;
 6187:                     memcpy(chaine + 1, partie_reelle + 1, lreel - 1);
 6188:                     memcpy(chaine + lreel, partie_imaginaire + 1, limag - 1);
 6189:                     (*longueur_conversion) = lreel + limag - 1;
 6190: 
 6191:                     free(partie_reelle);
 6192:                     free(partie_imaginaire);
 6193:                     break;
 6194:                 }
 6195: 
 6196:                 default :
 6197:                 {
 6198:                     (*s_etat_processus).erreur_execution =
 6199:                             d_ex_erreur_format_fichier;
 6200:                     return(NULL);
 6201:                 }
 6202:             }
 6203: 
 6204:             break;
 6205:         }
 6206:     }
 6207: 
 6208:     return(chaine);
 6209: }

CVSweb interface <joel.bertrand@systella.fr>