File:  [local] / rpl / src / formateur_fichiers.c
Revision 1.4: download - view: text, annotated - select for diffs - revision graph
Thu Mar 4 10:17:48 2010 UTC (14 years, 2 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
En route pour la version 4.0.12 !

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.0.12
    4:   Copyright (C) 1989-2010 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'
   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:             chaine = (unsigned char *) malloc((strlen((unsigned char *)
 1180:                     ((*s_objet).objet)) + 1) * sizeof(unsigned char));
 1181: 
 1182:             if (chaine == NULL)
 1183:             {
 1184:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1185:                 return(NULL);
 1186:             }
 1187: 
 1188:             strcpy(chaine, (unsigned char *) ((*s_objet).objet));
 1189:         }
 1190:         else if ((*s_objet).type == CPL)
 1191:         {
 1192: 
 1193: /*
 1194: --------------------------------------------------------------------------------
 1195:   Complexe
 1196: --------------------------------------------------------------------------------
 1197: */
 1198: 
 1199:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 1200:                     (format_sortie != 'I') && (format_sortie != 'E'))
 1201:             {
 1202:                 (*s_etat_processus).erreur_execution =
 1203:                         d_ex_erreur_format_fichier;
 1204:                 return(NULL);
 1205:             }
 1206: 
 1207:             if ((chaine_formatee = formateur_fichier_nombre(s_etat_processus,
 1208:                     (void *) ((struct_complexe16 *) ((*s_objet).objet)), 'C',
 1209:                     longueur, longueur_champ, format_sortie)) == NULL)
 1210:             {
 1211:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1212:                 return(NULL);
 1213:             }
 1214: 
 1215:             chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 1216:                     + 1) * sizeof(unsigned char));
 1217: 
 1218:             if (chaine == NULL)
 1219:             {
 1220:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1221:                 return(NULL);
 1222:             }
 1223: 
 1224:             strcpy(chaine, chaine_formatee);
 1225:             free(chaine_formatee);
 1226:         }
 1227:         else if ((*s_objet).type == RPN)
 1228:         {
 1229: 
 1230: /*
 1231: --------------------------------------------------------------------------------
 1232:   Définition
 1233: --------------------------------------------------------------------------------
 1234: */
 1235: 
 1236:             l_element_courant = (struct_liste_chainee *) ((*s_objet).objet);
 1237:             chaine_sauvegarde = chaine;
 1238: 
 1239:             while(l_element_courant != NULL)
 1240:             {
 1241:                 if ((chaine_formatee = formateur_fichier(s_etat_processus,
 1242:                         (*l_element_courant).donnee, s_format,
 1243:                         longueur, longueur_champ, format_sortie, type,
 1244:                         longueur_effective, recursivite)) == NULL)
 1245:                 {
 1246:                     return(NULL);
 1247:                 }
 1248: 
 1249:                 if ((*(*l_element_courant).donnee).type == CHN)
 1250:                 {
 1251:                     chaine_tampon = chaine_formatee;
 1252: 
 1253:                     if ((chaine_formatee = (unsigned char *) malloc((strlen(
 1254:                             chaine_tampon) + 3) * sizeof(unsigned char)))
 1255:                             == NULL)
 1256:                     {
 1257:                         (*s_etat_processus).erreur_systeme =
 1258:                                 d_es_allocation_memoire;
 1259:                         return(NULL);
 1260:                     }
 1261: 
 1262:                     sprintf(chaine_formatee, "\"%s\"", chaine_tampon);
 1263:                     free(chaine_tampon);
 1264:                 }
 1265: 
 1266:                 l_element_courant = (*l_element_courant).suivant;
 1267: 
 1268:                 if (chaine != NULL)
 1269:                 {
 1270:                     chaine_sauvegarde = chaine;
 1271: 
 1272:                     if ((chaine = (unsigned char *) malloc((strlen(
 1273:                             chaine_sauvegarde) + strlen(chaine_formatee) + 2) *
 1274:                             sizeof(unsigned char))) == NULL)
 1275:                     {
 1276:                         (*s_etat_processus).erreur_systeme =
 1277:                                 d_es_allocation_memoire;
 1278:                         return(NULL);
 1279:                     }
 1280: 
 1281:                     strcpy(chaine, chaine_sauvegarde);
 1282:                     free(chaine_sauvegarde);
 1283:                     strcat(chaine, " ");
 1284:                     strcat(chaine, chaine_formatee);
 1285:                     free(chaine_formatee);
 1286:                 }
 1287:                 else
 1288:                 {
 1289:                     chaine = chaine_formatee;
 1290:                 }
 1291:             }
 1292: 
 1293:             chaine_sauvegarde = chaine;
 1294:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 1) *
 1295:                     sizeof(unsigned char));
 1296: 
 1297:             if (chaine == NULL)
 1298:             {
 1299:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1300:                 free(chaine_sauvegarde);
 1301:                 return(NULL);
 1302:             }
 1303: 
 1304:             chaine_sauvegarde[strlen(chaine_sauvegarde)] = d_code_fin_chaine;
 1305:             strcpy(chaine, chaine_sauvegarde);
 1306:             free(chaine_sauvegarde);
 1307:         }
 1308:         else if ((*s_objet).type == INT)
 1309:         {
 1310: 
 1311: /*
 1312: --------------------------------------------------------------------------------
 1313:   Entier
 1314: --------------------------------------------------------------------------------
 1315: */
 1316: 
 1317:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 1318:                     (format_sortie != 'I') && (format_sortie != 'E'))
 1319:             {
 1320:                 (*s_etat_processus).erreur_execution =
 1321:                         d_ex_erreur_format_fichier;
 1322:                 return(NULL);
 1323:             }
 1324: 
 1325:             if ((chaine_formatee = formateur_fichier_nombre(s_etat_processus,
 1326:                     (void *) ((integer8 *) ((*s_objet).objet)), 'I',
 1327:                     longueur, longueur_champ, format_sortie)) == NULL)
 1328:             {
 1329:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1330:                 return(NULL);
 1331:             }
 1332: 
 1333:             chaine = (unsigned char *) malloc((strlen(chaine_formatee) + 1)
 1334:                     * sizeof(unsigned char));
 1335: 
 1336:             if (chaine == NULL)
 1337:             {
 1338:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1339:                 return(NULL);
 1340:             }
 1341: 
 1342:             strcpy(chaine, chaine_formatee);
 1343:             free(chaine_formatee);
 1344:         }
 1345:         else if ((*s_objet).type == FCT)
 1346:         {
 1347: 
 1348: /*
 1349: --------------------------------------------------------------------------------
 1350:   Fonction
 1351: --------------------------------------------------------------------------------
 1352: */
 1353: 
 1354:             chaine = (unsigned char *) malloc((strlen((*((struct_fonction *)
 1355:                     ((*s_objet).objet))).nom_fonction) + 1) *
 1356:                     sizeof(unsigned char));
 1357: 
 1358:             if (chaine == NULL)
 1359:             {
 1360:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1361:                 return(NULL);
 1362:             }
 1363: 
 1364:             strcpy(chaine, (unsigned char *) (*((struct_fonction *)
 1365:                     ((*s_objet).objet))).nom_fonction);
 1366:         }
 1367:         else if ((*s_objet).type == LST)
 1368:         {
 1369: 
 1370: /*
 1371: --------------------------------------------------------------------------------
 1372:   Liste
 1373: --------------------------------------------------------------------------------
 1374: */
 1375: 
 1376:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 1377: 
 1378:             if (chaine == NULL)
 1379:             {
 1380:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1381:                 return(NULL);
 1382:             }
 1383: 
 1384:             strcpy(chaine, "{");
 1385: 
 1386:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 1387:             l_element_courant_format = (struct_liste_chainee *)
 1388:                     (*s_format).objet;
 1389:             nombre_elements = 0;
 1390: 
 1391:             while((l_element_courant != NULL) &&
 1392:                     (l_element_courant_format != NULL))
 1393:             {
 1394:                 if ((((*(*l_element_courant_format).donnee).type == LST)
 1395:                         && ((*(*l_element_courant).donnee).type == LST)) ||
 1396:                         (((*(*l_element_courant_format).donnee).type == TBL)
 1397:                         && ((*(*l_element_courant).donnee).type == TBL)))
 1398:                 {
 1399:                     chaine_sauvegarde = chaine;
 1400: 
 1401:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 1402:                             (*l_element_courant).donnee,
 1403:                             (*l_element_courant_format).donnee,
 1404:                             0, 0, ' ', 'F', longueur_effective, recursivite))
 1405:                             == NULL)
 1406:                     {
 1407:                         return(NULL);
 1408:                     }
 1409: 
 1410:                     chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 1411:                             + strlen(chaine_sauvegarde) + 2)
 1412:                             * sizeof(unsigned char));
 1413: 
 1414:                     if (chaine == NULL)
 1415:                     {
 1416:                         (*s_etat_processus).erreur_systeme =
 1417:                                 d_es_allocation_memoire;
 1418:                         return(NULL);
 1419:                     }
 1420: 
 1421:                     strcpy(chaine, chaine_sauvegarde);
 1422:                     free(chaine_sauvegarde);
 1423:                     strcat(chaine, " ");
 1424:                     strcat(chaine, chaine_formatee);
 1425:                     free(chaine_formatee);
 1426:                 }
 1427:                 else if ((*(*l_element_courant_format).donnee).type != CHN)
 1428:                 {
 1429:                     free(chaine);
 1430: 
 1431:                     (*s_etat_processus).erreur_execution =
 1432:                             d_ex_erreur_format_fichier;
 1433:                     return(NULL);
 1434:                 }
 1435:                 else
 1436:                 {
 1437:                     if ((format_chaine = conversion_majuscule((unsigned char *)
 1438:                             (*(*l_element_courant_format).donnee).objet))
 1439:                             == NULL)
 1440:                     {
 1441:                         (*s_etat_processus).erreur_systeme =
 1442:                                 d_es_allocation_memoire;
 1443:                         return(NULL);
 1444:                     }
 1445: 
 1446:                     format_degenere = d_faux;
 1447: 
 1448:                     if (strncmp("STANDARD*", format_chaine, 9) == 0)
 1449:                     {
 1450:                         format_sortie = 'S';
 1451:                         position_1 = 9;
 1452:                         format_degenere = d_vrai;
 1453:                     }
 1454:                     else if (strncmp("BINARY*", format_chaine, 7) == 0)
 1455:                     {
 1456:                         format_sortie = 'B';
 1457:                         position_1 = 7;
 1458:                     }
 1459:                     else if (strncmp("FIXED*", format_chaine, 6) == 0)
 1460:                     {
 1461:                         format_sortie = 'F';
 1462:                         position_1 = 6;
 1463:                     }
 1464:                     else if (strncmp("SCIENTIFIC*", format_chaine, 11) == 0)
 1465:                     {
 1466:                         format_sortie = 'I';
 1467:                         position_1 = 11;
 1468:                     }
 1469:                     else if (strncmp("ENGINEER*", format_chaine, 9) == 0)
 1470:                     {
 1471:                         format_sortie = 'E';
 1472:                         position_1 = 9;
 1473:                     }
 1474:                     else if (strncmp("CHARACTER*", format_chaine, 10) == 0)
 1475:                     {
 1476:                         format_sortie = 'C';
 1477:                         position_1 = 10;
 1478:                         format_degenere = d_vrai;
 1479:                     }
 1480:                     else
 1481:                     {
 1482:                         free(chaine);
 1483:                         free(format_chaine);
 1484: 
 1485:                         (*s_etat_processus).erreur_execution =
 1486:                                 d_ex_erreur_format_fichier;
 1487:                         return(NULL);
 1488:                     }
 1489: 
 1490:                     position_3 = strlen(format_chaine);
 1491:                     format_chaine[--position_3] = d_code_fin_chaine;
 1492: 
 1493:                     position_2 = position_1;
 1494: 
 1495:                     while(format_chaine[position_2] != '(')
 1496:                     {
 1497:                         if (format_chaine[position_2] == d_code_fin_chaine)
 1498:                         {
 1499:                             free(chaine);
 1500:                             free(format_chaine);
 1501: 
 1502:                             (*s_etat_processus).erreur_execution =
 1503:                                     d_ex_erreur_format_fichier;
 1504:                             return(NULL);
 1505:                         }
 1506: 
 1507:                         position_2++;
 1508:                     }
 1509: 
 1510:                     format_chaine[position_2++] = d_code_fin_chaine;
 1511: 
 1512:                     if (format_degenere == d_faux)
 1513:                     {
 1514:                         if (sscanf(&(format_chaine[position_1]), "%ld",
 1515:                                 &longueur) != 1)
 1516:                         {
 1517:                             free(chaine);
 1518:                             free(format_chaine);
 1519: 
 1520:                             (*s_etat_processus).erreur_execution =
 1521:                                     d_ex_erreur_format_fichier;
 1522:                             return(NULL);
 1523:                         }
 1524:                     }
 1525:                     else
 1526:                     {
 1527:                         longueur = -1;
 1528:                     }
 1529: 
 1530:                     if (strcmp(&(format_chaine[position_2]), "*") != 0)
 1531:                     {
 1532:                         if (sscanf(&(format_chaine[position_2]), "%ld",
 1533:                                 &longueur_champ) != 1)
 1534:                         {
 1535:                             free(chaine);
 1536:                             free(format_chaine);
 1537: 
 1538:                             (*s_etat_processus).erreur_execution =
 1539:                                     d_ex_erreur_format_fichier;
 1540:                             return(NULL);
 1541:                         }
 1542:                     }
 1543:                     else
 1544:                     {
 1545:                         longueur_champ = -1;
 1546:                     }
 1547: 
 1548:                     if ((longueur >= 0) && (longueur_champ >= 0) && (longueur >
 1549:                             longueur_champ))
 1550:                     {
 1551:                         free(chaine);
 1552:                         free(format_chaine);
 1553: 
 1554:                         (*s_etat_processus).erreur_execution =
 1555:                                 d_ex_erreur_format_fichier;
 1556:                         return(NULL);
 1557:                     }
 1558: 
 1559:                     free(format_chaine);
 1560:                 
 1561:                     chaine_sauvegarde = chaine;
 1562: 
 1563:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 1564:                             (*l_element_courant).donnee, s_format,
 1565:                             longueur, longueur_champ, format_sortie, type,
 1566:                             longueur_effective, recursivite)) == NULL)
 1567:                     {
 1568:                         return(NULL);
 1569:                     }
 1570: 
 1571:                     if ((*(*l_element_courant).donnee).type == CHN)
 1572:                     {
 1573:                         chaine = (unsigned char *)
 1574:                                 malloc((strlen(chaine_formatee)
 1575:                                 + strlen(chaine_sauvegarde) + 4)
 1576:                                 * sizeof(unsigned char));
 1577: 
 1578:                         if (chaine == NULL)
 1579:                         {
 1580:                             (*s_etat_processus).erreur_systeme =
 1581:                                     d_es_allocation_memoire;
 1582:                             return(NULL);
 1583:                         }
 1584: 
 1585:                         strcpy(chaine, chaine_sauvegarde);
 1586:                         free(chaine_sauvegarde);
 1587:                         strcat(chaine, " \"");
 1588:                         strcat(chaine, chaine_formatee);
 1589:                         free(chaine_formatee);
 1590:                         strcat(chaine, "\"");
 1591:                     }
 1592:                     else if ((*(*l_element_courant).donnee).type == NOM)
 1593:                     {
 1594:                         chaine = (unsigned char *)
 1595:                                 malloc((strlen(chaine_formatee)
 1596:                                 + strlen(chaine_sauvegarde) + 2)
 1597:                                 * sizeof(unsigned char));
 1598: 
 1599:                         if (chaine == NULL)
 1600:                         {
 1601:                             (*s_etat_processus).erreur_systeme =
 1602:                                     d_es_allocation_memoire;
 1603:                             return(NULL);
 1604:                         }
 1605: 
 1606:                         sprintf(chaine, "%s %s", chaine_sauvegarde,
 1607:                                 chaine_formatee);
 1608:                         free(chaine_formatee);
 1609:                     }
 1610:                     else
 1611:                     {
 1612:                         chaine = (unsigned char *)
 1613:                                 malloc((strlen(chaine_formatee)
 1614:                                 + strlen(chaine_sauvegarde) + 2)
 1615:                                 * sizeof(unsigned char));
 1616: 
 1617:                         if (chaine == NULL)
 1618:                         {
 1619:                             (*s_etat_processus).erreur_systeme =
 1620:                                     d_es_allocation_memoire;
 1621:                             return(NULL);
 1622:                         }
 1623: 
 1624:                         strcpy(chaine, chaine_sauvegarde);
 1625:                         free(chaine_sauvegarde);
 1626:                         strcat(chaine, " ");
 1627:                         strcat(chaine, chaine_formatee);
 1628:                         free(chaine_formatee);
 1629:                     }
 1630:                 }
 1631: 
 1632:                 nombre_elements++;
 1633:                 l_element_courant = (*l_element_courant).suivant;
 1634:                 l_element_courant_format = (*l_element_courant_format).suivant;
 1635:             }
 1636: 
 1637:             if ((l_element_courant != NULL) ||
 1638:                     (l_element_courant_format != NULL))
 1639:             {
 1640:                 free(chaine);
 1641: 
 1642:                 (*s_etat_processus).erreur_execution =
 1643:                         d_ex_erreur_format_fichier;
 1644:                 return(NULL);
 1645:             }
 1646: 
 1647:             chaine_sauvegarde = chaine;
 1648:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 3)
 1649:                     * sizeof(unsigned char));
 1650: 
 1651:             if (chaine == NULL)
 1652:             {
 1653:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1654:                 return(NULL);
 1655:             }
 1656: 
 1657:             strcpy(chaine, chaine_sauvegarde);
 1658:             free(chaine_sauvegarde);
 1659:             strcat(chaine, " }");
 1660:         }
 1661:         else if ((*s_objet).type == TBL)
 1662:         {
 1663: 
 1664: /*
 1665: --------------------------------------------------------------------------------
 1666:   Table
 1667: --------------------------------------------------------------------------------
 1668: */
 1669: 
 1670:             if ((*s_format).type != TBL)
 1671:             {
 1672:                 (*s_etat_processus).erreur_execution =
 1673:                         d_ex_erreur_format_fichier;
 1674:                 return(NULL);
 1675:             }
 1676: 
 1677:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 1678:             l_element_courant_format = (struct_liste_chainee *)
 1679:                     (*s_format).objet;
 1680: 
 1681:             if ((*((struct_tableau *) (*s_objet).objet)).nombre_elements !=
 1682:                     (*((struct_tableau *) (*s_format).objet)).nombre_elements)
 1683:             {
 1684:                 (*s_etat_processus).erreur_execution =
 1685:                         d_ex_erreur_format_fichier;
 1686:                 return(NULL);
 1687:             }
 1688: 
 1689:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 1690: 
 1691:             if (chaine == NULL)
 1692:             {
 1693:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1694:                 return(NULL);
 1695:             }
 1696: 
 1697:             strcpy(chaine, "<[");
 1698: 
 1699:             for(i = 0; i < (*((struct_tableau *) (*s_objet).objet))
 1700:                     .nombre_elements; i++)
 1701:             {
 1702:                 if ((((*(*((struct_tableau *) (*s_format).objet))
 1703:                         .elements[i]).type == LST) &&
 1704:                         ((*(*((struct_tableau *) (*s_objet).objet)).elements[i])
 1705:                         .type == LST)) ||
 1706:                         (((*(*((struct_tableau *) (*s_format).objet))
 1707:                         .elements[i]).type == TBL) &&
 1708:                         ((*(*((struct_tableau *) (*s_objet).objet)).elements[i])
 1709:                         .type == TAB)))
 1710:                 {
 1711:                     chaine_sauvegarde = chaine;
 1712: 
 1713:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 1714:                             (*l_element_courant).donnee,
 1715:                             (*l_element_courant_format).donnee,
 1716:                             0, 0, ' ', 'F', longueur_effective, recursivite))
 1717:                             == NULL)
 1718:                     {
 1719:                         return(NULL);
 1720:                     }
 1721: 
 1722:                     chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 1723:                             + strlen(chaine_sauvegarde) + 2)
 1724:                             * sizeof(unsigned char));
 1725: 
 1726:                     if (chaine == NULL)
 1727:                     {
 1728:                         (*s_etat_processus).erreur_systeme =
 1729:                                 d_es_allocation_memoire;
 1730:                         return(NULL);
 1731:                     }
 1732: 
 1733:                     strcpy(chaine, chaine_sauvegarde);
 1734:                     free(chaine_sauvegarde);
 1735:                     strcat(chaine, " ");
 1736:                     strcat(chaine, chaine_formatee);
 1737:                     free(chaine_formatee);
 1738:                 }
 1739:                 else if ((*(*((struct_tableau *) (*s_format).objet))
 1740:                         .elements[i]).type != CHN)
 1741:                 {
 1742:                     free(chaine);
 1743: 
 1744:                     (*s_etat_processus).erreur_execution =
 1745:                             d_ex_erreur_format_fichier;
 1746:                     return(NULL);
 1747:                 }
 1748:                 else
 1749:                 {
 1750:                     if ((format_chaine = conversion_majuscule((unsigned char *)
 1751:                             (*(*((struct_tableau *) (*s_format).objet))
 1752:                             .elements[i]).objet)) == NULL)
 1753:                     {
 1754:                         (*s_etat_processus).erreur_systeme =
 1755:                                 d_es_allocation_memoire;
 1756:                         return(NULL);
 1757:                     }
 1758: 
 1759:                     format_degenere = d_faux;
 1760: 
 1761:                     if (strncmp("STANDARD*", format_chaine, 9) == 0)
 1762:                     {
 1763:                         format_sortie = 'S';
 1764:                         position_1 = 9;
 1765:                         format_degenere = d_vrai;
 1766:                     }
 1767:                     else if (strncmp("BINARY*", format_chaine, 7) == 0)
 1768:                     {
 1769:                         format_sortie = 'B';
 1770:                         position_1 = 7;
 1771:                     }
 1772:                     else if (strncmp("FIXED*", format_chaine, 6) == 0)
 1773:                     {
 1774:                         format_sortie = 'F';
 1775:                         position_1 = 6;
 1776:                     }
 1777:                     else if (strncmp("SCIENTIFIC*", format_chaine, 11) == 0)
 1778:                     {
 1779:                         format_sortie = 'I';
 1780:                         position_1 = 11;
 1781:                     }
 1782:                     else if (strncmp("ENGINEER*", format_chaine, 9) == 0)
 1783:                     {
 1784:                         format_sortie = 'E';
 1785:                         position_1 = 9;
 1786:                     }
 1787:                     else if (strncmp("CHARACTER*", format_chaine, 10) == 0)
 1788:                     {
 1789:                         format_sortie = 'C';
 1790:                         position_1 = 10;
 1791:                         format_degenere = d_vrai;
 1792:                     }
 1793:                     else
 1794:                     {
 1795:                         free(chaine);
 1796:                         free(format_chaine);
 1797: 
 1798:                         (*s_etat_processus).erreur_execution =
 1799:                                 d_ex_erreur_format_fichier;
 1800:                         return(NULL);
 1801:                     }
 1802: 
 1803:                     position_3 = strlen(format_chaine);
 1804:                     format_chaine[--position_3] = d_code_fin_chaine;
 1805: 
 1806:                     position_2 = position_1;
 1807: 
 1808:                     while(format_chaine[position_2] != '(')
 1809:                     {
 1810:                         if (format_chaine[position_2] == d_code_fin_chaine)
 1811:                         {
 1812:                             free(chaine);
 1813:                             free(format_chaine);
 1814: 
 1815:                             (*s_etat_processus).erreur_execution =
 1816:                                     d_ex_erreur_format_fichier;
 1817:                             return(NULL);
 1818:                         }
 1819: 
 1820:                         position_2++;
 1821:                     }
 1822: 
 1823:                     format_chaine[position_2++] = d_code_fin_chaine;
 1824: 
 1825:                     if (format_degenere == d_faux)
 1826:                     {
 1827:                         if (sscanf(&(format_chaine[position_1]), "%ld",
 1828:                                 &longueur) != 1)
 1829:                         {
 1830:                             free(chaine);
 1831:                             free(format_chaine);
 1832: 
 1833:                             (*s_etat_processus).erreur_execution =
 1834:                                     d_ex_erreur_format_fichier;
 1835:                             return(NULL);
 1836:                         }
 1837:                     }
 1838:                     else
 1839:                     {
 1840:                         longueur = -1;
 1841:                     }
 1842: 
 1843:                     if (strcmp(&(format_chaine[position_2]), "*") != 0)
 1844:                     {
 1845:                         if (sscanf(&(format_chaine[position_2]), "%ld",
 1846:                                 &longueur_champ) != 1)
 1847:                         {
 1848:                             free(chaine);
 1849:                             free(format_chaine);
 1850: 
 1851:                             (*s_etat_processus).erreur_execution =
 1852:                                     d_ex_erreur_format_fichier;
 1853:                             return(NULL);
 1854:                         }
 1855:                     }
 1856:                     else
 1857:                     {
 1858:                         longueur_champ = -1;
 1859:                     }
 1860: 
 1861:                     if ((longueur >= 0) && (longueur_champ >= 0) && (longueur >
 1862:                             longueur_champ))
 1863:                     {
 1864:                         free(chaine);
 1865:                         free(format_chaine);
 1866: 
 1867:                         (*s_etat_processus).erreur_execution =
 1868:                                 d_ex_erreur_format_fichier;
 1869:                         return(NULL);
 1870:                     }
 1871: 
 1872:                     free(format_chaine);
 1873:                 
 1874:                     chaine_sauvegarde = chaine;
 1875: 
 1876:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 1877:                             (*((struct_tableau *) (*s_objet).objet))
 1878:                             .elements[i], s_format,
 1879:                             longueur, longueur_champ, format_sortie, type,
 1880:                             longueur_effective, recursivite)) == NULL)
 1881:                     {
 1882:                         return(NULL);
 1883:                     }
 1884: 
 1885:                     if ((*(*((struct_tableau *) (*s_objet).objet))
 1886:                             .elements[i]).type == CHN)
 1887:                     {
 1888:                         chaine = (unsigned char *)
 1889:                                 malloc((strlen(chaine_formatee)
 1890:                                 + strlen(chaine_sauvegarde) + 4)
 1891:                                 * sizeof(unsigned char));
 1892: 
 1893:                         if (chaine == NULL)
 1894:                         {
 1895:                             (*s_etat_processus).erreur_systeme =
 1896:                                     d_es_allocation_memoire;
 1897:                             return(NULL);
 1898:                         }
 1899: 
 1900:                         strcpy(chaine, chaine_sauvegarde);
 1901:                         free(chaine_sauvegarde);
 1902:                         strcat(chaine, " \"");
 1903:                         strcat(chaine, chaine_formatee);
 1904:                         free(chaine_formatee);
 1905:                         strcat(chaine, "\"");
 1906:                     }
 1907:                     else if ((*(*((struct_tableau *) (*s_objet).objet))
 1908:                             .elements[i]).type == NOM)
 1909:                     {
 1910:                         chaine = (unsigned char *)
 1911:                                 malloc((strlen(chaine_formatee)
 1912:                                 + strlen(chaine_sauvegarde) + 2)
 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:                         sprintf(chaine, "%s %s", chaine_sauvegarde,
 1923:                                 chaine_formatee);
 1924:                         free(chaine_formatee);
 1925:                     }
 1926:                     else
 1927:                     {
 1928:                         chaine = (unsigned char *)
 1929:                                 malloc((strlen(chaine_formatee)
 1930:                                 + strlen(chaine_sauvegarde) + 2)
 1931:                                 * sizeof(unsigned char));
 1932: 
 1933:                         if (chaine == NULL)
 1934:                         {
 1935:                             (*s_etat_processus).erreur_systeme =
 1936:                                     d_es_allocation_memoire;
 1937:                             return(NULL);
 1938:                         }
 1939: 
 1940:                         strcpy(chaine, chaine_sauvegarde);
 1941:                         free(chaine_sauvegarde);
 1942:                         strcat(chaine, " ");
 1943:                         strcat(chaine, chaine_formatee);
 1944:                         free(chaine_formatee);
 1945:                     }
 1946:                 }
 1947:             }
 1948: 
 1949:             chaine_sauvegarde = chaine;
 1950:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 4)
 1951:                     * sizeof(unsigned char));
 1952: 
 1953:             if (chaine == NULL)
 1954:             {
 1955:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1956:                 return(NULL);
 1957:             }
 1958: 
 1959:             strcpy(chaine, chaine_sauvegarde);
 1960:             free(chaine_sauvegarde);
 1961:             strcat(chaine, " ]>");
 1962:         }
 1963:         else if ((*s_objet).type == MCX)
 1964:         {
 1965: 
 1966: /*
 1967: --------------------------------------------------------------------------------
 1968:   Matrice complexe
 1969: --------------------------------------------------------------------------------
 1970: */
 1971: 
 1972:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 1973:                     (format_sortie != 'I') && (format_sortie != 'E'))
 1974:             {
 1975:                 (*s_etat_processus).erreur_execution =
 1976:                         d_ex_erreur_format_fichier;
 1977:                 return(NULL);
 1978:             }
 1979: 
 1980:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 1981:                     .nombre_lignes;
 1982:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 1983:                     .nombre_colonnes;
 1984: 
 1985:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 1986: 
 1987:             if (chaine != NULL)
 1988:             {
 1989:                 strcpy(chaine, "[[");
 1990: 
 1991:                 for(i = 0; i < nombre_lignes; i++)
 1992:                 {
 1993:                     for(j = 0; j < nombre_colonnes; j++)
 1994:                     {
 1995:                         if ((chaine_formatee =
 1996:                                 formateur_fichier_nombre(s_etat_processus,
 1997:                                 (void *) &(((struct_complexe16 **)
 1998:                                 ((*((struct_matrice *)
 1999:                                 ((*s_objet).objet))).tableau))[i][j]), 'C',
 2000:                                 longueur, longueur_champ, format_sortie))
 2001:                                 == NULL)
 2002:                         {
 2003:                             (*s_etat_processus).erreur_systeme =
 2004:                                     d_es_allocation_memoire;
 2005:                             return(NULL);
 2006:                         }
 2007: 
 2008:                         chaine_sauvegarde = chaine;
 2009:                         chaine = (unsigned char *) malloc(
 2010:                                 (strlen(chaine_sauvegarde) +
 2011:                                 strlen(chaine_formatee) + 2)
 2012:                                 * sizeof(unsigned char));
 2013: 
 2014:                         if (chaine == NULL)
 2015:                         {
 2016:                             (*s_etat_processus).erreur_systeme =
 2017:                                     d_es_allocation_memoire;
 2018:                             return(NULL);
 2019:                         }
 2020: 
 2021:                         strcpy(chaine, chaine_sauvegarde);
 2022:                         free(chaine_sauvegarde);
 2023:                         strcat(chaine, " ");
 2024:                         strcat(chaine, chaine_formatee);
 2025:                         free(chaine_formatee);
 2026:                     }
 2027: 
 2028:                     chaine_sauvegarde = chaine;
 2029:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2030:                     {
 2031:                         chaine = (unsigned char *) malloc(
 2032:                                 (strlen(chaine_sauvegarde) + 6)
 2033:                                 * sizeof(unsigned char));
 2034: 
 2035:                         if (chaine == NULL)
 2036:                         {
 2037:                             (*s_etat_processus).erreur_systeme =
 2038:                                     d_es_allocation_memoire;
 2039:                             return(NULL);
 2040:                         }
 2041: 
 2042:                         strcpy(chaine, chaine_sauvegarde);
 2043:                         free(chaine_sauvegarde);
 2044:                         strcat(chaine, " ]\n [");
 2045:                     }
 2046:                     else
 2047:                     {
 2048:                         chaine = (unsigned char *) malloc(
 2049:                                 (strlen(chaine_sauvegarde) + 4)
 2050:                                 * sizeof(unsigned char));
 2051: 
 2052:                         if (chaine == NULL)
 2053:                         {
 2054:                             (*s_etat_processus).erreur_systeme =
 2055:                                     d_es_allocation_memoire;
 2056:                             return(NULL);
 2057:                         }
 2058: 
 2059:                         strcpy(chaine, chaine_sauvegarde);
 2060:                         free(chaine_sauvegarde);
 2061:                         strcat(chaine, " ][");
 2062:                     }
 2063:                 }
 2064: 
 2065:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2066:                 {
 2067:                     chaine[strlen(chaine) - 3] = ']';
 2068:                     chaine[strlen(chaine) - 2] = 0;
 2069: 
 2070:                     chaine_sauvegarde = chaine;
 2071:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2072:                             + 1) * 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:                 }
 2084:                 else
 2085:                 {
 2086:                     chaine[strlen(chaine) - 2] = ']';
 2087:                     chaine[strlen(chaine) - 1] = 0;
 2088: 
 2089:                     chaine_sauvegarde = chaine;
 2090:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2091:                             + 2) * sizeof(unsigned char));
 2092: 
 2093:                     if (chaine == NULL)
 2094:                     {
 2095:                         (*s_etat_processus).erreur_systeme =
 2096:                                 d_es_allocation_memoire;
 2097:                         return(NULL);
 2098:                     }
 2099: 
 2100:                     strcpy(chaine, chaine_sauvegarde);
 2101:                     free(chaine_sauvegarde);
 2102:                     strcat(chaine, "]");
 2103:                 }
 2104:             }
 2105:         }
 2106:         else if ((*s_objet).type == MIN)
 2107:         {
 2108: 
 2109: /*
 2110: --------------------------------------------------------------------------------
 2111:   Matrice entière
 2112: --------------------------------------------------------------------------------
 2113: */
 2114: 
 2115:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2116:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2117:             {
 2118:                 (*s_etat_processus).erreur_execution =
 2119:                         d_ex_erreur_format_fichier;
 2120:                 return(NULL);
 2121:             }
 2122: 
 2123:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 2124:                     .nombre_lignes;
 2125:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 2126:                     .nombre_colonnes;
 2127: 
 2128:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 2129: 
 2130:             if (chaine != NULL)
 2131:             {
 2132:                 strcpy(chaine, "[[");
 2133: 
 2134:                 for(i = 0; i < nombre_lignes; i++)
 2135:                 {
 2136:                     for(j = 0; j < nombre_colonnes; j++)
 2137:                     {
 2138:                         if ((chaine_formatee =
 2139:                                 formateur_fichier_nombre(s_etat_processus,
 2140:                                 (void *) &(((integer8 **) ((*((struct_matrice *)
 2141:                                 ((*s_objet).objet))).tableau))[i][j]), 'I',
 2142:                                 longueur, longueur_champ, format_sortie))
 2143:                                 == NULL)
 2144:                         {
 2145:                             (*s_etat_processus).erreur_systeme =
 2146:                                     d_es_allocation_memoire;
 2147:                             return(NULL);
 2148:                         }
 2149: 
 2150:                         chaine_sauvegarde = chaine;
 2151:                         chaine = (unsigned char *) malloc(
 2152:                                 (strlen(chaine_sauvegarde) +
 2153:                                 strlen(chaine_formatee) + 2)
 2154:                                 * sizeof(unsigned char));
 2155: 
 2156:                         if (chaine == NULL)
 2157:                         {
 2158:                             (*s_etat_processus).erreur_systeme =
 2159:                                     d_es_allocation_memoire;
 2160:                             return(NULL);
 2161:                         }
 2162: 
 2163:                         strcpy(chaine, chaine_sauvegarde);
 2164:                         free(chaine_sauvegarde);
 2165:                         strcat(chaine, " ");
 2166:                         strcat(chaine, chaine_formatee);
 2167:                         free(chaine_formatee);
 2168:                     }
 2169: 
 2170:                     chaine_sauvegarde = chaine;
 2171:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2172:                     {
 2173:                         chaine = (unsigned char *) malloc(
 2174:                                 (strlen(chaine_sauvegarde) + 6)
 2175:                                 * sizeof(unsigned char));
 2176: 
 2177:                         if (chaine == NULL)
 2178:                         {
 2179:                             (*s_etat_processus).erreur_systeme =
 2180:                                     d_es_allocation_memoire;
 2181:                             return(NULL);
 2182:                         }
 2183: 
 2184:                         strcpy(chaine, chaine_sauvegarde);
 2185:                         free(chaine_sauvegarde);
 2186:                         strcat(chaine, " ]\n [");
 2187:                     }
 2188:                     else
 2189:                     {
 2190:                         chaine = (unsigned char *) malloc(
 2191:                                 (strlen(chaine_sauvegarde) + 4)
 2192:                                 * sizeof(unsigned char));
 2193: 
 2194:                         if (chaine == NULL)
 2195:                         {
 2196:                             (*s_etat_processus).erreur_systeme =
 2197:                                     d_es_allocation_memoire;
 2198:                             return(NULL);
 2199:                         }
 2200: 
 2201:                         strcpy(chaine, chaine_sauvegarde);
 2202:                         free(chaine_sauvegarde);
 2203:                         strcat(chaine, " ][");
 2204:                     }
 2205:                 }
 2206: 
 2207:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2208:                 {
 2209:                     chaine[strlen(chaine) - 3] = ']';
 2210:                     chaine[strlen(chaine) - 2] = 0;
 2211: 
 2212:                     chaine_sauvegarde = chaine;
 2213:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2214:                             + 1) * 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:                 }
 2226:                 else
 2227:                 {
 2228:                     chaine[strlen(chaine) - 2] = ']';
 2229:                     chaine[strlen(chaine) - 1] = 0;
 2230: 
 2231:                     chaine_sauvegarde = chaine;
 2232:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2233:                             + 2) * sizeof(unsigned char));
 2234: 
 2235:                     if (chaine == NULL)
 2236:                     {
 2237:                         (*s_etat_processus).erreur_systeme =
 2238:                                 d_es_allocation_memoire;
 2239:                         return(NULL);
 2240:                     }
 2241: 
 2242:                     strcpy(chaine, chaine_sauvegarde);
 2243:                     free(chaine_sauvegarde);
 2244:                     strcat(chaine, "]");
 2245:                 }
 2246:             }
 2247:         }
 2248:         else if ((*s_objet).type == MRL)
 2249:         {
 2250: 
 2251: /*
 2252: --------------------------------------------------------------------------------
 2253:   Matrice réelle
 2254: --------------------------------------------------------------------------------
 2255: */
 2256: 
 2257:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2258:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2259:             {
 2260:                 (*s_etat_processus).erreur_execution =
 2261:                         d_ex_erreur_format_fichier;
 2262:                 return(NULL);
 2263:             }
 2264: 
 2265:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 2266:                     .nombre_lignes;
 2267:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 2268:                     .nombre_colonnes;
 2269: 
 2270:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 2271: 
 2272:             if (chaine != NULL)
 2273:             {
 2274:                 strcpy(chaine, "[[");
 2275: 
 2276:                 for(i = 0; i < nombre_lignes; i++)
 2277:                 {
 2278:                     for(j = 0; j < nombre_colonnes; j++)
 2279:                     {
 2280:                         if ((chaine_formatee =
 2281:                                 formateur_fichier_nombre(s_etat_processus,
 2282:                                 (void *) &(((real8 **) ((*((struct_matrice *)
 2283:                                 ((*s_objet).objet))).tableau))[i][j]), 'R',
 2284:                                 longueur, longueur_champ, format_sortie))
 2285:                                 == NULL)
 2286:                         {
 2287:                             (*s_etat_processus).erreur_systeme =
 2288:                                     d_es_allocation_memoire;
 2289:                             return(NULL);
 2290:                         }
 2291: 
 2292:                         chaine_sauvegarde = chaine;
 2293:                         chaine = (unsigned char *) malloc(
 2294:                                 (strlen(chaine_sauvegarde) +
 2295:                                 strlen(chaine_formatee) + 2)
 2296:                                 * sizeof(unsigned char));
 2297: 
 2298:                         if (chaine == NULL)
 2299:                         {
 2300:                             (*s_etat_processus).erreur_systeme =
 2301:                                     d_es_allocation_memoire;
 2302:                             return(NULL);
 2303:                         }
 2304: 
 2305:                         strcpy(chaine, chaine_sauvegarde);
 2306:                         free(chaine_sauvegarde);
 2307:                         strcat(chaine, " ");
 2308:                         strcat(chaine, chaine_formatee);
 2309:                         free(chaine_formatee);
 2310:                     }
 2311: 
 2312:                     chaine_sauvegarde = chaine;
 2313:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2314:                     {
 2315:                         chaine = (unsigned char *) malloc(
 2316:                                 (strlen(chaine_sauvegarde) + 6)
 2317:                                 * sizeof(unsigned char));
 2318: 
 2319:                         if (chaine == NULL)
 2320:                         {
 2321:                             (*s_etat_processus).erreur_systeme =
 2322:                                     d_es_allocation_memoire;
 2323:                             return(NULL);
 2324:                         }
 2325: 
 2326:                         strcpy(chaine, chaine_sauvegarde);
 2327:                         free(chaine_sauvegarde);
 2328:                         strcat(chaine, " ]\n [");
 2329:                     }
 2330:                     else
 2331:                     {
 2332:                         chaine = (unsigned char *) malloc(
 2333:                                 (strlen(chaine_sauvegarde) + 4)
 2334:                                 * sizeof(unsigned char));
 2335: 
 2336:                         if (chaine == NULL)
 2337:                         {
 2338:                             (*s_etat_processus).erreur_systeme =
 2339:                                     d_es_allocation_memoire;
 2340:                             return(NULL);
 2341:                         }
 2342: 
 2343:                         strcpy(chaine, chaine_sauvegarde);
 2344:                         free(chaine_sauvegarde);
 2345:                         strcat(chaine, " ][");
 2346:                     }
 2347:                 }
 2348: 
 2349:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2350:                 {
 2351:                     chaine[strlen(chaine) - 3] = ']';
 2352:                     chaine[strlen(chaine) - 2] = 0;
 2353: 
 2354:                     chaine_sauvegarde = chaine;
 2355:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2356:                             + 1) * 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:                 }
 2368:                 else
 2369:                 {
 2370:                     chaine[strlen(chaine) - 2] = ']';
 2371:                     chaine[strlen(chaine) - 1] = 0;
 2372: 
 2373:                     chaine_sauvegarde = chaine;
 2374:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2375:                             + 2) * sizeof(unsigned char));
 2376: 
 2377:                     if (chaine == NULL)
 2378:                     {
 2379:                         (*s_etat_processus).erreur_systeme =
 2380:                                 d_es_allocation_memoire;
 2381:                         return(NULL);
 2382:                     }
 2383: 
 2384:                     strcpy(chaine, chaine_sauvegarde);
 2385:                     free(chaine_sauvegarde);
 2386:                     strcat(chaine, "]");
 2387:                 }
 2388:             }
 2389:         }
 2390:         else if ((*s_objet).type == NOM)
 2391:         {
 2392: 
 2393: /*
 2394: --------------------------------------------------------------------------------
 2395:   Nom
 2396: --------------------------------------------------------------------------------
 2397: */
 2398: 
 2399:             chaine = (unsigned char *) malloc((strlen((*((struct_nom *)
 2400:                     (*s_objet).objet)).nom) + 3) * sizeof(unsigned char));
 2401: 
 2402:             if (chaine == NULL)
 2403:             {
 2404:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2405:                 return(NULL);
 2406:             }
 2407: 
 2408:             sprintf(chaine, "'%s'", (*((struct_nom *) (*s_objet).objet)).nom);
 2409:         }
 2410:         else if ((*s_objet).type == REL)
 2411:         {
 2412: 
 2413: /*
 2414: --------------------------------------------------------------------------------
 2415:   Réel
 2416: --------------------------------------------------------------------------------
 2417: */
 2418: 
 2419:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2420:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2421:             {
 2422:                 (*s_etat_processus).erreur_execution =
 2423:                         d_ex_erreur_format_fichier;
 2424:                 return(NULL);
 2425:             }
 2426: 
 2427:             if ((chaine_formatee = formateur_fichier_nombre(s_etat_processus,
 2428:                     (void *) ((real8 *) ((*s_objet).objet)), 'R',
 2429:                     longueur, longueur_champ, format_sortie)) == NULL)
 2430:             {
 2431:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2432:                 return(NULL);
 2433:             }
 2434: 
 2435:             chaine = (unsigned char *) malloc((strlen(chaine_formatee) + 1)
 2436:                     * sizeof(unsigned char));
 2437: 
 2438:             if (chaine == NULL)
 2439:             {
 2440:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2441:                 return(NULL);
 2442:             }
 2443: 
 2444:             strcpy(chaine, chaine_formatee);
 2445:             free(chaine_formatee);
 2446:         }
 2447:         else if ((*s_objet).type == VCX)
 2448:         {
 2449: 
 2450: /*
 2451: --------------------------------------------------------------------------------
 2452:   Vecteur complexe
 2453: --------------------------------------------------------------------------------
 2454: */
 2455: 
 2456:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2457:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2458:             {
 2459:                 (*s_etat_processus).erreur_execution =
 2460:                         d_ex_erreur_format_fichier;
 2461:                 return(NULL);
 2462:             }
 2463: 
 2464:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 2465:                     .taille;
 2466: 
 2467:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 2468: 
 2469:             if (chaine != NULL)
 2470:             {
 2471:                 strcpy(chaine, "[");
 2472: 
 2473:                 for(i = 0; i < nombre_colonnes; i++)
 2474:                 {
 2475:                     if ((chaine_formatee =
 2476:                             formateur_fichier_nombre(s_etat_processus,
 2477:                             (void *) &(((struct_complexe16 *)
 2478:                             ((*((struct_vecteur *)
 2479:                             ((*s_objet).objet))).tableau))[i]), 'C',
 2480:                             longueur, longueur_champ, format_sortie)) == NULL)
 2481:                     {
 2482:                         (*s_etat_processus).erreur_systeme =
 2483:                                 d_es_allocation_memoire;
 2484:                         return(NULL);
 2485:                     }
 2486: 
 2487:                     chaine_sauvegarde = chaine;
 2488:                     chaine = (unsigned char *) malloc(
 2489:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 2490:                             + 2) * sizeof(unsigned char));
 2491: 
 2492:                     if (chaine == NULL)
 2493:                     {
 2494:                         (*s_etat_processus).erreur_systeme =
 2495:                                 d_es_allocation_memoire;
 2496:                         return(NULL);
 2497:                     }
 2498: 
 2499:                     strcpy(chaine, chaine_sauvegarde);
 2500:                     free(chaine_sauvegarde);
 2501:                     strcat(chaine, " ");
 2502:                     strcat(chaine, chaine_formatee);
 2503:                     free(chaine_formatee);
 2504:                 }
 2505: 
 2506:                 chaine_sauvegarde = chaine;
 2507:                 chaine = (unsigned char *) malloc(
 2508:                         (strlen(chaine_sauvegarde) + 3)
 2509:                         * sizeof(unsigned char));
 2510: 
 2511:                 if (chaine == NULL)
 2512:                 {
 2513:                     (*s_etat_processus).erreur_systeme =
 2514:                             d_es_allocation_memoire;
 2515:                     return(NULL);
 2516:                 }
 2517: 
 2518:                 strcpy(chaine, chaine_sauvegarde);
 2519:                 free(chaine_sauvegarde);
 2520:                 strcat(chaine, " ]");
 2521:             }
 2522:         }
 2523:         else if ((*s_objet).type == VIN)
 2524:         {
 2525: 
 2526: /*
 2527: --------------------------------------------------------------------------------
 2528:   Vecteur entier
 2529: --------------------------------------------------------------------------------
 2530: */
 2531: 
 2532:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2533:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2534:             {
 2535:                 (*s_etat_processus).erreur_execution =
 2536:                         d_ex_erreur_format_fichier;
 2537:                 return(NULL);
 2538:             }
 2539: 
 2540:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 2541:                     .taille;
 2542: 
 2543:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 2544: 
 2545:             if (chaine != NULL)
 2546:             {
 2547:                 strcpy(chaine, "[");
 2548: 
 2549:                 for(i = 0; i < nombre_colonnes; i++)
 2550:                 {
 2551:                     if ((chaine_formatee =
 2552:                             formateur_fichier_nombre(s_etat_processus,
 2553:                             (void *) &(((integer8 *) ((*((struct_vecteur *)
 2554:                             ((*s_objet).objet))).tableau))[i]), 'I',
 2555:                             longueur, longueur_champ, format_sortie)) == NULL)
 2556:                     {
 2557:                         (*s_etat_processus).erreur_systeme =
 2558:                                 d_es_allocation_memoire;
 2559:                         return(NULL);
 2560:                     }
 2561: 
 2562:                     chaine_sauvegarde = chaine;
 2563:                     chaine = (unsigned char *) malloc(
 2564:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 2565:                             + 2) * sizeof(unsigned char));
 2566: 
 2567:                     if (chaine == NULL)
 2568:                     {
 2569:                         (*s_etat_processus).erreur_systeme =
 2570:                                 d_es_allocation_memoire;
 2571:                         return(NULL);
 2572:                     }
 2573: 
 2574:                     strcpy(chaine, chaine_sauvegarde);
 2575:                     free(chaine_sauvegarde);
 2576:                     strcat(chaine, " ");
 2577:                     strcat(chaine, chaine_formatee);
 2578:                     free(chaine_formatee);
 2579:                 }
 2580: 
 2581:                 chaine_sauvegarde = chaine;
 2582:                 chaine = (unsigned char *) malloc(
 2583:                         (strlen(chaine_sauvegarde) + 3)
 2584:                         * sizeof(unsigned char));
 2585: 
 2586:                 if (chaine == NULL)
 2587:                 {
 2588:                     (*s_etat_processus).erreur_systeme =
 2589:                             d_es_allocation_memoire;
 2590:                     return(NULL);
 2591:                 }
 2592: 
 2593:                 strcpy(chaine, chaine_sauvegarde);
 2594:                 free(chaine_sauvegarde);
 2595:                 strcat(chaine, " ]");
 2596:             }
 2597:         }
 2598:         else if ((*s_objet).type == VRL)
 2599:         {
 2600: 
 2601: /*
 2602: --------------------------------------------------------------------------------
 2603:   Vecteur réel
 2604: --------------------------------------------------------------------------------
 2605: */
 2606: 
 2607:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2608:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2609:             {
 2610:                 (*s_etat_processus).erreur_execution =
 2611:                         d_ex_erreur_format_fichier;
 2612:                 return(NULL);
 2613:             }
 2614: 
 2615:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 2616:                     .taille;
 2617: 
 2618:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 2619: 
 2620:             if (chaine != NULL)
 2621:             {
 2622:                 strcpy(chaine, "[");
 2623: 
 2624:                 for(i = 0; i < nombre_colonnes; i++)
 2625:                 {
 2626:                     if ((chaine_formatee =
 2627:                             formateur_fichier_nombre(s_etat_processus,
 2628:                             (void *) &(((real8 *) ((*((struct_vecteur *)
 2629:                             ((*s_objet).objet))).tableau))[i]), 'R',
 2630:                             longueur, longueur_champ, format_sortie)) == NULL)
 2631:                     {
 2632:                         (*s_etat_processus).erreur_systeme =
 2633:                                 d_es_allocation_memoire;
 2634:                         return(NULL);
 2635:                     }
 2636: 
 2637:                     chaine_sauvegarde = chaine;
 2638:                     chaine = (unsigned char *) malloc(
 2639:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 2640:                             + 2) * sizeof(unsigned char));
 2641: 
 2642:                     if (chaine == NULL)
 2643:                     {
 2644:                         (*s_etat_processus).erreur_systeme =
 2645:                                 d_es_allocation_memoire;
 2646:                         return(NULL);
 2647:                     }
 2648: 
 2649:                     strcpy(chaine, chaine_sauvegarde);
 2650:                     free(chaine_sauvegarde);
 2651:                     strcat(chaine, " ");
 2652:                     strcat(chaine, chaine_formatee);
 2653:                     free(chaine_formatee);
 2654:                 }
 2655: 
 2656:                 chaine_sauvegarde = chaine;
 2657:                 chaine = (unsigned char *) malloc(
 2658:                         (strlen(chaine_sauvegarde) + 3)
 2659:                         * sizeof(unsigned char));
 2660: 
 2661:                 if (chaine == NULL)
 2662:                 {
 2663:                     (*s_etat_processus).erreur_systeme =
 2664:                             d_es_allocation_memoire;
 2665:                     return(NULL);
 2666:                 }
 2667: 
 2668:                 strcpy(chaine, chaine_sauvegarde);
 2669:                 free(chaine_sauvegarde);
 2670:                 strcat(chaine, " ]");
 2671:             }
 2672:         }
 2673:         else
 2674:         {
 2675:             // Type non exportable
 2676: 
 2677:             (*s_etat_processus).erreur_execution = d_ex_erreur_format_fichier;
 2678:             free(chaine);
 2679: 
 2680:             return(NULL);
 2681:         }
 2682: 
 2683:         (*longueur_effective) = strlen(chaine) + 1;
 2684:     }
 2685:     else
 2686:     {
 2687:         /*
 2688:          * Fichiers non formatés
 2689:          */
 2690: 
 2691: #define __zone() \
 2692:         do { int _i; for(_i = 0; _i < longueur_totale; _i++) \
 2693:             printf("%02X ", chaine[_i]); printf("\b\n"); } while(0)
 2694: 
 2695:         /*
 2696:          * Chaque enregistrement est composé d'une donnée (une liste)
 2697:          * suivie de sa longueur en octets et d'un champ binaire indiquant
 2698:          * le format (integer*1,2,4 ou 8) d'écriture de cette longueur.
 2699:          * Les données contenues dans ces fichiers sont associées à un
 2700:          * descripteur de type.
 2701:          *
 2702:          * Attention : les fichiers non formatés ne sont pas portables
 2703:          * d'une architecture à l'autre.
 2704:          *
 2705:          * Structure d'un enregistrement :
 2706:          * [en-tête][.........données..........][longueur + type de longueur]
 2707:          *
 2708:          * Longueur : (pour l'instruction backspace)
 2709:          *
 2710:          * 00 XXXXXX                longueur sur 6 bits
 2711:          * 01 ------                longueur sur 16 bits
 2712:          * 10 ------                longueur sur 32 bits
 2713:          * 11 ------                longueur sur 64 bits
 2714:          *
 2715:          * Structures des enregistrements :
 2716:          * chaque type de donnée est associé à une en-tête binaire comprenant
 2717:          * le type de données ainsi que toutes autres informations utiles.
 2718:          *
 2719:          * Représentation binaire :
 2720:          *
 2721:          * 1/ scalaires
 2722:          * 0000 XXXX                Binaire sur XXXX octets
 2723:          *
 2724:          * TYPE
 2725:          * 0001 00 00               integer*1
 2726:          * 0001 00 01               integer*2
 2727:          * 0001 00 10               integer*4
 2728:          * 0001 00 11               integer*8
 2729:          *
 2730:          * 0001 01 00               real*4
 2731:          * 0001 01 01               real*8
 2732:          *
 2733:          * 0001 10 00               complex*8
 2734:          * 0001 10 01               complex*16
 2735:          *
 2736:          * 0010 00 00               vecteur integer*1 (dimensions integer*1)
 2737:          * 0010 01 00               vecteur integer*1 (dimensions integer*2)
 2738:          * 0010 10 00               vecteur integer*1 (dimensions integer*4)
 2739:          * 0010 11 00               vecteur integer*1 (dimensions integer*8)
 2740:          * 0010 00 01               vecteur integer*2 (dimensions integer*1)
 2741:          * 0010 01 01               vecteur integer*2 (dimensions integer*2)
 2742:          * 0010 10 01               vecteur integer*2 (dimensions integer*4)
 2743:          * 0010 11 01               vecteur integer*2 (dimensions integer*8)
 2744:          * 0010 00 10               vecteur integer*4 (dimensions integer*1)
 2745:          * 0010 01 10               vecteur integer*4 (dimensions integer*2)
 2746:          * 0010 10 10               vecteur integer*4 (dimensions integer*4)
 2747:          * 0010 11 10               vecteur integer*4 (dimensions integer*8)
 2748:          * 0010 00 11               vecteur integer*8 (dimensions integer*1)
 2749:          * 0010 01 11               vecteur integer*8 (dimensions integer*2)
 2750:          * 0010 10 11               vecteur integer*8 (dimensions integer*4)
 2751:          * 0010 11 11               vecteur integer*8 (dimensions integer*8)
 2752:          *
 2753:          * 0011 00 00               matrice integer*1 (dimensions integer*1)
 2754:          * 0011 01 00               matrice integer*1 (dimensions integer*2)
 2755:          * 0011 10 00               matrice integer*1 (dimensions integer*4)
 2756:          * 0011 11 00               matrice integer*1 (dimensions integer*8)
 2757:          * 0011 00 01               matrice integer*2 (dimensions integer*1)
 2758:          * 0011 01 01               matrice integer*2 (dimensions integer*2)
 2759:          * 0011 10 01               matrice integer*2 (dimensions integer*4)
 2760:          * 0011 11 01               matrice integer*2 (dimensions integer*8)
 2761:          * 0011 00 10               matrice integer*4 (dimensions integer*1)
 2762:          * 0011 01 10               matrice integer*4 (dimensions integer*2)
 2763:          * 0011 10 10               matrice integer*4 (dimensions integer*4)
 2764:          * 0011 11 10               matrice integer*4 (dimensions integer*8)
 2765:          * 0011 00 11               matrice integer*8 (dimensions integer*1)
 2766:          * 0011 01 11               matrice integer*8 (dimensions integer*2)
 2767:          * 0011 10 11               matrice integer*8 (dimensions integer*4)
 2768:          * 0011 11 11               matrice integer*8 (dimensions integer*8)
 2769:          *
 2770:          * 0100 0 XXX               liste de longueur XXX
 2771:          * 0100 10 00               liste de longueur integer*1
 2772:          * 0100 10 01               liste de longueur integer*2
 2773:          * 0100 10 10               liste de longueur integer*4
 2774:          * 0100 10 11               liste de longueur integer*8
 2775:          *
 2776:          * 0101 0 XXX               nom de longueur XXX
 2777:          * 0101 10 LL               nom de longueur integer*LL
 2778:          *
 2779:          * 0110 0 XXX               expression RPN
 2780:          * 0110 10 LL
 2781:          *
 2782:          * 0111 0 XXX               expression algébrique
 2783:          * 0111 10 LL
 2784:          *
 2785:          * 1000 0 XXX               chaîne de caractères
 2786:          * 1000 10 LL
 2787:          *
 2788:          * 1001 0 XXX               table de longueur XXX
 2789:          * 1001 10 00               table de longueur integer*1
 2790:          * 1001 10 01               table de longueur integer*2
 2791:          * 1001 10 10               table de longueur integer*4
 2792:          * 1001 10 11               table de longueur integer*8
 2793:          *
 2794:          * Les longueurs indiquées par le champ LL suivent l'en-tête :
 2795:          * [En-tête][longueur_1][longueur_2][données]
 2796:          * le nombre de champs longueur dépendant des types d'enregistrement.
 2797:          *
 2798:          * Toutes les autres combinaisons sont invalides.
 2799:          */
 2800: 
 2801:         chaine = NULL;
 2802:         chaine_formatee = NULL;
 2803:         chaine_sauvegarde = NULL;
 2804: 
 2805:         strcpy(base, " ");
 2806: 
 2807:         longueur_binaire = 0;
 2808:         masque_binaire = 0;
 2809: 
 2810:         if ((*s_objet).type == ALG)
 2811:         {
 2812: 
 2813: /*
 2814: --------------------------------------------------------------------------------
 2815:   Expression algébrique
 2816: --------------------------------------------------------------------------------
 2817: */
 2818: 
 2819:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 2820: 
 2821:             while(l_element_courant != NULL)
 2822:             {
 2823:                 if ((*(*l_element_courant).donnee).type == FCT)
 2824:                 {
 2825:                     if ((strcmp((*((struct_fonction *) (*(*l_element_courant)
 2826:                             .donnee).objet)).nom_fonction, "<<") != 0) &&
 2827:                             (strcmp((*((struct_fonction *)
 2828:                             (*(*l_element_courant)
 2829:                             .donnee).objet)).nom_fonction, ">>") != 0))
 2830:                     {
 2831:                         if ((strcmp((*((struct_fonction *)
 2832:                                 (*(*l_element_courant)
 2833:                                 .donnee).objet)).nom_fonction, "+") == 0) ||
 2834:                                 (strcmp((*((struct_fonction *)
 2835:                                 (*(*l_element_courant).donnee).objet))
 2836:                                 .nom_fonction, "-") == 0) || (strcmp(
 2837:                                 (*((struct_fonction *) (*(*l_element_courant)
 2838:                                 .donnee).objet)).nom_fonction, "*") == 0) ||
 2839:                                 (strcmp((*((struct_fonction *)
 2840:                                 (*(*l_element_courant).donnee).objet))
 2841:                                 .nom_fonction,
 2842:                                 "/") == 0) || (strcmp((*((struct_fonction *)
 2843:                                 (*(*l_element_courant).donnee).objet))
 2844:                                 .nom_fonction,
 2845:                                 "^") == 0) || (strcmp((*((struct_fonction *)
 2846:                                 (*(*l_element_courant).donnee).objet))
 2847:                                 .nom_fonction,
 2848:                                 "<") == 0) || (strcmp((*((struct_fonction *)
 2849:                                 (*(*l_element_courant).donnee).objet))
 2850:                                 .nom_fonction,
 2851:                                 ">") == 0) || (strcmp((*((struct_fonction *)
 2852:                                 (*(*l_element_courant).donnee).objet))
 2853:                                 .nom_fonction,
 2854:                                 "==") == 0) || (strcmp((*((struct_fonction *)
 2855:                                 (*(*l_element_courant).donnee).objet))
 2856:                                 .nom_fonction,
 2857:                                 "<>") == 0) || (strcmp((*((struct_fonction *)
 2858:                                 (*(*l_element_courant).donnee).objet))
 2859:                                 .nom_fonction,
 2860:                                 "<=") == 0) || (strcmp((*((struct_fonction *)
 2861:                                 (*(*l_element_courant).donnee).objet))
 2862:                                 .nom_fonction,
 2863:                                 "=<") == 0) || (strcmp((*((struct_fonction *)
 2864:                                 (*(*l_element_courant).donnee).objet))
 2865:                                 .nom_fonction,
 2866:                                 ">=") == 0) || (strcmp((*((struct_fonction *)
 2867:                                 (*(*l_element_courant).donnee).objet))
 2868:                                 .nom_fonction,
 2869:                                 "=>") == 0))
 2870:                         {
 2871:                             if (depilement(s_etat_processus,
 2872:                                     &((*s_etat_processus)
 2873:                                     .l_base_pile), &s_sous_objet_2) == d_erreur)
 2874:                             {
 2875:                                 return(NULL);
 2876:                             }
 2877: 
 2878:                             chaine_sauvegarde = (*s_etat_processus)
 2879:                                     .instruction_courante;
 2880: 
 2881:                             if (((*s_etat_processus).instruction_courante =
 2882:                                     (unsigned char *) malloc((strlen(
 2883:                                     (unsigned char *) (*s_sous_objet_2).objet)
 2884:                                     + 2 + 1) * sizeof(unsigned char))) == NULL)
 2885:                             {
 2886:                                 (*s_etat_processus).instruction_courante =
 2887:                                         chaine_sauvegarde;
 2888:                                 (*s_etat_processus).erreur_systeme =
 2889:                                         d_es_allocation_memoire;
 2890:                                 return(NULL);
 2891:                             }
 2892: 
 2893:                             sprintf((*s_etat_processus).instruction_courante,
 2894:                                     "'%s'", (unsigned char *)
 2895:                                     (*s_sous_objet_2).objet);
 2896: 
 2897:                             presence_signe = (((*s_etat_processus)
 2898:                                     .instruction_courante[1] == '+')
 2899:                                     || ((*s_etat_processus)
 2900:                                     .instruction_courante[1]
 2901:                                     == '-')) ? d_vrai : d_faux;
 2902: 
 2903:                             recherche_type(s_etat_processus);
 2904: 
 2905:                             if ((*s_etat_processus).erreur_execution != d_ex)
 2906:                             {
 2907:                                 // Aucune erreur ne peut être renvoyée.
 2908: 
 2909:                                 return(NULL);
 2910:                             }
 2911: 
 2912:                             if (depilement(s_etat_processus,
 2913:                                     &((*s_etat_processus)
 2914:                                     .l_base_pile), &s_sous_objet_3) == d_erreur)
 2915:                             {
 2916:                                 return(NULL);
 2917:                             }
 2918: 
 2919:                             free((*s_etat_processus).instruction_courante);
 2920: 
 2921:                             (*s_etat_processus).instruction_courante =
 2922:                                     chaine_sauvegarde;
 2923: 
 2924:                             autorisation_parenthese = d_faux;
 2925: 
 2926:                             if ((*s_sous_objet_3).type == ALG)
 2927:                             {
 2928:                                 l_atome = (struct_liste_chainee *)
 2929:                                         (*s_sous_objet_3).objet;
 2930:                                 chaine_fonction = "";
 2931:                                 nombre_arguments_fonction = 0;
 2932: 
 2933:                                 while(l_atome != NULL)
 2934:                                 {
 2935:                                     if ((*(*l_atome).donnee).type == FCT)
 2936:                                     {
 2937:                                         if (strcmp((*((struct_fonction *)
 2938:                                                 (*(*l_atome).donnee).objet))
 2939:                                                 .nom_fonction, ">>") != 0)
 2940:                                         {
 2941:                                             chaine_fonction =
 2942:                                                     (*((struct_fonction *)
 2943:                                                     (*(*l_atome).donnee).objet))
 2944:                                                     .nom_fonction;
 2945:                                             nombre_arguments_fonction =
 2946:                                                     (*((struct_fonction *)
 2947:                                                     (*(*l_atome).donnee).objet))
 2948:                                                     .nombre_arguments;
 2949:                                         }
 2950:                                     }
 2951: 
 2952:                                     l_atome = (*l_atome).suivant;
 2953:                                 }
 2954: 
 2955:                                 if (strcmp((*((struct_fonction *)
 2956:                                         (*(*l_element_courant).donnee).objet))
 2957:                                         .nom_fonction, "+") == 0)
 2958:                                 {
 2959:                                     if ((strcmp(chaine_fonction, "AND") == 0) ||
 2960:                                             (strcmp(chaine_fonction, "XOR") ==
 2961:                                             0) || (strcmp(chaine_fonction, "OR")
 2962:                                             == 0))
 2963:                                     {
 2964:                                         autorisation_parenthese = d_vrai;
 2965:                                     }
 2966:                                 }
 2967:                                 else if (strcmp((*((struct_fonction *)
 2968:                                         (*(*l_element_courant).donnee).objet))
 2969:                                         .nom_fonction, "-") == 0)
 2970:                                 {
 2971:                                     if (nombre_arguments_fonction != 0)
 2972:                                     {
 2973:                                         autorisation_parenthese = d_faux;
 2974:                                     }
 2975:                                     else
 2976:                                     {
 2977:                                         autorisation_parenthese = d_vrai;
 2978:                                     }
 2979:                                 }
 2980:                                 else if (strcmp((*((struct_fonction *)
 2981:                                         (*(*l_element_courant).donnee).objet))
 2982:                                         .nom_fonction, "*") == 0)
 2983:                                 {
 2984:                                     if ((strcmp(chaine_fonction, "+") == 0) ||
 2985:                                             (strcmp(chaine_fonction, "-") == 0)
 2986:                                             || (strcmp(chaine_fonction, "AND")
 2987:                                             == 0) || (strcmp(chaine_fonction,
 2988:                                             "XOR") == 0) || (strcmp(
 2989:                                             chaine_fonction, "OR") == 0))
 2990:                                     {
 2991:                                         autorisation_parenthese = d_vrai;
 2992:                                     }
 2993:                                 }
 2994:                                 else if (strcmp((*((struct_fonction *)
 2995:                                         (*(*l_element_courant).donnee).objet))
 2996:                                         .nom_fonction, "/") == 0)
 2997:                                 {
 2998:                                     if (nombre_arguments_fonction != 0)
 2999:                                     {
 3000:                                         autorisation_parenthese = d_faux;
 3001:                                     }
 3002:                                     else
 3003:                                     {
 3004:                                         autorisation_parenthese = d_vrai;
 3005:                                     }
 3006:                                 }
 3007:                                 else if ((strcmp((*((struct_fonction *)
 3008:                                         (*(*l_element_courant).donnee).objet))
 3009:                                         .nom_fonction, "^") == 0))
 3010:                                 {
 3011:                                     if (nombre_arguments_fonction != 0)
 3012:                                     {
 3013:                                         autorisation_parenthese = d_faux;
 3014:                                     }
 3015:                                     else
 3016:                                     {
 3017:                                         autorisation_parenthese = d_vrai;
 3018:                                     }
 3019:                                 }
 3020:                             }
 3021: 
 3022:                             if ((autorisation_parenthese == d_vrai) ||
 3023:                                     (presence_signe == d_vrai))
 3024:                             {
 3025:                                 chaine_sauvegarde = (unsigned char *)
 3026:                                         (*s_sous_objet_2).objet;
 3027: 
 3028:                                 if (((*s_sous_objet_2).objet = (void *)
 3029:                                         malloc((strlen(chaine_sauvegarde) + 2
 3030:                                         + 1) * sizeof(unsigned char))) == NULL)
 3031:                                 {
 3032:                                     (*s_etat_processus).erreur_systeme =
 3033:                                             d_es_allocation_memoire;
 3034:                                     return(NULL);
 3035:                                 }
 3036: 
 3037:                                 sprintf((unsigned char *) (*s_sous_objet_2)
 3038:                                         .objet, "(%s)", chaine_sauvegarde);
 3039:                                 free(chaine_sauvegarde);
 3040:                             }
 3041: 
 3042:                             liberation(s_etat_processus, s_sous_objet_3);
 3043: 
 3044:                             if (depilement(s_etat_processus,
 3045:                                     &((*s_etat_processus)
 3046:                                     .l_base_pile), &s_sous_objet_1) == d_erreur)
 3047:                             {
 3048:                                 return(NULL);
 3049:                             }
 3050: 
 3051:                             chaine_sauvegarde = (*s_etat_processus)
 3052:                                     .instruction_courante;
 3053: 
 3054:                             if (((*s_etat_processus).instruction_courante =
 3055:                                     (unsigned char *) malloc((strlen(
 3056:                                     (unsigned char *) (*s_sous_objet_1).objet)
 3057:                                     + 2 + 1) * sizeof(unsigned char))) == NULL)
 3058:                             {
 3059:                                 (*s_etat_processus).instruction_courante =
 3060:                                         chaine_sauvegarde;
 3061:                                 (*s_etat_processus).erreur_systeme =
 3062:                                         d_es_allocation_memoire;
 3063:                                 return(NULL);
 3064:                             }
 3065: 
 3066:                             sprintf((*s_etat_processus).instruction_courante,
 3067:                                     "'%s'", (unsigned char *)
 3068:                                     (*s_sous_objet_1).objet);
 3069: 
 3070:                             recherche_type(s_etat_processus);
 3071: 
 3072:                             if ((*s_etat_processus).erreur_execution != d_ex)
 3073:                             {
 3074:                                 // Aucune erreur ne peut être renvoyée.
 3075: 
 3076:                                 return(NULL);
 3077:                             }
 3078: 
 3079:                             if (depilement(s_etat_processus,
 3080:                                     &((*s_etat_processus)
 3081:                                     .l_base_pile), &s_sous_objet_3) == d_erreur)
 3082:                             {
 3083:                                 return(NULL);
 3084:                             }
 3085: 
 3086:                             free((*s_etat_processus).instruction_courante);
 3087: 
 3088:                             (*s_etat_processus).instruction_courante =
 3089:                                     chaine_sauvegarde;
 3090: 
 3091:                             autorisation_parenthese = d_faux;
 3092: 
 3093:                             if ((*s_sous_objet_3).type == ALG)
 3094:                             {
 3095:                                 l_atome = (struct_liste_chainee *)
 3096:                                         (*s_sous_objet_3).objet;
 3097:                                 chaine_fonction = "";
 3098: 
 3099:                                 while(l_atome != NULL)
 3100:                                 {
 3101:                                     if ((*(*l_atome).donnee).type == FCT)
 3102:                                     {
 3103:                                         if (strcmp((*((struct_fonction *)
 3104:                                                 (*(*l_atome).donnee).objet))
 3105:                                                 .nom_fonction, ">>") != 0)
 3106:                                         {
 3107:                                             chaine_fonction =
 3108:                                                     (*((struct_fonction *)
 3109:                                                     (*(*l_atome).donnee).objet))
 3110:                                                     .nom_fonction;
 3111:                                         }
 3112:                                     }
 3113: 
 3114:                                     l_atome = (*l_atome).suivant;
 3115:                                 }
 3116: 
 3117:                                 if ((strcmp((*((struct_fonction *)
 3118:                                         (*(*l_element_courant).donnee).objet))
 3119:                                         .nom_fonction, "+") == 0) ||
 3120:                                         (strcmp((*((struct_fonction *)
 3121:                                         (*(*l_element_courant).donnee).objet))
 3122:                                         .nom_fonction, "-") == 0))
 3123:                                 {
 3124:                                     if ((strcmp(chaine_fonction, "AND") == 0) ||
 3125:                                             (strcmp(chaine_fonction, "XOR") ==
 3126:                                             0) || (strcmp(chaine_fonction, "OR")
 3127:                                             == 0))
 3128:                                     {
 3129:                                         autorisation_parenthese = d_vrai;
 3130:                                     }
 3131:                                 }
 3132:                                 else if ((strcmp((*((struct_fonction *)
 3133:                                         (*(*l_element_courant).donnee).objet))
 3134:                                         .nom_fonction, "*") == 0) ||
 3135:                                         (strcmp((*((struct_fonction *)
 3136:                                         (*(*l_element_courant).donnee).objet))
 3137:                                         .nom_fonction, "/") == 0))
 3138:                                 {
 3139:                                     if ((strcmp(chaine_fonction, "+") == 0) ||
 3140:                                             (strcmp(chaine_fonction, "-") == 0)
 3141:                                             || (strcmp(chaine_fonction, "AND")
 3142:                                             == 0) || (strcmp(chaine_fonction,
 3143:                                             "XOR") == 0) || (strcmp(
 3144:                                             chaine_fonction, "OR") == 0))
 3145:                                     {
 3146:                                         autorisation_parenthese = d_vrai;
 3147:                                     }
 3148:                                 }
 3149:                                 else if ((strcmp((*((struct_fonction *)
 3150:                                         (*(*l_element_courant).donnee).objet))
 3151:                                         .nom_fonction, "^") == 0))
 3152:                                 {
 3153:                                     autorisation_parenthese = d_vrai;
 3154:                                 }
 3155:                             }
 3156: 
 3157:                             if (autorisation_parenthese == d_vrai)
 3158:                             {
 3159:                                 chaine_sauvegarde = (unsigned char *)
 3160:                                         (*s_sous_objet_1).objet;
 3161: 
 3162:                                 if (((*s_sous_objet_1).objet = (void *)
 3163:                                         malloc((strlen(chaine_sauvegarde) + 2
 3164:                                         + 1) * sizeof(unsigned char))) == NULL)
 3165:                                 {
 3166:                                     (*s_etat_processus).erreur_systeme =
 3167:                                             d_es_allocation_memoire;
 3168:                                     return(NULL);
 3169:                                 }
 3170: 
 3171:                                 sprintf((unsigned char *) (*s_sous_objet_1)
 3172:                                         .objet, "(%s)", chaine_sauvegarde);
 3173:                                 free(chaine_sauvegarde);
 3174:                             }
 3175: 
 3176:                             liberation(s_etat_processus, s_sous_objet_3);
 3177: 
 3178:                             if ((s_sous_objet = allocation(s_etat_processus,
 3179:                                     CHN)) == NULL)
 3180:                             {
 3181:                                 (*s_etat_processus).erreur_systeme =
 3182:                                         d_es_allocation_memoire;
 3183:                                 return(NULL);
 3184:                             }
 3185: 
 3186:                             if (((*s_sous_objet).objet = (void *)
 3187:                                     malloc((strlen(
 3188:                                     (unsigned char *) (*s_sous_objet_1).objet) +
 3189:                                     strlen((*((struct_fonction *)
 3190:                                     (*(*l_element_courant).donnee).objet))
 3191:                                     .nom_fonction) + strlen((unsigned char *)
 3192:                                     (*s_sous_objet_2).objet) + 1) *
 3193:                                     sizeof(unsigned char))) == NULL)
 3194:                             {
 3195:                                 (*s_etat_processus).erreur_systeme =
 3196:                                         d_es_allocation_memoire;
 3197:                                 return(NULL);
 3198:                             }
 3199: 
 3200:                             sprintf((unsigned char *) (*s_sous_objet).objet,
 3201:                                     "%s%s%s", (unsigned char *)
 3202:                                     (*s_sous_objet_1)
 3203:                                     .objet, (*((struct_fonction *)
 3204:                                     (*(*l_element_courant).donnee).objet))
 3205:                                     .nom_fonction, (unsigned char *)
 3206:                                     (*s_sous_objet_2).objet);
 3207: 
 3208:                             liberation(s_etat_processus, s_sous_objet_1);
 3209:                             liberation(s_etat_processus, s_sous_objet_2);
 3210: 
 3211:                             if (empilement(s_etat_processus,
 3212:                                     &((*s_etat_processus)
 3213:                                     .l_base_pile), s_sous_objet) == d_erreur)
 3214:                             {
 3215:                                 return(NULL);
 3216:                             }
 3217:                         }
 3218:                         else if (strcmp((*((struct_fonction *)
 3219:                                 (*(*l_element_courant).donnee).objet))
 3220:                                 .nom_fonction, "=") == 0)
 3221:                         {
 3222:                             if (depilement(s_etat_processus,
 3223:                                     &((*s_etat_processus).l_base_pile),
 3224:                                     &s_sous_objet_2) == d_erreur)
 3225:                             {
 3226:                                 return(NULL);
 3227:                             }
 3228: 
 3229:                             if (depilement(s_etat_processus,
 3230:                                     &((*s_etat_processus).l_base_pile),
 3231:                                     &s_sous_objet_1) == d_erreur)
 3232:                             {
 3233:                                 return(NULL);
 3234:                             }
 3235: 
 3236:                             if ((s_sous_objet = allocation(s_etat_processus,
 3237:                                     CHN)) == NULL)
 3238:                             {
 3239:                                 (*s_etat_processus).erreur_systeme =
 3240:                                         d_es_allocation_memoire;
 3241:                                 return(NULL);
 3242:                             }
 3243: 
 3244:                             autorisation_parenthese = d_vrai;
 3245:                             l_atome = l_element_courant;
 3246: 
 3247:                             if (l_atome != NULL)
 3248:                             {
 3249:                                 if ((*l_atome).suivant != NULL)
 3250:                                 {
 3251:                                     l_atome = (*l_atome).suivant;
 3252: 
 3253:                                     if ((*(*l_atome).donnee).type == FCT)
 3254:                                     {
 3255:                                         if (strcmp((*((struct_fonction *)
 3256:                                                 (*(*l_atome).donnee).objet))
 3257:                                                 .nom_fonction, ">>") == 0)
 3258:                                         {
 3259:                                             if ((*l_atome).suivant == NULL)
 3260:                                             {
 3261:                                                 autorisation_parenthese =
 3262:                                                         d_faux;
 3263:                                             }
 3264:                                         }
 3265:                                     }
 3266:                                 }
 3267:                             }
 3268: 
 3269:                             if (autorisation_parenthese == d_vrai)
 3270:                             {
 3271:                                 if (((*s_sous_objet).objet =
 3272:                                         (void *) malloc((strlen(
 3273:                                         (unsigned char *) (*s_sous_objet_1)
 3274:                                         .objet) + strlen((*((struct_fonction *)
 3275:                                         (*(*l_element_courant).donnee).objet))
 3276:                                         .nom_fonction) +
 3277:                                         strlen((unsigned char *)
 3278:                                         (*s_sous_objet_2).objet) + 2 + 1) *
 3279:                                         sizeof(unsigned char))) == NULL)
 3280:                                 {
 3281:                                     (*s_etat_processus).erreur_systeme =
 3282:                                             d_es_allocation_memoire;
 3283:                                     return(NULL);
 3284:                                 }
 3285: 
 3286:                                 sprintf((unsigned char *) (*s_sous_objet).objet,
 3287:                                         "(%s%s%s)", (unsigned char *)
 3288:                                         (*s_sous_objet_1)
 3289:                                         .objet, (*((struct_fonction *)
 3290:                                         (*(*l_element_courant).donnee).objet))
 3291:                                         .nom_fonction, (unsigned char *)
 3292:                                         (*s_sous_objet_2).objet);
 3293:                             }
 3294:                             else
 3295:                             {
 3296:                                 if (((*s_sous_objet).objet =
 3297:                                         (void *) malloc((strlen(
 3298:                                         (unsigned char *) (*s_sous_objet_1)
 3299:                                         .objet) + strlen((*((struct_fonction *)
 3300:                                         (*(*l_element_courant).donnee).objet))
 3301:                                         .nom_fonction) + strlen(
 3302:                                         (unsigned char *) (*s_sous_objet_2)
 3303:                                         .objet) + 1) * sizeof(unsigned char)))
 3304:                                         == NULL)
 3305:                                 {
 3306:                                     (*s_etat_processus).erreur_systeme =
 3307:                                             d_es_allocation_memoire;
 3308:                                     return(NULL);
 3309:                                 }
 3310: 
 3311:                                 sprintf((unsigned char *) (*s_sous_objet).objet,
 3312:                                         "%s%s%s", (unsigned char *)
 3313:                                         (*s_sous_objet_1)
 3314:                                         .objet, (*((struct_fonction *)
 3315:                                         (*(*l_element_courant).donnee).objet))
 3316:                                         .nom_fonction, (unsigned char *)
 3317:                                         (*s_sous_objet_2).objet);
 3318:                             }
 3319: 
 3320:                             liberation(s_etat_processus, s_sous_objet_1);
 3321:                             liberation(s_etat_processus, s_sous_objet_2);
 3322: 
 3323:                             if (empilement(s_etat_processus,
 3324:                                     &((*s_etat_processus).l_base_pile),
 3325:                                     s_sous_objet) == d_erreur)
 3326:                             {
 3327:                                 return(NULL);
 3328:                             }
 3329:                         }
 3330:                         else if (strcmp((*((struct_fonction *)
 3331:                                 (*(*l_element_courant).donnee).objet))
 3332:                                 .nom_fonction,
 3333:                                 "NOT") == 0)
 3334:                         {
 3335:                             if (depilement(s_etat_processus,
 3336:                                     &((*s_etat_processus)
 3337:                                     .l_base_pile), &s_sous_objet_1) == d_erreur)
 3338:                             {
 3339:                                 return(NULL);
 3340:                             }
 3341: 
 3342:                             if ((s_sous_objet = allocation(s_etat_processus,
 3343:                                     CHN)) == NULL)
 3344:                             {
 3345:                                 (*s_etat_processus).erreur_systeme =
 3346:                                         d_es_allocation_memoire;
 3347:                                 return(NULL);
 3348:                             }
 3349: 
 3350:                             if (((*s_sous_objet).objet = (unsigned char *)
 3351:                                     malloc(
 3352:                                     (strlen((unsigned char *) (*s_sous_objet_1)
 3353:                                     .objet) + 4 + 1) * sizeof(unsigned char)))
 3354:                                     == NULL)
 3355:                             {
 3356:                                 (*s_etat_processus).erreur_systeme =
 3357:                                         d_es_allocation_memoire;
 3358:                                 return(NULL);
 3359:                             }
 3360: 
 3361:                             sprintf((unsigned char *) (*s_sous_objet).objet,
 3362:                                     "%s %s", (*((struct_fonction *)
 3363:                                     (*(*l_element_courant).donnee).objet))
 3364:                                     .nom_fonction, (unsigned char *)
 3365:                                     (*s_sous_objet_1).objet );
 3366: 
 3367:                             liberation(s_etat_processus, s_sous_objet_1);
 3368: 
 3369:                             if (empilement(s_etat_processus,
 3370:                                     &((*s_etat_processus)
 3371:                                     .l_base_pile), s_sous_objet) == d_erreur)
 3372:                             {
 3373:                                 return(NULL);
 3374:                             }
 3375:                         }
 3376:                         else if ((strcmp((*((struct_fonction *)
 3377:                                 (*(*l_element_courant).donnee).objet))
 3378:                                 .nom_fonction,
 3379:                                 "OR") == 0) || (strcmp((*((struct_fonction *)
 3380:                                 (*(*l_element_courant).donnee).objet))
 3381:                                 .nom_fonction,
 3382:                                 "XOR") == 0) || (strcmp((*((struct_fonction *)
 3383:                                 (*(*l_element_courant).donnee).objet))
 3384:                                 .nom_fonction,
 3385:                                 "AND") == 0))
 3386:                         {
 3387:                             if (depilement(s_etat_processus,
 3388:                                     &((*s_etat_processus)
 3389:                                     .l_base_pile), &s_sous_objet_2) == d_erreur)
 3390:                             {
 3391:                                 return(NULL);
 3392:                             }
 3393: 
 3394:                             if (depilement(s_etat_processus,
 3395:                                     &((*s_etat_processus)
 3396:                                     .l_base_pile), &s_sous_objet_1) == d_erreur)
 3397:                             {
 3398:                                 return(NULL);
 3399:                             }
 3400: 
 3401:                             if ((s_sous_objet = allocation(s_etat_processus,
 3402:                                     CHN)) == NULL)
 3403:                             {
 3404:                                 (*s_etat_processus).erreur_systeme =
 3405:                                         d_es_allocation_memoire;
 3406:                                 return(NULL);
 3407:                             }
 3408: 
 3409:                             if (((*s_sous_objet).objet = (void *)
 3410:                                     malloc((strlen(
 3411:                                     (unsigned char *) (*s_sous_objet_1).objet) +
 3412:                                     strlen((*((struct_fonction *)
 3413:                                     (*(*l_element_courant).donnee).objet))
 3414:                                     .nom_fonction) + strlen((unsigned char *)
 3415:                                     (*s_sous_objet_2).objet) + 2 + 1) *
 3416:                                     sizeof(unsigned char))) == NULL)
 3417:                             {
 3418:                                 (*s_etat_processus).erreur_systeme =
 3419:                                         d_es_allocation_memoire;
 3420:                                 return(NULL);
 3421:                             }
 3422: 
 3423:                             sprintf((unsigned char *) (*s_sous_objet).objet,
 3424:                                     "%s %s %s", (unsigned char *)
 3425:                                     (*s_sous_objet_1)
 3426:                                     .objet, (*((struct_fonction *)
 3427:                                     (*(*l_element_courant).donnee).objet))
 3428:                                     .nom_fonction, (unsigned char *)
 3429:                                     (*s_sous_objet_2).objet);
 3430: 
 3431:                             liberation(s_etat_processus, s_sous_objet_1);
 3432:                             liberation(s_etat_processus, s_sous_objet_2);
 3433: 
 3434:                             if (empilement(s_etat_processus,
 3435:                                     &((*s_etat_processus)
 3436:                                     .l_base_pile), s_sous_objet) == d_erreur)
 3437:                             {
 3438:                                 return(NULL);
 3439:                             }
 3440:                         }
 3441:                         else
 3442:                         {
 3443:                             nombre_arguments = (*((struct_fonction *)
 3444:                                     (*(*l_element_courant).donnee).objet))
 3445:                                     .nombre_arguments;
 3446: 
 3447:                             if ((chaine = (unsigned char *)
 3448:                                     malloc(sizeof(unsigned char))) == NULL)
 3449:                             {
 3450:                                 (*s_etat_processus).erreur_systeme =
 3451:                                         d_es_allocation_memoire;
 3452:                                 return(NULL);
 3453:                             }
 3454:                             
 3455:                             chaine[0] = d_code_fin_chaine;
 3456: 
 3457:                             for(i = 0; i < nombre_arguments; i++)
 3458:                             {
 3459:                                 if ((nombre_arguments - i) > 1)
 3460:                                 {
 3461:                                     l_liste1 = (*s_etat_processus).l_base_pile;
 3462: 
 3463:                                     for(j = 2; j < (nombre_arguments - i); j++)
 3464:                                     {
 3465:                                         l_liste1 = (*l_liste1).suivant;
 3466:                                     }
 3467: 
 3468:                                     l_liste2 = (*l_liste1).suivant;
 3469:                                     (*l_liste1).suivant = (*l_liste2).suivant;
 3470:                                     (*l_liste2).suivant = (*s_etat_processus)
 3471:                                             .l_base_pile;
 3472:                                     (*s_etat_processus).l_base_pile = l_liste2;
 3473:                                 }
 3474:                                 
 3475:                                 if (depilement(s_etat_processus,
 3476:                                         &((*s_etat_processus).l_base_pile),
 3477:                                         &s_sous_objet) == d_erreur)
 3478:                                 {
 3479:                                     return(NULL);
 3480:                                 }
 3481: 
 3482:                                 chaine_sauvegarde = chaine;
 3483: 
 3484:                                 if (strlen(chaine_sauvegarde) == 0)
 3485:                                 {
 3486:                                     if ((chaine = (unsigned char *)
 3487:                                             malloc((strlen((unsigned char *)
 3488:                                             (*s_sous_objet).objet) + 1) *
 3489:                                             sizeof(unsigned char))) == NULL)
 3490:                                     {
 3491:                                         (*s_etat_processus).erreur_systeme =
 3492:                                                 d_es_allocation_memoire;
 3493:                                         return(NULL);
 3494:                                     }
 3495: 
 3496:                                     sprintf(chaine, "%s", (unsigned char *)
 3497:                                             (*s_sous_objet).objet);
 3498:                                 }
 3499:                                 else
 3500:                                 {
 3501:                                     if ((chaine = (unsigned char *)
 3502:                                             malloc((strlen(chaine_sauvegarde)
 3503:                                             + 1 + strlen((unsigned char *)
 3504:                                             (*s_sous_objet).objet) + 1) *
 3505:                                             sizeof(unsigned char))) == NULL)
 3506:                                     {
 3507:                                         (*s_etat_processus).erreur_systeme =
 3508:                                                 d_es_allocation_memoire;
 3509:                                         return(NULL);
 3510:                                     }
 3511: 
 3512:                                     sprintf(chaine, "%s,%s", chaine_sauvegarde,
 3513:                                             (unsigned char *) (*s_sous_objet)
 3514:                                             .objet);
 3515:                                 }
 3516: 
 3517:                                 free(chaine_sauvegarde);
 3518:                                 liberation(s_etat_processus, s_sous_objet);
 3519:                             }
 3520: 
 3521:                             chaine_sauvegarde = chaine;
 3522: 
 3523:                             if ((chaine = (unsigned char *) malloc((strlen(
 3524:                                     (*((struct_fonction *)
 3525:                                     (*(*l_element_courant)
 3526:                                     .donnee).objet)).nom_fonction) + 2 +
 3527:                                     strlen(chaine_sauvegarde) + 1) *
 3528:                                     sizeof(unsigned char))) == NULL)
 3529:                             {
 3530:                                 (*s_etat_processus).erreur_systeme =
 3531:                                         d_es_allocation_memoire;
 3532:                                 return(NULL);
 3533:                             }
 3534: 
 3535:                             sprintf(chaine, "%s(%s)", (*((struct_fonction *)
 3536:                                     (*(*l_element_courant).donnee).objet))
 3537:                                     .nom_fonction, chaine_sauvegarde);
 3538:                             free(chaine_sauvegarde);
 3539: 
 3540:                             if ((s_sous_objet = allocation(s_etat_processus,
 3541:                                             CHN)) == NULL)
 3542:                             {
 3543:                                 (*s_etat_processus).erreur_systeme =
 3544:                                         d_es_allocation_memoire;
 3545:                                 return(NULL);
 3546:                             }
 3547: 
 3548:                             (*s_sous_objet).objet = (void *) chaine;
 3549: 
 3550:                             if (empilement(s_etat_processus,
 3551:                                     &((*s_etat_processus)
 3552:                                     .l_base_pile), s_sous_objet) == d_erreur)
 3553:                             {
 3554:                                 return(NULL);
 3555:                             }
 3556:                         }
 3557:                     }
 3558:                 }
 3559:                 else
 3560:                 {
 3561:                     if ((s_sous_objet = allocation(s_etat_processus, CHN))
 3562:                             == NULL)
 3563:                     {
 3564:                         (*s_etat_processus).erreur_systeme =
 3565:                                 d_es_allocation_memoire;
 3566:                         return(NULL);
 3567:                     }
 3568: 
 3569:                     if (((*s_sous_objet).objet = (void *) formateur_fichier(
 3570:                             s_etat_processus, (*l_element_courant).donnee,
 3571:                             s_format, longueur, longueur_champ, format_sortie,
 3572:                             type, longueur_effective, recursivite)) == NULL)
 3573:                     {
 3574:                         (*s_etat_processus).erreur_systeme =
 3575:                                 d_es_allocation_memoire;
 3576:                         return(NULL);
 3577:                     }
 3578: 
 3579:                     if (((*(*l_element_courant).donnee).type == ALG)
 3580:                             || ((*(*l_element_courant).donnee).type == NOM))
 3581:                     {
 3582:                         chaine_sauvegarde = (unsigned char *)
 3583:                                 (*s_sous_objet).objet;
 3584: 
 3585:                         if (((*s_sous_objet).objet = malloc((strlen(
 3586:                                 chaine_sauvegarde) - 1) *
 3587:                                 sizeof(unsigned char))) == NULL)
 3588:                         {
 3589:                             (*s_etat_processus).erreur_systeme =
 3590:                                     d_es_allocation_memoire;
 3591:                             return(NULL);
 3592:                         }
 3593: 
 3594:                         ptrl = chaine_sauvegarde;
 3595:                         ptre = (unsigned char *) (*s_sous_objet).objet;
 3596: 
 3597:                         for(ptrl++, i = strlen(chaine_sauvegarde) - 2; i > 0;
 3598:                                 i--, *ptre++ = *ptrl++);
 3599: 
 3600:                         (*ptre) = d_code_fin_chaine;
 3601: 
 3602:                         free(chaine_sauvegarde);
 3603:                     }
 3604:                     else if ((*(*l_element_courant).donnee).type == CHN)
 3605:                     {
 3606:                         chaine_sauvegarde = (unsigned char *)
 3607:                                 (*s_sous_objet).objet;
 3608: 
 3609:                         if (((*s_sous_objet).objet = malloc((strlen(
 3610:                                 chaine_sauvegarde) + 3) *
 3611:                                 sizeof(unsigned char))) == NULL)
 3612:                         {
 3613:                             (*s_etat_processus).erreur_systeme =
 3614:                                     d_es_allocation_memoire;
 3615:                             return(NULL);
 3616:                         }
 3617: 
 3618:                         sprintf((unsigned char *) (*s_sous_objet).objet,
 3619:                                 "\"%s\"", chaine_sauvegarde);
 3620: 
 3621:                         free(chaine_sauvegarde);
 3622:                     }
 3623: 
 3624:                     if (empilement(s_etat_processus, &((*s_etat_processus)
 3625:                             .l_base_pile), s_sous_objet) == d_erreur)
 3626:                     {
 3627:                         return(NULL);
 3628:                     }
 3629:                 }
 3630: 
 3631:                 l_element_courant = (*l_element_courant).suivant;
 3632:             }
 3633: 
 3634:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3635:                     &s_sous_objet) == d_erreur)
 3636:             {
 3637:                 return(NULL);
 3638:             }
 3639: 
 3640:             if ((chaine = (unsigned char *) malloc((strlen((unsigned char *)
 3641:                     (*s_sous_objet).objet) + 2 + 1) * sizeof(unsigned char)))
 3642:                     == NULL)
 3643:             {
 3644:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3645:                 return(NULL);
 3646:             }
 3647: 
 3648:             sprintf(chaine, "'%s'", (unsigned char *) (*s_sous_objet).objet);
 3649:             liberation(s_etat_processus, s_sous_objet);
 3650:         }
 3651:         else if ((*s_objet).type == BIN)
 3652:         {
 3653: 
 3654: /*
 3655: --------------------------------------------------------------------------------
 3656:   Entier binaire en base 2, 8, 10 ou 16
 3657: --------------------------------------------------------------------------------
 3658: */
 3659: 
 3660:             if (format_sortie != 'B')
 3661:             {
 3662:                 (*s_etat_processus).erreur_execution =
 3663:                         d_ex_erreur_format_fichier;
 3664:                 return(NULL);
 3665:             }
 3666: 
 3667:             longueur_binaire = longueur_entiers_binaires(s_etat_processus);
 3668:             masque_binaire = masque_entiers_binaires(s_etat_processus);
 3669: 
 3670:             if ((test_cfsf(s_etat_processus, 43) == d_faux) &&
 3671:                     (test_cfsf(s_etat_processus, 44) == d_faux))
 3672:             {
 3673: 
 3674: /*
 3675: -- Base décimale ---------------------------------------------------------------
 3676: */
 3677: 
 3678:                 sprintf(tampon, "%llu", (*((logical8 *)
 3679:                         ((*s_objet).objet))) & masque_binaire);
 3680:                 strcpy(base, "d");
 3681:             }
 3682:             else if ((test_cfsf(s_etat_processus, 43) == d_vrai) &&
 3683:                     (test_cfsf(s_etat_processus, 44) == d_faux))
 3684:             {
 3685: 
 3686: /*
 3687: -- Base octale -----------------------------------------------------------------
 3688: */
 3689: 
 3690:                 sprintf(tampon, "%llo", (*((logical8 *)
 3691:                         ((*s_objet).objet))) & masque_binaire);
 3692:                 strcpy(base, "o");
 3693:             }
 3694:             else if (test_cfsf(s_etat_processus, 44) == d_vrai)
 3695:             {
 3696: 
 3697: /*
 3698: -- Bases hexadécimale et binaire -----------------------------------------------
 3699: */
 3700: 
 3701:                 sprintf(tampon, "%llX", (*((logical8 *)
 3702:                         ((*s_objet).objet))) & masque_binaire);
 3703: 
 3704:                 if (test_cfsf(s_etat_processus, 43) == d_vrai)
 3705:                 {
 3706:                     strcpy(base, "h");
 3707:                 }
 3708:                 else
 3709:                 {
 3710:                     chaine = (unsigned char *) malloc((strlen(tampon) + 1)
 3711:                             * sizeof(unsigned char));
 3712: 
 3713:                     if (chaine == NULL)
 3714:                     {
 3715:                         (*s_etat_processus).erreur_systeme =
 3716:                                 d_es_allocation_memoire;
 3717:                         return(NULL);
 3718:                     }
 3719: 
 3720:                     strcpy(chaine, tampon);
 3721:                     tampon[0] = 0;
 3722: 
 3723:                     for(i = 0; i < strlen(chaine); i++)
 3724:                     {
 3725:                         switch(chaine[i])
 3726:                         {
 3727:                             case '0' :
 3728:                             {
 3729:                                 strcat(tampon, (i != 0) ? "0000" : "0");
 3730:                                 break;
 3731:                             }
 3732:                             case '1' :
 3733:                             {
 3734:                                     strcat(tampon, (i != 0) ? "0001" : "1");
 3735:                                 break;
 3736:                             }
 3737:                             case '2' :
 3738:                             {
 3739:                                 strcat(tampon, (i != 0) ? "0010" : "10");
 3740:                                 break;
 3741:                             }
 3742:                             case '3' :
 3743:                             {
 3744:                                 strcat(tampon, (i != 0) ? "0011" : "11");
 3745:                                 break;
 3746:                             }
 3747:                             case '4' :
 3748:                             {
 3749:                                 strcat(tampon, (i != 0) ? "0100" : "100");
 3750:                                 break;
 3751:                             }
 3752:                             case '5' :
 3753:                             {
 3754:                                 strcat(tampon, (i != 0) ? "0101" : "101");
 3755:                                 break;
 3756:                             }
 3757:                             case '6' :
 3758:                             {
 3759:                                 strcat(tampon, (i != 0) ? "0110" : "110");
 3760:                                 break;
 3761:                             }
 3762:                             case '7' :
 3763:                             {
 3764:                                 strcat(tampon, (i != 0) ? "0111" : "111");
 3765:                                 break;
 3766:                             }
 3767:                             case '8' :
 3768:                             {
 3769:                                 strcat(tampon, "1000");
 3770:                                 break;
 3771:                             }
 3772:                             case '9' :
 3773:                             {
 3774:                                 strcat(tampon, "1001");
 3775:                                 break;
 3776:                             }
 3777:                             case 'A' :
 3778:                             {
 3779:                                 strcat(tampon, "1010");
 3780:                                 break;
 3781:                             }
 3782:                             case 'B' :
 3783:                             {
 3784:                                 strcat(tampon, "1011");
 3785:                                 break;
 3786:                             }
 3787:                             case 'C' :
 3788:                             {
 3789:                                 strcat(tampon, "1100");
 3790:                                 break;
 3791:                             }
 3792:                             case 'D' :
 3793:                             {
 3794:                                 strcat(tampon, "1101");
 3795:                                 break;
 3796:                             }
 3797:                             case 'E' :
 3798:                             {
 3799:                                 strcat(tampon, "1110");
 3800:                                 break;
 3801:                             }
 3802:                             case 'F' :
 3803:                             {
 3804:                                 strcat(tampon, "1111");
 3805:                                 break;
 3806:                             }
 3807:                         }
 3808:                     }
 3809: 
 3810:                     free(chaine);
 3811:                     strcpy(base, "b");
 3812:                 }
 3813:             }
 3814: 
 3815:             chaine = (unsigned char *) malloc((strlen(tampon) + 4)
 3816:                     * sizeof(unsigned char));
 3817: 
 3818:             if (chaine == NULL)
 3819:             {
 3820:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3821:                 return(NULL);
 3822:             }
 3823: 
 3824:             strcpy(chaine, "# ");
 3825: 
 3826:             strcat(chaine, tampon);
 3827:             strcat(chaine, base);
 3828:         }
 3829:         else if ((*s_objet).type == CHN)
 3830:         {
 3831: 
 3832: /*
 3833: --------------------------------------------------------------------------------
 3834:   Chaîne de caractères
 3835: --------------------------------------------------------------------------------
 3836: */
 3837: 
 3838:             if (format_sortie != 'C')
 3839:             {
 3840:                 (*s_etat_processus).erreur_execution =
 3841:                         d_ex_erreur_format_fichier;
 3842:                 return(NULL);
 3843:             }
 3844: 
 3845:             chaine = (unsigned char *) malloc((strlen((unsigned char *)
 3846:                     ((*s_objet).objet)) + 1) * sizeof(unsigned char));
 3847: 
 3848:             if (chaine == NULL)
 3849:             {
 3850:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3851:                 return(NULL);
 3852:             }
 3853: 
 3854:             strcpy(chaine, (unsigned char *) ((*s_objet).objet));
 3855:         }
 3856:         else if ((*s_objet).type == CPL)
 3857:         {
 3858: 
 3859: /*
 3860: --------------------------------------------------------------------------------
 3861:   Complexe
 3862: --------------------------------------------------------------------------------
 3863: */
 3864: 
 3865:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 3866:                     (format_sortie != 'I') && (format_sortie != 'E'))
 3867:             {
 3868:                 (*s_etat_processus).erreur_execution =
 3869:                         d_ex_erreur_format_fichier;
 3870:                 return(NULL);
 3871:             }
 3872: 
 3873:             if ((chaine_formatee = formateur_fichier_nombre(s_etat_processus,
 3874:                     (void *) ((struct_complexe16 *) ((*s_objet).objet)), 'C',
 3875:                     longueur, longueur_champ, format_sortie)) == NULL)
 3876:             {
 3877:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3878:                 return(NULL);
 3879:             }
 3880: 
 3881:             chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 3882:                     + 1) * sizeof(unsigned char));
 3883: 
 3884:             if (chaine == NULL)
 3885:             {
 3886:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3887:                 return(NULL);
 3888:             }
 3889: 
 3890:             strcpy(chaine, chaine_formatee);
 3891:             free(chaine_formatee);
 3892:         }
 3893:         else if ((*s_objet).type == RPN)
 3894:         {
 3895: 
 3896: /*
 3897: --------------------------------------------------------------------------------
 3898:   Définition
 3899: --------------------------------------------------------------------------------
 3900: */
 3901: 
 3902:             l_element_courant = (struct_liste_chainee *) ((*s_objet).objet);
 3903:             chaine_sauvegarde = chaine;
 3904: 
 3905:             while(l_element_courant != NULL)
 3906:             {
 3907:                 if ((chaine_formatee = formateur_fichier(s_etat_processus,
 3908:                         (*l_element_courant).donnee, s_format,
 3909:                         longueur, longueur_champ, format_sortie, type,
 3910:                         longueur_effective, recursivite)) == NULL)
 3911:                 {
 3912:                     return(NULL);
 3913:                 }
 3914: 
 3915:                 if ((*(*l_element_courant).donnee).type == CHN)
 3916:                 {
 3917:                     chaine_tampon = chaine_formatee;
 3918: 
 3919:                     if ((chaine_formatee = (unsigned char *) malloc((strlen(
 3920:                             chaine_tampon) + 3) * sizeof(unsigned char)))
 3921:                             == NULL)
 3922:                     {
 3923:                         (*s_etat_processus).erreur_systeme =
 3924:                                 d_es_allocation_memoire;
 3925:                         return(NULL);
 3926:                     }
 3927: 
 3928:                     sprintf(chaine_formatee, "\"%s\"", chaine_tampon);
 3929:                     free(chaine_tampon);
 3930:                 }
 3931: 
 3932:                 l_element_courant = (*l_element_courant).suivant;
 3933: 
 3934:                 if (chaine != NULL)
 3935:                 {
 3936:                     chaine_sauvegarde = chaine;
 3937: 
 3938:                     if ((chaine = (unsigned char *) malloc((strlen(
 3939:                             chaine_sauvegarde) + strlen(chaine_formatee) + 2) *
 3940:                             sizeof(unsigned char))) == NULL)
 3941:                     {
 3942:                         (*s_etat_processus).erreur_systeme =
 3943:                                 d_es_allocation_memoire;
 3944:                         return(NULL);
 3945:                     }
 3946: 
 3947:                     strcpy(chaine, chaine_sauvegarde);
 3948:                     free(chaine_sauvegarde);
 3949:                     strcat(chaine, " ");
 3950:                     strcat(chaine, chaine_formatee);
 3951:                     free(chaine_formatee);
 3952:                 }
 3953:                 else
 3954:                 {
 3955:                     chaine = chaine_formatee;
 3956:                 }
 3957:             }
 3958: 
 3959:             chaine_sauvegarde = chaine;
 3960:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 1) *
 3961:                     sizeof(unsigned char));
 3962: 
 3963:             if (chaine == NULL)
 3964:             {
 3965:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3966:                 free(chaine_sauvegarde);
 3967:                 return(NULL);
 3968:             }
 3969: 
 3970:             chaine_sauvegarde[strlen(chaine_sauvegarde)] = d_code_fin_chaine;
 3971:             strcpy(chaine, chaine_sauvegarde);
 3972:             free(chaine_sauvegarde);
 3973:         }
 3974:         else if ((*s_objet).type == INT)
 3975:         {
 3976: 
 3977: /*
 3978: --------------------------------------------------------------------------------
 3979:   Entier
 3980: --------------------------------------------------------------------------------
 3981: */
 3982: 
 3983:             if (format_sortie != 'I')
 3984:             {
 3985:                 (*s_etat_processus).erreur_execution =
 3986:                         d_ex_erreur_format_fichier;
 3987:                 return(NULL);
 3988:             }
 3989: 
 3990:             switch(longueur)
 3991:             {
 3992:                 case 1:
 3993:                 {
 3994:                     if ((*((integer8 *) (*s_objet).objet)) !=
 3995:                             ((integer1) (*((integer8 *) (*s_objet).objet))))
 3996:                     {
 3997:                         (*s_etat_processus).erreur_execution =
 3998:                                 d_ex_representation;
 3999:                         return(NULL);
 4000:                     }
 4001: 
 4002:                     if ((chaine = malloc(2 * sizeof(unsigned char))) == NULL)
 4003:                     {
 4004:                         (*s_etat_processus).erreur_systeme =
 4005:                                 d_es_allocation_memoire;
 4006:                         return(NULL);
 4007:                     }
 4008: 
 4009:                     longueur_totale = 2;
 4010:                     chaine[0] = 0x10;
 4011:                     chaine[1] = (*((integer8 *) (*s_objet).objet)) & 0xFF;
 4012:                     break;
 4013:                 }
 4014: 
 4015:                 case 2:
 4016:                 {
 4017:                     if ((*((integer8 *) (*s_objet).objet)) !=
 4018:                             ((integer2) (*((integer8 *) (*s_objet).objet))))
 4019:                     {
 4020:                         (*s_etat_processus).erreur_execution =
 4021:                                 d_ex_representation;
 4022:                         return(NULL);
 4023:                     }
 4024: 
 4025:                     if ((chaine = malloc(3 * sizeof(unsigned char))) == NULL)
 4026:                     {
 4027:                         (*s_etat_processus).erreur_systeme =
 4028:                                 d_es_allocation_memoire;
 4029:                         return(NULL);
 4030:                     }
 4031: 
 4032:                     longueur_totale = 3;
 4033:                     chaine[0] = 0x11;
 4034:                     chaine[1] = ((*((integer8 *) (*s_objet).objet)) >> 8)
 4035:                             & 0xFF;
 4036:                     chaine[2] = (*((integer8 *) (*s_objet).objet)) & 0xFF;
 4037:                     break;
 4038:                 }
 4039: 
 4040:                 case 4:
 4041:                 {
 4042:                     if ((*((integer4 *) (*s_objet).objet)) !=
 4043:                             ((integer2) (*((integer8 *) (*s_objet).objet))))
 4044:                     {
 4045:                         (*s_etat_processus).erreur_execution =
 4046:                                 d_ex_representation;
 4047:                         return(NULL);
 4048:                     }
 4049: 
 4050:                     if ((chaine = malloc(5 * sizeof(unsigned char))) == NULL)
 4051:                     {
 4052:                         (*s_etat_processus).erreur_systeme =
 4053:                                 d_es_allocation_memoire;
 4054:                         return(NULL);
 4055:                     }
 4056: 
 4057:                     longueur_totale = 5;
 4058:                     chaine[0] = 0x12;
 4059:                     chaine[1] = ((*((integer8 *) (*s_objet).objet)) >> 24)
 4060:                             & 0xFF;
 4061:                     chaine[2] = ((*((integer8 *) (*s_objet).objet)) >> 16)
 4062:                             & 0xFF;
 4063:                     chaine[3] = ((*((integer8 *) (*s_objet).objet)) >> 8)
 4064:                             & 0xFF;
 4065:                     chaine[4] = (*((integer8 *) (*s_objet).objet)) & 0xFF;
 4066:                     break;
 4067:                 }
 4068: 
 4069:                 case 8:
 4070:                 {
 4071:                     if ((chaine = malloc(9 * sizeof(unsigned char))) == NULL)
 4072:                     {
 4073:                         (*s_etat_processus).erreur_systeme =
 4074:                                 d_es_allocation_memoire;
 4075:                         return(NULL);
 4076:                     }
 4077: 
 4078:                     longueur_totale = 9;
 4079:                     chaine[0] = 0x13;
 4080:                     chaine[1] = ((*((integer8 *) (*s_objet).objet)) >> 56)
 4081:                             & 0xFF;
 4082:                     chaine[2] = ((*((integer8 *) (*s_objet).objet)) >> 48)
 4083:                             & 0xFF;
 4084:                     chaine[3] = ((*((integer8 *) (*s_objet).objet)) >> 40)
 4085:                             & 0xFF;
 4086:                     chaine[4] = ((*((integer8 *) (*s_objet).objet)) >> 32)
 4087:                             & 0xFF;
 4088:                     chaine[5] = ((*((integer8 *) (*s_objet).objet)) >> 24)
 4089:                             & 0xFF;
 4090:                     chaine[6] = ((*((integer8 *) (*s_objet).objet)) >> 16)
 4091:                             & 0xFF;
 4092:                     chaine[7] = ((*((integer8 *) (*s_objet).objet)) >> 8)
 4093:                             & 0xFF;
 4094:                     chaine[8] = (*((integer8 *) (*s_objet).objet)) & 0xFF;
 4095:                     break;
 4096:                 }
 4097: 
 4098:                 default :
 4099:                 {
 4100:                     (*s_etat_processus).erreur_execution =
 4101:                             d_ex_erreur_format_fichier;
 4102:                     return(NULL);
 4103:                 }
 4104:             }
 4105: 
 4106:             (*longueur_effective) = longueur_totale;
 4107:         }
 4108:         else if ((*s_objet).type == FCT)
 4109:         {
 4110: 
 4111: /*
 4112: --------------------------------------------------------------------------------
 4113:   Fonction
 4114: --------------------------------------------------------------------------------
 4115: */
 4116: 
 4117:             chaine = (unsigned char *) malloc((strlen((*((struct_fonction *)
 4118:                     ((*s_objet).objet))).nom_fonction) + 1) *
 4119:                     sizeof(unsigned char));
 4120: 
 4121:             if (chaine == NULL)
 4122:             {
 4123:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4124:                 return(NULL);
 4125:             }
 4126: 
 4127:             strcpy(chaine, (unsigned char *) (*((struct_fonction *)
 4128:                     ((*s_objet).objet))).nom_fonction);
 4129:         }
 4130:         else if ((*s_objet).type == LST)
 4131:         {
 4132: 
 4133: /*
 4134: --------------------------------------------------------------------------------
 4135:   Liste
 4136:   Poids fort 0100
 4137: --------------------------------------------------------------------------------
 4138: */
 4139: 
 4140:             chaine = malloc(sizeof(unsigned char));
 4141: 
 4142:             if (chaine == NULL)
 4143:             {
 4144:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4145:                 return(NULL);
 4146:             }
 4147: 
 4148:             // Calcul de la longueur de la liste.
 4149: 
 4150:             longueur_liste = 0;
 4151:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 4152: 
 4153:             while(l_element_courant != NULL)
 4154:             {
 4155:                 l_element_courant = (*l_element_courant).suivant;
 4156:                 longueur_liste++;
 4157:             }
 4158: 
 4159:             if (longueur_liste < (1LL << 3))
 4160:             {
 4161:                 chaine[0] = 0x40 | (longueur_liste & 0x7);
 4162:             }
 4163:             else if (longueur_liste < (1LL << 8))
 4164:             {
 4165:                 chaine[0] = 0x48;
 4166:             }
 4167:             else if (longueur_liste < (1LL << 16))
 4168:             {
 4169:                 chaine[0] = 0x49;
 4170:             }
 4171:             else if (longueur_liste < (1LL << 32))
 4172:             {
 4173:                 chaine[0] = 0x4A;
 4174:             }
 4175:             else
 4176:             {
 4177:                 chaine[0] = 0x4B;
 4178:             }
 4179: 
 4180:             longueur_totale = 1;
 4181: 
 4182:             if ((chaine[0] & 0x8) != 0)
 4183:             {
 4184:                 switch(chaine[0] & 0x03)
 4185:                 {
 4186:                     case 0x00 :
 4187:                     {
 4188:                         longueur_totale += 1;
 4189: 
 4190:                         if ((chaine = realloc(chaine, longueur_totale *
 4191:                                 sizeof(unsigned char))) == NULL)
 4192:                         {
 4193:                             (*s_etat_processus).erreur_systeme =
 4194:                                     d_es_allocation_memoire;
 4195:                             return(NULL);
 4196:                         }
 4197: 
 4198:                         chaine[longueur_totale - 1] =
 4199:                                 (unsigned char) (longueur_liste & 0xFF);
 4200:                         break;
 4201:                     }
 4202: 
 4203:                     case 0x01 :
 4204:                     {
 4205:                         longueur_totale += 2;
 4206: 
 4207:                         if ((chaine = realloc(chaine, longueur_totale *
 4208:                                 sizeof(unsigned char))) == NULL)
 4209:                         {
 4210:                             (*s_etat_processus).erreur_systeme =
 4211:                                     d_es_allocation_memoire;
 4212:                             return(NULL);
 4213:                         }
 4214: 
 4215:                         chaine[longueur_totale - 2] =
 4216:                                 (unsigned char) ((longueur_liste >> 8) & 0xFF);
 4217:                         chaine[longueur_totale - 1] =
 4218:                                 (unsigned char) (longueur_liste & 0xFF);
 4219:                         break;
 4220:                     }
 4221: 
 4222:                     case 0x02 :
 4223:                     {
 4224:                         longueur_totale += 4;
 4225: 
 4226:                         if ((chaine = realloc(chaine, longueur_totale *
 4227:                                 sizeof(unsigned char))) == NULL)
 4228:                         {
 4229:                             (*s_etat_processus).erreur_systeme =
 4230:                                     d_es_allocation_memoire;
 4231:                             return(NULL);
 4232:                         }
 4233: 
 4234:                         chaine[longueur_totale - 4] =
 4235:                                 (unsigned char) ((longueur_liste >> 24) & 0xFF);
 4236:                         chaine[longueur_totale - 3] =
 4237:                                 (unsigned char) ((longueur_liste >> 16) & 0xFF);
 4238:                         chaine[longueur_totale - 2] =
 4239:                                 (unsigned char) ((longueur_liste >> 8) & 0xFF);
 4240:                         chaine[longueur_totale - 1] =
 4241:                                 (unsigned char) (longueur_liste & 0xFF);
 4242:                         break;
 4243:                     }
 4244: 
 4245:                     case 0x03 :
 4246:                     {
 4247:                         longueur_totale += 8;
 4248: 
 4249:                         if ((chaine = realloc(chaine, longueur_totale *
 4250:                                 sizeof(unsigned char))) == NULL)
 4251:                         {
 4252:                             (*s_etat_processus).erreur_systeme =
 4253:                                     d_es_allocation_memoire;
 4254:                             return(NULL);
 4255:                         }
 4256: 
 4257:                         chaine[longueur_totale - 8] =
 4258:                                 (unsigned char) ((longueur_liste >> 56) & 0xFF);
 4259:                         chaine[longueur_totale - 7] =
 4260:                                 (unsigned char) ((longueur_liste >> 48) & 0xFF);
 4261:                         chaine[longueur_totale - 6] =
 4262:                                 (unsigned char) ((longueur_liste >> 40) & 0xFF);
 4263:                         chaine[longueur_totale - 5] =
 4264:                                 (unsigned char) ((longueur_liste >> 32) & 0xFF);
 4265:                         chaine[longueur_totale - 4] =
 4266:                                 (unsigned char) ((longueur_liste >> 24) & 0xFF);
 4267:                         chaine[longueur_totale - 3] =
 4268:                                 (unsigned char) ((longueur_liste >> 16) & 0xFF);
 4269:                         chaine[longueur_totale - 2] =
 4270:                                 (unsigned char) ((longueur_liste >> 8) & 0xFF);
 4271:                         chaine[longueur_totale - 1] =
 4272:                                 (unsigned char) (longueur_liste & 0xFF);
 4273:                         break;
 4274:                     }
 4275: 
 4276:                     default :
 4277:                     {
 4278:                         BUG(1, printf("Internal format error\n"));
 4279:                     }
 4280:                 }
 4281:             }
 4282: 
 4283:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 4284:             l_element_courant_format = (struct_liste_chainee *)
 4285:                     (*s_format).objet;
 4286:             nombre_elements = 0;
 4287: 
 4288:             while((l_element_courant != NULL) &&
 4289:                     (l_element_courant_format != NULL))
 4290:             {
 4291:                 if ((((*(*l_element_courant_format).donnee).type == LST)
 4292:                         && ((*(*l_element_courant).donnee).type == LST)) ||
 4293:                         (((*(*l_element_courant_format).donnee).type == TBL)
 4294:                         && ((*(*l_element_courant).donnee).type == TBL)))
 4295:                 {
 4296:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 4297:                             (*l_element_courant).donnee,
 4298:                             (*l_element_courant_format).donnee,
 4299:                             0, 0, ' ', 'U', longueur_effective, recursivite))
 4300:                             == NULL)
 4301:                     {
 4302:                         return(NULL);
 4303:                     }
 4304: 
 4305:                     if ((chaine = realloc(chaine, (longueur_totale +
 4306:                             (*longueur_effective)) * sizeof(unsigned char)))
 4307:                             == NULL)
 4308:                     {
 4309:                         (*s_etat_processus).erreur_systeme =
 4310:                                 d_es_allocation_memoire;
 4311:                         return(NULL);
 4312:                     }
 4313: 
 4314:                     memcpy(&(chaine[longueur_totale]), chaine_formatee,
 4315:                             (*longueur_effective));
 4316:                     longueur_totale += (*longueur_effective);
 4317:                     free(chaine_formatee);
 4318:                 }
 4319:                 else if ((*(*l_element_courant_format).donnee).type != CHN)
 4320:                 {
 4321:                     free(chaine);
 4322: 
 4323:                     (*s_etat_processus).erreur_execution =
 4324:                             d_ex_erreur_format_fichier;
 4325:                     return(NULL);
 4326:                 }
 4327:                 else
 4328:                 {
 4329:                     if ((format_chaine = conversion_majuscule((unsigned char *)
 4330:                             (*(*l_element_courant_format).donnee).objet))
 4331:                             == NULL)
 4332:                     {
 4333:                         (*s_etat_processus).erreur_systeme =
 4334:                                 d_es_allocation_memoire;
 4335:                         return(NULL);
 4336:                     }
 4337: 
 4338:                     format_degenere = d_faux;
 4339: 
 4340:                     if (strncmp("INTEGER*", format_chaine, 8) == 0)
 4341:                     {
 4342:                         format_sortie = 'I';
 4343:                         position_1 = 8;
 4344:                     }
 4345:                     else if (strncmp("LOGICAL*", format_chaine, 8) == 0)
 4346:                     {
 4347:                         format_sortie = 'L';
 4348:                         position_1 = 8;
 4349:                     }
 4350:                     else if (strncmp("REAL*", format_chaine, 5) == 0)
 4351:                     {
 4352:                         format_sortie = 'R';
 4353:                         position_1 = 5;
 4354:                     }
 4355:                     else if (strncmp("COMPLEX*", format_chaine, 8) == 0)
 4356:                     {
 4357:                         format_sortie = 'C';
 4358:                         position_1 = 8;
 4359:                     }
 4360:                     else if (strcmp("CHARACTER", format_chaine) == 0)
 4361:                     {
 4362:                         format_sortie = 'S';
 4363:                         position_1 = 10;
 4364:                         format_degenere = d_vrai;
 4365:                     }
 4366:                     else
 4367:                     {
 4368:                         free(chaine);
 4369:                         free(format_chaine);
 4370: 
 4371:                         (*s_etat_processus).erreur_execution =
 4372:                                 d_ex_erreur_format_fichier;
 4373:                         return(NULL);
 4374:                     }
 4375: 
 4376:                     if (format_degenere == d_faux)
 4377:                     {
 4378:                         if (format_chaine[position_1] == d_code_fin_chaine)
 4379:                         {
 4380:                             free(chaine);
 4381:                             free(format_chaine);
 4382: 
 4383:                             (*s_etat_processus).erreur_execution =
 4384:                                     d_ex_erreur_format_fichier;
 4385:                             return(NULL);
 4386:                         }
 4387: 
 4388:                         if (sscanf(&(format_chaine[position_1]), "%ld",
 4389:                                 &longueur) != 1)
 4390:                         {
 4391:                             free(chaine);
 4392:                             free(format_chaine);
 4393: 
 4394:                             (*s_etat_processus).erreur_execution =
 4395:                                     d_ex_erreur_format_fichier;
 4396:                             return(NULL);
 4397:                         }
 4398:                     }
 4399:                     else
 4400:                     {
 4401:                         longueur = -1;
 4402:                     }
 4403: 
 4404:                     free(format_chaine);
 4405:                 
 4406:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 4407:                             (*l_element_courant).donnee, s_format,
 4408:                             longueur, longueur_champ, format_sortie, type,
 4409:                             longueur_effective, recursivite)) == NULL)
 4410:                     {
 4411:                         free(chaine);
 4412:                         return(NULL);
 4413:                     }
 4414: 
 4415:                     if ((chaine = realloc(chaine,
 4416:                             (longueur_totale + (*longueur_effective))
 4417:                             * sizeof(unsigned char))) == NULL)
 4418:                     {
 4419:                         (*s_etat_processus).erreur_systeme =
 4420:                                 d_es_allocation_memoire;
 4421:                         return(NULL);
 4422:                     }
 4423: 
 4424:                     memcpy(&(chaine[longueur_totale]), chaine_formatee,
 4425:                             (*longueur_effective));
 4426:                     longueur_totale += (*longueur_effective);
 4427:                     free(chaine_formatee);
 4428:                 }
 4429: 
 4430:                 nombre_elements++;
 4431:                 l_element_courant = (*l_element_courant).suivant;
 4432:                 l_element_courant_format = (*l_element_courant_format).suivant;
 4433:             }
 4434: 
 4435:             if ((l_element_courant != NULL) ||
 4436:                     (l_element_courant_format != NULL))
 4437:             {
 4438:                 free(chaine);
 4439: 
 4440:                 (*s_etat_processus).erreur_execution =
 4441:                         d_ex_erreur_format_fichier;
 4442:                 return(NULL);
 4443:             }
 4444: 
 4445:             if ((*recursivite) == 1)
 4446:             {
 4447:                 // Ajout de la longueur totale en fin d'enregistrement.
 4448: 
 4449:                 if (longueur_totale < (((integer8) 1) << 6))
 4450:                 {
 4451:                     tampon[0] = longueur_totale + 1;
 4452: 
 4453:                     if ((chaine = realloc(chaine, (longueur_totale + 1)
 4454:                             * sizeof(unsigned char))) == NULL)
 4455:                     {
 4456:                         (*s_etat_processus).erreur_systeme =
 4457:                                 d_es_allocation_memoire;
 4458:                         return(NULL);
 4459:                     }
 4460: 
 4461:                     memcpy(&(chaine[longueur_totale]), tampon, 1);
 4462:                     longueur_totale += 1;
 4463:                 }
 4464:                 else if (longueur_totale < (((integer8) 1) << 16))
 4465:                 {
 4466:                     tampon[2] = 0x40;
 4467:                     tampon[1] = (longueur_totale + 1) & 0xFF;
 4468:                     tampon[0] = ((longueur_totale + 1) >> 8) & 0xFF;
 4469: 
 4470:                     if ((chaine = realloc(chaine, (longueur_totale + 3)
 4471:                             * sizeof(unsigned char))) == NULL)
 4472:                     {
 4473:                         (*s_etat_processus).erreur_systeme =
 4474:                                 d_es_allocation_memoire;
 4475:                         return(NULL);
 4476:                     }
 4477: 
 4478:                     memcpy(&(chaine[longueur_totale]), tampon, 3);
 4479:                     longueur_totale += 3;
 4480:                 }
 4481:                 else if (longueur_totale < (((integer8) 1) << 32))
 4482:                 {
 4483:                     tampon[4] = 0x80;
 4484:                     tampon[3] = (longueur_totale + 1) & 0xFF;
 4485:                     tampon[2] = ((longueur_totale + 1) >> 8) & 0xFF;
 4486:                     tampon[1] = ((longueur_totale + 1) >> 16) & 0xFF;
 4487:                     tampon[0] = ((longueur_totale + 1) >> 24) & 0xFF;
 4488: 
 4489:                     if ((chaine = realloc(chaine, (longueur_totale + 5)
 4490:                             * sizeof(unsigned char))) == NULL)
 4491:                     {
 4492:                         (*s_etat_processus).erreur_systeme =
 4493:                                 d_es_allocation_memoire;
 4494:                         return(NULL);
 4495:                     }
 4496: 
 4497:                     memcpy(&(chaine[longueur_totale]), tampon, 5);
 4498:                     longueur_totale += 5;
 4499:                 }
 4500:                 else
 4501:                 {
 4502:                     tampon[8] = 0xC0;
 4503:                     tampon[7] = (longueur_totale + 1) & 0xFF;
 4504:                     tampon[6] = ((longueur_totale + 1) >> 8) & 0xFF;
 4505:                     tampon[5] = ((longueur_totale + 1) >> 16) & 0xFF;
 4506:                     tampon[4] = ((longueur_totale + 1) >> 24) & 0xFF;
 4507:                     tampon[3] = ((longueur_totale + 1) >> 32) & 0xFF;
 4508:                     tampon[2] = ((longueur_totale + 1) >> 40) & 0xFF;
 4509:                     tampon[1] = ((longueur_totale + 1) >> 48) & 0xFF;
 4510:                     tampon[0] = ((longueur_totale + 1) >> 56) & 0xFF;
 4511: 
 4512:                     if ((chaine = realloc(chaine, (longueur_totale + 9)
 4513:                             * sizeof(unsigned char))) == NULL)
 4514:                     {
 4515:                         (*s_etat_processus).erreur_systeme =
 4516:                                 d_es_allocation_memoire;
 4517:                         return(NULL);
 4518:                     }
 4519: 
 4520:                     memcpy(&(chaine[longueur_totale]), tampon, 9);
 4521:                     longueur_totale += 9;
 4522:                 }
 4523: 
 4524:                 __zone();
 4525:             }
 4526: 
 4527:             (*longueur_effective) = longueur_totale;
 4528:         }
 4529:         else if ((*s_objet).type == TBL)
 4530:         {
 4531: 
 4532: /*
 4533: --------------------------------------------------------------------------------
 4534:   Table
 4535: --------------------------------------------------------------------------------
 4536: */
 4537: 
 4538:             if ((*s_format).type != TBL)
 4539:             {
 4540:                 (*s_etat_processus).erreur_execution =
 4541:                         d_ex_erreur_format_fichier;
 4542:                 return(NULL);
 4543:             }
 4544: 
 4545:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 4546:             l_element_courant_format = (struct_liste_chainee *)
 4547:                     (*s_format).objet;
 4548: 
 4549:             if ((*((struct_tableau *) (*s_objet).objet)).nombre_elements !=
 4550:                     (*((struct_tableau *) (*s_format).objet)).nombre_elements)
 4551:             {
 4552:                 (*s_etat_processus).erreur_execution =
 4553:                         d_ex_erreur_format_fichier;
 4554:                 return(NULL);
 4555:             }
 4556: 
 4557:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 4558: 
 4559:             if (chaine == NULL)
 4560:             {
 4561:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4562:                 return(NULL);
 4563:             }
 4564: 
 4565:             strcpy(chaine, "<[");
 4566: 
 4567:             for(i = 0; i < (*((struct_tableau *) (*s_objet).objet))
 4568:                     .nombre_elements; i++)
 4569:             {
 4570:                 if ((((*(*((struct_tableau *) (*s_format).objet))
 4571:                         .elements[i]).type == LST) &&
 4572:                         ((*(*((struct_tableau *) (*s_objet).objet)).elements[i])
 4573:                         .type == LST)) ||
 4574:                         (((*(*((struct_tableau *) (*s_format).objet))
 4575:                         .elements[i]).type == TBL) &&
 4576:                         ((*(*((struct_tableau *) (*s_objet).objet)).elements[i])
 4577:                         .type == TAB)))
 4578:                 {
 4579:                     chaine_sauvegarde = chaine;
 4580: 
 4581:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 4582:                             (*l_element_courant).donnee,
 4583:                             (*l_element_courant_format).donnee,
 4584:                             0, 0, ' ', 'F', longueur_effective, recursivite))
 4585:                             == NULL)
 4586:                     {
 4587:                         return(NULL);
 4588:                     }
 4589: 
 4590:                     chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 4591:                             + strlen(chaine_sauvegarde) + 2)
 4592:                             * sizeof(unsigned char));
 4593: 
 4594:                     if (chaine == NULL)
 4595:                     {
 4596:                         (*s_etat_processus).erreur_systeme =
 4597:                                 d_es_allocation_memoire;
 4598:                         return(NULL);
 4599:                     }
 4600: 
 4601:                     strcpy(chaine, chaine_sauvegarde);
 4602:                     free(chaine_sauvegarde);
 4603:                     strcat(chaine, " ");
 4604:                     strcat(chaine, chaine_formatee);
 4605:                     free(chaine_formatee);
 4606:                 }
 4607:                 else if ((*(*((struct_tableau *) (*s_format).objet))
 4608:                         .elements[i]).type != CHN)
 4609:                 {
 4610:                     free(chaine);
 4611: 
 4612:                     (*s_etat_processus).erreur_execution =
 4613:                             d_ex_erreur_format_fichier;
 4614:                     return(NULL);
 4615:                 }
 4616:                 else
 4617:                 {
 4618:                     if ((format_chaine = conversion_majuscule((unsigned char *)
 4619:                             (*(*((struct_tableau *) (*s_format).objet))
 4620:                             .elements[i]).objet)) == NULL)
 4621:                     {
 4622:                         (*s_etat_processus).erreur_systeme =
 4623:                                 d_es_allocation_memoire;
 4624:                         return(NULL);
 4625:                     }
 4626: 
 4627:                     format_degenere = d_faux;
 4628: 
 4629:                     if (strncmp("STANDARD*", format_chaine, 9) == 0)
 4630:                     {
 4631:                         format_sortie = 'S';
 4632:                         position_1 = 9;
 4633:                         format_degenere = d_vrai;
 4634:                     }
 4635:                     else if (strncmp("BINARY*", format_chaine, 7) == 0)
 4636:                     {
 4637:                         format_sortie = 'B';
 4638:                         position_1 = 7;
 4639:                     }
 4640:                     else if (strncmp("FIXED*", format_chaine, 6) == 0)
 4641:                     {
 4642:                         format_sortie = 'F';
 4643:                         position_1 = 6;
 4644:                     }
 4645:                     else if (strncmp("SCIENTIFIC*", format_chaine, 11) == 0)
 4646:                     {
 4647:                         format_sortie = 'I';
 4648:                         position_1 = 11;
 4649:                     }
 4650:                     else if (strncmp("ENGINEER*", format_chaine, 9) == 0)
 4651:                     {
 4652:                         format_sortie = 'E';
 4653:                         position_1 = 9;
 4654:                     }
 4655:                     else if (strncmp("CHARACTER*", format_chaine, 10) == 0)
 4656:                     {
 4657:                         format_sortie = 'C';
 4658:                         position_1 = 10;
 4659:                         format_degenere = d_vrai;
 4660:                     }
 4661:                     else
 4662:                     {
 4663:                         free(chaine);
 4664:                         free(format_chaine);
 4665: 
 4666:                         (*s_etat_processus).erreur_execution =
 4667:                                 d_ex_erreur_format_fichier;
 4668:                         return(NULL);
 4669:                     }
 4670: 
 4671:                     position_3 = strlen(format_chaine);
 4672:                     format_chaine[--position_3] = d_code_fin_chaine;
 4673: 
 4674:                     position_2 = position_1;
 4675: 
 4676:                     while(format_chaine[position_2] != '(')
 4677:                     {
 4678:                         if (format_chaine[position_2] == d_code_fin_chaine)
 4679:                         {
 4680:                             free(chaine);
 4681:                             free(format_chaine);
 4682: 
 4683:                             (*s_etat_processus).erreur_execution =
 4684:                                     d_ex_erreur_format_fichier;
 4685:                             return(NULL);
 4686:                         }
 4687: 
 4688:                         position_2++;
 4689:                     }
 4690: 
 4691:                     format_chaine[position_2++] = d_code_fin_chaine;
 4692: 
 4693:                     if (format_degenere == d_faux)
 4694:                     {
 4695:                         if (sscanf(&(format_chaine[position_1]), "%ld",
 4696:                                 &longueur) != 1)
 4697:                         {
 4698:                             free(chaine);
 4699:                             free(format_chaine);
 4700: 
 4701:                             (*s_etat_processus).erreur_execution =
 4702:                                     d_ex_erreur_format_fichier;
 4703:                             return(NULL);
 4704:                         }
 4705:                     }
 4706:                     else
 4707:                     {
 4708:                         longueur = -1;
 4709:                     }
 4710: 
 4711:                     if (strcmp(&(format_chaine[position_2]), "*") != 0)
 4712:                     {
 4713:                         if (sscanf(&(format_chaine[position_2]), "%ld",
 4714:                                 &longueur_champ) != 1)
 4715:                         {
 4716:                             free(chaine);
 4717:                             free(format_chaine);
 4718: 
 4719:                             (*s_etat_processus).erreur_execution =
 4720:                                     d_ex_erreur_format_fichier;
 4721:                             return(NULL);
 4722:                         }
 4723:                     }
 4724:                     else
 4725:                     {
 4726:                         longueur_champ = -1;
 4727:                     }
 4728: 
 4729:                     if ((longueur >= 0) && (longueur_champ >= 0) && (longueur >
 4730:                             longueur_champ))
 4731:                     {
 4732:                         free(chaine);
 4733:                         free(format_chaine);
 4734: 
 4735:                         (*s_etat_processus).erreur_execution =
 4736:                                 d_ex_erreur_format_fichier;
 4737:                         return(NULL);
 4738:                     }
 4739: 
 4740:                     free(format_chaine);
 4741:                 
 4742:                     chaine_sauvegarde = chaine;
 4743: 
 4744:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 4745:                             (*((struct_tableau *) (*s_objet).objet))
 4746:                             .elements[i], s_format,
 4747:                             longueur, longueur_champ, format_sortie, type,
 4748:                             longueur_effective, recursivite)) == NULL)
 4749:                     {
 4750:                         return(NULL);
 4751:                     }
 4752: 
 4753:                     if ((*(*((struct_tableau *) (*s_objet).objet))
 4754:                             .elements[i]).type == CHN)
 4755:                     {
 4756:                         chaine = (unsigned char *)
 4757:                                 malloc((strlen(chaine_formatee)
 4758:                                 + strlen(chaine_sauvegarde) + 4)
 4759:                                 * sizeof(unsigned char));
 4760: 
 4761:                         if (chaine == NULL)
 4762:                         {
 4763:                             (*s_etat_processus).erreur_systeme =
 4764:                                     d_es_allocation_memoire;
 4765:                             return(NULL);
 4766:                         }
 4767: 
 4768:                         strcpy(chaine, chaine_sauvegarde);
 4769:                         free(chaine_sauvegarde);
 4770:                         strcat(chaine, " \"");
 4771:                         strcat(chaine, chaine_formatee);
 4772:                         free(chaine_formatee);
 4773:                         strcat(chaine, "\"");
 4774:                     }
 4775:                     else if ((*(*((struct_tableau *) (*s_objet).objet))
 4776:                             .elements[i]).type == NOM)
 4777:                     {
 4778:                         chaine = (unsigned char *)
 4779:                                 malloc((strlen(chaine_formatee)
 4780:                                 + strlen(chaine_sauvegarde) + 2)
 4781:                                 * sizeof(unsigned char));
 4782: 
 4783:                         if (chaine == NULL)
 4784:                         {
 4785:                             (*s_etat_processus).erreur_systeme =
 4786:                                     d_es_allocation_memoire;
 4787:                             return(NULL);
 4788:                         }
 4789: 
 4790:                         sprintf(chaine, "%s %s", chaine_sauvegarde,
 4791:                                 chaine_formatee);
 4792:                         free(chaine_formatee);
 4793:                     }
 4794:                     else
 4795:                     {
 4796:                         chaine = (unsigned char *)
 4797:                                 malloc((strlen(chaine_formatee)
 4798:                                 + strlen(chaine_sauvegarde) + 2)
 4799:                                 * sizeof(unsigned char));
 4800: 
 4801:                         if (chaine == NULL)
 4802:                         {
 4803:                             (*s_etat_processus).erreur_systeme =
 4804:                                     d_es_allocation_memoire;
 4805:                             return(NULL);
 4806:                         }
 4807: 
 4808:                         strcpy(chaine, chaine_sauvegarde);
 4809:                         free(chaine_sauvegarde);
 4810:                         strcat(chaine, " ");
 4811:                         strcat(chaine, chaine_formatee);
 4812:                         free(chaine_formatee);
 4813:                     }
 4814:                 }
 4815:             }
 4816: 
 4817:             chaine_sauvegarde = chaine;
 4818:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 4)
 4819:                     * sizeof(unsigned char));
 4820: 
 4821:             if (chaine == NULL)
 4822:             {
 4823:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4824:                 return(NULL);
 4825:             }
 4826: 
 4827:             strcpy(chaine, chaine_sauvegarde);
 4828:             free(chaine_sauvegarde);
 4829:             strcat(chaine, " ]>");
 4830:         }
 4831:         else if ((*s_objet).type == MCX)
 4832:         {
 4833: 
 4834: /*
 4835: --------------------------------------------------------------------------------
 4836:   Matrice complexe
 4837: --------------------------------------------------------------------------------
 4838: */
 4839: 
 4840:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 4841:                     (format_sortie != 'I') && (format_sortie != 'E'))
 4842:             {
 4843:                 (*s_etat_processus).erreur_execution =
 4844:                         d_ex_erreur_format_fichier;
 4845:                 return(NULL);
 4846:             }
 4847: 
 4848:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 4849:                     .nombre_lignes;
 4850:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 4851:                     .nombre_colonnes;
 4852: 
 4853:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 4854: 
 4855:             if (chaine != NULL)
 4856:             {
 4857:                 strcpy(chaine, "[[");
 4858: 
 4859:                 for(i = 0; i < nombre_lignes; i++)
 4860:                 {
 4861:                     for(j = 0; j < nombre_colonnes; j++)
 4862:                     {
 4863:                         if ((chaine_formatee =
 4864:                                 formateur_fichier_nombre(s_etat_processus,
 4865:                                 (void *) &(((struct_complexe16 **)
 4866:                                 ((*((struct_matrice *)
 4867:                                 ((*s_objet).objet))).tableau))[i][j]), 'C',
 4868:                                 longueur, longueur_champ, format_sortie))
 4869:                                 == NULL)
 4870:                         {
 4871:                             (*s_etat_processus).erreur_systeme =
 4872:                                     d_es_allocation_memoire;
 4873:                             return(NULL);
 4874:                         }
 4875: 
 4876:                         chaine_sauvegarde = chaine;
 4877:                         chaine = (unsigned char *) malloc(
 4878:                                 (strlen(chaine_sauvegarde) +
 4879:                                 strlen(chaine_formatee) + 2)
 4880:                                 * sizeof(unsigned char));
 4881: 
 4882:                         if (chaine == NULL)
 4883:                         {
 4884:                             (*s_etat_processus).erreur_systeme =
 4885:                                     d_es_allocation_memoire;
 4886:                             return(NULL);
 4887:                         }
 4888: 
 4889:                         strcpy(chaine, chaine_sauvegarde);
 4890:                         free(chaine_sauvegarde);
 4891:                         strcat(chaine, " ");
 4892:                         strcat(chaine, chaine_formatee);
 4893:                         free(chaine_formatee);
 4894:                     }
 4895: 
 4896:                     chaine_sauvegarde = chaine;
 4897:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 4898:                     {
 4899:                         chaine = (unsigned char *) malloc(
 4900:                                 (strlen(chaine_sauvegarde) + 6)
 4901:                                 * sizeof(unsigned char));
 4902: 
 4903:                         if (chaine == NULL)
 4904:                         {
 4905:                             (*s_etat_processus).erreur_systeme =
 4906:                                     d_es_allocation_memoire;
 4907:                             return(NULL);
 4908:                         }
 4909: 
 4910:                         strcpy(chaine, chaine_sauvegarde);
 4911:                         free(chaine_sauvegarde);
 4912:                         strcat(chaine, " ]\n [");
 4913:                     }
 4914:                     else
 4915:                     {
 4916:                         chaine = (unsigned char *) malloc(
 4917:                                 (strlen(chaine_sauvegarde) + 4)
 4918:                                 * sizeof(unsigned char));
 4919: 
 4920:                         if (chaine == NULL)
 4921:                         {
 4922:                             (*s_etat_processus).erreur_systeme =
 4923:                                     d_es_allocation_memoire;
 4924:                             return(NULL);
 4925:                         }
 4926: 
 4927:                         strcpy(chaine, chaine_sauvegarde);
 4928:                         free(chaine_sauvegarde);
 4929:                         strcat(chaine, " ][");
 4930:                     }
 4931:                 }
 4932: 
 4933:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 4934:                 {
 4935:                     chaine[strlen(chaine) - 3] = ']';
 4936:                     chaine[strlen(chaine) - 2] = 0;
 4937: 
 4938:                     chaine_sauvegarde = chaine;
 4939:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 4940:                             + 1) * sizeof(unsigned char));
 4941: 
 4942:                     if (chaine == NULL)
 4943:                     {
 4944:                         (*s_etat_processus).erreur_systeme =
 4945:                                 d_es_allocation_memoire;
 4946:                         return(NULL);
 4947:                     }
 4948: 
 4949:                     strcpy(chaine, chaine_sauvegarde);
 4950:                     free(chaine_sauvegarde);
 4951:                 }
 4952:                 else
 4953:                 {
 4954:                     chaine[strlen(chaine) - 2] = ']';
 4955:                     chaine[strlen(chaine) - 1] = 0;
 4956: 
 4957:                     chaine_sauvegarde = chaine;
 4958:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 4959:                             + 2) * sizeof(unsigned char));
 4960: 
 4961:                     if (chaine == NULL)
 4962:                     {
 4963:                         (*s_etat_processus).erreur_systeme =
 4964:                                 d_es_allocation_memoire;
 4965:                         return(NULL);
 4966:                     }
 4967: 
 4968:                     strcpy(chaine, chaine_sauvegarde);
 4969:                     free(chaine_sauvegarde);
 4970:                     strcat(chaine, "]");
 4971:                 }
 4972:             }
 4973:         }
 4974:         else if ((*s_objet).type == MIN)
 4975:         {
 4976: 
 4977: /*
 4978: --------------------------------------------------------------------------------
 4979:   Matrice entière
 4980: --------------------------------------------------------------------------------
 4981: */
 4982: 
 4983:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 4984:                     (format_sortie != 'I') && (format_sortie != 'E'))
 4985:             {
 4986:                 (*s_etat_processus).erreur_execution =
 4987:                         d_ex_erreur_format_fichier;
 4988:                 return(NULL);
 4989:             }
 4990: 
 4991:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 4992:                     .nombre_lignes;
 4993:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 4994:                     .nombre_colonnes;
 4995: 
 4996:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 4997: 
 4998:             if (chaine != NULL)
 4999:             {
 5000:                 strcpy(chaine, "[[");
 5001: 
 5002:                 for(i = 0; i < nombre_lignes; i++)
 5003:                 {
 5004:                     for(j = 0; j < nombre_colonnes; j++)
 5005:                     {
 5006:                         if ((chaine_formatee =
 5007:                                 formateur_fichier_nombre(s_etat_processus,
 5008:                                 (void *) &(((integer8 **) ((*((struct_matrice *)
 5009:                                 ((*s_objet).objet))).tableau))[i][j]), 'I',
 5010:                                 longueur, longueur_champ, format_sortie))
 5011:                                 == NULL)
 5012:                         {
 5013:                             (*s_etat_processus).erreur_systeme =
 5014:                                     d_es_allocation_memoire;
 5015:                             return(NULL);
 5016:                         }
 5017: 
 5018:                         chaine_sauvegarde = chaine;
 5019:                         chaine = (unsigned char *) malloc(
 5020:                                 (strlen(chaine_sauvegarde) +
 5021:                                 strlen(chaine_formatee) + 2)
 5022:                                 * sizeof(unsigned char));
 5023: 
 5024:                         if (chaine == NULL)
 5025:                         {
 5026:                             (*s_etat_processus).erreur_systeme =
 5027:                                     d_es_allocation_memoire;
 5028:                             return(NULL);
 5029:                         }
 5030: 
 5031:                         strcpy(chaine, chaine_sauvegarde);
 5032:                         free(chaine_sauvegarde);
 5033:                         strcat(chaine, " ");
 5034:                         strcat(chaine, chaine_formatee);
 5035:                         free(chaine_formatee);
 5036:                     }
 5037: 
 5038:                     chaine_sauvegarde = chaine;
 5039:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 5040:                     {
 5041:                         chaine = (unsigned char *) malloc(
 5042:                                 (strlen(chaine_sauvegarde) + 6)
 5043:                                 * sizeof(unsigned char));
 5044: 
 5045:                         if (chaine == NULL)
 5046:                         {
 5047:                             (*s_etat_processus).erreur_systeme =
 5048:                                     d_es_allocation_memoire;
 5049:                             return(NULL);
 5050:                         }
 5051: 
 5052:                         strcpy(chaine, chaine_sauvegarde);
 5053:                         free(chaine_sauvegarde);
 5054:                         strcat(chaine, " ]\n [");
 5055:                     }
 5056:                     else
 5057:                     {
 5058:                         chaine = (unsigned char *) malloc(
 5059:                                 (strlen(chaine_sauvegarde) + 4)
 5060:                                 * sizeof(unsigned char));
 5061: 
 5062:                         if (chaine == NULL)
 5063:                         {
 5064:                             (*s_etat_processus).erreur_systeme =
 5065:                                     d_es_allocation_memoire;
 5066:                             return(NULL);
 5067:                         }
 5068: 
 5069:                         strcpy(chaine, chaine_sauvegarde);
 5070:                         free(chaine_sauvegarde);
 5071:                         strcat(chaine, " ][");
 5072:                     }
 5073:                 }
 5074: 
 5075:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 5076:                 {
 5077:                     chaine[strlen(chaine) - 3] = ']';
 5078:                     chaine[strlen(chaine) - 2] = 0;
 5079: 
 5080:                     chaine_sauvegarde = chaine;
 5081:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 5082:                             + 1) * sizeof(unsigned char));
 5083: 
 5084:                     if (chaine == NULL)
 5085:                     {
 5086:                         (*s_etat_processus).erreur_systeme =
 5087:                                 d_es_allocation_memoire;
 5088:                         return(NULL);
 5089:                     }
 5090: 
 5091:                     strcpy(chaine, chaine_sauvegarde);
 5092:                     free(chaine_sauvegarde);
 5093:                 }
 5094:                 else
 5095:                 {
 5096:                     chaine[strlen(chaine) - 2] = ']';
 5097:                     chaine[strlen(chaine) - 1] = 0;
 5098: 
 5099:                     chaine_sauvegarde = chaine;
 5100:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 5101:                             + 2) * sizeof(unsigned char));
 5102: 
 5103:                     if (chaine == NULL)
 5104:                     {
 5105:                         (*s_etat_processus).erreur_systeme =
 5106:                                 d_es_allocation_memoire;
 5107:                         return(NULL);
 5108:                     }
 5109: 
 5110:                     strcpy(chaine, chaine_sauvegarde);
 5111:                     free(chaine_sauvegarde);
 5112:                     strcat(chaine, "]");
 5113:                 }
 5114:             }
 5115:         }
 5116:         else if ((*s_objet).type == MRL)
 5117:         {
 5118: 
 5119: /*
 5120: --------------------------------------------------------------------------------
 5121:   Matrice réelle
 5122: --------------------------------------------------------------------------------
 5123: */
 5124: 
 5125:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 5126:                     (format_sortie != 'I') && (format_sortie != 'E'))
 5127:             {
 5128:                 (*s_etat_processus).erreur_execution =
 5129:                         d_ex_erreur_format_fichier;
 5130:                 return(NULL);
 5131:             }
 5132: 
 5133:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 5134:                     .nombre_lignes;
 5135:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 5136:                     .nombre_colonnes;
 5137: 
 5138:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 5139: 
 5140:             if (chaine != NULL)
 5141:             {
 5142:                 strcpy(chaine, "[[");
 5143: 
 5144:                 for(i = 0; i < nombre_lignes; i++)
 5145:                 {
 5146:                     for(j = 0; j < nombre_colonnes; j++)
 5147:                     {
 5148:                         if ((chaine_formatee =
 5149:                                 formateur_fichier_nombre(s_etat_processus,
 5150:                                 (void *) &(((real8 **) ((*((struct_matrice *)
 5151:                                 ((*s_objet).objet))).tableau))[i][j]), 'R',
 5152:                                 longueur, longueur_champ, format_sortie))
 5153:                                 == NULL)
 5154:                         {
 5155:                             (*s_etat_processus).erreur_systeme =
 5156:                                     d_es_allocation_memoire;
 5157:                             return(NULL);
 5158:                         }
 5159: 
 5160:                         chaine_sauvegarde = chaine;
 5161:                         chaine = (unsigned char *) malloc(
 5162:                                 (strlen(chaine_sauvegarde) +
 5163:                                 strlen(chaine_formatee) + 2)
 5164:                                 * sizeof(unsigned char));
 5165: 
 5166:                         if (chaine == NULL)
 5167:                         {
 5168:                             (*s_etat_processus).erreur_systeme =
 5169:                                     d_es_allocation_memoire;
 5170:                             return(NULL);
 5171:                         }
 5172: 
 5173:                         strcpy(chaine, chaine_sauvegarde);
 5174:                         free(chaine_sauvegarde);
 5175:                         strcat(chaine, " ");
 5176:                         strcat(chaine, chaine_formatee);
 5177:                         free(chaine_formatee);
 5178:                     }
 5179: 
 5180:                     chaine_sauvegarde = chaine;
 5181:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 5182:                     {
 5183:                         chaine = (unsigned char *) malloc(
 5184:                                 (strlen(chaine_sauvegarde) + 6)
 5185:                                 * sizeof(unsigned char));
 5186: 
 5187:                         if (chaine == NULL)
 5188:                         {
 5189:                             (*s_etat_processus).erreur_systeme =
 5190:                                     d_es_allocation_memoire;
 5191:                             return(NULL);
 5192:                         }
 5193: 
 5194:                         strcpy(chaine, chaine_sauvegarde);
 5195:                         free(chaine_sauvegarde);
 5196:                         strcat(chaine, " ]\n [");
 5197:                     }
 5198:                     else
 5199:                     {
 5200:                         chaine = (unsigned char *) malloc(
 5201:                                 (strlen(chaine_sauvegarde) + 4)
 5202:                                 * sizeof(unsigned char));
 5203: 
 5204:                         if (chaine == NULL)
 5205:                         {
 5206:                             (*s_etat_processus).erreur_systeme =
 5207:                                     d_es_allocation_memoire;
 5208:                             return(NULL);
 5209:                         }
 5210: 
 5211:                         strcpy(chaine, chaine_sauvegarde);
 5212:                         free(chaine_sauvegarde);
 5213:                         strcat(chaine, " ][");
 5214:                     }
 5215:                 }
 5216: 
 5217:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 5218:                 {
 5219:                     chaine[strlen(chaine) - 3] = ']';
 5220:                     chaine[strlen(chaine) - 2] = 0;
 5221: 
 5222:                     chaine_sauvegarde = chaine;
 5223:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 5224:                             + 1) * sizeof(unsigned char));
 5225: 
 5226:                     if (chaine == NULL)
 5227:                     {
 5228:                         (*s_etat_processus).erreur_systeme =
 5229:                                 d_es_allocation_memoire;
 5230:                         return(NULL);
 5231:                     }
 5232: 
 5233:                     strcpy(chaine, chaine_sauvegarde);
 5234:                     free(chaine_sauvegarde);
 5235:                 }
 5236:                 else
 5237:                 {
 5238:                     chaine[strlen(chaine) - 2] = ']';
 5239:                     chaine[strlen(chaine) - 1] = 0;
 5240: 
 5241:                     chaine_sauvegarde = chaine;
 5242:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 5243:                             + 2) * sizeof(unsigned char));
 5244: 
 5245:                     if (chaine == NULL)
 5246:                     {
 5247:                         (*s_etat_processus).erreur_systeme =
 5248:                                 d_es_allocation_memoire;
 5249:                         return(NULL);
 5250:                     }
 5251: 
 5252:                     strcpy(chaine, chaine_sauvegarde);
 5253:                     free(chaine_sauvegarde);
 5254:                     strcat(chaine, "]");
 5255:                 }
 5256:             }
 5257:         }
 5258:         else if ((*s_objet).type == NOM)
 5259:         {
 5260: 
 5261: /*
 5262: --------------------------------------------------------------------------------
 5263:   Nom
 5264: --------------------------------------------------------------------------------
 5265: */
 5266: 
 5267:             chaine = (unsigned char *) malloc((strlen((*((struct_nom *)
 5268:                     (*s_objet).objet)).nom) + 3) * sizeof(unsigned char));
 5269: 
 5270:             if (chaine == NULL)
 5271:             {
 5272:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5273:                 return(NULL);
 5274:             }
 5275: 
 5276:             sprintf(chaine, "'%s'", (*((struct_nom *) (*s_objet).objet)).nom);
 5277:         }
 5278:         else if ((*s_objet).type == REL)
 5279:         {
 5280: 
 5281: /*
 5282: --------------------------------------------------------------------------------
 5283:   Réel
 5284: --------------------------------------------------------------------------------
 5285: */
 5286: 
 5287:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 5288:                     (format_sortie != 'I') && (format_sortie != 'E'))
 5289:             {
 5290:                 (*s_etat_processus).erreur_execution =
 5291:                         d_ex_erreur_format_fichier;
 5292:                 return(NULL);
 5293:             }
 5294: 
 5295:             if ((chaine_formatee = formateur_fichier_nombre(s_etat_processus,
 5296:                     (void *) ((real8 *) ((*s_objet).objet)), 'R',
 5297:                     longueur, longueur_champ, format_sortie)) == NULL)
 5298:             {
 5299:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5300:                 return(NULL);
 5301:             }
 5302: 
 5303:             chaine = (unsigned char *) malloc((strlen(chaine_formatee) + 1)
 5304:                     * sizeof(unsigned char));
 5305: 
 5306:             if (chaine == NULL)
 5307:             {
 5308:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5309:                 return(NULL);
 5310:             }
 5311: 
 5312:             strcpy(chaine, chaine_formatee);
 5313:             free(chaine_formatee);
 5314:         }
 5315:         else if ((*s_objet).type == VCX)
 5316:         {
 5317: 
 5318: /*
 5319: --------------------------------------------------------------------------------
 5320:   Vecteur complexe
 5321: --------------------------------------------------------------------------------
 5322: */
 5323: 
 5324:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 5325:                     (format_sortie != 'I') && (format_sortie != 'E'))
 5326:             {
 5327:                 (*s_etat_processus).erreur_execution =
 5328:                         d_ex_erreur_format_fichier;
 5329:                 return(NULL);
 5330:             }
 5331: 
 5332:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 5333:                     .taille;
 5334: 
 5335:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 5336: 
 5337:             if (chaine != NULL)
 5338:             {
 5339:                 strcpy(chaine, "[");
 5340: 
 5341:                 for(i = 0; i < nombre_colonnes; i++)
 5342:                 {
 5343:                     if ((chaine_formatee =
 5344:                             formateur_fichier_nombre(s_etat_processus,
 5345:                             (void *) &(((struct_complexe16 *)
 5346:                             ((*((struct_vecteur *)
 5347:                             ((*s_objet).objet))).tableau))[i]), 'C',
 5348:                             longueur, longueur_champ, format_sortie)) == NULL)
 5349:                     {
 5350:                         (*s_etat_processus).erreur_systeme =
 5351:                                 d_es_allocation_memoire;
 5352:                         return(NULL);
 5353:                     }
 5354: 
 5355:                     chaine_sauvegarde = chaine;
 5356:                     chaine = (unsigned char *) malloc(
 5357:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 5358:                             + 2) * sizeof(unsigned char));
 5359: 
 5360:                     if (chaine == NULL)
 5361:                     {
 5362:                         (*s_etat_processus).erreur_systeme =
 5363:                                 d_es_allocation_memoire;
 5364:                         return(NULL);
 5365:                     }
 5366: 
 5367:                     strcpy(chaine, chaine_sauvegarde);
 5368:                     free(chaine_sauvegarde);
 5369:                     strcat(chaine, " ");
 5370:                     strcat(chaine, chaine_formatee);
 5371:                     free(chaine_formatee);
 5372:                 }
 5373: 
 5374:                 chaine_sauvegarde = chaine;
 5375:                 chaine = (unsigned char *) malloc(
 5376:                         (strlen(chaine_sauvegarde) + 3)
 5377:                         * sizeof(unsigned char));
 5378: 
 5379:                 if (chaine == NULL)
 5380:                 {
 5381:                     (*s_etat_processus).erreur_systeme =
 5382:                             d_es_allocation_memoire;
 5383:                     return(NULL);
 5384:                 }
 5385: 
 5386:                 strcpy(chaine, chaine_sauvegarde);
 5387:                 free(chaine_sauvegarde);
 5388:                 strcat(chaine, " ]");
 5389:             }
 5390:         }
 5391:         else if ((*s_objet).type == VIN)
 5392:         {
 5393: 
 5394: /*
 5395: --------------------------------------------------------------------------------
 5396:   Vecteur entier
 5397: --------------------------------------------------------------------------------
 5398: */
 5399: 
 5400:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 5401:                     (format_sortie != 'I') && (format_sortie != 'E'))
 5402:             {
 5403:                 (*s_etat_processus).erreur_execution =
 5404:                         d_ex_erreur_format_fichier;
 5405:                 return(NULL);
 5406:             }
 5407: 
 5408:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 5409:                     .taille;
 5410: 
 5411:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 5412: 
 5413:             if (chaine != NULL)
 5414:             {
 5415:                 strcpy(chaine, "[");
 5416: 
 5417:                 for(i = 0; i < nombre_colonnes; i++)
 5418:                 {
 5419:                     if ((chaine_formatee =
 5420:                             formateur_fichier_nombre(s_etat_processus,
 5421:                             (void *) &(((integer8 *) ((*((struct_vecteur *)
 5422:                             ((*s_objet).objet))).tableau))[i]), 'I',
 5423:                             longueur, longueur_champ, format_sortie)) == NULL)
 5424:                     {
 5425:                         (*s_etat_processus).erreur_systeme =
 5426:                                 d_es_allocation_memoire;
 5427:                         return(NULL);
 5428:                     }
 5429: 
 5430:                     chaine_sauvegarde = chaine;
 5431:                     chaine = (unsigned char *) malloc(
 5432:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 5433:                             + 2) * sizeof(unsigned char));
 5434: 
 5435:                     if (chaine == NULL)
 5436:                     {
 5437:                         (*s_etat_processus).erreur_systeme =
 5438:                                 d_es_allocation_memoire;
 5439:                         return(NULL);
 5440:                     }
 5441: 
 5442:                     strcpy(chaine, chaine_sauvegarde);
 5443:                     free(chaine_sauvegarde);
 5444:                     strcat(chaine, " ");
 5445:                     strcat(chaine, chaine_formatee);
 5446:                     free(chaine_formatee);
 5447:                 }
 5448: 
 5449:                 chaine_sauvegarde = chaine;
 5450:                 chaine = (unsigned char *) malloc(
 5451:                         (strlen(chaine_sauvegarde) + 3)
 5452:                         * sizeof(unsigned char));
 5453: 
 5454:                 if (chaine == NULL)
 5455:                 {
 5456:                     (*s_etat_processus).erreur_systeme =
 5457:                             d_es_allocation_memoire;
 5458:                     return(NULL);
 5459:                 }
 5460: 
 5461:                 strcpy(chaine, chaine_sauvegarde);
 5462:                 free(chaine_sauvegarde);
 5463:                 strcat(chaine, " ]");
 5464:             }
 5465:         }
 5466:         else if ((*s_objet).type == VRL)
 5467:         {
 5468: 
 5469: /*
 5470: --------------------------------------------------------------------------------
 5471:   Vecteur réel
 5472: --------------------------------------------------------------------------------
 5473: */
 5474: 
 5475:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 5476:                     (format_sortie != 'I') && (format_sortie != 'E'))
 5477:             {
 5478:                 (*s_etat_processus).erreur_execution =
 5479:                         d_ex_erreur_format_fichier;
 5480:                 return(NULL);
 5481:             }
 5482: 
 5483:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 5484:                     .taille;
 5485: 
 5486:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 5487: 
 5488:             if (chaine != NULL)
 5489:             {
 5490:                 strcpy(chaine, "[");
 5491: 
 5492:                 for(i = 0; i < nombre_colonnes; i++)
 5493:                 {
 5494:                     if ((chaine_formatee =
 5495:                             formateur_fichier_nombre(s_etat_processus,
 5496:                             (void *) &(((real8 *) ((*((struct_vecteur *)
 5497:                             ((*s_objet).objet))).tableau))[i]), 'R',
 5498:                             longueur, longueur_champ, format_sortie)) == NULL)
 5499:                     {
 5500:                         (*s_etat_processus).erreur_systeme =
 5501:                                 d_es_allocation_memoire;
 5502:                         return(NULL);
 5503:                     }
 5504: 
 5505:                     chaine_sauvegarde = chaine;
 5506:                     chaine = (unsigned char *) malloc(
 5507:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 5508:                             + 2) * sizeof(unsigned char));
 5509: 
 5510:                     if (chaine == NULL)
 5511:                     {
 5512:                         (*s_etat_processus).erreur_systeme =
 5513:                                 d_es_allocation_memoire;
 5514:                         return(NULL);
 5515:                     }
 5516: 
 5517:                     strcpy(chaine, chaine_sauvegarde);
 5518:                     free(chaine_sauvegarde);
 5519:                     strcat(chaine, " ");
 5520:                     strcat(chaine, chaine_formatee);
 5521:                     free(chaine_formatee);
 5522:                 }
 5523: 
 5524:                 chaine_sauvegarde = chaine;
 5525:                 chaine = (unsigned char *) malloc(
 5526:                         (strlen(chaine_sauvegarde) + 3)
 5527:                         * sizeof(unsigned char));
 5528: 
 5529:                 if (chaine == NULL)
 5530:                 {
 5531:                     (*s_etat_processus).erreur_systeme =
 5532:                             d_es_allocation_memoire;
 5533:                     return(NULL);
 5534:                 }
 5535: 
 5536:                 strcpy(chaine, chaine_sauvegarde);
 5537:                 free(chaine_sauvegarde);
 5538:                 strcat(chaine, " ]");
 5539:             }
 5540:         }
 5541:         else
 5542:         {
 5543:             // Type non exportable
 5544: 
 5545:             (*s_etat_processus).erreur_execution = d_ex_erreur_format_fichier;
 5546:             free(chaine);
 5547: 
 5548:             return(NULL);
 5549:         }
 5550:     }
 5551: 
 5552:     (*recursivite)--;
 5553: 
 5554:     return(chaine);
 5555: }
 5556: 
 5557: 
 5558: /*
 5559: ================================================================================
 5560:   Routines qui transforment un nombre entier, réel ou complexe en chaîne de
 5561:   caractères suivant le format courant
 5562: ================================================================================
 5563:   Entrées : pointeur générique sur la donnée numérique à convertir,
 5564:   type de l'entité (I, R ou C).
 5565: --------------------------------------------------------------------------------
 5566:   Sorties : chaîne de caractères allouée dans la routine
 5567: --------------------------------------------------------------------------------
 5568:   Effets de bord : néant
 5569: ================================================================================
 5570: */
 5571: 
 5572: /*
 5573: --------------------------------------------------------------------------------
 5574:   Formatage des complexes, réels et entiers
 5575: --------------------------------------------------------------------------------
 5576: */
 5577: 
 5578: unsigned char *
 5579: formateur_fichier_nombre(struct_processus *s_etat_processus,
 5580:         void *valeur_numerique, unsigned char type,
 5581:         long longueur, long longueur_champ, unsigned char format)
 5582: {
 5583:     unsigned char               *chaine;
 5584:     unsigned char               *construction_chaine;
 5585:     unsigned char               *sauvegarde;
 5586:     unsigned char               *tampon;
 5587: 
 5588:     chaine = NULL;
 5589: 
 5590:     switch(type)
 5591:     {
 5592:         case 'C' :
 5593:         {
 5594:             construction_chaine = (unsigned char *) malloc(
 5595:                     2 * sizeof(unsigned char));
 5596: 
 5597:             if (construction_chaine == NULL)
 5598:             {
 5599:                 (*s_etat_processus).erreur_systeme =
 5600:                         d_es_allocation_memoire;
 5601:                 return(NULL);
 5602:             }
 5603: 
 5604:             strcpy(construction_chaine, "(");
 5605: 
 5606:             tampon = formateur_fichier_reel(s_etat_processus,
 5607:                     (void *) &((*((struct_complexe16 *)
 5608:                     valeur_numerique)).partie_reelle), 'R',
 5609:                     longueur, longueur_champ, format);
 5610: 
 5611:             if (tampon == NULL)
 5612:             {
 5613:                 (*s_etat_processus).erreur_systeme =
 5614:                         d_es_allocation_memoire;
 5615:                 return(NULL);
 5616:             }
 5617: 
 5618:             sauvegarde = construction_chaine;
 5619: 
 5620:             construction_chaine = (unsigned char *) malloc(
 5621:                     (strlen(sauvegarde) + strlen(tampon) + 2)
 5622:                     * sizeof(unsigned char));
 5623: 
 5624:             if (construction_chaine == NULL)
 5625:             {
 5626:                 (*s_etat_processus).erreur_systeme =
 5627:                         d_es_allocation_memoire;
 5628:                 return(NULL);
 5629:             }
 5630: 
 5631:             strcpy(construction_chaine, sauvegarde);
 5632:             free(sauvegarde);
 5633:             strcat(construction_chaine, tampon);
 5634:             free(tampon);
 5635: 
 5636:             if (test_cfsf(s_etat_processus, 48) == d_faux)
 5637:             {
 5638:                 strcat(construction_chaine, ",");
 5639:             }
 5640:             else
 5641:             {
 5642:                 strcat(construction_chaine, ".");
 5643:             }
 5644: 
 5645:             tampon = formateur_fichier_reel(s_etat_processus,
 5646:                     (void *) &((*((struct_complexe16 *)
 5647:                     valeur_numerique)).partie_imaginaire), 'R',
 5648:                     longueur, longueur_champ, format);
 5649: 
 5650:             if (tampon == NULL)
 5651:             {
 5652:                 (*s_etat_processus).erreur_systeme =
 5653:                         d_es_allocation_memoire;
 5654:                 return(NULL);
 5655:             }
 5656: 
 5657:             sauvegarde = construction_chaine;
 5658: 
 5659:             construction_chaine = (unsigned char *) malloc(
 5660:                     (strlen(sauvegarde) + strlen(tampon) + 2)
 5661:                     * sizeof(unsigned char));
 5662: 
 5663:             if (construction_chaine == NULL)
 5664:             {
 5665:                 (*s_etat_processus).erreur_systeme =
 5666:                         d_es_allocation_memoire;
 5667:                 return(NULL);
 5668:             }
 5669: 
 5670:             strcpy(construction_chaine, sauvegarde);
 5671:             free(sauvegarde);
 5672:             strcat(construction_chaine, tampon);
 5673:             free(tampon);
 5674:             strcat(construction_chaine, ")");
 5675: 
 5676:             chaine = construction_chaine;
 5677: 
 5678:             break;
 5679:         }
 5680: 
 5681:         case 'R' :
 5682:         {
 5683:             chaine = formateur_fichier_reel(s_etat_processus,
 5684:                     valeur_numerique, 'R', longueur, longueur_champ,
 5685:                     format);
 5686: 
 5687:             if (chaine == NULL)
 5688:             {
 5689:                 (*s_etat_processus).erreur_systeme =
 5690:                         d_es_allocation_memoire;
 5691:                 return(NULL);
 5692:             }
 5693: 
 5694:             break;
 5695:         }
 5696: 
 5697:         default :
 5698:         case 'I' :
 5699:         {
 5700:             chaine = formateur_fichier_reel(s_etat_processus,
 5701:                     valeur_numerique, 'I', longueur, longueur_champ,
 5702:                     format);
 5703: 
 5704:             if (chaine == NULL)
 5705:             {
 5706:                 (*s_etat_processus).erreur_systeme =
 5707:                         d_es_allocation_memoire;
 5708:                 return(NULL);
 5709:             }
 5710: 
 5711:             break;
 5712:         }
 5713:     }
 5714: 
 5715:     return(chaine);
 5716: }
 5717: 
 5718: 
 5719: /*
 5720: --------------------------------------------------------------------------------
 5721:   Recherche de la longueur de l'entier minimale pour représenter la donnée
 5722: --------------------------------------------------------------------------------
 5723: */
 5724: 
 5725: unsigned char
 5726: recherche_longueur_optimale(integer8 parametre)
 5727: {
 5728:     if (parametre == (integer8) ((integer1) parametre))
 5729:     {
 5730:         return(0x0);
 5731:     }
 5732:     else if (parametre == (integer8) ((integer2) parametre))
 5733:     {
 5734:         return(0x1);
 5735:     }
 5736:     else if (parametre == (integer8) ((integer4) parametre))
 5737:     {
 5738:         return(0x2);
 5739:     }
 5740:     else
 5741:     {
 5742:         return(0x3);
 5743:     }
 5744: }
 5745: 
 5746: 
 5747: /*
 5748: --------------------------------------------------------------------------------
 5749:   Formateur des réels et entiers
 5750: --------------------------------------------------------------------------------
 5751: */
 5752: 
 5753: unsigned char *
 5754: formateur_fichier_reel(struct_processus *s_etat_processus,
 5755:         void *valeur_numerique, unsigned char type,
 5756:         long longueur, long longueur_champ,
 5757:         unsigned char format_sortie)
 5758: {
 5759:     real8                   mantisse;
 5760:     real8                   tampon_reel;
 5761: 
 5762:     integer8                tampon_entier;
 5763: 
 5764:     long                    correction;
 5765:     long                    exposant;
 5766:     long                    longueur_utile;
 5767:     long                    longueur_utile_limite;
 5768: 
 5769:     unsigned char           *chaine;
 5770:     unsigned char           format[16 + 1];
 5771:     unsigned char           mode[3 + 1];
 5772:     unsigned char           tampon[16 + 1];
 5773: 
 5774:     unsigned long           i;
 5775: 
 5776:     chaine = (unsigned char *) malloc((32 + 1) * sizeof(unsigned char));
 5777: 
 5778:     if (chaine == NULL)
 5779:     {
 5780:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5781:         return(NULL);
 5782:     }
 5783: 
 5784:     if (type == 'R')
 5785:     {
 5786:         tampon_reel = *((real8 *) valeur_numerique);
 5787: 
 5788:         if (tampon_reel > ((real8) 0))
 5789:         {
 5790:             exposant = (long) floor(log10(tampon_reel));
 5791:         }
 5792:         else if (tampon_reel < ((real8) 0))
 5793:         {
 5794:             exposant = (long) floor(log10(-tampon_reel));
 5795:         }
 5796:         else
 5797:         {
 5798:             exposant = 0;
 5799:         }
 5800: 
 5801:         mantisse = (*((real8 *) valeur_numerique)) / pow(10, exposant);
 5802:     }
 5803:     else
 5804:     {
 5805:         tampon_entier = *((integer8 *) valeur_numerique);
 5806: 
 5807:         if (tampon_entier > ((integer8) 0))
 5808:         {
 5809:             exposant = (long) floor(log10(tampon_entier));
 5810:         }
 5811:         else if (tampon_entier < ((integer8) 0))
 5812:         {
 5813:             exposant = (long) floor(log10(-tampon_entier));
 5814:         }
 5815:         else
 5816:         {
 5817:             exposant = 0;
 5818:         }
 5819: 
 5820:         mantisse = (*((integer8 *) valeur_numerique)) / pow(10, exposant);
 5821:     }
 5822: 
 5823:     longueur_utile = longueur;
 5824:     longueur_utile_limite = 15;
 5825: 
 5826:     if (longueur_utile > longueur_utile_limite)
 5827:     {
 5828:         longueur_utile = longueur_utile_limite;
 5829:     }
 5830: 
 5831:     if (format_sortie == 'S')
 5832:     {
 5833:         strcpy(mode, "STD");
 5834:     }
 5835:     else if (format_sortie == 'C')
 5836:     {
 5837:         strcpy(mode, "SCI");
 5838:     }
 5839:     else if (format_sortie == 'F')
 5840:     {
 5841:         strcpy(mode, "FIX");
 5842:     }
 5843:     else
 5844:     {
 5845:         strcpy(mode, "ENG");
 5846:     }
 5847: 
 5848:     if ((strcmp(mode, "SCI") == 0) ||
 5849:             ((strcmp(mode, "STD") == 0) && ((exposant >
 5850:             longueur_utile_limite) ||
 5851:             (exposant < -longueur_utile_limite))) ||
 5852:             ((strcmp(mode, "FIX") == 0) &&
 5853:             ((exposant >= longueur_utile_limite) ||
 5854:             (exposant < -longueur_utile))))
 5855:     {
 5856:         chaine[0] = 0;
 5857:         format[0] = 0;
 5858: 
 5859:         if (strcmp(mode, "STD") == 0)
 5860:         {
 5861:             longueur_utile = longueur_utile_limite - 1;
 5862:         }
 5863: 
 5864:         sprintf(format, "%%.%luf", longueur_utile);
 5865:             
 5866:         sprintf(tampon, format, mantisse);
 5867:         strcpy(chaine, tampon);
 5868:         strcat(chaine, "E");
 5869:         sprintf(tampon, "%ld", exposant);
 5870:         strcat(chaine, tampon);
 5871:     }
 5872:     else if (strcmp(mode, "FIX") == 0)
 5873:     {
 5874:         chaine[0] = 0;
 5875:         format[0] = 0;
 5876: 
 5877:         if (longueur_utile + exposant >= longueur_utile_limite)
 5878:         {
 5879:             longueur_utile = longueur_utile_limite - (exposant + 1);
 5880:         }
 5881: 
 5882:         sprintf(format, "%%.%luf", longueur_utile);
 5883: 
 5884:         sprintf(tampon, format, (mantisse * pow(10, exposant)));
 5885:         strcpy(chaine, tampon);
 5886:     }
 5887:     else if (strcmp(mode, "ENG") == 0)
 5888:     {
 5889:         chaine[0] = 0;
 5890:         format[0] = 0;
 5891: 
 5892:         correction = labs(exposant) % 3;
 5893: 
 5894:         if (exposant < 0)
 5895:         {
 5896:             if (correction == 0)
 5897:             {
 5898:                 correction = 3;
 5899:             }
 5900: 
 5901:             correction =  3 - correction;
 5902:         }
 5903: 
 5904:         longueur_utile -= correction;
 5905:         sprintf(format, "%%.%luf", longueur_utile);
 5906: 
 5907:         sprintf(tampon, format, (mantisse * pow(10, correction)));
 5908:         strcpy(chaine, tampon);
 5909:         strcat(chaine, "E");
 5910:         sprintf(tampon, "%ld", (exposant - correction));
 5911:         strcat(chaine, tampon);
 5912:     }
 5913:     else
 5914:     {
 5915:         if (type == 'I')
 5916:         {
 5917:             chaine[0] = 0;
 5918:             sprintf(tampon, "%lld", *((integer8 *) valeur_numerique));
 5919:         }
 5920:         else
 5921:         {
 5922:             chaine[0] = 0;
 5923:             format[0] = 0;
 5924: 
 5925:             if (exposant >= 0)
 5926:             {
 5927:                 sprintf(format, "%%.%luf", (longueur_utile_limite - exposant
 5928:                         - 1));
 5929:             }
 5930:             else
 5931:             {
 5932:                 sprintf(format, "%%.%luf", longueur_utile_limite);
 5933:             }
 5934: 
 5935:             sprintf(tampon, format, *((real8 *) valeur_numerique));
 5936: 
 5937:             i = strlen(tampon) - 1;
 5938:             while(tampon[i] == '0')
 5939:             {
 5940:                 tampon[i] = 0;
 5941:                 i--;
 5942:             }
 5943: 
 5944:             if (ds_imposition_separateur_decimal == d_faux)
 5945:             {
 5946:                 i = strlen(tampon) - 1;
 5947:                 if (tampon[i] == '.')
 5948:                 {
 5949:                     tampon[i] = 0;
 5950:                 }
 5951:             }
 5952:         }
 5953:         strcpy(chaine, tampon);
 5954:     }
 5955: 
 5956:     if (longueur_champ >= 0)
 5957:     {
 5958:         if (strlen(chaine) > (size_t) longueur_champ)
 5959:         {
 5960:             for(i = 0; i < (unsigned long) longueur_champ; i++)
 5961:             {
 5962:                 chaine[i] = '*';
 5963:             }
 5964: 
 5965:             chaine[i] = d_code_fin_chaine;
 5966:         }
 5967:     }
 5968: 
 5969:     return(chaine);
 5970: }

CVSweb interface <joel.bertrand@systella.fr>